Home | History | Annotate | Download | only in update_engine
      1 #
      2 # Copyright (C) 2015 The Android Open Source Project
      3 #
      4 # Licensed under the Apache License, Version 2.0 (the "License");
      5 # you may not use this file except in compliance with the License.
      6 # You may obtain a copy of the License at
      7 #
      8 #      http://www.apache.org/licenses/LICENSE-2.0
      9 #
     10 # Unless required by applicable law or agreed to in writing, software
     11 # distributed under the License is distributed on an "AS IS" BASIS,
     12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 # See the License for the specific language governing permissions and
     14 # limitations under the License.
     15 #
     16 
     17 LOCAL_PATH := $(my-dir)
     18 
     19 # Default values for the USE flags. Override these USE flags from your product
     20 # by setting BRILLO_USE_* values. Note that we define local variables like
     21 # local_use_* to prevent leaking our default setting for other packages.
     22 local_use_binder := $(if $(BRILLO_USE_BINDER),$(BRILLO_USE_BINDER),1)
     23 local_use_dbus := $(if $(BRILLO_USE_DBUS),$(BRILLO_USE_DBUS),0)
     24 local_use_hwid_override := \
     25     $(if $(BRILLO_USE_HWID_OVERRIDE),$(BRILLO_USE_HWID_OVERRIDE),0)
     26 # "libcros" gates the LibCrosService exposed by the Chrome OS' chrome browser to
     27 # the system layer.
     28 local_use_libcros := $(if $(BRILLO_USE_LIBCROS),$(BRILLO_USE_LIBCROS),0)
     29 local_use_mtd := $(if $(BRILLO_USE_MTD),$(BRILLO_USE_MTD),0)
     30 local_use_power_management := \
     31     $(if $(BRILLO_USE_POWER_MANAGEMENT),$(BRILLO_USE_POWER_MANAGEMENT),0)
     32 local_use_weave := $(if $(BRILLO_USE_WEAVE),$(BRILLO_USE_WEAVE),0)
     33 
     34 ue_common_cflags := \
     35     -DUSE_BINDER=$(local_use_binder) \
     36     -DUSE_DBUS=$(local_use_dbus) \
     37     -DUSE_HWID_OVERRIDE=$(local_use_hwid_override) \
     38     -DUSE_LIBCROS=$(local_use_libcros) \
     39     -DUSE_MTD=$(local_use_mtd) \
     40     -DUSE_POWER_MANAGEMENT=$(local_use_power_management) \
     41     -DUSE_WEAVE=$(local_use_weave) \
     42     -D_FILE_OFFSET_BITS=64 \
     43     -D_POSIX_C_SOURCE=199309L \
     44     -Wa,--noexecstack \
     45     -Wall \
     46     -Werror \
     47     -Wextra \
     48     -Wformat=2 \
     49     -Wno-psabi \
     50     -Wno-unused-parameter \
     51     -ffunction-sections \
     52     -fstack-protector-strong \
     53     -fvisibility=hidden
     54 ue_common_cppflags := \
     55     -Wnon-virtual-dtor \
     56     -fno-strict-aliasing \
     57     -std=gnu++11
     58 ue_common_ldflags := \
     59     -Wl,--gc-sections
     60 ue_common_c_includes := \
     61     $(LOCAL_PATH)/client_library/include \
     62     external/gtest/include \
     63     system
     64 ue_common_shared_libraries := \
     65     libbrillo-stream \
     66     libbrillo \
     67     libchrome
     68 
     69 ifeq ($(local_use_dbus),1)
     70 
     71 # update_engine_client-dbus-proxies (from generate-dbus-proxies.gypi)
     72 # ========================================================
     73 include $(CLEAR_VARS)
     74 LOCAL_MODULE := update_engine_client-dbus-proxies
     75 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
     76 LOCAL_SRC_FILES := \
     77     dbus_bindings/dbus-service-config.json \
     78     dbus_bindings/org.chromium.UpdateEngineInterface.dbus-xml
     79 LOCAL_DBUS_PROXY_PREFIX := update_engine
     80 include $(BUILD_STATIC_LIBRARY)
     81 
     82 endif  # local_use_dbus == 1
     83 
     84 # update_metadata-protos (type: static_library)
     85 # ========================================================
     86 # Protobufs.
     87 ue_update_metadata_protos_exported_static_libraries := \
     88     update_metadata-protos
     89 ue_update_metadata_protos_exported_shared_libraries := \
     90     libprotobuf-cpp-lite
     91 
     92 ue_update_metadata_protos_src_files := \
     93     update_metadata.proto
     94 
     95 # Build for the host.
     96 include $(CLEAR_VARS)
     97 LOCAL_MODULE := update_metadata-protos
     98 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
     99 LOCAL_IS_HOST_MODULE := true
    100 generated_sources_dir := $(call local-generated-sources-dir)
    101 LOCAL_EXPORT_C_INCLUDE_DIRS := $(generated_sources_dir)/proto/system
    102 LOCAL_SRC_FILES := $(ue_update_metadata_protos_src_files)
    103 include $(BUILD_HOST_STATIC_LIBRARY)
    104 
    105 # Build for the target.
    106 include $(CLEAR_VARS)
    107 LOCAL_MODULE := update_metadata-protos
    108 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    109 generated_sources_dir := $(call local-generated-sources-dir)
    110 LOCAL_EXPORT_C_INCLUDE_DIRS := $(generated_sources_dir)/proto/system
    111 LOCAL_SRC_FILES := $(ue_update_metadata_protos_src_files)
    112 include $(BUILD_STATIC_LIBRARY)
    113 
    114 ifeq ($(local_use_dbus),1)
    115 
    116 # update_engine-dbus-adaptor (from generate-dbus-adaptors.gypi)
    117 # ========================================================
    118 # Chrome D-Bus bindings.
    119 include $(CLEAR_VARS)
    120 LOCAL_MODULE := update_engine-dbus-adaptor
    121 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    122 LOCAL_SRC_FILES := \
    123     dbus_bindings/org.chromium.UpdateEngineInterface.dbus-xml
    124 include $(BUILD_STATIC_LIBRARY)
    125 
    126 # update_engine-dbus-libcros-client (from generate-dbus-proxies.gypi)
    127 # ========================================================
    128 include $(CLEAR_VARS)
    129 LOCAL_MODULE := update_engine-dbus-libcros-client
    130 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    131 LOCAL_SRC_FILES := \
    132     dbus_bindings/org.chromium.LibCrosService.dbus-xml
    133 LOCAL_DBUS_PROXY_PREFIX := libcros
    134 include $(BUILD_STATIC_LIBRARY)
    135 
    136 endif  # local_use_dbus == 1
    137 
    138 # libpayload_consumer (type: static_library)
    139 # ========================================================
    140 # The payload application component and common dependencies.
    141 ue_libpayload_consumer_exported_static_libraries := \
    142     update_metadata-protos \
    143     libxz-host \
    144     libbz \
    145     $(ue_update_metadata_protos_exported_static_libraries)
    146 ue_libpayload_consumer_exported_shared_libraries := \
    147     libcrypto-host \
    148     $(ue_update_metadata_protos_exported_shared_libraries)
    149 
    150 ue_libpayload_consumer_src_files := \
    151     common/action_processor.cc \
    152     common/boot_control_stub.cc \
    153     common/clock.cc \
    154     common/constants.cc \
    155     common/cpu_limiter.cc \
    156     common/error_code_utils.cc \
    157     common/hash_calculator.cc \
    158     common/http_common.cc \
    159     common/http_fetcher.cc \
    160     common/file_fetcher.cc \
    161     common/hwid_override.cc \
    162     common/multi_range_http_fetcher.cc \
    163     common/platform_constants_android.cc \
    164     common/prefs.cc \
    165     common/subprocess.cc \
    166     common/terminator.cc \
    167     common/utils.cc \
    168     payload_consumer/bzip_extent_writer.cc \
    169     payload_consumer/delta_performer.cc \
    170     payload_consumer/download_action.cc \
    171     payload_consumer/extent_writer.cc \
    172     payload_consumer/file_descriptor.cc \
    173     payload_consumer/file_writer.cc \
    174     payload_consumer/filesystem_verifier_action.cc \
    175     payload_consumer/install_plan.cc \
    176     payload_consumer/payload_constants.cc \
    177     payload_consumer/payload_verifier.cc \
    178     payload_consumer/postinstall_runner_action.cc \
    179     payload_consumer/xz_extent_writer.cc
    180 
    181 ifeq ($(HOST_OS),linux)
    182 # Build for the host.
    183 include $(CLEAR_VARS)
    184 LOCAL_MODULE := libpayload_consumer
    185 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    186 LOCAL_CPP_EXTENSION := .cc
    187 LOCAL_CLANG := true
    188 LOCAL_CFLAGS := $(ue_common_cflags)
    189 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    190 LOCAL_LDFLAGS := $(ue_common_ldflags)
    191 LOCAL_C_INCLUDES := \
    192     $(ue_common_c_includes) \
    193     external/e2fsprogs/lib
    194 LOCAL_STATIC_LIBRARIES := \
    195     update_metadata-protos \
    196     $(ue_libpayload_consumer_exported_static_libraries) \
    197     $(ue_update_metadata_protos_exported_static_libraries)
    198 LOCAL_SHARED_LIBRARIES := \
    199     $(ue_common_shared_libraries) \
    200     $(ue_libpayload_consumer_exported_shared_libraries) \
    201     $(ue_update_metadata_protos_exported_shared_libraries)
    202 LOCAL_SRC_FILES := $(ue_libpayload_consumer_src_files)
    203 include $(BUILD_HOST_STATIC_LIBRARY)
    204 endif  # HOST_OS == linux
    205 
    206 # Build for the target.
    207 include $(CLEAR_VARS)
    208 LOCAL_MODULE := libpayload_consumer
    209 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    210 LOCAL_CPP_EXTENSION := .cc
    211 LOCAL_CLANG := true
    212 LOCAL_CFLAGS := $(ue_common_cflags)
    213 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    214 LOCAL_LDFLAGS := $(ue_common_ldflags)
    215 LOCAL_C_INCLUDES := \
    216     $(ue_common_c_includes) \
    217     external/e2fsprogs/lib
    218 LOCAL_STATIC_LIBRARIES := \
    219     update_metadata-protos \
    220     $(ue_libpayload_consumer_exported_static_libraries:-host=) \
    221     $(ue_update_metadata_protos_exported_static_libraries)
    222 LOCAL_SHARED_LIBRARIES := \
    223     $(ue_common_shared_libraries) \
    224     $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
    225     $(ue_update_metadata_protos_exported_shared_libraries)
    226 LOCAL_SRC_FILES := $(ue_libpayload_consumer_src_files)
    227 include $(BUILD_STATIC_LIBRARY)
    228 
    229 ifdef BRILLO
    230 
    231 # libupdate_engine (type: static_library)
    232 # ========================================================
    233 # The main daemon static_library with all the code used to check for updates
    234 # with Omaha and expose a DBus daemon.
    235 ue_libupdate_engine_exported_c_includes := \
    236     $(LOCAL_PATH)/include \
    237     external/cros/system_api/dbus
    238 ue_libupdate_engine_exported_static_libraries := \
    239     libpayload_consumer \
    240     update_metadata-protos \
    241     update_engine-dbus-adaptor \
    242     update_engine-dbus-libcros-client \
    243     update_engine_client-dbus-proxies \
    244     libbz \
    245     libfs_mgr \
    246     $(ue_libpayload_consumer_exported_static_libraries) \
    247     $(ue_update_metadata_protos_exported_static_libraries)
    248 ue_libupdate_engine_exported_shared_libraries := \
    249     libdbus \
    250     libbrillo-dbus \
    251     libchrome-dbus \
    252     libmetrics \
    253     libshill-client \
    254     libexpat \
    255     libbrillo-policy \
    256     libhardware \
    257     libcurl \
    258     libcutils \
    259     libssl \
    260     $(ue_libpayload_consumer_exported_shared_libraries) \
    261     $(ue_update_metadata_protos_exported_shared_libraries)
    262 ifeq ($(local_use_binder),1)
    263 ue_libupdate_engine_exported_shared_libraries += \
    264     libbinder \
    265     libbinderwrapper \
    266     libbrillo-binder \
    267     libutils
    268 endif  # local_use_binder == 1
    269 ifeq ($(local_use_weave),1)
    270 ue_libupdate_engine_exported_shared_libraries += \
    271     libbinderwrapper \
    272     libbrillo-binder \
    273     libweaved
    274 endif  # local_use_weave == 1
    275 
    276 include $(CLEAR_VARS)
    277 LOCAL_MODULE := libupdate_engine
    278 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    279 LOCAL_CPP_EXTENSION := .cc
    280 LOCAL_CLANG := true
    281 LOCAL_EXPORT_C_INCLUDE_DIRS := $(ue_libupdate_engine_exported_c_includes)
    282 LOCAL_CFLAGS := $(ue_common_cflags)
    283 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    284 LOCAL_LDFLAGS := $(ue_common_ldflags)
    285 LOCAL_C_INCLUDES := \
    286     $(ue_common_c_includes) \
    287     $(ue_libupdate_engine_exported_c_includes) \
    288     bootable/recovery
    289 LOCAL_STATIC_LIBRARIES := \
    290     libpayload_consumer \
    291     update_metadata-protos \
    292     update_engine-dbus-adaptor \
    293     update_engine-dbus-libcros-client \
    294     update_engine_client-dbus-proxies \
    295     $(ue_libupdate_engine_exported_static_libraries:-host=) \
    296     $(ue_libpayload_consumer_exported_static_libraries:-host=) \
    297     $(ue_update_metadata_protos_exported_static_libraries)
    298 LOCAL_SHARED_LIBRARIES := \
    299     $(ue_common_shared_libraries) \
    300     $(ue_libupdate_engine_exported_shared_libraries:-host=) \
    301     $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
    302     $(ue_update_metadata_protos_exported_shared_libraries)
    303 LOCAL_SRC_FILES := \
    304     boot_control_android.cc \
    305     certificate_checker.cc \
    306     common_service.cc \
    307     connection_manager.cc \
    308     daemon.cc \
    309     dbus_service.cc \
    310     hardware_android.cc \
    311     image_properties_android.cc \
    312     libcros_proxy.cc \
    313     libcurl_http_fetcher.cc \
    314     metrics.cc \
    315     metrics_utils.cc \
    316     omaha_request_action.cc \
    317     omaha_request_params.cc \
    318     omaha_response_handler_action.cc \
    319     p2p_manager.cc \
    320     payload_state.cc \
    321     proxy_resolver.cc \
    322     real_system_state.cc \
    323     shill_proxy.cc \
    324     update_attempter.cc \
    325     update_manager/boxed_value.cc \
    326     update_manager/chromeos_policy.cc \
    327     update_manager/default_policy.cc \
    328     update_manager/evaluation_context.cc \
    329     update_manager/policy.cc \
    330     update_manager/real_config_provider.cc \
    331     update_manager/real_device_policy_provider.cc \
    332     update_manager/real_random_provider.cc \
    333     update_manager/real_shill_provider.cc \
    334     update_manager/real_system_provider.cc \
    335     update_manager/real_time_provider.cc \
    336     update_manager/real_updater_provider.cc \
    337     update_manager/state_factory.cc \
    338     update_manager/update_manager.cc \
    339     update_status_utils.cc \
    340     utils_android.cc \
    341     weave_service_factory.cc
    342 ifeq ($(local_use_binder),1)
    343 LOCAL_AIDL_INCLUDES += $(LOCAL_PATH)/binder_bindings
    344 LOCAL_SRC_FILES += \
    345     binder_bindings/android/brillo/IUpdateEngine.aidl \
    346     binder_bindings/android/brillo/IUpdateEngineStatusCallback.aidl \
    347     binder_service_brillo.cc \
    348     parcelable_update_engine_status.cc
    349 endif  # local_use_binder == 1
    350 ifeq ($(local_use_weave),1)
    351 LOCAL_SRC_FILES += \
    352     weave_service.cc
    353 endif  # local_use_weave == 1
    354 ifeq ($(local_use_libcros),1)
    355 LOCAL_SRC_FILES += \
    356     chrome_browser_proxy_resolver.cc
    357 endif  # local_use_libcros == 1
    358 include $(BUILD_STATIC_LIBRARY)
    359 
    360 else  # !defined(BRILLO)
    361 
    362 ifneq ($(local_use_binder),1)
    363 $(error USE_BINDER is disabled but is required in non-Brillo devices.)
    364 endif  # local_use_binder == 1
    365 
    366 # libupdate_engine_android (type: static_library)
    367 # ========================================================
    368 # The main daemon static_library used in Android (non-Brillo). This only has a
    369 # loop to apply payloads provided by the upper layer via a Binder interface.
    370 ue_libupdate_engine_android_exported_static_libraries := \
    371     libpayload_consumer \
    372     libfs_mgr \
    373     $(ue_libpayload_consumer_exported_static_libraries)
    374 ue_libupdate_engine_android_exported_shared_libraries := \
    375     $(ue_libpayload_consumer_exported_shared_libraries) \
    376     libandroid \
    377     libbinder \
    378     libbinderwrapper \
    379     libbrillo-binder \
    380     libcutils \
    381     libcurl \
    382     libhardware \
    383     libssl \
    384     libutils
    385 
    386 include $(CLEAR_VARS)
    387 LOCAL_MODULE := libupdate_engine_android
    388 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    389 LOCAL_CPP_EXTENSION := .cc
    390 LOCAL_CLANG := true
    391 LOCAL_CFLAGS := $(ue_common_cflags)
    392 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    393 LOCAL_LDFLAGS := $(ue_common_ldflags)
    394 LOCAL_C_INCLUDES := \
    395     $(ue_common_c_includes) \
    396     bootable/recovery
    397 #TODO(deymo): Remove external/cros/system_api/dbus once the strings are moved
    398 # out of the DBus interface.
    399 LOCAL_C_INCLUDES += \
    400     external/cros/system_api/dbus
    401 LOCAL_STATIC_LIBRARIES := \
    402     $(ue_libupdate_engine_android_exported_static_libraries:-host=)
    403 LOCAL_SHARED_LIBRARIES += \
    404     $(ue_common_shared_libraries) \
    405     $(ue_libupdate_engine_android_exported_shared_libraries:-host=)
    406 LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/binder_bindings
    407 LOCAL_SRC_FILES += \
    408     binder_bindings/android/os/IUpdateEngine.aidl \
    409     binder_bindings/android/os/IUpdateEngineCallback.aidl \
    410     binder_service_android.cc \
    411     boot_control_android.cc \
    412     certificate_checker.cc \
    413     daemon.cc \
    414     daemon_state_android.cc \
    415     hardware_android.cc \
    416     libcurl_http_fetcher.cc \
    417     network_selector_android.cc \
    418     proxy_resolver.cc \
    419     update_attempter_android.cc \
    420     update_status_utils.cc \
    421     utils_android.cc
    422 include $(BUILD_STATIC_LIBRARY)
    423 
    424 endif  # !defined(BRILLO)
    425 
    426 # update_engine (type: executable)
    427 # ========================================================
    428 # update_engine daemon.
    429 include $(CLEAR_VARS)
    430 LOCAL_MODULE := update_engine
    431 LOCAL_MODULE_CLASS := EXECUTABLES
    432 LOCAL_REQUIRED_MODULES := \
    433     bspatch \
    434     cacerts_google
    435 ifeq ($(local_use_weave),1)
    436 LOCAL_REQUIRED_MODULES += updater.json
    437 endif  # local_use_weave == 1
    438 LOCAL_CPP_EXTENSION := .cc
    439 LOCAL_CLANG := true
    440 LOCAL_CFLAGS := $(ue_common_cflags)
    441 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    442 LOCAL_LDFLAGS := $(ue_common_ldflags)
    443 LOCAL_C_INCLUDES := \
    444     $(ue_common_c_includes)
    445 LOCAL_SHARED_LIBRARIES := \
    446     $(ue_common_shared_libraries)
    447 LOCAL_SRC_FILES := \
    448     main.cc
    449 
    450 ifdef BRILLO
    451 LOCAL_C_INCLUDES += \
    452     $(ue_libupdate_engine_exported_c_includes)
    453 LOCAL_STATIC_LIBRARIES := \
    454     libupdate_engine \
    455     $(ue_libupdate_engine_exported_static_libraries:-host=)
    456 LOCAL_SHARED_LIBRARIES += \
    457     $(ue_libupdate_engine_exported_shared_libraries:-host=)
    458 else  # !defined(BRILLO)
    459 LOCAL_STATIC_LIBRARIES := \
    460     libupdate_engine_android \
    461     $(ue_libupdate_engine_android_exported_static_libraries:-host=)
    462 LOCAL_SHARED_LIBRARIES += \
    463     $(ue_libupdate_engine_android_exported_shared_libraries:-host=)
    464 endif  # !defined(BRILLO)
    465 
    466 LOCAL_INIT_RC := update_engine.rc
    467 include $(BUILD_EXECUTABLE)
    468 
    469 # update_engine_sideload (type: executable)
    470 # ========================================================
    471 # A static binary equivalent to update_engine daemon that installs an update
    472 # from a local file directly instead of running in the background.
    473 include $(CLEAR_VARS)
    474 LOCAL_MODULE := update_engine_sideload
    475 LOCAL_FORCE_STATIC_EXECUTABLE := true
    476 LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
    477 LOCAL_MODULE_CLASS := EXECUTABLES
    478 LOCAL_REQUIRED_MODULES := \
    479     bspatch_recovery
    480 LOCAL_CPP_EXTENSION := .cc
    481 LOCAL_CLANG := true
    482 LOCAL_CFLAGS := \
    483     $(ue_common_cflags) \
    484     -D_UE_SIDELOAD
    485 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    486 LOCAL_LDFLAGS := $(ue_common_ldflags)
    487 LOCAL_C_INCLUDES := \
    488     $(ue_common_c_includes) \
    489     bootable/recovery
    490 #TODO(deymo): Remove external/cros/system_api/dbus once the strings are moved
    491 # out of the DBus interface.
    492 LOCAL_C_INCLUDES += \
    493     external/cros/system_api/dbus
    494 LOCAL_SRC_FILES := \
    495     boot_control_android.cc \
    496     hardware_android.cc \
    497     network_selector_stub.cc \
    498     proxy_resolver.cc \
    499     sideload_main.cc \
    500     update_attempter_android.cc \
    501     update_status_utils.cc \
    502     utils_android.cc
    503 LOCAL_STATIC_LIBRARIES := \
    504     libfs_mgr \
    505     libpayload_consumer \
    506     update_metadata-protos \
    507     $(ue_libpayload_consumer_exported_static_libraries:-host=) \
    508     $(ue_update_metadata_protos_exported_static_libraries)
    509 # We add the static versions of the shared libraries since we are forcing this
    510 # binary to be a static binary, so we also need to include all the static
    511 # library dependencies of these static libraries.
    512 LOCAL_STATIC_LIBRARIES += \
    513     $(ue_common_shared_libraries) \
    514     libcutils \
    515     libcrypto_static \
    516     $(ue_update_metadata_protos_exported_shared_libraries) \
    517     libevent \
    518     libmodpb64 \
    519     liblog
    520 
    521 ifeq ($(strip $(PRODUCT_STATIC_BOOT_CONTROL_HAL)),)
    522 # No static boot_control HAL defined, so no sideload support. We use a fake
    523 # boot_control HAL to allow compiling update_engine_sideload for test purposes.
    524 ifeq ($(strip $(AB_OTA_UPDATER)),true)
    525 $(warning No PRODUCT_STATIC_BOOT_CONTROL_HAL configured but AB_OTA_UPDATER is \
    526 true, no update sideload support.)
    527 endif  # AB_OTA_UPDATER == true
    528 LOCAL_SRC_FILES += \
    529     boot_control_recovery_stub.cc
    530 else  # PRODUCT_STATIC_BOOT_CONTROL_HAL != ""
    531 LOCAL_STATIC_LIBRARIES += \
    532     $(PRODUCT_STATIC_BOOT_CONTROL_HAL)
    533 endif  # PRODUCT_STATIC_BOOT_CONTROL_HAL != ""
    534 
    535 include $(BUILD_EXECUTABLE)
    536 
    537 # libupdate_engine_client (type: shared_library)
    538 # ========================================================
    539 include $(CLEAR_VARS)
    540 LOCAL_MODULE := libupdate_engine_client
    541 LOCAL_CFLAGS := \
    542     -Wall \
    543     -Werror \
    544     -Wno-unused-parameter \
    545     -DUSE_DBUS=$(local_use_dbus) \
    546     -DUSE_BINDER=$(local_use_binder)
    547 LOCAL_CLANG := true
    548 LOCAL_CPP_EXTENSION := .cc
    549 # TODO(deymo): Remove "external/cros/system_api/dbus" when dbus is not used.
    550 LOCAL_C_INCLUDES := \
    551     $(LOCAL_PATH)/client_library/include \
    552     external/cros/system_api/dbus \
    553     system \
    554     external/gtest/include
    555 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/client_library/include
    556 LOCAL_SHARED_LIBRARIES := \
    557     libchrome \
    558     libbrillo
    559 LOCAL_SRC_FILES := \
    560     client_library/client.cc \
    561     update_status_utils.cc
    562 
    563 # We can only compile support for one IPC mechanism. If both "binder" and "dbus"
    564 # are defined, we prefer binder.
    565 ifeq ($(local_use_binder),1)
    566 LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/binder_bindings
    567 LOCAL_SHARED_LIBRARIES += \
    568     libbinder \
    569     libbrillo-binder \
    570     libutils
    571 LOCAL_SRC_FILES += \
    572     binder_bindings/android/brillo/IUpdateEngine.aidl \
    573     binder_bindings/android/brillo/IUpdateEngineStatusCallback.aidl \
    574     client_library/client_binder.cc \
    575     parcelable_update_engine_status.cc
    576 else  # local_use_binder != 1
    577 LOCAL_STATIC_LIBRARIES := \
    578     update_engine_client-dbus-proxies
    579 LOCAL_SHARED_LIBRARIES += \
    580     libchrome-dbus \
    581     libbrillo-dbus
    582 LOCAL_SRC_FILES += \
    583     client_library/client_dbus.cc
    584 endif  # local_use_binder == 1
    585 
    586 include $(BUILD_SHARED_LIBRARY)
    587 
    588 # update_engine_client (type: executable)
    589 # ========================================================
    590 # update_engine console client.
    591 include $(CLEAR_VARS)
    592 LOCAL_MODULE := update_engine_client
    593 LOCAL_MODULE_CLASS := EXECUTABLES
    594 LOCAL_CPP_EXTENSION := .cc
    595 LOCAL_CLANG := true
    596 LOCAL_CFLAGS := $(ue_common_cflags)
    597 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    598 LOCAL_LDFLAGS := $(ue_common_ldflags)
    599 LOCAL_C_INCLUDES := $(ue_common_c_includes)
    600 LOCAL_SHARED_LIBRARIES := $(ue_common_shared_libraries)
    601 ifdef BRILLO
    602 LOCAL_SHARED_LIBRARIES += \
    603     libupdate_engine_client
    604 LOCAL_SRC_FILES := \
    605     update_engine_client.cc \
    606     common/error_code_utils.cc
    607 else  # !defined(BRILLO)
    608 #TODO(deymo): Remove external/cros/system_api/dbus once the strings are moved
    609 # out of the DBus interface.
    610 LOCAL_C_INCLUDES += \
    611     external/cros/system_api/dbus
    612 LOCAL_SHARED_LIBRARIES += \
    613     libbinder \
    614     libbinderwrapper \
    615     libbrillo-binder \
    616     libutils
    617 LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/binder_bindings
    618 LOCAL_SRC_FILES := \
    619     binder_bindings/android/os/IUpdateEngine.aidl \
    620     binder_bindings/android/os/IUpdateEngineCallback.aidl \
    621     common/error_code_utils.cc \
    622     update_engine_client_android.cc \
    623     update_status_utils.cc
    624 endif  # !defined(BRILLO)
    625 include $(BUILD_EXECUTABLE)
    626 
    627 # libpayload_generator (type: static_library)
    628 # ========================================================
    629 # server-side code. This is used for delta_generator and unittests but not
    630 # for any client code.
    631 ue_libpayload_generator_exported_static_libraries := \
    632     libpayload_consumer \
    633     update_metadata-protos \
    634     liblzma \
    635     $(ue_libpayload_consumer_exported_static_libraries) \
    636     $(ue_update_metadata_protos_exported_static_libraries)
    637 ue_libpayload_generator_exported_shared_libraries := \
    638     libext2fs-host \
    639     $(ue_libpayload_consumer_exported_shared_libraries) \
    640     $(ue_update_metadata_protos_exported_shared_libraries)
    641 
    642 ue_libpayload_generator_src_files := \
    643     payload_generator/ab_generator.cc \
    644     payload_generator/annotated_operation.cc \
    645     payload_generator/blob_file_writer.cc \
    646     payload_generator/block_mapping.cc \
    647     payload_generator/bzip.cc \
    648     payload_generator/cycle_breaker.cc \
    649     payload_generator/delta_diff_generator.cc \
    650     payload_generator/delta_diff_utils.cc \
    651     payload_generator/ext2_filesystem.cc \
    652     payload_generator/extent_ranges.cc \
    653     payload_generator/extent_utils.cc \
    654     payload_generator/full_update_generator.cc \
    655     payload_generator/graph_types.cc \
    656     payload_generator/graph_utils.cc \
    657     payload_generator/inplace_generator.cc \
    658     payload_generator/payload_file.cc \
    659     payload_generator/payload_generation_config.cc \
    660     payload_generator/payload_signer.cc \
    661     payload_generator/raw_filesystem.cc \
    662     payload_generator/tarjan.cc \
    663     payload_generator/topological_sort.cc \
    664     payload_generator/xz_android.cc
    665 
    666 ifeq ($(HOST_OS),linux)
    667 # Build for the host.
    668 include $(CLEAR_VARS)
    669 LOCAL_MODULE := libpayload_generator
    670 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    671 LOCAL_CPP_EXTENSION := .cc
    672 LOCAL_CLANG := true
    673 LOCAL_CFLAGS := $(ue_common_cflags)
    674 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    675 LOCAL_LDFLAGS := $(ue_common_ldflags)
    676 LOCAL_C_INCLUDES := $(ue_common_c_includes)
    677 LOCAL_STATIC_LIBRARIES := \
    678     libpayload_consumer \
    679     update_metadata-protos \
    680     liblzma \
    681     $(ue_libpayload_consumer_exported_static_libraries) \
    682     $(ue_update_metadata_protos_exported_static_libraries)
    683 LOCAL_SHARED_LIBRARIES := \
    684     $(ue_common_shared_libraries) \
    685     $(ue_libpayload_generator_exported_shared_libraries) \
    686     $(ue_libpayload_consumer_exported_shared_libraries) \
    687     $(ue_update_metadata_protos_exported_shared_libraries)
    688 LOCAL_SRC_FILES := $(ue_libpayload_generator_src_files)
    689 include $(BUILD_HOST_STATIC_LIBRARY)
    690 endif  # HOST_OS == linux
    691 
    692 # Build for the target.
    693 include $(CLEAR_VARS)
    694 LOCAL_MODULE := libpayload_generator
    695 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    696 LOCAL_CPP_EXTENSION := .cc
    697 LOCAL_CLANG := true
    698 LOCAL_CFLAGS := $(ue_common_cflags)
    699 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    700 LOCAL_LDFLAGS := $(ue_common_ldflags)
    701 LOCAL_C_INCLUDES := $(ue_common_c_includes)
    702 LOCAL_STATIC_LIBRARIES := \
    703     libpayload_consumer \
    704     update_metadata-protos \
    705     liblzma \
    706     $(ue_libpayload_consumer_exported_static_libraries:-host=) \
    707     $(ue_update_metadata_protos_exported_static_libraries)
    708 LOCAL_SHARED_LIBRARIES := \
    709     $(ue_common_shared_libraries) \
    710     $(ue_libpayload_generator_exported_shared_libraries:-host=) \
    711     $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
    712     $(ue_update_metadata_protos_exported_shared_libraries)
    713 LOCAL_SRC_FILES := $(ue_libpayload_generator_src_files)
    714 include $(BUILD_STATIC_LIBRARY)
    715 
    716 # delta_generator (type: executable)
    717 # ========================================================
    718 # server-side delta generator.
    719 ue_delta_generator_src_files := \
    720     payload_generator/generate_delta_main.cc
    721 
    722 ifeq ($(HOST_OS),linux)
    723 # Build for the host.
    724 include $(CLEAR_VARS)
    725 LOCAL_MODULE := delta_generator
    726 LOCAL_MODULE_CLASS := EXECUTABLES
    727 LOCAL_CPP_EXTENSION := .cc
    728 LOCAL_CLANG := true
    729 LOCAL_CFLAGS := $(ue_common_cflags)
    730 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    731 LOCAL_LDFLAGS := $(ue_common_ldflags)
    732 LOCAL_C_INCLUDES := $(ue_common_c_includes)
    733 LOCAL_STATIC_LIBRARIES := \
    734     libpayload_consumer \
    735     libpayload_generator \
    736     $(ue_libpayload_consumer_exported_static_libraries) \
    737     $(ue_libpayload_generator_exported_static_libraries)
    738 LOCAL_SHARED_LIBRARIES := \
    739     $(ue_common_shared_libraries) \
    740     $(ue_libpayload_consumer_exported_shared_libraries) \
    741     $(ue_libpayload_generator_exported_shared_libraries)
    742 LOCAL_SRC_FILES := $(ue_delta_generator_src_files)
    743 include $(BUILD_HOST_EXECUTABLE)
    744 endif  # HOST_OS == linux
    745 
    746 # Build for the target.
    747 include $(CLEAR_VARS)
    748 LOCAL_MODULE := delta_generator
    749 LOCAL_MODULE_CLASS := EXECUTABLES
    750 LOCAL_CPP_EXTENSION := .cc
    751 LOCAL_CLANG := true
    752 LOCAL_CFLAGS := $(ue_common_cflags)
    753 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    754 LOCAL_LDFLAGS := $(ue_common_ldflags)
    755 LOCAL_C_INCLUDES := $(ue_common_c_includes)
    756 LOCAL_STATIC_LIBRARIES := \
    757     libpayload_consumer \
    758     libpayload_generator \
    759     $(ue_libpayload_consumer_exported_static_libraries:-host=) \
    760     $(ue_libpayload_generator_exported_static_libraries:-host=)
    761 LOCAL_SHARED_LIBRARIES := \
    762     $(ue_common_shared_libraries) \
    763     $(ue_libpayload_consumer_exported_shared_libraries:-host=) \
    764     $(ue_libpayload_generator_exported_shared_libraries:-host=)
    765 LOCAL_SRC_FILES := $(ue_delta_generator_src_files)
    766 include $(BUILD_EXECUTABLE)
    767 
    768 # TODO(deymo): Enable the unittest binaries in non-Brillo builds once the DBus
    769 # dependencies are removed or placed behind the USE_DBUS flag.
    770 ifdef BRILLO
    771 
    772 # Private and public keys for unittests.
    773 # ========================================================
    774 # Generate a module that installs a prebuilt private key and a module that
    775 # installs a public key generated from the private key.
    776 #
    777 # $(1): The path to the private key in pem format.
    778 define ue-unittest-keys
    779     $(eval include $(CLEAR_VARS)) \
    780     $(eval LOCAL_MODULE := ue_$(1).pem) \
    781     $(eval LOCAL_MODULE_CLASS := ETC) \
    782     $(eval $(ifeq $(BRILLO), 1, LOCAL_MODULE_TAGS := eng)) \
    783     $(eval LOCAL_SRC_FILES := $(1).pem) \
    784     $(eval LOCAL_MODULE_PATH := \
    785         $(TARGET_OUT_DATA_NATIVE_TESTS)/update_engine_unittests) \
    786     $(eval LOCAL_MODULE_STEM := $(1).pem) \
    787     $(eval include $(BUILD_PREBUILT)) \
    788     \
    789     $(eval include $(CLEAR_VARS)) \
    790     $(eval LOCAL_MODULE := ue_$(1).pub.pem) \
    791     $(eval LOCAL_MODULE_CLASS := ETC) \
    792     $(eval $(ifeq $(BRILLO), 1, LOCAL_MODULE_TAGS := eng)) \
    793     $(eval LOCAL_MODULE_PATH := \
    794         $(TARGET_OUT_DATA_NATIVE_TESTS)/update_engine_unittests) \
    795     $(eval LOCAL_MODULE_STEM := $(1).pub.pem) \
    796     $(eval include $(BUILD_SYSTEM)/base_rules.mk) \
    797     $(eval $(LOCAL_BUILT_MODULE) : $(LOCAL_PATH)/$(1).pem ; \
    798         openssl rsa -in $$< -pubout -out $$@)
    799 endef
    800 
    801 $(call ue-unittest-keys,unittest_key)
    802 $(call ue-unittest-keys,unittest_key2)
    803 
    804 # Sample images for unittests.
    805 # ========================================================
    806 # Generate a prebuilt module that installs a sample image from the compressed
    807 # sample_images.tar.bz2 file used by the unittests.
    808 #
    809 # $(1): The filename in the sample_images.tar.bz2
    810 define ue-unittest-sample-image
    811     $(eval include $(CLEAR_VARS)) \
    812     $(eval LOCAL_MODULE := ue_unittest_$(1)) \
    813     $(eval LOCAL_MODULE_CLASS := EXECUTABLES) \
    814     $(eval $(ifeq $(BRILLO), 1, LOCAL_MODULE_TAGS := eng)) \
    815     $(eval LOCAL_MODULE_PATH := \
    816         $(TARGET_OUT_DATA_NATIVE_TESTS)/update_engine_unittests/gen) \
    817     $(eval LOCAL_MODULE_STEM := $(1)) \
    818     $(eval include $(BUILD_SYSTEM)/base_rules.mk) \
    819     $(eval $(LOCAL_BUILT_MODULE) : \
    820         $(LOCAL_PATH)/sample_images/sample_images.tar.bz2 ; \
    821         tar -jxf $$< -C $$(dir $$@) $$(notdir $$@) && touch $$@)
    822 endef
    823 
    824 $(call ue-unittest-sample-image,disk_ext2_1k.img)
    825 $(call ue-unittest-sample-image,disk_ext2_4k.img)
    826 $(call ue-unittest-sample-image,disk_ext2_4k_empty.img)
    827 $(call ue-unittest-sample-image,disk_ext2_unittest.img)
    828 
    829 # Zlib Fingerprint
    830 # ========================================================
    831 include $(CLEAR_VARS)
    832 LOCAL_MODULE := zlib_fingerprint
    833 LOCAL_MODULE_CLASS := ETC
    834 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_NATIVE_TESTS)/update_engine_unittests
    835 LOCAL_PREBUILT_MODULE_FILE := $(TARGET_OUT_COMMON_GEN)/zlib_fingerprint
    836 include $(BUILD_PREBUILT)
    837 
    838 # test_http_server (type: executable)
    839 # ========================================================
    840 # Test HTTP Server.
    841 include $(CLEAR_VARS)
    842 LOCAL_MODULE := test_http_server
    843 ifdef BRILLO
    844   LOCAL_MODULE_TAGS := eng
    845 endif
    846 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_NATIVE_TESTS)/update_engine_unittests
    847 LOCAL_MODULE_CLASS := EXECUTABLES
    848 LOCAL_CPP_EXTENSION := .cc
    849 LOCAL_CLANG := true
    850 LOCAL_CFLAGS := $(ue_common_cflags)
    851 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    852 LOCAL_LDFLAGS := $(ue_common_ldflags)
    853 LOCAL_C_INCLUDES := $(ue_common_c_includes)
    854 LOCAL_SHARED_LIBRARIES := $(ue_common_shared_libraries)
    855 LOCAL_SRC_FILES := \
    856     common/http_common.cc \
    857     test_http_server.cc
    858 include $(BUILD_EXECUTABLE)
    859 
    860 # update_engine_unittests (type: executable)
    861 # ========================================================
    862 # Main unittest file.
    863 include $(CLEAR_VARS)
    864 LOCAL_MODULE := update_engine_unittests
    865 ifdef BRILLO
    866   LOCAL_MODULE_TAGS := eng
    867 endif
    868 LOCAL_REQUIRED_MODULES := \
    869     ue_unittest_disk_ext2_1k.img \
    870     ue_unittest_disk_ext2_4k.img \
    871     ue_unittest_disk_ext2_4k_empty.img \
    872     ue_unittest_disk_ext2_unittest.img \
    873     ue_unittest_key.pem \
    874     ue_unittest_key.pub.pem \
    875     ue_unittest_key2.pem \
    876     ue_unittest_key2.pub.pem \
    877     zlib_fingerprint
    878 LOCAL_MODULE_CLASS := EXECUTABLES
    879 LOCAL_CPP_EXTENSION := .cc
    880 LOCAL_CLANG := true
    881 LOCAL_CFLAGS := $(ue_common_cflags)
    882 LOCAL_CPPFLAGS := $(ue_common_cppflags)
    883 LOCAL_LDFLAGS := $(ue_common_ldflags)
    884 LOCAL_C_INCLUDES := \
    885     $(ue_common_c_includes) \
    886     $(ue_libupdate_engine_exported_c_includes)
    887 LOCAL_STATIC_LIBRARIES := \
    888     libupdate_engine \
    889     libpayload_generator \
    890     libbrillo-test-helpers \
    891     libgmock \
    892     libgtest \
    893     libchrome_test_helpers \
    894     $(ue_libupdate_engine_exported_static_libraries:-host=) \
    895     $(ue_libpayload_generator_exported_static_libraries:-host=)
    896 LOCAL_SHARED_LIBRARIES := \
    897     $(ue_common_shared_libraries) \
    898     $(ue_libupdate_engine_exported_shared_libraries:-host=) \
    899     $(ue_libpayload_generator_exported_shared_libraries:-host=)
    900 LOCAL_SRC_FILES := \
    901     certificate_checker_unittest.cc \
    902     common/action_pipe_unittest.cc \
    903     common/action_processor_unittest.cc \
    904     common/action_unittest.cc \
    905     common/cpu_limiter_unittest.cc \
    906     common/fake_prefs.cc \
    907     common/file_fetcher_unittest.cc \
    908     common/hash_calculator_unittest.cc \
    909     common/http_fetcher_unittest.cc \
    910     common/hwid_override_unittest.cc \
    911     common/mock_http_fetcher.cc \
    912     common/prefs_unittest.cc \
    913     common/subprocess_unittest.cc \
    914     common/terminator_unittest.cc \
    915     common/test_utils.cc \
    916     common/utils_unittest.cc \
    917     common_service_unittest.cc \
    918     connection_manager_unittest.cc \
    919     fake_shill_proxy.cc \
    920     fake_system_state.cc \
    921     metrics_utils_unittest.cc \
    922     omaha_request_action_unittest.cc \
    923     omaha_request_params_unittest.cc \
    924     omaha_response_handler_action_unittest.cc \
    925     p2p_manager_unittest.cc \
    926     payload_consumer/bzip_extent_writer_unittest.cc \
    927     payload_consumer/delta_performer_integration_test.cc \
    928     payload_consumer/delta_performer_unittest.cc \
    929     payload_consumer/download_action_unittest.cc \
    930     payload_consumer/extent_writer_unittest.cc \
    931     payload_consumer/file_writer_unittest.cc \
    932     payload_consumer/filesystem_verifier_action_unittest.cc \
    933     payload_consumer/postinstall_runner_action_unittest.cc \
    934     payload_consumer/xz_extent_writer_unittest.cc \
    935     payload_generator/ab_generator_unittest.cc \
    936     payload_generator/blob_file_writer_unittest.cc \
    937     payload_generator/block_mapping_unittest.cc \
    938     payload_generator/cycle_breaker_unittest.cc \
    939     payload_generator/delta_diff_utils_unittest.cc \
    940     payload_generator/ext2_filesystem_unittest.cc \
    941     payload_generator/extent_ranges_unittest.cc \
    942     payload_generator/extent_utils_unittest.cc \
    943     payload_generator/fake_filesystem.cc \
    944     payload_generator/full_update_generator_unittest.cc \
    945     payload_generator/graph_utils_unittest.cc \
    946     payload_generator/inplace_generator_unittest.cc \
    947     payload_generator/payload_file_unittest.cc \
    948     payload_generator/payload_generation_config_unittest.cc \
    949     payload_generator/payload_signer_unittest.cc \
    950     payload_generator/tarjan_unittest.cc \
    951     payload_generator/topological_sort_unittest.cc \
    952     payload_generator/zip_unittest.cc \
    953     payload_state_unittest.cc \
    954     update_attempter_unittest.cc \
    955     update_manager/boxed_value_unittest.cc \
    956     update_manager/chromeos_policy_unittest.cc \
    957     update_manager/evaluation_context_unittest.cc \
    958     update_manager/generic_variables_unittest.cc \
    959     update_manager/prng_unittest.cc \
    960     update_manager/real_config_provider_unittest.cc \
    961     update_manager/real_device_policy_provider_unittest.cc \
    962     update_manager/real_random_provider_unittest.cc \
    963     update_manager/real_shill_provider_unittest.cc \
    964     update_manager/real_system_provider_unittest.cc \
    965     update_manager/real_time_provider_unittest.cc \
    966     update_manager/real_updater_provider_unittest.cc \
    967     update_manager/umtest_utils.cc \
    968     update_manager/update_manager_unittest.cc \
    969     update_manager/variable_unittest.cc \
    970     testrunner.cc
    971 ifeq ($(local_use_libcros),1)
    972 LOCAL_SRC_FILES += \
    973     chrome_browser_proxy_resolver_unittest.cc
    974 endif  # local_use_libcros == 1
    975 include $(BUILD_NATIVE_TEST)
    976 endif  # BRILLO
    977 
    978 # Weave schema files
    979 # ========================================================
    980 include $(CLEAR_VARS)
    981 LOCAL_MODULE := updater.json
    982 LOCAL_MODULE_CLASS := ETC
    983 LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/weaved/traits
    984 LOCAL_SRC_FILES := weaved/traits/$(LOCAL_MODULE)
    985 include $(BUILD_PREBUILT)
    986 
    987 # Update payload signing public key.
    988 # ========================================================
    989 ifdef BRILLO
    990 include $(CLEAR_VARS)
    991 LOCAL_MODULE := brillo-update-payload-key
    992 LOCAL_MODULE_CLASS := ETC
    993 LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/update_engine
    994 LOCAL_MODULE_STEM := update-payload-key.pub.pem
    995 LOCAL_SRC_FILES := update_payload_key/brillo-update-payload-key.pub.pem
    996 LOCAL_BUILT_MODULE_STEM := update_payload_key/brillo-update-payload-key.pub.pem
    997 include $(BUILD_PREBUILT)
    998 endif  # BRILLO
    999 
   1000 # Brillo update payload generation script
   1001 # ========================================================
   1002 ifeq ($(HOST_OS),linux)
   1003 include $(CLEAR_VARS)
   1004 LOCAL_SRC_FILES := scripts/brillo_update_payload
   1005 LOCAL_MODULE := brillo_update_payload
   1006 LOCAL_MODULE_CLASS := EXECUTABLES
   1007 LOCAL_IS_HOST_MODULE := true
   1008 LOCAL_MODULE_TAGS := optional
   1009 LOCAL_REQUIRED_MODULES := \
   1010     delta_generator \
   1011     shflags
   1012 include $(BUILD_PREBUILT)
   1013 endif  # HOST_OS == linux
   1014