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