// // 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_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_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", "libcgrouprc_format", "libprotobuf-cpp-lite", "libpropertyinfoserializer", "libpropertyinfoparser", ], shared_libs: [ "libbase", "libbinder", "libbootloader_message", "libcutils", "libcrypto", "libdl", "libext4_utils", "libfs_mgr", "libfscrypt", "libgsi", "libhidl-gen-utils", "libkeyutils", "liblog", "liblogwrap", "liblp", "libprocessgroup", "libprocessgroup_setup", "libselinux", "libutils", ], bootstrap: true, } 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", "descriptors.cpp", "devices.cpp", "epoll.cpp", "firmware_handler.cpp", "first_stage_init.cpp", "first_stage_mount.cpp", "import_parser.cpp", "init.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", "selinux.cpp", "service.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"], }, }, } 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"], }, }, ldflags: ["-Wl,--rpath,/system/${LIB}/bootstrap"], } // Tests // ------------------------------------------------------------------------------ cc_test { name: "init_tests", defaults: ["init_defaults"], compile_multilib: "first", srcs: [ "devices_test.cpp", "init_test.cpp", "keychords_test.cpp", "persistent_properties_test.cpp", "property_service_test.cpp", "property_type_test.cpp", "result_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: ["device-tests"], } cc_benchmark { name: "init_benchmarks", defaults: ["init_defaults"], srcs: [ "subcontext_benchmark.cpp", ], static_libs: ["libinit"], } // Host Verifier // ------------------------------------------------------------------------------ genrule { name: "generated_stub_builtin_function_map", out: ["generated_stub_builtin_function_map.h"], srcs: ["builtins.cpp"], cmd: "sed -n '/Builtin-function-map start/{:a;n;/Builtin-function-map end/q;p;ba}' $(in) | sed -e 's/do_[^}]*/do_stub/g' > $(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: [ "libprotobuf-cpp-lite", "libhidl-gen-utils", "libprocessgroup", "liblog", "libcutils", ], srcs: [ "action.cpp", "action_manager.cpp", "action_parser.cpp", "capabilities.cpp", "descriptors.cpp", "epoll.cpp", "keychords.cpp", "import_parser.cpp", "host_import_parser.cpp", "host_init_verifier.cpp", "host_init_stubs.cpp", "parser.cpp", "rlimit_parser.cpp", "tokenizer.cpp", "service.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, }, }, } subdirs = ["*"]