update_engine: Migrate build system to gyp.
This change migrates the SConstruct file to the platform2 gyp
infrastructure without changing the way UE is compiled. The
code is still compiled as a single static library shared
between delta_generator, update_engine and update_engine_client.
This patch adds two generic .gypi rules to generate bindings for
DBus glib and public keys using openssl.
update_engine_unittests requires to run the openssl version from the
board and not the one on the host. This changes does that by using
SYSROOT when possible.
delta_generator is built without -pie to avoid a bug on how it
is run from au-generator.zip.
BUG=chromium:393293,chromium:394241
TEST=emerge-link update_engine; sudo emerge update_engine
TEST=cros_workon_make --reconf --test update_engine
TEST=cbuildbot link-release amd64-generic-full x86-generic-full
CQ-DEPEND=CL:Id81c7dca798ac8003252259eed03a12a60054437
Change-Id: Icc5e24ac202e552275cd197ee0b9a4a3d9b4a47c
Reviewed-on: https://chromium-review.googlesource.com/208487
Tested-by: Alex Deymo <deymo@chromium.org>
Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
diff --git a/update_engine.gyp b/update_engine.gyp
new file mode 100644
index 0000000..24a9a98
--- /dev/null
+++ b/update_engine.gyp
@@ -0,0 +1,333 @@
+{
+ 'target_defaults': {
+ 'variables': {
+ 'deps': [
+ 'libchrome-<(libbase_ver)',
+ 'libchromeos-<(libbase_ver)',
+ ],
+ # Defaults if the -DUSE_* flags are not passed to gyp is 0. You can set
+ # the default value for the USE flag in the ebuild.
+ 'USE_hwid_override%': '0',
+ 'USE_power_management%': '0',
+ },
+ 'cflags': [
+ '-g',
+ '-ffunction-sections',
+ '-Wall',
+ '-Wextra',
+ '-Werror',
+ '-Wno-unused-parameter',
+ '-Wno-deprecated-register',
+ ],
+ 'cflags_cc': [
+ '-fno-strict-aliasing',
+ '-std=gnu++11',
+ ],
+ 'ldflags': [
+ '-Wl,--gc-sections',
+ ],
+ 'defines': [
+ '__STDC_FORMAT_MACROS=1',
+ '_FILE_OFFSET_BITS=64',
+ '_POSIX_C_SOURCE=199309L',
+ 'USE_HWID_OVERRIDE=<(USE_hwid_override)',
+ 'USE_POWER_MANAGEMENT=<(USE_power_management)',
+ ],
+ },
+ 'targets': [
+ # Protobufs.
+ {
+ 'target_name': 'update_metadata-protos',
+ 'type': 'static_library',
+ 'variables': {
+ 'proto_in_dir': '.',
+ 'proto_out_dir': 'include/update_engine',
+ },
+ 'sources': [
+ 'update_metadata.proto'
+ ],
+ 'includes': ['../common-mk/protoc.gypi'],
+ },
+ # D-Bus glib bindings.
+ {
+ 'target_name': 'update_engine-dbus-client',
+ 'type': 'none',
+ 'variables': {
+ 'dbus_glib_type': 'client',
+ 'dbus_glib_out_dir': 'include/update_engine',
+ 'dbus_glib_prefix': 'update_engine_service',
+ },
+ 'sources': [
+ 'update_engine.xml',
+ ],
+ 'includes': ['../common-mk/dbus_glib.gypi'],
+ },
+ {
+ 'target_name': 'update_engine-dbus-server',
+ 'type': 'none',
+ 'variables': {
+ 'dbus_glib_type': 'server',
+ 'dbus_glib_out_dir': 'include/update_engine',
+ 'dbus_glib_prefix': 'update_engine_service',
+ },
+ 'sources': [
+ 'update_engine.xml',
+ ],
+ 'includes': ['../common-mk/dbus_glib.gypi'],
+ },
+ # The main static_library with all the code.
+ {
+ 'target_name': 'libupdate_engine',
+ 'type': 'static_library',
+ 'dependencies': [
+ 'update_metadata-protos',
+ 'update_engine-dbus-client',
+ 'update_engine-dbus-server',
+ ],
+ 'variables': {
+ 'exported_deps': [
+ 'dbus-1',
+ 'dbus-glib-1',
+ 'ext2fs',
+ 'gio-2.0',
+ 'gio-unix-2.0',
+ 'glib-2.0',
+ 'gthread-2.0',
+ 'libchrome-<(libbase_ver)',
+ 'libchromeos-<(libbase_ver)',
+ 'libcrypto',
+ 'libcurl',
+ 'libmetrics-<(libbase_ver)',
+ 'libssl',
+ 'libxml-2.0',
+ 'protobuf',
+ ],
+ 'deps': ['<@(exported_deps)'],
+ },
+ 'all_dependent_settings': {
+ 'variables': {
+ 'deps': [
+ '<@(exported_deps)',
+ ],
+ },
+ },
+ 'link_settings': {
+ 'variables': {
+ 'deps': [
+ '<@(exported_deps)',
+ ],
+ },
+ 'libraries': [
+ '-lbz2',
+ '-lgflags',
+ '-lpolicy-<(libbase_ver)',
+ '-lrootdev',
+ '-lrt',
+ '-lvboot_host',
+ ],
+ },
+ 'sources': [
+ 'action_processor.cc',
+ 'bzip.cc',
+ 'bzip_extent_writer.cc',
+ 'certificate_checker.cc',
+ 'chrome_browser_proxy_resolver.cc',
+ 'clock.cc',
+ 'connection_manager.cc',
+ 'constants.cc',
+ 'dbus_service.cc',
+ 'delta_performer.cc',
+ 'download_action.cc',
+ 'extent_ranges.cc',
+ 'extent_writer.cc',
+ 'file_descriptor.cc',
+ 'file_writer.cc',
+ 'filesystem_copier_action.cc',
+ 'hardware.cc',
+ 'http_common.cc',
+ 'http_fetcher.cc',
+ 'hwid_override.cc',
+ 'install_plan.cc',
+ 'libcurl_http_fetcher.cc',
+ 'metrics.cc',
+ 'multi_range_http_fetcher.cc',
+ 'omaha_hash_calculator.cc',
+ 'omaha_request_action.cc',
+ 'omaha_request_params.cc',
+ 'omaha_response_handler_action.cc',
+ 'p2p_manager.cc',
+ 'payload_constants.cc',
+ 'payload_generator/cycle_breaker.cc',
+ 'payload_generator/delta_diff_generator.cc',
+ 'payload_generator/extent_mapper.cc',
+ 'payload_generator/filesystem_iterator.cc',
+ 'payload_generator/full_update_generator.cc',
+ 'payload_generator/graph_utils.cc',
+ 'payload_generator/metadata.cc',
+ 'payload_generator/tarjan.cc',
+ 'payload_generator/topological_sort.cc',
+ 'payload_signer.cc',
+ 'payload_state.cc',
+ 'postinstall_runner_action.cc',
+ 'prefs.cc',
+ 'proxy_resolver.cc',
+ 'real_system_state.cc',
+ 'simple_key_value_store.cc',
+ 'subprocess.cc',
+ 'terminator.cc',
+ 'update_attempter.cc',
+ 'update_check_scheduler.cc',
+ 'update_manager/boxed_value.cc',
+ 'update_manager/chromeos_policy.cc',
+ 'update_manager/evaluation_context.cc',
+ 'update_manager/event_loop.cc',
+ 'update_manager/policy.cc',
+ 'update_manager/real_config_provider.cc',
+ 'update_manager/real_device_policy_provider.cc',
+ 'update_manager/real_random_provider.cc',
+ 'update_manager/real_shill_provider.cc',
+ 'update_manager/real_system_provider.cc',
+ 'update_manager/real_time_provider.cc',
+ 'update_manager/real_updater_provider.cc',
+ 'update_manager/state_factory.cc',
+ 'update_manager/update_manager.cc',
+ 'utils.cc',
+ ],
+ },
+ # update_engine daemon.
+ {
+ 'target_name': 'update_engine',
+ 'type': 'executable',
+ 'dependencies': ['libupdate_engine'],
+ 'sources': [
+ 'main.cc',
+ ]
+ },
+ # update_engine console client.
+ {
+ 'target_name': 'update_engine_client',
+ 'type': 'executable',
+ 'dependencies': ['libupdate_engine'],
+ 'sources': [
+ 'update_engine_client.cc',
+ ]
+ },
+ # server-side delta generator.
+ {
+ 'target_name': 'delta_generator',
+ 'type': 'executable',
+ 'dependencies': ['libupdate_engine'],
+ 'link_settings': {
+ 'ldflags!': [
+ '-pie',
+ ],
+ },
+ 'sources': [
+ 'payload_generator/generate_delta_main.cc',
+ ]
+ },
+ ],
+ 'conditions': [
+ ['USE_test == 1', {
+ 'targets': [
+ # Public keys used for unit testing.
+ {
+ 'target_name': 'update_engine-testkeys',
+ 'type': 'none',
+ 'variables': {
+ 'openssl_pem_in_dir': '.',
+ 'openssl_pem_out_dir': 'include/update_engine',
+ },
+ 'sources': [
+ 'unittest_key.pem',
+ 'unittest_key2.pem',
+ ],
+ 'includes': ['../common-mk/openssl_pem.gypi'],
+ },
+ # Test HTTP Server.
+ {
+ 'target_name': 'test_http_server',
+ 'type': 'executable',
+ 'dependencies': ['libupdate_engine'],
+ 'sources': [
+ 'test_http_server.cc',
+ ]
+ },
+ # Main unittest file.
+ {
+ 'target_name': 'update_engine_unittests',
+ 'type': 'executable',
+ 'dependencies': ['libupdate_engine'],
+ 'includes': ['../common-mk/common_test.gypi'],
+ 'defines': [
+ 'SYSROOT="<(sysroot)"',
+ ],
+ 'sources': [
+ 'action_pipe_unittest.cc',
+ 'action_processor_unittest.cc',
+ 'action_unittest.cc',
+ 'bzip_extent_writer_unittest.cc',
+ 'certificate_checker_unittest.cc',
+ 'chrome_browser_proxy_resolver_unittest.cc',
+ 'connection_manager_unittest.cc',
+ 'delta_performer_unittest.cc',
+ 'download_action_unittest.cc',
+ 'extent_ranges_unittest.cc',
+ 'extent_writer_unittest.cc',
+ 'fake_prefs.cc',
+ 'fake_system_state.cc',
+ 'file_writer_unittest.cc',
+ 'filesystem_copier_action_unittest.cc',
+ 'http_fetcher_unittest.cc',
+ 'hwid_override_unittest.cc',
+ 'mock_http_fetcher.cc',
+ 'omaha_hash_calculator_unittest.cc',
+ 'omaha_request_action_unittest.cc',
+ 'omaha_request_params_unittest.cc',
+ 'omaha_response_handler_action_unittest.cc',
+ 'p2p_manager_unittest.cc',
+ 'payload_generator/cycle_breaker_unittest.cc',
+ 'payload_generator/delta_diff_generator_unittest.cc',
+ 'payload_generator/extent_mapper_unittest.cc',
+ 'payload_generator/filesystem_iterator_unittest.cc',
+ 'payload_generator/full_update_generator_unittest.cc',
+ 'payload_generator/graph_utils_unittest.cc',
+ 'payload_generator/metadata_unittest.cc',
+ 'payload_generator/tarjan_unittest.cc',
+ 'payload_generator/topological_sort_unittest.cc',
+ 'payload_signer_unittest.cc',
+ 'payload_state_unittest.cc',
+ 'postinstall_runner_action_unittest.cc',
+ 'prefs_unittest.cc',
+ 'simple_key_value_store_unittest.cc',
+ 'subprocess_unittest.cc',
+ 'terminator_unittest.cc',
+ 'test_utils.cc',
+ 'update_attempter_unittest.cc',
+ 'update_check_scheduler_unittest.cc',
+ 'update_manager/boxed_value_unittest.cc',
+ 'update_manager/chromeos_policy_unittest.cc',
+ 'update_manager/evaluation_context_unittest.cc',
+ 'update_manager/event_loop_unittest.cc',
+ 'update_manager/generic_variables_unittest.cc',
+ 'update_manager/prng_unittest.cc',
+ 'update_manager/real_config_provider_unittest.cc',
+ 'update_manager/real_device_policy_provider_unittest.cc',
+ 'update_manager/real_random_provider_unittest.cc',
+ 'update_manager/real_shill_provider_unittest.cc',
+ 'update_manager/real_system_provider_unittest.cc',
+ 'update_manager/real_time_provider_unittest.cc',
+ 'update_manager/real_updater_provider_unittest.cc',
+ 'update_manager/umtest_utils.cc',
+ 'update_manager/update_manager_unittest.cc',
+ 'update_manager/variable_unittest.cc',
+ 'utils_unittest.cc',
+ 'zip_unittest.cc',
+ # Main entry point for runnning tests.
+ 'testrunner.cc',
+ ],
+ },
+ ],
+ }],
+ ],
+}