Compile delta_generator for the host.

Bug: 24619596
TEST=mma on linux.

Change-Id: Icccae2b938b4fdd698b177beee96ffb62e9f63ae
diff --git a/Android.mk b/Android.mk
index 265ed23..2727a44 100644
--- a/Android.mk
+++ b/Android.mk
@@ -56,13 +56,6 @@
     libchrome
 
 ifeq ($(BRILLO_USE_DBUS),1)
-ue_common_shared_libraries += \
-    libbrillo-dbus \
-    libchrome-dbus
-endif  # BRILLO_USE_DBUS == 1
-
-
-ifeq ($(BRILLO_USE_DBUS),1)
 
 # update_engine_client-dbus-proxies (from generate-dbus-proxies.gypi)
 # ========================================================
@@ -85,13 +78,25 @@
 ue_update_metadata_protos_exported_shared_libraries := \
     libprotobuf-cpp-lite-rtti
 
+ue_update_metadata_protos_src_files := \
+    update_metadata.proto
+
+# Build for the host.
 include $(CLEAR_VARS)
 LOCAL_MODULE := update_metadata-protos
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
 generated_sources_dir := $(call local-generated-sources-dir)
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(generated_sources_dir)/proto/system
-LOCAL_SRC_FILES := \
-    update_metadata.proto
+LOCAL_SRC_FILES := $(ue_update_metadata_protos_src_files)
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+# Build for the target.
+include $(CLEAR_VARS)
+LOCAL_MODULE := update_metadata-protos
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+generated_sources_dir := $(call local-generated-sources-dir)
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(generated_sources_dir)/proto/system
+LOCAL_SRC_FILES := $(ue_update_metadata_protos_src_files)
 include $(BUILD_STATIC_LIBRARY)
 
 ifeq ($(BRILLO_USE_DBUS),1)
@@ -123,36 +128,16 @@
 # The payload application component and common dependencies.
 ue_libpayload_consumer_exported_static_libraries := \
     update_metadata-protos \
-    libxz \
+    libxz-host \
     libbz \
     $(ue_update_metadata_protos_exported_static_libraries)
 ue_libpayload_consumer_exported_shared_libraries := \
-    libcrypto \
-    libcurl \
-    libssl \
+    libcrypto-host \
+    libcurl-host \
+    libssl-host \
     $(ue_update_metadata_protos_exported_shared_libraries)
 
-include $(CLEAR_VARS)
-LOCAL_MODULE := libpayload_consumer
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_RTTI_FLAG := -frtti
-LOCAL_CLANG := true
-LOCAL_CFLAGS := $(ue_common_cflags)
-LOCAL_CPPFLAGS := $(ue_common_cppflags)
-LOCAL_LDFLAGS := $(ue_common_ldflags)
-LOCAL_C_INCLUDES := \
-    $(ue_common_c_includes) \
-    external/e2fsprogs/lib
-LOCAL_STATIC_LIBRARIES := \
-    update_metadata-protos \
-    $(ue_libpayload_consumer_exported_static_libraries) \
-    $(ue_update_metadata_protos_exported_static_libraries)
-LOCAL_SHARED_LIBRARIES := \
-    $(ue_common_shared_libraries) \
-    $(ue_libpayload_consumer_exported_shared_libraries) \
-    $(ue_update_metadata_protos_exported_shared_libraries)
-LOCAL_SRC_FILES := \
+ue_libpayload_consumer_src_files := \
     common/action_processor.cc \
     common/boot_control_stub.cc \
     common/certificate_checker.cc \
@@ -181,6 +166,55 @@
     payload_consumer/payload_verifier.cc \
     payload_consumer/postinstall_runner_action.cc \
     payload_consumer/xz_extent_writer.cc
+
+ifeq ($(HOST_OS),linux)
+# Build for the host.
+include $(CLEAR_VARS)
+LOCAL_MODULE := libpayload_consumer
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_RTTI_FLAG := -frtti
+LOCAL_CLANG := true
+LOCAL_CFLAGS := $(ue_common_cflags)
+LOCAL_CPPFLAGS := $(ue_common_cppflags)
+LOCAL_LDFLAGS := $(ue_common_ldflags)
+LOCAL_C_INCLUDES := \
+    $(ue_common_c_includes) \
+    external/e2fsprogs/lib
+LOCAL_STATIC_LIBRARIES := \
+    update_metadata-protos \
+    $(ue_libpayload_consumer_exported_static_libraries) \
+    $(ue_update_metadata_protos_exported_static_libraries)
+LOCAL_SHARED_LIBRARIES := \
+    $(ue_common_shared_libraries) \
+    $(ue_libpayload_consumer_exported_shared_libraries) \
+    $(ue_update_metadata_protos_exported_shared_libraries)
+LOCAL_SRC_FILES := $(ue_libpayload_consumer_src_files)
+include $(BUILD_HOST_STATIC_LIBRARY)
+endif  # HOST_OS == linux
+
+# Build for the target.
+include $(CLEAR_VARS)
+LOCAL_MODULE := libpayload_consumer
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_RTTI_FLAG := -frtti
+LOCAL_CLANG := true
+LOCAL_CFLAGS := $(ue_common_cflags)
+LOCAL_CPPFLAGS := $(ue_common_cppflags)
+LOCAL_LDFLAGS := $(ue_common_ldflags)
+LOCAL_C_INCLUDES := \
+    $(ue_common_c_includes) \
+    external/e2fsprogs/lib
+LOCAL_STATIC_LIBRARIES := \
+    update_metadata-protos \
+    $(ue_libpayload_consumer_exported_static_libraries:-host=) \
+    $(ue_update_metadata_protos_exported_static_libraries)
+LOCAL_SHARED_LIBRARIES := \
+    $(ue_common_shared_libraries) \
+    $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
+    $(ue_update_metadata_protos_exported_shared_libraries)
+LOCAL_SRC_FILES := $(ue_libpayload_consumer_src_files)
 include $(BUILD_STATIC_LIBRARY)
 
 ifeq ($(BRILLO_USE_DBUS),1)
@@ -204,6 +238,8 @@
     $(ue_update_metadata_protos_exported_static_libraries)
 ue_libupdate_engine_exported_shared_libraries := \
     libdbus \
+    libbrillo-dbus \
+    libchrome-dbus \
     libmetrics \
     libshill-client \
     libexpat \
@@ -232,13 +268,13 @@
     update_engine-dbus-adaptor \
     update_engine-dbus-libcros-client \
     update_engine_client-dbus-proxies \
-    $(ue_libupdate_engine_exported_static_libraries) \
-    $(ue_libpayload_consumer_exported_static_libraries) \
+    $(ue_libupdate_engine_exported_static_libraries:-host=) \
+    $(ue_libpayload_consumer_exported_static_libraries:-host=) \
     $(ue_update_metadata_protos_exported_static_libraries)
 LOCAL_SHARED_LIBRARIES := \
     $(ue_common_shared_libraries) \
-    $(ue_libupdate_engine_exported_shared_libraries) \
-    $(ue_libpayload_consumer_exported_shared_libraries) \
+    $(ue_libupdate_engine_exported_shared_libraries:-host=) \
+    $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
     $(ue_update_metadata_protos_exported_shared_libraries)
 LOCAL_SRC_FILES := \
     boot_control_android.cc \
@@ -302,12 +338,12 @@
     $(ue_libupdate_engine_exported_c_includes)
 LOCAL_STATIC_LIBRARIES := \
     libupdate_engine \
-    $(ue_libupdate_engine_exported_static_libraries)
+    $(ue_libupdate_engine_exported_static_libraries:-host=)
 
 LOCAL_RTTI_FLAG := -frtti
 LOCAL_SHARED_LIBRARIES := \
     $(ue_common_shared_libraries) \
-    $(ue_libupdate_engine_exported_shared_libraries)
+    $(ue_libupdate_engine_exported_shared_libraries:-host=)
 LOCAL_SRC_FILES := \
     main.cc
 
@@ -347,7 +383,11 @@
     $(ue_common_c_includes) \
     $(LOCAL_PATH)/include
 LOCAL_STATIC_LIBRARIES := update_engine_client-dbus-proxies
-LOCAL_SHARED_LIBRARIES := $(ue_common_shared_libraries)
+LOCAL_SHARED_LIBRARIES := \
+    $(ue_common_shared_libraries) \
+    libdbus \
+    libbrillo-dbus \
+    libchrome-dbus
 LOCAL_SRC_FILES := \
     update_engine_client.cc
 include $(BUILD_EXECUTABLE)
@@ -364,31 +404,11 @@
     $(ue_libpayload_consumer_exported_static_libraries) \
     $(ue_update_metadata_protos_exported_static_libraries)
 ue_libpayload_generator_exported_shared_libraries := \
-    libext2fs \
+    libext2fs-host \
     $(ue_libpayload_consumer_exported_shared_libraries) \
     $(ue_update_metadata_protos_exported_shared_libraries)
 
-include $(CLEAR_VARS)
-LOCAL_MODULE := libpayload_generator
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_RTTI_FLAG := -frtti
-LOCAL_CLANG := true
-LOCAL_CFLAGS := $(ue_common_cflags)
-LOCAL_CPPFLAGS := $(ue_common_cppflags)
-LOCAL_LDFLAGS := $(ue_common_ldflags)
-LOCAL_C_INCLUDES := $(ue_common_c_includes)
-LOCAL_STATIC_LIBRARIES := \
-    libpayload_consumer \
-    update_metadata-protos \
-    $(ue_libpayload_consumer_exported_static_libraries) \
-    $(ue_update_metadata_protos_exported_static_libraries)
-LOCAL_SHARED_LIBRARIES := \
-    $(ue_common_shared_libraries) \
-    $(ue_libpayload_generator_exported_shared_libraries) \
-    $(ue_libpayload_consumer_exported_shared_libraries) \
-    $(ue_update_metadata_protos_exported_shared_libraries)
-LOCAL_SRC_FILES := \
+ue_libpayload_generator_src_files := \
     payload_generator/ab_generator.cc \
     payload_generator/annotated_operation.cc \
     payload_generator/blob_file_writer.cc \
@@ -410,11 +430,65 @@
     payload_generator/raw_filesystem.cc \
     payload_generator/tarjan.cc \
     payload_generator/topological_sort.cc
+
+ifeq ($(HOST_OS),linux)
+# Build for the host.
+include $(CLEAR_VARS)
+LOCAL_MODULE := libpayload_generator
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_RTTI_FLAG := -frtti
+LOCAL_CLANG := true
+LOCAL_CFLAGS := $(ue_common_cflags)
+LOCAL_CPPFLAGS := $(ue_common_cppflags)
+LOCAL_LDFLAGS := $(ue_common_ldflags)
+LOCAL_C_INCLUDES := $(ue_common_c_includes)
+LOCAL_STATIC_LIBRARIES := \
+    libpayload_consumer \
+    update_metadata-protos \
+    $(ue_libpayload_consumer_exported_static_libraries) \
+    $(ue_update_metadata_protos_exported_static_libraries)
+LOCAL_SHARED_LIBRARIES := \
+    $(ue_common_shared_libraries) \
+    $(ue_libpayload_generator_exported_shared_libraries) \
+    $(ue_libpayload_consumer_exported_shared_libraries) \
+    $(ue_update_metadata_protos_exported_shared_libraries)
+LOCAL_SRC_FILES := $(ue_libpayload_generator_src_files)
+include $(BUILD_HOST_STATIC_LIBRARY)
+endif  # HOST_OS == linux
+
+# Build for the target.
+include $(CLEAR_VARS)
+LOCAL_MODULE := libpayload_generator
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_RTTI_FLAG := -frtti
+LOCAL_CLANG := true
+LOCAL_CFLAGS := $(ue_common_cflags)
+LOCAL_CPPFLAGS := $(ue_common_cppflags)
+LOCAL_LDFLAGS := $(ue_common_ldflags)
+LOCAL_C_INCLUDES := $(ue_common_c_includes)
+LOCAL_STATIC_LIBRARIES := \
+    libpayload_consumer \
+    update_metadata-protos \
+    $(ue_libpayload_consumer_exported_static_libraries:-host=) \
+    $(ue_update_metadata_protos_exported_static_libraries)
+LOCAL_SHARED_LIBRARIES := \
+    $(ue_common_shared_libraries) \
+    $(ue_libpayload_generator_exported_shared_libraries:-host=) \
+    $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
+    $(ue_update_metadata_protos_exported_shared_libraries)
+LOCAL_SRC_FILES := $(ue_libpayload_generator_src_files)
 include $(BUILD_STATIC_LIBRARY)
 
 # delta_generator (type: executable)
 # ========================================================
 # server-side delta generator.
+ue_delta_generator_src_files := \
+    payload_generator/generate_delta_main.cc
+
+ifeq ($(HOST_OS),linux)
+# Build for the host.
 include $(CLEAR_VARS)
 LOCAL_MODULE := delta_generator
 LOCAL_MODULE_CLASS := EXECUTABLES
@@ -434,8 +508,31 @@
     $(ue_common_shared_libraries) \
     $(ue_libpayload_consumer_exported_shared_libraries) \
     $(ue_libpayload_generator_exported_shared_libraries)
-LOCAL_SRC_FILES := \
-    payload_generator/generate_delta_main.cc
+LOCAL_SRC_FILES := $(ue_delta_generator_src_files)
+include $(BUILD_HOST_EXECUTABLE)
+endif  # HOST_OS == linux
+
+# Build for the target.
+include $(CLEAR_VARS)
+LOCAL_MODULE := delta_generator
+LOCAL_MODULE_CLASS := EXECUTABLES
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_RTTI_FLAG := -frtti
+LOCAL_CLANG := true
+LOCAL_CFLAGS := $(ue_common_cflags)
+LOCAL_CPPFLAGS := $(ue_common_cppflags)
+LOCAL_LDFLAGS := $(ue_common_ldflags)
+LOCAL_C_INCLUDES := $(ue_common_c_includes)
+LOCAL_STATIC_LIBRARIES := \
+    libpayload_consumer \
+    libpayload_generator \
+    $(ue_libpayload_consumer_exported_static_libraries:-host=) \
+    $(ue_libpayload_generator_exported_static_libraries:-host=)
+LOCAL_SHARED_LIBRARIES := \
+    $(ue_common_shared_libraries) \
+    $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
+    $(ue_libpayload_generator_exported_shared_libraries:-host=)
+LOCAL_SRC_FILES := $(ue_delta_generator_src_files)
 include $(BUILD_EXECUTABLE)
 
 ifeq ($(BRILLO_USE_DBUS),1)
diff --git a/payload_consumer/delta_performer.cc b/payload_consumer/delta_performer.cc
index 6261cb1..e56bb75 100644
--- a/payload_consumer/delta_performer.cc
+++ b/payload_consumer/delta_performer.cc
@@ -882,10 +882,15 @@
   TEST_AND_RETURN_FALSE(!operation.has_data_offset());
   TEST_AND_RETURN_FALSE(!operation.has_data_length());
 
+#ifdef BLKZEROOUT
+  bool attempt_ioctl = true;
   int request =
       (operation.type() == InstallOperation::ZERO ? BLKZEROOUT : BLKDISCARD);
+#else  // !defined(BLKZEROOUT)
+  bool attempt_ioctl = false;
+  int request = 0;
+#endif  // !defined(BLKZEROOUT)
 
-  bool attempt_ioctl = true;
   brillo::Blob zeros;
   for (int i = 0; i < operation.dst_extents_size(); i++) {
     Extent extent = operation.dst_extents(i);
diff --git a/payload_consumer/file_descriptor.cc b/payload_consumer/file_descriptor.cc
index f26be28..309c60d 100644
--- a/payload_consumer/file_descriptor.cc
+++ b/payload_consumer/file_descriptor.cc
@@ -69,6 +69,11 @@
                                        uint64_t start,
                                        uint64_t length,
                                        int* result) {
+  // If the ioctl BLKZEROOUT is not defined, just fail to perform any of these
+  // operations.
+#ifndef BLKZEROOUT
+  return false;
+#else  // defined(BLKZEROOUT)
   DCHECK(request == BLKDISCARD || request == BLKZEROOUT ||
          request == BLKSECDISCARD);
   // On some devices, the BLKDISCARD will actually read back as zeros, instead
@@ -99,6 +104,7 @@
     return false;
   }
   return true;
+#endif  // defined(BLKZEROOUT)
 }
 
 bool EintrSafeFileDescriptor::Close() {
diff --git a/update_engine.gyp b/update_engine.gyp
index b40d5b3..97ed4c2 100644
--- a/update_engine.gyp
+++ b/update_engine.gyp
@@ -292,6 +292,7 @@
       'variables': {
         'exported_deps': [
           'libupdate_engine-client',
+          'dbus-1',
         ],
         'deps': ['<@(exported_deps)'],
       },