blob: b91e8839f24e1c007ebb3c7214b15523885aa9fc [file] [log] [blame]
Dan Willemsenf5a904e2018-10-23 01:02:44 -07001//
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
Colin Cross606913a2017-11-14 13:05:37 -080017// AIDL interface between libupdate_engine and framework.jar
18filegroup {
19 name: "libupdate_engine_aidl",
20 srcs: [
21 "binder_bindings/android/os/IUpdateEngine.aidl",
22 "binder_bindings/android/os/IUpdateEngineCallback.aidl",
23 ],
Dan Willemsenf5a904e2018-10-23 01:02:44 -070024 path: "binder_bindings",
25}
26
27cc_defaults {
28 name: "ue_defaults",
29
30 cflags: [
Amin Hassani2e4eda52019-01-07 14:01:17 -080031 "-DBASE_VER=576279",
Dan Willemsenf5a904e2018-10-23 01:02:44 -070032 "-DUSE_CHROME_NETWORK_PROXY=0",
33 "-DUSE_CHROME_KIOSK_APP=0",
Dan Willemsenf5a904e2018-10-23 01:02:44 -070034 "-DUSE_HWID_OVERRIDE=0",
35 "-DUSE_MTD=0",
Dan Willemsenf5a904e2018-10-23 01:02:44 -070036 "-D_FILE_OFFSET_BITS=64",
37 "-D_POSIX_C_SOURCE=199309L",
38 "-Wa,--noexecstack",
39 "-Wall",
40 "-Werror",
41 "-Wextra",
42 "-Wformat=2",
43 "-Wno-psabi",
44 "-Wno-unused-parameter",
45 "-ffunction-sections",
46 "-fstack-protector-strong",
47 "-fvisibility=hidden",
48 ],
49 cppflags: [
50 "-Wnon-virtual-dtor",
51 "-fno-strict-aliasing",
52 ],
53 include_dirs: ["system"],
54 local_include_dirs: ["client_library/include"],
55 static_libs: ["libgtest_prod"],
56 shared_libs: [
57 "libbrillo-stream",
58 "libbrillo",
59 "libchrome",
60 ],
61 ldflags: ["-Wl,--gc-sections"],
62
63 product_variables: {
64 pdk: {
65 enabled: false,
66 },
67 },
68
69 target: {
Sen Jiangb5f631d2018-12-18 16:59:57 -080070 android: {
71 cflags: [
72 "-DUSE_FEC=1",
73 ],
74 },
75 host: {
76 cflags: [
77 "-DUSE_FEC=0",
78 ],
79 },
Dan Willemsenf5a904e2018-10-23 01:02:44 -070080 darwin: {
81 enabled: false,
82 },
83 },
84}
85
86// update_metadata-protos (type: static_library)
87// ========================================================
88// Protobufs.
89cc_defaults {
90 name: "update_metadata-protos_exports",
91
92 shared_libs: ["libprotobuf-cpp-lite"],
93}
94
95cc_library_static {
96 name: "update_metadata-protos",
97 host_supported: true,
98 recovery_available: true,
99
100 srcs: ["update_engine/update_metadata.proto"],
101 cflags: [
102 "-Wall",
103 "-Werror",
104 ],
105 proto: {
106 canonical_path_from_root: false,
107 export_proto_headers: true,
108 },
109}
110
111// libpayload_consumer (type: static_library)
112// ========================================================
113// The payload application component and common dependencies.
114cc_defaults {
115 name: "libpayload_consumer_exports",
116 defaults: ["update_metadata-protos_exports"],
117
118 static_libs: [
119 "update_metadata-protos",
120 "libxz",
121 "libbz",
122 "libbspatch",
123 "libbrotli",
124 "libfec_rs",
125 "libpuffpatch",
126 "libverity_tree",
127 ],
128 shared_libs: [
129 "libbase",
130 "libcrypto",
Sen Jiangb5f631d2018-12-18 16:59:57 -0800131 "libfec",
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700132 ],
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700133}
134
135cc_library_static {
136 name: "libpayload_consumer",
137 defaults: [
138 "ue_defaults",
139 "libpayload_consumer_exports",
140 ],
141 host_supported: true,
142 recovery_available: true,
143
144 srcs: [
145 "common/action_processor.cc",
146 "common/boot_control_stub.cc",
147 "common/clock.cc",
148 "common/constants.cc",
149 "common/cpu_limiter.cc",
150 "common/error_code_utils.cc",
151 "common/file_fetcher.cc",
152 "common/hash_calculator.cc",
153 "common/http_common.cc",
154 "common/http_fetcher.cc",
155 "common/hwid_override.cc",
156 "common/multi_range_http_fetcher.cc",
157 "common/platform_constants_android.cc",
158 "common/prefs.cc",
159 "common/proxy_resolver.cc",
160 "common/subprocess.cc",
161 "common/terminator.cc",
162 "common/utils.cc",
163 "payload_consumer/bzip_extent_writer.cc",
164 "payload_consumer/cached_file_descriptor.cc",
165 "payload_consumer/delta_performer.cc",
166 "payload_consumer/download_action.cc",
167 "payload_consumer/extent_reader.cc",
168 "payload_consumer/extent_writer.cc",
169 "payload_consumer/file_descriptor.cc",
170 "payload_consumer/file_descriptor_utils.cc",
171 "payload_consumer/file_writer.cc",
172 "payload_consumer/filesystem_verifier_action.cc",
173 "payload_consumer/install_plan.cc",
174 "payload_consumer/mount_history.cc",
175 "payload_consumer/payload_constants.cc",
176 "payload_consumer/payload_metadata.cc",
177 "payload_consumer/payload_verifier.cc",
178 "payload_consumer/postinstall_runner_action.cc",
179 "payload_consumer/verity_writer_android.cc",
180 "payload_consumer/xz_extent_writer.cc",
181 "payload_consumer/fec_file_descriptor.cc",
182 ],
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700183}
184
185// libupdate_engine_boot_control (type: static_library)
186// ========================================================
187// A BootControl class implementation using Android's HIDL boot_control HAL.
188cc_defaults {
189 name: "libupdate_engine_boot_control_exports",
190 defaults: ["update_metadata-protos_exports"],
191
192 static_libs: ["update_metadata-protos"],
193 shared_libs: [
194 "libbootloader_message",
195 "libfs_mgr",
196 "libhwbinder",
197 "libhidlbase",
198 "liblp",
199 "libutils",
200 "android.hardware.boot@1.0",
201 ],
202}
203
204cc_library_static {
205 name: "libupdate_engine_boot_control",
206 defaults: [
207 "ue_defaults",
208 "libupdate_engine_boot_control_exports",
209 ],
210 recovery_available: true,
211
212 srcs: [
213 "boot_control_android.cc",
214 "dynamic_partition_control_android.cc",
215 ],
216}
217
218// libupdate_engine_android (type: static_library)
219// ========================================================
220// The main daemon static_library used in Android (non-Brillo). This only has a
221// loop to apply payloads provided by the upper layer via a Binder interface.
222cc_defaults {
223 name: "libupdate_engine_android_exports",
224 defaults: [
225 "ue_defaults",
226 "libpayload_consumer_exports",
227 "libupdate_engine_boot_control_exports",
228 ],
229
230 static_libs: [
231 "libpayload_consumer",
232 "libupdate_engine_boot_control",
233 ],
234 shared_libs: [
235 "libandroid_net",
236 "libbase",
237 "libbinder",
238 "libbinderwrapper",
239 "libbootloader_message",
240 "libbrillo-binder",
241 "libcurl",
242 "libcutils",
243 "liblog",
244 "libmetricslogger",
245 "libssl",
246 "libutils",
247 ],
248}
249
250cc_library_static {
251 name: "libupdate_engine_android",
252 defaults: [
253 "ue_defaults",
254 "libupdate_engine_android_exports",
255 ],
256
257 // TODO(deymo): Remove external/cros/system_api/dbus once the strings are moved
258 // out of the DBus interface.
259 include_dirs: ["external/cros/system_api/dbus"],
260
261 aidl: {
262 local_include_dirs: ["binder_bindings"],
263 export_aidl_headers: true,
264 },
265
266 srcs: [
267 ":libupdate_engine_aidl",
268 "binder_service_android.cc",
269 "certificate_checker.cc",
Amin Hassani565331e2019-06-24 14:11:29 -0700270 "daemon_android.cc",
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700271 "daemon_state_android.cc",
272 "hardware_android.cc",
273 "libcurl_http_fetcher.cc",
274 "metrics_reporter_android.cc",
275 "metrics_utils.cc",
276 "network_selector_android.cc",
277 "update_attempter_android.cc",
278 "update_boot_flags_action.cc",
279 "update_status_utils.cc",
280 ],
281}
282
283// update_engine (type: executable)
284// ========================================================
285// update_engine daemon.
286cc_binary {
287 name: "update_engine",
288 defaults: [
289 "ue_defaults",
290 "libupdate_engine_android_exports",
291 ],
292
293 static_libs: ["libupdate_engine_android"],
294 required: ["cacerts_google"],
295
296 srcs: ["main.cc"],
297 init_rc: ["update_engine.rc"],
298}
299
300// update_engine_sideload (type: executable)
301// ========================================================
302// A binary executable equivalent to update_engine daemon that installs an update
303// from a local file directly instead of running in the background. Used in
304// recovery image.
305cc_binary {
306 name: "update_engine_sideload",
307 defaults: [
308 "ue_defaults",
309 "update_metadata-protos_exports",
310 "libupdate_engine_boot_control_exports",
311 "libpayload_consumer_exports",
312 ],
313 recovery: true,
314
315 cflags: ["-D_UE_SIDELOAD"],
316 // TODO(deymo): Remove external/cros/system_api/dbus once the strings are moved
317 // out of the DBus interface.
318 include_dirs: ["external/cros/system_api/dbus"],
319
320 srcs: [
321 "hardware_android.cc",
322 "metrics_reporter_stub.cc",
323 "metrics_utils.cc",
324 "network_selector_stub.cc",
325 "sideload_main.cc",
326 "update_attempter_android.cc",
327 "update_boot_flags_action.cc",
328 "update_status_utils.cc",
329 ],
330
331 // Use commonly used shared libraries. libprotobuf-cpp-lite.so is filtered out,
332 // as it doesn't look beneficial to be installed separately due to its size. Note
333 // that we explicitly request their recovery variants, so that the expected files
334 // will be used and installed.
335 shared_libs: [
336 "libbase",
337 "liblog",
338 ],
339 static_libs: [
340 "libpayload_consumer",
341 "libupdate_engine_boot_control",
342 "update_metadata-protos",
343
344 // We add the static versions of the shared libraries that are not installed to
345 // recovery image due to size concerns. Need to include all the static library
346 // dependencies of these static libraries.
347 "libevent",
348 "libmodpb64",
349 "libgtest_prod",
350 "libprotobuf-cpp-lite",
351 "libbrillo-stream",
352 "libbrillo",
353 "libchrome",
354 ],
355 target: {
356 recovery: {
357 exclude_shared_libs: [
358 "libprotobuf-cpp-lite",
359 "libhwbinder",
360 "libbrillo-stream",
361 "libbrillo",
362 "libchrome",
363 ],
364 },
365 },
366
367 required: ["android.hardware.boot@1.0-impl-wrapper.recovery"],
368}
369
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700370// update_engine_client (type: executable)
371// ========================================================
372// update_engine console client.
373cc_binary {
374 name: "update_engine_client",
375 defaults: ["ue_defaults"],
376
377 // TODO(deymo): Remove external/cros/system_api/dbus once the strings are moved
378 // out of the DBus interface.
379 include_dirs: ["external/cros/system_api/dbus"],
380
381 shared_libs: [
382 "libbinder",
383 "libbinderwrapper",
384 "libbrillo-binder",
385 "libutils",
386 ],
387
388 aidl: {
389 local_include_dirs: ["binder_bindings"],
390 },
391
392 srcs: [
393 ":libupdate_engine_aidl",
394 "common/error_code_utils.cc",
395 "update_engine_client_android.cc",
396 "update_status_utils.cc",
397 ],
398}
399
400// libpayload_generator (type: static_library)
401// ========================================================
402// server-side code. This is used for delta_generator and unittests but not
403// for any client code.
404cc_defaults {
405 name: "libpayload_generator_exports",
406 defaults: [
407 "libpayload_consumer_exports",
408 "update_metadata-protos_exports",
409 ],
410
411 static_libs: [
412 "libavb",
413 "libbrotli",
414 "libbsdiff",
415 "libdivsufsort",
416 "libdivsufsort64",
417 "liblzma",
418 "libpayload_consumer",
419 "libpuffdiff",
420 "libverity_tree",
421 "update_metadata-protos",
422 ],
423 shared_libs: [
424 "libbase",
425 "libext2fs",
426 ],
427}
428
429cc_library_static {
430 name: "libpayload_generator",
431 defaults: [
432 "ue_defaults",
433 "libpayload_generator_exports",
434 ],
435 host_supported: true,
436
437 srcs: [
438 "payload_generator/ab_generator.cc",
439 "payload_generator/annotated_operation.cc",
440 "payload_generator/blob_file_writer.cc",
441 "payload_generator/block_mapping.cc",
442 "payload_generator/boot_img_filesystem.cc",
443 "payload_generator/bzip.cc",
444 "payload_generator/cycle_breaker.cc",
445 "payload_generator/deflate_utils.cc",
446 "payload_generator/delta_diff_generator.cc",
447 "payload_generator/delta_diff_utils.cc",
448 "payload_generator/ext2_filesystem.cc",
449 "payload_generator/extent_ranges.cc",
450 "payload_generator/extent_utils.cc",
451 "payload_generator/full_update_generator.cc",
452 "payload_generator/graph_types.cc",
453 "payload_generator/graph_utils.cc",
454 "payload_generator/inplace_generator.cc",
455 "payload_generator/mapfile_filesystem.cc",
456 "payload_generator/payload_file.cc",
457 "payload_generator/payload_generation_config_android.cc",
458 "payload_generator/payload_generation_config.cc",
Amin Hassani79821002019-05-06 17:40:49 -0700459 "payload_generator/payload_properties.cc",
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700460 "payload_generator/payload_signer.cc",
461 "payload_generator/raw_filesystem.cc",
462 "payload_generator/squashfs_filesystem.cc",
463 "payload_generator/tarjan.cc",
464 "payload_generator/topological_sort.cc",
465 "payload_generator/xz_android.cc",
466 ],
467}
468
469// delta_generator (type: executable)
470// ========================================================
471// server-side delta generator.
472cc_binary_host {
473 name: "delta_generator",
474 defaults: [
475 "ue_defaults",
476 "libpayload_generator_exports",
477 "libpayload_consumer_exports",
478 ],
479
480 static_libs: [
481 "libavb_host_sysdeps",
482 "libpayload_consumer",
483 "libpayload_generator",
484 ],
485
486 srcs: ["payload_generator/generate_delta_main.cc"],
487}
488
489cc_test {
490 name: "ue_unittest_delta_generator",
491 defaults: [
492 "ue_defaults",
493 "libpayload_generator_exports",
494 "libpayload_consumer_exports",
495 ],
496
497 static_libs: [
498 "libpayload_consumer",
499 "libpayload_generator",
500 ],
501
502 srcs: ["payload_generator/generate_delta_main.cc"],
503
504 gtest: false,
505 stem: "delta_generator",
506 relative_install_path: "update_engine_unittests",
507 no_named_install_directory: true,
508}
509
510// test_http_server (type: executable)
511// ========================================================
512// Test HTTP Server.
513cc_test {
514 name: "test_http_server",
515 defaults: ["ue_defaults"],
516 srcs: [
517 "common/http_common.cc",
518 "test_http_server.cc",
519 ],
520
521 gtest: false,
522 relative_install_path: "update_engine_unittests",
523 no_named_install_directory: true,
524}
525
526// test_subprocess (type: executable)
527// ========================================================
528// Test helper subprocess program.
529cc_test {
530 name: "test_subprocess",
531 defaults: ["ue_defaults"],
532 srcs: ["test_subprocess.cc"],
533
534 gtest: false,
535 relative_install_path: "update_engine_unittests",
536 no_named_install_directory: true,
537}
538
539// Public keys for unittests.
540// ========================================================
541genrule {
542 name: "ue_unittest_keys",
543 cmd: "openssl rsa -in $(location unittest_key.pem) -pubout -out $(location unittest_key.pub.pem) &&" +
544 "openssl rsa -in $(location unittest_key2.pem) -pubout -out $(location unittest_key2.pub.pem)",
545 srcs: [
546 "unittest_key.pem",
547 "unittest_key2.pem",
548 ],
549 out: [
550 "unittest_key.pub.pem",
551 "unittest_key2.pub.pem",
552 ],
553}
554
555// Sample images for unittests.
556// ========================================================
557// Extract sample image from the compressed sample_images.tar.bz2 file used by
558// the unittests.
559genrule {
560 name: "ue_unittest_disk_imgs",
561 cmd: "tar -jxf $(in) -C $(genDir)/gen disk_ext2_1k.img disk_ext2_4k.img disk_ext2_4k_empty.img disk_ext2_unittest.img",
562 srcs: ["sample_images/sample_images.tar.bz2"],
563 out: [
564 "gen/disk_ext2_1k.img",
565 "gen/disk_ext2_4k.img",
566 "gen/disk_ext2_4k_empty.img",
567 "gen/disk_ext2_unittest.img",
568 ],
569}
570
571// update_engine_unittests (type: executable)
572// ========================================================
573// Main unittest file.
574cc_test {
575 name: "update_engine_unittests",
576 defaults: [
577 "ue_defaults",
578 "libpayload_generator_exports",
579 "libupdate_engine_android_exports",
580 ],
581 required: [
582 "test_http_server",
583 "test_subprocess",
584 "ue_unittest_delta_generator",
585 ],
586
587 static_libs: [
588 "libpayload_generator",
589 "libbrillo-test-helpers",
590 "libgmock",
591 "libchrome_test_helpers",
592 "libupdate_engine_android",
593 ],
594 shared_libs: [
595 "libhidltransport",
596 ],
597
598 data: [
599 ":ue_unittest_disk_imgs",
600 ":ue_unittest_keys",
601 "unittest_key.pem",
602 "unittest_key2.pem",
603 "update_engine.conf",
604 ],
605
606 srcs: [
607 "boot_control_android_unittest.cc",
608 "certificate_checker_unittest.cc",
609 "common/action_pipe_unittest.cc",
610 "common/action_processor_unittest.cc",
611 "common/action_unittest.cc",
612 "common/cpu_limiter_unittest.cc",
613 "common/fake_prefs.cc",
614 "common/file_fetcher_unittest.cc",
615 "common/hash_calculator_unittest.cc",
616 "common/http_fetcher_unittest.cc",
617 "common/hwid_override_unittest.cc",
618 "common/mock_http_fetcher.cc",
619 "common/prefs_unittest.cc",
620 "common/proxy_resolver_unittest.cc",
621 "common/subprocess_unittest.cc",
622 "common/terminator_unittest.cc",
623 "common/test_utils.cc",
624 "common/utils_unittest.cc",
Jae Hoon Kim0ae8fe12019-06-26 14:32:50 -0700625 "libcurl_http_fetcher_unittest.cc",
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700626 "payload_consumer/bzip_extent_writer_unittest.cc",
627 "payload_consumer/cached_file_descriptor_unittest.cc",
628 "payload_consumer/delta_performer_integration_test.cc",
629 "payload_consumer/delta_performer_unittest.cc",
630 "payload_consumer/extent_reader_unittest.cc",
631 "payload_consumer/extent_writer_unittest.cc",
632 "payload_consumer/fake_file_descriptor.cc",
633 "payload_consumer/file_descriptor_utils_unittest.cc",
634 "payload_consumer/file_writer_unittest.cc",
635 "payload_consumer/filesystem_verifier_action_unittest.cc",
636 "payload_consumer/postinstall_runner_action_unittest.cc",
637 "payload_consumer/verity_writer_android_unittest.cc",
638 "payload_consumer/xz_extent_writer_unittest.cc",
639 "payload_generator/ab_generator_unittest.cc",
640 "payload_generator/blob_file_writer_unittest.cc",
641 "payload_generator/block_mapping_unittest.cc",
642 "payload_generator/boot_img_filesystem_unittest.cc",
643 "payload_generator/cycle_breaker_unittest.cc",
644 "payload_generator/deflate_utils_unittest.cc",
645 "payload_generator/delta_diff_utils_unittest.cc",
646 "payload_generator/ext2_filesystem_unittest.cc",
647 "payload_generator/extent_ranges_unittest.cc",
648 "payload_generator/extent_utils_unittest.cc",
649 "payload_generator/fake_filesystem.cc",
650 "payload_generator/full_update_generator_unittest.cc",
651 "payload_generator/graph_utils_unittest.cc",
652 "payload_generator/inplace_generator_unittest.cc",
653 "payload_generator/mapfile_filesystem_unittest.cc",
654 "payload_generator/payload_file_unittest.cc",
655 "payload_generator/payload_generation_config_android_unittest.cc",
656 "payload_generator/payload_generation_config_unittest.cc",
Jae Hoon Kim4b6d1262019-06-20 10:41:18 -0700657 "payload_generator/payload_properties_unittest.cc",
Dan Willemsenf5a904e2018-10-23 01:02:44 -0700658 "payload_generator/payload_signer_unittest.cc",
659 "payload_generator/squashfs_filesystem_unittest.cc",
660 "payload_generator/tarjan_unittest.cc",
661 "payload_generator/topological_sort_unittest.cc",
662 "payload_generator/zip_unittest.cc",
663 "testrunner.cc",
664 "update_attempter_android_unittest.cc",
665 ],
666}
667
668// Brillo update payload generation script
669// ========================================================
670cc_prebuilt_binary {
671 name: "brillo_update_payload",
672 device_supported: false,
673 host_supported: true,
674
675 srcs: ["scripts/brillo_update_payload"],
676 required: [
677 "delta_generator",
678 "shflags",
679 "simg2img",
680 ],
681
682 target: {
683 darwin: {
684 enabled: false,
685 },
686 },
Colin Cross606913a2017-11-14 13:05:37 -0800687}