xref: /aosp_15_r20/system/update_engine/Android.bp (revision 5a9231315b4521097b8dc3750bc806fcafe0c72f)
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// AIDL interface between libupdate_engine and framework.jar
18package {
19    default_applicable_licenses: ["system_update_engine_license"],
20}
21
22// Added automatically by a large-scale-change
23// See: http://go/android-license-faq
24license {
25    name: "system_update_engine_license",
26    visibility: [":__subpackages__"],
27    license_kinds: [
28        "SPDX-license-identifier-Apache-2.0",
29    ],
30    license_text: [
31        "NOTICE",
32    ],
33}
34
35filegroup {
36    name: "libupdate_engine_aidl",
37    srcs: [
38        "binder_bindings/android/os/IUpdateEngine.aidl",
39        "binder_bindings/android/os/IUpdateEngineCallback.aidl",
40    ],
41    path: "binder_bindings",
42}
43
44cc_defaults {
45    name: "ue_defaults",
46
47    cflags: [
48        "-DBASE_VER=576279",
49        "-DUSE_HWID_OVERRIDE=0",
50        "-D_FILE_OFFSET_BITS=64",
51        "-D_POSIX_C_SOURCE=199309L",
52        "-Wa,--noexecstack",
53        "-Wall",
54        "-Werror",
55        "-Wextra",
56        "-Wformat=2",
57        "-Wno-psabi",
58        "-Wno-unused-parameter",
59        "-ffunction-sections",
60        "-fstack-protector-strong",
61        "-fvisibility=hidden",
62        "-g3",
63    ],
64    cppflags: [
65        "-Wnon-virtual-dtor",
66        "-fno-strict-aliasing",
67    ],
68    include_dirs: ["system"],
69    local_include_dirs: ["client_library/include"],
70    header_libs: ["libgtest_prod_headers"],
71    shared_libs: [
72        "libbrillo-stream",
73        "libbrillo",
74        "libchrome",
75    ],
76    ldflags: ["-Wl,--gc-sections"],
77
78    target: {
79        android: {
80            cflags: [
81                "-DUSE_FEC=1",
82            ],
83            shared_libs: [
84                "libbase",
85            ],
86        },
87        host: {
88            cflags: [
89                "-DUSE_FEC=0",
90            ],
91        },
92        darwin: {
93            enabled: false,
94        },
95    },
96}
97
98// libcow_operation_convert (type: library)
99// ========================================================
100cc_library_static {
101    name: "libpayload_extent_utils",
102    defaults: [
103        "ue_defaults",
104    ],
105    host_supported: true,
106    recovery_available: true,
107    srcs: [
108        "payload_generator/extent_utils.cc",
109    ],
110    static_libs: [
111        "update_metadata-protos",
112    ],
113}
114
115cc_library {
116    name: "libcow_operation_convert",
117    host_supported: true,
118    recovery_available: true,
119    defaults: [
120        "ue_defaults",
121        "update_metadata-protos_exports",
122    ],
123    srcs: [
124        "common/cow_operation_convert.cc",
125    ],
126    static_libs: [
127        "libsnapshot_cow",
128        "update_metadata-protos",
129        "libpayload_extent_ranges",
130        "libpayload_extent_utils",
131        "libbrotli",
132        "libz",
133    ],
134}
135
136// update_metadata-protos (type: static_library)
137// ========================================================
138// Protobufs.
139cc_defaults {
140    name: "update_metadata-protos_exports",
141
142    shared_libs: ["libprotobuf-cpp-lite"],
143}
144
145cc_defaults {
146    name: "update_metadata-protos-defaults",
147    host_supported: true,
148    ramdisk_available: true,
149    recovery_available: true,
150
151    srcs: ["update_engine/update_metadata.proto"],
152    cflags: [
153        "-Wall",
154        "-Werror",
155    ],
156    proto: {
157        canonical_path_from_root: false,
158        export_proto_headers: true,
159    },
160}
161
162cc_library_static {
163    name: "update_metadata-protos",
164    defaults: ["update_metadata-protos-defaults"],
165    proto: {
166        type: "lite",
167    },
168}
169
170cc_library_static {
171    name: "update_metadata-protos-full",
172    defaults: ["update_metadata-protos-defaults"],
173}
174
175python_library_host {
176    name: "update_metadata-protos-python",
177    srcs: ["update_metadata.proto"],
178    proto: {
179        canonical_path_from_root: false,
180    },
181}
182
183// libpayload_consumer (type: static_library)
184// ========================================================
185// The payload application component and common dependencies.
186cc_defaults {
187    name: "libpayload_consumer_exports_defaults",
188    defaults: ["update_metadata-protos_exports"],
189
190    static_libs: [
191        "libxz",
192        "libbz",
193        "libbspatch",
194        "libbrotli",
195        "libfec_rs",
196        "libpuffpatch",
197        "libverity_tree",
198        "libsnapshot_cow",
199        "libbrotli",
200        "libz",
201        "libpayload_extent_ranges",
202        "libpayload_extent_utils",
203        "libcow_operation_convert",
204        "lz4diff-protos",
205        "liblz4patch",
206        "libzstd",
207    ],
208    shared_libs: [
209        "libbase",
210        "libcrypto",
211        "libfec",
212        "liblz4",
213        "libziparchive",
214    ],
215}
216
217cc_defaults {
218    name: "libpayload_consumer_exports",
219    defaults: [
220        "libpayload_consumer_exports_defaults",
221    ],
222    static_libs: ["update_metadata-protos"],
223}
224
225cc_defaults {
226    name: "libpayload_consumer_exports_proto-full",
227    defaults: [
228        "libpayload_consumer_exports_defaults",
229    ],
230    static_libs: ["update_metadata-protos-full"],
231}
232
233cc_defaults {
234    name: "libpayload_consumer_defaults",
235    host_supported: true,
236    recovery_available: true,
237
238    srcs: [
239        "aosp/platform_constants_android.cc",
240        "common/action_processor.cc",
241        "common/boot_control_stub.cc",
242        "common/clock.cc",
243        "common/constants.cc",
244        "common/cpu_limiter.cc",
245        "common/dynamic_partition_control_stub.cc",
246        "common/error_code_utils.cc",
247        "common/file_fetcher.cc",
248        "common/hash_calculator.cc",
249        "common/http_common.cc",
250        "common/http_fetcher.cc",
251        "common/hwid_override.cc",
252        "common/multi_range_http_fetcher.cc",
253        "common/prefs.cc",
254        "common/subprocess.cc",
255        "common/terminator.cc",
256        "common/utils.cc",
257        "payload_consumer/bzip_extent_writer.cc",
258        "payload_consumer/cached_file_descriptor.cc",
259        "payload_consumer/certificate_parser_android.cc",
260        "payload_consumer/cow_writer_file_descriptor.cc",
261        "payload_consumer/delta_performer.cc",
262        "payload_consumer/extent_reader.cc",
263        "payload_consumer/extent_writer.cc",
264        "payload_consumer/file_descriptor.cc",
265        "payload_consumer/file_descriptor_utils.cc",
266        "payload_consumer/file_writer.cc",
267        "payload_consumer/filesystem_verifier_action.cc",
268        "payload_consumer/install_operation_executor.cc",
269        "payload_consumer/install_plan.cc",
270        "payload_consumer/mount_history.cc",
271        "payload_consumer/payload_constants.cc",
272        "payload_consumer/payload_metadata.cc",
273        "payload_consumer/payload_verifier.cc",
274        "payload_consumer/partition_writer.cc",
275        "payload_consumer/partition_writer_factory_android.cc",
276        "payload_consumer/vabc_partition_writer.cc",
277        "payload_consumer/xor_extent_writer.cc",
278        "payload_consumer/block_extent_writer.cc",
279        "payload_consumer/snapshot_extent_writer.cc",
280        "payload_consumer/postinstall_runner_action.cc",
281        "payload_consumer/verified_source_fd.cc",
282        "payload_consumer/verity_writer_android.cc",
283        "payload_consumer/xz_extent_writer.cc",
284        "payload_consumer/fec_file_descriptor.cc",
285        "payload_consumer/partition_update_generator_android.cc",
286        "update_status_utils.cc",
287    ],
288}
289
290cc_library_static {
291    name: "libpayload_consumer",
292    defaults: [
293        "ue_defaults",
294        "libpayload_consumer_exports",
295        "libpayload_consumer_defaults",
296    ],
297}
298
299cc_library_static {
300    name: "libpayload_consumer_proto-full",
301    defaults: [
302        "ue_defaults",
303        "libpayload_consumer_exports_proto-full",
304        "libpayload_consumer_defaults",
305    ],
306}
307
308cc_library_static {
309    name: "libstatslog_ue",
310    generated_sources: ["statslog_ue.cpp"],
311    generated_headers: ["statslog_ue.h"],
312    export_generated_headers: ["statslog_ue.h"],
313    shared_libs: [
314        "libstatssocket",
315    ],
316}
317
318genrule {
319    name: "statslog_ue.h",
320    tools: ["stats-log-api-gen"],
321    cmd: "$(location stats-log-api-gen) --header $(genDir)/statslog_ue.h --module update_engine --namespace chromeos_update_engine,statsd",
322    out: [
323        "statslog_ue.h",
324    ],
325}
326
327genrule {
328    name: "statslog_ue.cpp",
329    tools: ["stats-log-api-gen"],
330    cmd: "$(location stats-log-api-gen) --cpp $(genDir)/statslog_ue.cpp --module update_engine --namespace chromeos_update_engine,statsd --importHeader statslog_ue.h",
331    out: [
332        "statslog_ue.cpp",
333    ],
334}
335
336// libupdate_engine_boot_control (type: static_library)
337// ========================================================
338// A BootControl class implementation using Android's HIDL boot_control HAL.
339cc_defaults {
340    name: "libupdate_engine_boot_control_exports_defaults",
341    defaults: ["update_metadata-protos_exports"],
342
343    static_libs: [
344        "libcutils",
345        "libfs_mgr_binder",
346        "libgsi",
347        "libsnapshot_static",
348        "libstatslog_ue",
349        "libz",
350    ],
351    shared_libs: [
352        "libbootloader_message",
353        "libhidlbase",
354        "liblp",
355        "libutils",
356        "[email protected]",
357        "[email protected]",
358        "[email protected]",
359        "android.hardware.boot-V1-ndk",
360        "libboot_control_client",
361    ],
362    header_libs: [
363        "avb_headers",
364    ],
365    target: {
366        recovery: {
367            static_libs: [
368                "libfs_mgr",
369                "libsnapshot_nobinder",
370            ],
371            exclude_static_libs: [
372                "libfs_mgr_binder",
373                "libsnapshot_static",
374                "libstatslog_ue",
375            ],
376        },
377    },
378}
379
380cc_defaults {
381    name: "libupdate_engine_boot_control_exports",
382    defaults: [
383        "libupdate_engine_boot_control_exports_defaults",
384    ],
385    static_libs: [
386        "libpayload_consumer",
387        "update_metadata-protos",
388    ],
389}
390
391cc_defaults {
392    name: "libupdate_engine_boot_control_exports_proto-full",
393    defaults: [
394        "libupdate_engine_boot_control_exports_defaults",
395    ],
396    static_libs: [
397        "libpayload_consumer_proto-full",
398        "update_metadata-protos-full",
399    ],
400}
401
402cc_defaults {
403    name: "libupdate_engine_boot_control_defaults",
404    defaults: [
405        "ue_defaults",
406    ],
407    recovery_available: true,
408
409    srcs: [
410        "aosp/boot_control_android.cc",
411        "aosp/cleanup_previous_update_action.cc",
412        "aosp/dynamic_partition_control_android.cc",
413        "aosp/dynamic_partition_utils.cc",
414    ],
415}
416
417cc_library_static {
418    name: "libupdate_engine_boot_control",
419    defaults: [
420        "libupdate_engine_boot_control_defaults",
421        "libupdate_engine_boot_control_exports",
422        "libpayload_consumer_exports",
423    ],
424}
425
426cc_library_static {
427    name: "libupdate_engine_boot_control_nostats",
428    cflags: ["-DUE_DISABLE_STATS"],
429    defaults: [
430        "libupdate_engine_boot_control_defaults",
431        "libupdate_engine_boot_control_exports",
432        "libpayload_consumer_exports",
433    ],
434}
435
436cc_library_static {
437    name: "libupdate_engine_boot_control_proto-full",
438    defaults: [
439        "libupdate_engine_boot_control_defaults",
440        "libupdate_engine_boot_control_exports_proto-full",
441        "libpayload_consumer_exports_proto-full",
442    ],
443}
444
445// libupdate_engine_android (type: static_library)
446// ========================================================
447// The main daemon static_library used in Android (non-Brillo). This only has a
448// loop to apply payloads provided by the upper layer via a Binder interface.
449cc_defaults {
450    name: "libupdate_engine_android_exports_defaults",
451    defaults: [
452        "ue_defaults",
453    ],
454
455    static_libs: [
456        "libavb",
457        "libavb_user",
458        "libgkiprops",
459        "libstatslog_ue",
460        "libPlatformProperties",
461    ],
462    shared_libs: [
463        "apex_aidl_interface-cpp",
464        "libandroid_net",
465        "libbase",
466        "libbinder",
467        "libbinderwrapper",
468        "libbootloader_message",
469        "libbrillo-binder",
470        "libcurl",
471        "libcutils",
472        "libupdate_engine_stable-V3-cpp",
473        "liblog",
474        "libssl",
475        "libstatssocket",
476        "libutils",
477    ],
478    whole_static_libs: [
479        "libcom.android.sysprop.apex",
480    ],
481}
482
483cc_defaults {
484    name: "libupdate_engine_android_exports",
485    defaults: [
486        "libupdate_engine_android_exports_defaults",
487        "libupdate_engine_boot_control_exports",
488        "libpayload_consumer_exports",
489    ],
490    static_libs: [
491        "libpayload_consumer",
492        "libupdate_engine_boot_control",
493    ],
494}
495
496cc_defaults {
497    name: "libupdate_engine_android_exports_proto-full",
498    defaults: [
499        "libupdate_engine_android_exports_defaults",
500        "libupdate_engine_boot_control_exports_proto-full",
501        "libpayload_consumer_exports_proto-full",
502    ],
503    static_libs: [
504        "libpayload_consumer_proto-full",
505        "libupdate_engine_boot_control_proto-full",
506    ],
507}
508
509aidl_interface {
510    name: "libupdate_engine_aidl_interface",
511    srcs: [
512        ":libupdate_engine_aidl",
513    ],
514    backend: {
515        cpp: {
516            enabled: false,
517        },
518        java: {
519            enabled: false,
520        },
521        ndk: {
522            enabled: false,
523        },
524        rust: {
525            enabled: true,
526        },
527    },
528    frozen: false,
529    unstable: true,
530}
531
532cc_defaults {
533    name: "libupdate_engine_android_defaults",
534    defaults: [
535        "ue_defaults",
536    ],
537
538    aidl: {
539        local_include_dirs: ["binder_bindings"],
540        export_aidl_headers: true,
541    },
542
543    srcs: [
544        ":libupdate_engine_aidl",
545        "common/system_state.cc",
546        "aosp/apex_handler_android.cc",
547        "aosp/binder_service_android.cc",
548        "aosp/binder_service_stable_android.cc",
549        "aosp/daemon_android.cc",
550        "aosp/daemon_state_android.cc",
551        "aosp/hardware_android.cc",
552        "aosp/logging_android.cc",
553        "aosp/network_selector_android.cc",
554        "aosp/update_attempter_android.cc",
555        "certificate_checker.cc",
556        "download_action.cc",
557        "libcurl_http_fetcher.cc",
558        "metrics_utils.cc",
559        "update_boot_flags_action.cc",
560    ],
561}
562
563cc_library_static {
564    name: "libupdate_engine_android",
565    defaults: [
566        "libupdate_engine_android_defaults",
567        "libupdate_engine_android_exports",
568    ],
569}
570
571cc_library_static {
572    name: "libupdate_engine_android_proto-full",
573    defaults: [
574        "libupdate_engine_android_defaults",
575        "libupdate_engine_android_exports_proto-full",
576    ],
577}
578
579// update_engine (type: executable)
580// ========================================================
581// update_engine daemon.
582cc_binary {
583    name: "update_engine",
584    defaults: [
585        "ue_defaults",
586        "libupdate_engine_android_exports",
587    ],
588
589    static_libs: [
590        "libupdate_engine_android",
591        "libgflags",
592    ],
593    required: [
594        "cacerts",
595        "otacerts",
596    ],
597
598    srcs: [
599        "main.cc",
600        "aosp/metrics_reporter_android.cc",
601    ],
602    init_rc: ["update_engine.rc"],
603}
604
605// update_engine_nostats (type: executable)
606// ========================================================
607// update_engine daemon version without the stats integration.
608cc_binary {
609    name: "update_engine_nostats",
610    defaults: [
611        "ue_defaults",
612        "libupdate_engine_android_exports",
613    ],
614
615    static_libs: [
616        "libupdate_engine_android",
617        "libgflags",
618        "libupdate_engine_boot_control_nostats",
619    ],
620    required: [
621        "cacerts",
622        "otacerts",
623    ],
624
625    exclude_static_libs: [
626        "libstatslog_ue",
627        "libupdate_engine_boot_control",
628    ],
629
630    exclude_shared_libs: [
631        "libstatssocket",
632    ],
633
634    cflags: ["-DUE_DISABLE_STATS"],
635    srcs: [
636        "main.cc",
637        "common/metrics_reporter_stub.cc",
638    ],
639    init_rc: ["update_engine_nostats.rc"],
640}
641
642// update_engine_sideload (type: executable)
643// ========================================================
644// A binary executable equivalent to update_engine daemon that installs an update
645// from a local file directly instead of running in the background. Used in
646// recovery image.
647cc_binary {
648    name: "update_engine_sideload",
649    defaults: [
650        "ue_defaults",
651        "update_metadata-protos_exports",
652        "libupdate_engine_boot_control_exports",
653        "libpayload_consumer_exports",
654    ],
655    recovery: true,
656
657    cflags: [
658        "-D_UE_SIDELOAD",
659        "-DUE_DISABLE_STATS",
660    ],
661    header_libs: ["libgtest_prod_headers"],
662
663    srcs: [
664        "aosp/hardware_android.cc",
665        "aosp/logging_android.cc",
666        "aosp/sideload_main.cc",
667        "aosp/update_attempter_android.cc",
668        "common/metrics_reporter_stub.cc",
669        "common/network_selector_stub.cc",
670        "common/system_state.cc",
671        "download_action.cc",
672        "metrics_utils.cc",
673        "update_boot_flags_action.cc",
674        "update_status_utils.cc",
675    ],
676
677    // Use commonly used shared libraries. libprotobuf-cpp-lite.so is filtered out,
678    // as it doesn't look beneficial to be installed separately due to its size. Note
679    // that we explicitly request their recovery variants, so that the expected files
680    // will be used and installed.
681    shared_libs: [
682        "libbase",
683        "liblog",
684        "liblz4",
685        "libprotobuf-cpp-lite",
686    ],
687    static_libs: [
688        "libpayload_consumer",
689        "libupdate_engine_boot_control",
690        "update_metadata-protos",
691
692        // We add the static versions of the shared libraries that are not installed to
693        // recovery image due to size concerns. Need to include all the static library
694        // dependencies of these static libraries.
695        "libgkiprops",
696        "libevent",
697        "libmodpb64",
698        "libbrillo-stream",
699        "libbrillo",
700        "libchrome",
701    ],
702    target: {
703        recovery: {
704            exclude_shared_libs: [
705                "libbrillo-stream",
706                "libbrillo",
707                "libchrome",
708            ],
709        },
710    },
711
712    required: [
713        "otacerts.recovery",
714    ],
715}
716
717// update_engine_client (type: executable)
718// ========================================================
719// update_engine console client.
720cc_binary {
721    name: "update_engine_client",
722    defaults: ["ue_defaults"],
723
724    shared_libs: [
725        "libbinder",
726        "libbinderwrapper",
727        "libbrillo-binder",
728        "libutils",
729    ],
730
731    aidl: {
732        local_include_dirs: ["binder_bindings"],
733    },
734
735    srcs: [
736        ":libupdate_engine_aidl",
737        "aosp/update_engine_client_android.cc",
738        "common/error_code_utils.cc",
739        "update_status_utils.cc",
740    ],
741}
742
743// libpayload_generator (type: static_library)
744// ========================================================
745// server-side code. This is used for delta_generator and unittests but not
746// for any client code.
747cc_defaults {
748    name: "libpayload_generator_exports",
749    defaults: [
750        "libpayload_consumer_exports",
751        "update_metadata-protos_exports",
752        "erofs-utils_export_defaults",
753    ],
754
755    header_libs: [
756        "bootimg_headers",
757    ],
758    static_libs: [
759        "libavb",
760        "libbrotli",
761        "libbsdiff",
762        "libdivsufsort",
763        "libdivsufsort64",
764        "liblzma",
765        "libpayload_consumer",
766        "libpuffdiff",
767        "libzucchini",
768        "libverity_tree",
769        "update_metadata-protos",
770        "libpayload_extent_utils",
771        "libcow_size_estimator",
772        "liberofs",
773        "libselinux",
774        "lz4diff-protos",
775        "liblz4diff",
776        "libzstd",
777    ],
778    shared_libs: [
779        "libbase",
780        "libext2fs",
781        // LZ4 has to be a shared lib, as we want to override it with
782        // LD_LIBRARY_PRELOAD later
783        "liblz4",
784    ],
785}
786
787cc_library_static {
788    name: "libpayload_extent_ranges",
789    defaults: [
790        "ue_defaults",
791    ],
792    host_supported: true,
793    recovery_available: true,
794    srcs: [
795        "payload_generator/extent_ranges.cc",
796    ],
797    static_libs: [
798        "update_metadata-protos",
799    ],
800}
801
802cc_library_static {
803    name: "libcow_size_estimator",
804    defaults: [
805        "ue_defaults",
806        "update_metadata-protos_exports",
807    ],
808    host_supported: true,
809    recovery_available: true,
810    srcs: [
811        "payload_generator/cow_size_estimator.cc",
812    ],
813    static_libs: [
814        "update_metadata-protos",
815        "libbase",
816        "libsnapshot_cow",
817        "libcow_operation_convert",
818    ],
819}
820
821cc_defaults {
822    name: "liblz4diff_defaults",
823    static_libs: [
824        "lz4diff-protos",
825        "update_metadata-protos",
826        "libssl",
827        "libbsdiff",
828        "libpuffdiff",
829    ],
830    shared_libs: [
831        "liblz4",
832    ],
833}
834
835cc_library_static {
836    name: "liblz4diff",
837    host_supported: true,
838    defaults: [
839        "ue_defaults",
840        "liblz4diff_defaults",
841    ],
842    srcs: [
843        "lz4diff/lz4diff.cc",
844        "lz4diff/lz4diff_compress.cc",
845    ],
846}
847
848cc_library_static {
849    name: "liblz4patch",
850    host_supported: true,
851    recovery_available: true,
852    defaults: ["ue_defaults"],
853    static_libs: [
854        "lz4diff-protos",
855        "update_metadata-protos",
856        "libssl",
857        "libbspatch",
858        "libpuffpatch",
859    ],
860    shared_libs: [
861        "liblz4",
862    ],
863    srcs: [
864        "lz4diff/lz4patch.cc",
865        "lz4diff/lz4diff_compress.cc",
866    ],
867}
868
869cc_binary_host {
870    name: "lz4diff",
871    defaults: [
872        "ue_defaults",
873        "libpayload_generator_exports",
874    ],
875    static_libs: [
876        "libpayload_generator",
877        "liblz4diff",
878        "liblz4patch",
879    ],
880    srcs: [
881        "lz4diff/lz4diff_main.cc",
882    ],
883}
884
885cc_library_static {
886    name: "libpayload_generator",
887    defaults: [
888        "ue_defaults",
889        "libpayload_generator_exports",
890    ],
891    host_supported: true,
892
893    srcs: [
894        "common/system_state.cc",
895        "download_action.cc",
896        "payload_generator/ab_generator.cc",
897        "payload_generator/annotated_operation.cc",
898        "payload_generator/blob_file_writer.cc",
899        "payload_generator/block_mapping.cc",
900        "payload_generator/boot_img_filesystem.cc",
901        "payload_generator/bzip.cc",
902        "payload_generator/deflate_utils.cc",
903        "payload_generator/delta_diff_generator.cc",
904        "payload_generator/delta_diff_utils.cc",
905        "payload_generator/ext2_filesystem.cc",
906        "payload_generator/erofs_filesystem.cc",
907        "payload_generator/extent_ranges.cc",
908        "payload_generator/full_update_generator.cc",
909        "payload_generator/mapfile_filesystem.cc",
910        "payload_generator/merge_sequence_generator.cc",
911        "payload_generator/payload_file.cc",
912        "payload_generator/payload_generation_config_android.cc",
913        "payload_generator/payload_generation_config.cc",
914        "payload_generator/payload_properties.cc",
915        "payload_generator/payload_signer.cc",
916        "payload_generator/raw_filesystem.cc",
917        "payload_generator/squashfs_filesystem.cc",
918        "payload_generator/xz_android.cc",
919    ],
920}
921
922// delta_generator (type: executable)
923// ========================================================
924// server-side delta generator.
925cc_binary_host {
926    name: "delta_generator",
927    defaults: [
928        "ue_defaults",
929        "libpayload_generator_exports",
930        "libpayload_consumer_exports",
931    ],
932
933    static_libs: [
934        "libavb_host_sysdeps",
935        "libpayload_consumer",
936        "libpayload_generator",
937        "libgflags",
938    ],
939
940    srcs: ["payload_generator/generate_delta_main.cc"],
941}
942
943cc_test {
944    host_supported: true,
945    name: "ue_unittest_delta_generator",
946    defaults: [
947        "ue_defaults",
948        "libpayload_generator_exports",
949        "libpayload_consumer_exports",
950    ],
951
952    static_libs: [
953        "libpayload_consumer",
954        "libpayload_generator",
955        "libgflags",
956    ],
957
958    srcs: ["payload_generator/generate_delta_main.cc"],
959
960    gtest: false,
961    stem: "delta_generator",
962}
963
964// test_http_server (type: executable)
965// ========================================================
966// Test HTTP Server.
967cc_test {
968    name: "test_http_server",
969    defaults: ["ue_defaults"],
970    srcs: [
971        "common/http_common.cc",
972        "test_http_server.cc",
973    ],
974
975    gtest: false,
976}
977
978// test_subprocess (type: executable)
979// ========================================================
980// Test helper subprocess program.
981cc_test {
982    name: "test_subprocess",
983    defaults: ["ue_defaults"],
984    srcs: ["test_subprocess.cc"],
985
986    gtest: false,
987}
988
989// Public keys for unittests.
990// ========================================================
991genrule {
992    name: "ue_unittest_keys",
993    cmd: "openssl rsa -in $(location unittest_key.pem) -pubout -out $(location unittest_key.pub.pem) &&" +
994        "openssl rsa -in $(location unittest_key2.pem) -pubout -out $(location unittest_key2.pub.pem) &&" +
995        "openssl rsa -in $(location unittest_key_RSA4096.pem) -pubout -out $(location unittest_key_RSA4096.pub.pem) &&" +
996        "openssl pkey -in $(location unittest_key_EC.pem) -pubout -out $(location unittest_key_EC.pub.pem)",
997    srcs: [
998        "unittest_key.pem",
999        "unittest_key2.pem",
1000        "unittest_key_RSA4096.pem",
1001        "unittest_key_EC.pem",
1002    ],
1003    out: [
1004        "unittest_key.pub.pem",
1005        "unittest_key2.pub.pem",
1006        "unittest_key_RSA4096.pub.pem",
1007        "unittest_key_EC.pub.pem",
1008    ],
1009}
1010
1011// Sample images for unittests.
1012// ========================================================
1013// Extract sample image from the compressed sample_images.tar.bz2 file used by
1014// the unittests.
1015genrule {
1016    name: "ue_unittest_disk_imgs",
1017    cmd: "tar -jxf $(in) -C $(genDir)/gen disk_ext2_1k.img disk_ext2_4k.img disk_ext2_4k_empty.img disk_ext2_unittest.img",
1018    srcs: ["sample_images/sample_images.tar.bz2"],
1019    out: [
1020        "gen/disk_ext2_1k.img",
1021        "gen/disk_ext2_4k.img",
1022        "gen/disk_ext2_4k_empty.img",
1023        "gen/disk_ext2_unittest.img",
1024    ],
1025}
1026
1027genrule {
1028    name: "ue_unittest_erofs_imgs",
1029    cmd: "$(in) $(location mkfs.erofs) $(location gen/erofs_empty.img) && " +
1030        "$(in) $(location mkfs.erofs) $(location gen/erofs.img) $(location delta_generator) && " +
1031        "$(in) $(location mkfs.erofs) $(location gen/erofs_new.img) $(location delta_generator) lz4hc,7",
1032    srcs: ["sample_images/generate_test_erofs_images.sh"],
1033    out: [
1034        "gen/erofs.img",
1035        "gen/erofs_new.img",
1036        "gen/erofs_empty.img",
1037    ],
1038    tools: [
1039        "mkfs.erofs",
1040        "delta_generator",
1041    ],
1042}
1043
1044filegroup {
1045    name: "update_engine_host_unittest_timeout_srcs",
1046    srcs: [
1047        "common/action_processor_unittest.cc",
1048        "common/file_fetcher_unittest.cc",
1049        "payload_generator/delta_diff_utils_unittest.cc",
1050    ],
1051}
1052
1053filegroup {
1054    name: "update_engine_host_unittest_srcs",
1055    srcs: [
1056        "common/action_pipe_unittest.cc",
1057        "common/action_processor_unittest.cc",
1058        "common/action_unittest.cc",
1059        "common/cow_operation_convert_unittest.cc",
1060        "common/cpu_limiter_unittest.cc",
1061        "common/fake_prefs.cc",
1062        "common/file_fetcher_unittest.cc",
1063        "common/hash_calculator_unittest.cc",
1064        "common/hwid_override_unittest.cc",
1065        "common/metrics_reporter_stub.cc",
1066        "common/mock_http_fetcher.cc",
1067        "common/prefs_unittest.cc",
1068        "common/terminator_unittest.cc",
1069        "common/test_utils.cc",
1070        "lz4diff/lz4diff_compress_unittest.cc",
1071        "lz4diff/lz4diff_unittest.cc",
1072        "payload_generator/ab_generator_unittest.cc",
1073        "payload_generator/blob_file_writer_unittest.cc",
1074        "payload_generator/block_mapping_unittest.cc",
1075        "payload_generator/boot_img_filesystem_unittest.cc",
1076        "payload_generator/deflate_utils_unittest.cc",
1077        "payload_generator/delta_diff_utils_unittest.cc",
1078        "payload_generator/erofs_filesystem_unittest.cc",
1079        "payload_generator/ext2_filesystem_unittest.cc",
1080        "payload_generator/extent_ranges_unittest.cc",
1081        "payload_generator/extent_utils_unittest.cc",
1082        "payload_generator/fake_filesystem.cc",
1083        "payload_generator/full_update_generator_unittest.cc",
1084        "payload_generator/mapfile_filesystem_unittest.cc",
1085        "payload_generator/merge_sequence_generator_unittest.cc",
1086        "payload_generator/payload_file_unittest.cc",
1087        "payload_generator/payload_generation_config_android_unittest.cc",
1088        "payload_generator/payload_generation_config_unittest.cc",
1089        "payload_generator/payload_properties_unittest.cc",
1090        "payload_generator/payload_signer_unittest.cc",
1091        "payload_generator/squashfs_filesystem_unittest.cc",
1092        "payload_generator/zip_unittest.cc",
1093        "payload_consumer/verity_writer_android_unittest.cc",
1094        "payload_consumer/xz_extent_writer_unittest.cc",
1095        "testrunner.cc",
1096    ],
1097}
1098
1099cc_test_host {
1100    name: "update_engine_host_unittests",
1101    defaults: [
1102        "ue_defaults",
1103        "libpayload_generator_exports",
1104    ],
1105    strip: {
1106        none: true,
1107    },
1108    cflags: [
1109        "-g3",
1110    ],
1111    tidy_timeout_srcs: [":update_engine_host_unittest_timeout_srcs"],
1112    srcs: [":update_engine_host_unittest_srcs"],
1113    data: [
1114        ":ue_unittest_delta_generator",
1115        ":ue_unittest_disk_imgs",
1116        ":ue_unittest_erofs_imgs",
1117        ":ue_unittest_keys",
1118        "otacerts.zip",
1119        "unittest_key.pem",
1120        "unittest_key2.pem",
1121        "unittest_key_RSA4096.pem",
1122        "unittest_key_EC.pem",
1123        "update_engine.conf",
1124        "testdata/cycle_nodes_product.bin",
1125        "testdata/cycle_nodes_product_no_xor.bin",
1126    ],
1127    static_libs: [
1128        "libgmock",
1129        "libpayload_generator",
1130    ],
1131}
1132
1133// update_engine_unittests (type: executable)
1134// ========================================================
1135// Main unittest file.
1136cc_test {
1137    name: "update_engine_http_unittests",
1138    defaults: [
1139        "ue_defaults",
1140        "liblz4diff_defaults",
1141        "update_metadata-protos_exports",
1142    ],
1143    require_root: true,
1144    static_libs: [
1145        "libbase",
1146        "libbrillo-test-helpers",
1147        "libchrome_test_helpers",
1148        "libcurl",
1149        "libcutils",
1150        "libdm",
1151        "libgmock",
1152        "libz",
1153        "libzstd",
1154    ],
1155    shared_libs: [
1156        "libssl",
1157        "libcrypto",
1158        "libziparchive",
1159        "liblog",
1160    ],
1161
1162    data: [
1163        ":test_http_server",
1164        ":test_subprocess",
1165        ":ue_unittest_keys",
1166        "otacerts.zip",
1167        "unittest_key.pem",
1168        "unittest_key2.pem",
1169        "unittest_key_RSA4096.pem",
1170        "unittest_key_EC.pem",
1171    ],
1172
1173    // We cannot use the default generated AndroidTest.xml because of the use of helper modules
1174    // (i.e. test_http_server, test_subprocess, ue_unittest_delta_generator).
1175    // test_config: "test_config.xml",
1176    test_suites: ["device-tests"],
1177
1178    srcs: [
1179        "aosp/platform_constants_android.cc",
1180        "certificate_checker.cc",
1181        "common/action_processor.cc",
1182        "common/boot_control_stub.cc",
1183        "common/error_code_utils.cc",
1184        "common/file_fetcher.cc",
1185        "common/hash_calculator.cc",
1186        "common/http_fetcher.cc",
1187        "common/multi_range_http_fetcher.cc",
1188        "common/http_common.cc",
1189        "common/subprocess.cc",
1190        "common/test_utils.cc",
1191        "common/utils.cc",
1192        "libcurl_http_fetcher.cc",
1193        "payload_consumer/certificate_parser_android.cc",
1194        "payload_consumer/payload_verifier.cc",
1195        "payload_generator/payload_signer.cc",
1196        "update_status_utils.cc",
1197        "certificate_checker_unittest.cc",
1198        "common/http_fetcher_unittest.cc",
1199        "common/mock_http_fetcher.cc",
1200        "common/subprocess_unittest.cc",
1201        "libcurl_http_fetcher_unittest.cc",
1202        "payload_consumer/certificate_parser_android_unittest.cc",
1203        "update_status_utils_unittest.cc",
1204    ],
1205}
1206
1207// update_engine_unittests (type: executable)
1208// ========================================================
1209// Main unittest file.
1210cc_test {
1211    name: "update_engine_unittests",
1212    defaults: [
1213        "ue_defaults",
1214        "libpayload_generator_exports",
1215        "libupdate_engine_android_exports",
1216    ],
1217
1218    static_libs: [
1219        "libpayload_generator",
1220        "libbrillo-test-helpers",
1221        "libgmock",
1222        "libchrome_test_helpers",
1223        "libupdate_engine_android",
1224        "libdm",
1225    ],
1226
1227    header_libs: [
1228        "libstorage_literals_headers",
1229    ],
1230
1231    data: [
1232        ":ue_unittest_delta_generator",
1233        ":ue_unittest_disk_imgs",
1234        ":ue_unittest_erofs_imgs",
1235        ":ue_unittest_keys",
1236        "otacerts.zip",
1237        "unittest_key.pem",
1238        "unittest_key2.pem",
1239        "unittest_key_RSA4096.pem",
1240        "unittest_key_EC.pem",
1241        "update_engine.conf",
1242        "testdata/cycle_nodes_product.bin",
1243        "testdata/cycle_nodes_product_no_xor.bin",
1244    ],
1245
1246    // We cannot use the default generated AndroidTest.xml because of the use of helper modules
1247    // (i.e. test_http_server, test_subprocess, ue_unittest_delta_generator).
1248    test_config: "test_config.xml",
1249    test_suites: ["device-tests"],
1250
1251    tidy_timeout_srcs: [
1252        ":update_engine_host_unittest_timeout_srcs",
1253        "aosp/dynamic_partition_control_android_unittest.cc",
1254        "common/http_fetcher_unittest.cc",
1255        "payload_consumer/delta_performer_integration_test.cc",
1256        "payload_consumer/delta_performer_unittest.cc",
1257    ],
1258    srcs: [
1259        ":update_engine_host_unittest_srcs",
1260        "aosp/apex_handler_android_unittest.cc",
1261        "aosp/cleanup_previous_update_action_unittest.cc",
1262        "aosp/dynamic_partition_control_android_unittest.cc",
1263        "aosp/update_attempter_android_integration_test.cc",
1264        "aosp/update_attempter_android_unittest.cc",
1265        "common/utils_unittest.cc",
1266        "download_action_android_unittest.cc",
1267        "payload_consumer/block_extent_writer_unittest.cc",
1268        "payload_consumer/bzip_extent_writer_unittest.cc",
1269        "payload_consumer/cached_file_descriptor_unittest.cc",
1270        "payload_consumer/cow_writer_file_descriptor_unittest.cc",
1271        "payload_consumer/delta_performer_integration_test.cc",
1272        "payload_consumer/delta_performer_unittest.cc",
1273        "payload_consumer/extent_reader_unittest.cc",
1274        "payload_consumer/extent_writer_unittest.cc",
1275        "payload_consumer/extent_map_unittest.cc",
1276        "payload_consumer/fake_file_descriptor.cc",
1277        "payload_consumer/file_descriptor_utils_unittest.cc",
1278        "payload_consumer/file_writer_unittest.cc",
1279        "payload_consumer/filesystem_verifier_action_unittest.cc",
1280        "payload_consumer/install_plan_unittest.cc",
1281        "payload_consumer/install_operation_executor_unittest.cc",
1282        "payload_consumer/partition_update_generator_android_unittest.cc",
1283        "payload_consumer/partition_writer_unittest.cc",
1284        "payload_consumer/postinstall_runner_action_unittest.cc",
1285        "payload_consumer/snapshot_extent_writer_unittest.cc",
1286        "payload_consumer/vabc_partition_writer_unittest.cc",
1287        "payload_consumer/xor_extent_writer_unittest.cc",
1288    ],
1289}
1290
1291// Brillo update payload generation script
1292// ========================================================
1293sh_binary {
1294    name: "brillo_update_payload",
1295    device_supported: false,
1296    host_supported: true,
1297
1298    src: "scripts/brillo_update_payload",
1299    required: [
1300        "delta_generator",
1301        "shflags",
1302        "simg2img",
1303    ],
1304
1305    target: {
1306        darwin: {
1307            enabled: false,
1308        },
1309    },
1310}
1311
1312// update_engine header library
1313cc_library_headers {
1314    name: "libupdate_engine_headers",
1315
1316    // This header library is available to core and product modules.
1317    product_available: true,
1318
1319    export_include_dirs: ["."],
1320    apex_available: [
1321        "com.android.gki.*",
1322        "//apex_available:platform",
1323    ],
1324    host_supported: true,
1325    recovery_available: true,
1326    ramdisk_available: true,
1327    vendor_ramdisk_available: true,
1328
1329    target: {
1330        darwin: {
1331            enabled: false,
1332        },
1333    },
1334}
1335
1336cc_binary_host {
1337    name: "cow_converter",
1338    defaults: [
1339        "ue_defaults",
1340        "libpayload_consumer_exports",
1341    ],
1342    srcs: [
1343        "aosp/cow_converter.cc",
1344    ],
1345    static_libs: [
1346        "liblog",
1347        "libbrotli",
1348        "libbase",
1349        "libcow_operation_convert",
1350        "libcow_size_estimator",
1351        "libgflags",
1352        "libpayload_consumer",
1353        "libpayload_extent_ranges",
1354        "libpayload_extent_utils",
1355        "libsnapshot_cow",
1356        "libz",
1357        "update_metadata-protos",
1358    ],
1359}
1360
1361cc_library_static {
1362    name: "lz4diff-protos",
1363    host_supported: true,
1364    ramdisk_available: true,
1365    recovery_available: true,
1366
1367    srcs: ["lz4diff/lz4diff.proto"],
1368    cflags: [
1369        "-Wall",
1370        "-Werror",
1371    ],
1372    proto: {
1373        canonical_path_from_root: false,
1374        export_proto_headers: true,
1375    },
1376}
1377
1378cc_binary_host {
1379    name: "ota_extractor",
1380    defaults: [
1381        "ue_defaults",
1382        "libpayload_consumer_exports",
1383    ],
1384    srcs: [
1385        "aosp/ota_extractor.cc",
1386    ],
1387    static_libs: [
1388        "liblog",
1389        "libbrotli",
1390        "libbase",
1391        "libpayload_consumer",
1392        "libpayload_extent_ranges",
1393        "libpayload_extent_utils",
1394        "libz",
1395        "libgflags",
1396        "update_metadata-protos",
1397    ],
1398}
1399
1400cc_binary_host {
1401    name: "map_file_generator",
1402    defaults: [
1403        "ue_defaults",
1404        "libpayload_generator_exports",
1405    ],
1406    srcs: [
1407        "aosp/map_file_generator.cc",
1408    ],
1409    static_libs: [
1410        "liblog",
1411        "libbase",
1412        "libpayload_generator",
1413        "libpayload_extent_ranges",
1414        "libpayload_extent_utils",
1415        "libgflags",
1416        "libsparse",
1417        "update_metadata-protos",
1418    ],
1419    required: [
1420        "unsquashfs",
1421    ],
1422}
1423
1424cc_fuzz {
1425    name: "update_engine_service_fuzzer",
1426    defaults: [
1427        "ue_defaults",
1428        "libupdate_engine_android_exports",
1429        "service_fuzzer_defaults",
1430        "fuzzer_disable_leaks",
1431    ],
1432    static_libs: [
1433        "libupdate_engine_android",
1434        "libgflags",
1435    ],
1436    srcs: [
1437        "fuzzers/update_engine_service_fuzzer.cpp",
1438        "aosp/metrics_reporter_android.cc",
1439    ],
1440    fuzz_config: {
1441        triage_assignee: "[email protected]",
1442        cc: [
1443            "[email protected]",
1444            "[email protected]",
1445        ],
1446    },
1447}
1448