| // | 
 | // Copyright (C) 2017 The Android Open Source Project | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //      http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 | // | 
 |  | 
 | cc_defaults { | 
 |     name: "init_defaults", | 
 |     cpp_std: "experimental", | 
 |     sanitize: { | 
 |         misc_undefined: ["signed-integer-overflow"], | 
 |     }, | 
 |     cflags: [ | 
 |         "-DLOG_UEVENTS=0", | 
 |         "-Wall", | 
 |         "-Wextra", | 
 |         "-Wno-unused-parameter", | 
 |         "-Werror", | 
 |         "-DALLOW_FIRST_STAGE_CONSOLE=0", | 
 |         "-DALLOW_LOCAL_PROP_OVERRIDE=0", | 
 |         "-DALLOW_PERMISSIVE_SELINUX=0", | 
 |         "-DREBOOT_BOOTLOADER_ON_PANIC=0", | 
 |         "-DWORLD_WRITABLE_KMSG=0", | 
 |         "-DDUMP_ON_UMOUNT_FAILURE=0", | 
 |         "-DSHUTDOWN_ZERO_TIMEOUT=0", | 
 |     ], | 
 |     product_variables: { | 
 |         debuggable: { | 
 |             cppflags: [ | 
 |                 "-UALLOW_FIRST_STAGE_CONSOLE", | 
 |                 "-DALLOW_FIRST_STAGE_CONSOLE=1", | 
 |                 "-UALLOW_LOCAL_PROP_OVERRIDE", | 
 |                 "-DALLOW_LOCAL_PROP_OVERRIDE=1", | 
 |                 "-UALLOW_PERMISSIVE_SELINUX", | 
 |                 "-DALLOW_PERMISSIVE_SELINUX=1", | 
 |                 "-UREBOOT_BOOTLOADER_ON_PANIC", | 
 |                 "-DREBOOT_BOOTLOADER_ON_PANIC=1", | 
 |                 "-UWORLD_WRITABLE_KMSG", | 
 |                 "-DWORLD_WRITABLE_KMSG=1", | 
 |                 "-UDUMP_ON_UMOUNT_FAILURE", | 
 |                 "-DDUMP_ON_UMOUNT_FAILURE=1", | 
 |             ], | 
 |         }, | 
 |         eng: { | 
 |             cppflags: [ | 
 |                 "-USHUTDOWN_ZERO_TIMEOUT", | 
 |                 "-DSHUTDOWN_ZERO_TIMEOUT=1", | 
 |             ], | 
 |         }, | 
 |         uml: { | 
 |             cppflags: ["-DUSER_MODE_LINUX"], | 
 |         }, | 
 |     }, | 
 |     static_libs: [ | 
 |         "libseccomp_policy", | 
 |         "libavb", | 
 |         "libc++fs", | 
 |         "libcgrouprc_format", | 
 |         "libmodprobe", | 
 |         "libprotobuf-cpp-lite", | 
 |         "libpropertyinfoserializer", | 
 |         "libpropertyinfoparser", | 
 |         "libsnapshot_nobinder", | 
 |     ], | 
 |     shared_libs: [ | 
 |         "libbacktrace", | 
 |         "libbase", | 
 |         "libbootloader_message", | 
 |         "libcutils", | 
 |         "libcrypto", | 
 |         "libdl", | 
 |         "libext4_utils", | 
 |         "libfs_mgr", | 
 |         "libfscrypt", | 
 |         "libgsi", | 
 |         "libhidl-gen-utils", | 
 |         "libjsoncpp", | 
 |         "libkeyutils", | 
 |         "liblog", | 
 |         "liblogwrap", | 
 |         "liblp", | 
 |         "libprocessgroup", | 
 |         "libprocessgroup_setup", | 
 |         "libselinux", | 
 |         "libutils", | 
 |     ], | 
 |     bootstrap: true, | 
 |     visibility: [":__subpackages__"], | 
 | } | 
 |  | 
 | cc_library_static { | 
 |     name: "libinit", | 
 |     recovery_available: true, | 
 |     defaults: [ | 
 |         "init_defaults", | 
 |         "selinux_policy_version", | 
 |     ], | 
 |     srcs: [ | 
 |         "action.cpp", | 
 |         "action_manager.cpp", | 
 |         "action_parser.cpp", | 
 |         "boringssl_self_test.cpp", | 
 |         "bootchart.cpp", | 
 |         "builtins.cpp", | 
 |         "capabilities.cpp", | 
 |         "devices.cpp", | 
 |         "epoll.cpp", | 
 |         "firmware_handler.cpp", | 
 |         "first_stage_init.cpp", | 
 |         "first_stage_mount.cpp", | 
 |         "fscrypt_init_extensions.cpp", | 
 |         "import_parser.cpp", | 
 |         "init.cpp", | 
 |         "interface_utils.cpp", | 
 |         "keychords.cpp", | 
 |         "modalias_handler.cpp", | 
 |         "mount_handler.cpp", | 
 |         "mount_namespace.cpp", | 
 |         "parser.cpp", | 
 |         "persistent_properties.cpp", | 
 |         "persistent_properties.proto", | 
 |         "property_service.cpp", | 
 |         "property_type.cpp", | 
 |         "reboot.cpp", | 
 |         "reboot_utils.cpp", | 
 |         "security.cpp", | 
 |         "selabel.cpp", | 
 |         "selinux.cpp", | 
 |         "service.cpp", | 
 |         "service_list.cpp", | 
 |         "service_parser.cpp", | 
 |         "service_utils.cpp", | 
 |         "sigchld_handler.cpp", | 
 |         "subcontext.cpp", | 
 |         "subcontext.proto", | 
 |         "switch_root.cpp", | 
 |         "rlimit_parser.cpp", | 
 |         "tokenizer.cpp", | 
 |         "uevent_listener.cpp", | 
 |         "ueventd.cpp", | 
 |         "ueventd_parser.cpp", | 
 |         "util.cpp", | 
 |     ], | 
 |     whole_static_libs: [ | 
 |         "libcap", | 
 |         "com.android.sysprop.apex", | 
 |     ], | 
 |     header_libs: ["bootimg_headers"], | 
 |     proto: { | 
 |         type: "lite", | 
 |         export_proto_headers: true, | 
 |     }, | 
 |  | 
 |     target: { | 
 |         recovery: { | 
 |             cflags: ["-DRECOVERY"], | 
 |             exclude_shared_libs: [ | 
 |                 "libbinder", | 
 |                 "libutils", | 
 |             ], | 
 |         }, | 
 |     }, | 
 | } | 
 |  | 
 | phony { | 
 |     name: "init", | 
 |     required: [ | 
 |         "init_second_stage", | 
 |     ], | 
 | } | 
 |  | 
 | cc_binary { | 
 |     name: "init_second_stage", | 
 |     recovery_available: true, | 
 |     stem: "init", | 
 |     defaults: ["init_defaults"], | 
 |     static_libs: ["libinit"], | 
 |     required: [ | 
 |         "e2fsdroid", | 
 |         "mke2fs", | 
 |         "sload_f2fs", | 
 |         "make_f2fs", | 
 |     ], | 
 |     srcs: ["main.cpp"], | 
 |     symlinks: ["ueventd"], | 
 |     target: { | 
 |         recovery: { | 
 |             cflags: ["-DRECOVERY"], | 
 |             exclude_shared_libs: [ | 
 |                 "libbinder", | 
 |                 "libutils", | 
 |             ], | 
 |         }, | 
 |     }, | 
 | } | 
 |  | 
 | // Tests | 
 | // ------------------------------------------------------------------------------ | 
 |  | 
 | cc_test { | 
 |     name: "CtsInitTestCases", | 
 |     defaults: ["init_defaults"], | 
 |     require_root: true, | 
 |  | 
 |     compile_multilib: "both", | 
 |     multilib: { | 
 |         lib32: { | 
 |             suffix: "32", | 
 |         }, | 
 |         lib64: { | 
 |             suffix: "64", | 
 |         }, | 
 |     }, | 
 |  | 
 |     srcs: [ | 
 |         "devices_test.cpp", | 
 |         "init_test.cpp", | 
 |         "keychords_test.cpp", | 
 |         "persistent_properties_test.cpp", | 
 |         "property_service_test.cpp", | 
 |         "property_type_test.cpp", | 
 |         "rlimit_parser_test.cpp", | 
 |         "service_test.cpp", | 
 |         "subcontext_test.cpp", | 
 |         "tokenizer_test.cpp", | 
 |         "ueventd_parser_test.cpp", | 
 |         "ueventd_test.cpp", | 
 |         "util_test.cpp", | 
 |     ], | 
 |     static_libs: ["libinit"], | 
 |  | 
 |     test_suites: [ | 
 |         "cts", | 
 |         "device-tests", | 
 |         "vts", | 
 |     ], | 
 | } | 
 |  | 
 | cc_benchmark { | 
 |     name: "init_benchmarks", | 
 |     defaults: ["init_defaults"], | 
 |     srcs: [ | 
 |         "subcontext_benchmark.cpp", | 
 |     ], | 
 |     static_libs: ["libinit"], | 
 | } | 
 |  | 
 | // Host Verifier | 
 | // ------------------------------------------------------------------------------ | 
 |  | 
 | genrule { | 
 |     name: "generated_stub_builtin_function_map", | 
 |     tool_files: ["host_builtin_map.py"], | 
 |     out: ["generated_stub_builtin_function_map.h"], | 
 |     srcs: [ | 
 |         "builtins.cpp", | 
 |         "check_builtins.cpp", | 
 |     ], | 
 |     cmd: "$(location host_builtin_map.py) --builtins $(location builtins.cpp) --check_builtins $(location check_builtins.cpp) > $(out)", | 
 | } | 
 |  | 
 | cc_binary { | 
 |     name: "host_init_verifier", | 
 |     host_supported: true, | 
 |     cpp_std: "experimental", | 
 |     cflags: [ | 
 |         "-Wall", | 
 |         "-Wextra", | 
 |         "-Wno-unused-parameter", | 
 |         "-Werror", | 
 |     ], | 
 |     static_libs: [ | 
 |         "libbase", | 
 |         "libselinux", | 
 |     ], | 
 |     whole_static_libs: ["libcap"], | 
 |     shared_libs: [ | 
 |         "libcutils", | 
 |         "libhidl-gen-utils", | 
 |         "liblog", | 
 |         "libprocessgroup", | 
 |         "libprotobuf-cpp-lite", | 
 |     ], | 
 |     header_libs: [ | 
 |         "libjsoncpp_headers", | 
 |     ], | 
 |     srcs: [ | 
 |         "action.cpp", | 
 |         "action_manager.cpp", | 
 |         "action_parser.cpp", | 
 |         "capabilities.cpp", | 
 |         "check_builtins.cpp", | 
 |         "epoll.cpp", | 
 |         "keychords.cpp", | 
 |         "import_parser.cpp", | 
 |         "interface_utils.cpp", | 
 |         "host_import_parser.cpp", | 
 |         "host_init_verifier.cpp", | 
 |         "parser.cpp", | 
 |         "rlimit_parser.cpp", | 
 |         "tokenizer.cpp", | 
 |         "service.cpp", | 
 |         "service_list.cpp", | 
 |         "service_parser.cpp", | 
 |         "service_utils.cpp", | 
 |         "subcontext.cpp", | 
 |         "subcontext.proto", | 
 |         "util.cpp", | 
 |     ], | 
 |     proto: { | 
 |         type: "lite", | 
 |     }, | 
 |     generated_headers: [ | 
 |         "generated_stub_builtin_function_map", | 
 |         "generated_android_ids", | 
 |     ], | 
 |     target: { | 
 |         android: { | 
 |             enabled: false, | 
 |         }, | 
 |         darwin: { | 
 |             enabled: false, | 
 |         }, | 
 |     }, | 
 | } |