| // |
| // 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", |
| "libc++fs", |
| "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 = ["*"] |