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