| // |
| // 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. |
| // |
| |
| package { |
| default_applicable_licenses: ["system_core_init_license"], |
| } |
| |
| // Added automatically by a large-scale-change |
| // See: http://go/android-license-faq |
| license { |
| name: "system_core_init_license", |
| visibility: [":__subpackages__"], |
| license_kinds: [ |
| "SPDX-license-identifier-Apache-2.0", |
| ], |
| license_text: [ |
| "NOTICE", |
| ], |
| } |
| |
| init_common_sources = [ |
| "action.cpp", |
| "action_manager.cpp", |
| "action_parser.cpp", |
| "capabilities.cpp", |
| "epoll.cpp", |
| "import_parser.cpp", |
| "interface_utils.cpp", |
| "interprocess_fifo.cpp", |
| "keychords.cpp", |
| "parser.cpp", |
| "property_type.cpp", |
| "rlimit_parser.cpp", |
| "service.cpp", |
| "service_list.cpp", |
| "service_parser.cpp", |
| "service_utils.cpp", |
| "subcontext.cpp", |
| "subcontext.proto", |
| "tokenizer.cpp", |
| "util.cpp", |
| ] |
| init_device_sources = [ |
| "apex_init_util.cpp", |
| "block_dev_initializer.cpp", |
| "bootchart.cpp", |
| "builtins.cpp", |
| "devices.cpp", |
| "firmware_handler.cpp", |
| "first_stage_console.cpp", |
| "first_stage_init.cpp", |
| "first_stage_mount.cpp", |
| "fscrypt_init_extensions.cpp", |
| "init.cpp", |
| "lmkd_service.cpp", |
| "modalias_handler.cpp", |
| "mount_handler.cpp", |
| "mount_namespace.cpp", |
| "persistent_properties.cpp", |
| "persistent_properties.proto", |
| "property_service.cpp", |
| "property_service.proto", |
| "reboot.cpp", |
| "reboot_utils.cpp", |
| "security.cpp", |
| "selabel.cpp", |
| "selinux.cpp", |
| "sigchld_handler.cpp", |
| "snapuserd_transition.cpp", |
| "switch_root.cpp", |
| "uevent_listener.cpp", |
| "ueventd.cpp", |
| "ueventd_parser.cpp", |
| ] |
| init_host_sources = [ |
| "check_builtins.cpp", |
| "host_import_parser.cpp", |
| "host_init_verifier.cpp", |
| ] |
| |
| cc_library_static { |
| name: "vendor_init", |
| recovery_available: true, |
| srcs: [ |
| "vendor_init.cpp", |
| ], |
| } |
| |
| soong_config_module_type { |
| name: "libinit_cc_defaults", |
| module_type: "cc_defaults", |
| config_namespace: "ANDROID", |
| bool_variables: [ |
| "PRODUCT_INSTALL_DEBUG_POLICY_TO_SYSTEM_EXT", |
| ], |
| properties: [ |
| "cflags", |
| ], |
| } |
| |
| libinit_cc_defaults { |
| name: "init_defaults", |
| sanitize: { |
| misc_undefined: ["signed-integer-overflow"], |
| }, |
| cflags: [ |
| "-DALLOW_FIRST_STAGE_CONSOLE=0", |
| "-DALLOW_LOCAL_PROP_OVERRIDE=0", |
| "-DALLOW_PERMISSIVE_SELINUX=0", |
| "-DANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION", |
| "-DDUMP_ON_UMOUNT_FAILURE=0", |
| "-DINIT_FULL_SOURCES", |
| "-DINSTALL_DEBUG_POLICY_TO_SYSTEM_EXT=0", |
| "-DLOG_UEVENTS=0", |
| "-DREBOOT_BOOTLOADER_ON_PANIC=0", |
| "-DSHUTDOWN_ZERO_TIMEOUT=0", |
| "-DWORLD_WRITABLE_KMSG=0", |
| "-Wall", |
| "-Werror", |
| "-Wextra", |
| "-Wno-unused-parameter", |
| "-Wthread-safety", |
| ], |
| 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"], |
| }, |
| }, |
| soong_config_variables: { |
| PRODUCT_INSTALL_DEBUG_POLICY_TO_SYSTEM_EXT: { |
| cflags: [ |
| "-UINSTALL_DEBUG_POLICY_TO_SYSTEM_EXT", |
| "-DINSTALL_DEBUG_POLICY_TO_SYSTEM_EXT=1", |
| ], |
| }, |
| }, |
| static_libs: [ |
| "libavb", |
| "libbootloader_message", |
| "libc++fs", |
| "libcgrouprc_format", |
| "liblmkd_utils", |
| "liblz4", |
| "libzstd", |
| "libmodprobe", |
| "libprocinfo", |
| "libprotobuf-cpp-lite", |
| "libpropertyinfoserializer", |
| "libpropertyinfoparser", |
| "libsnapshot_cow", |
| "libsnapshot_init", |
| "libxml2", |
| "lib_apex_manifest_proto_lite", |
| "update_metadata-protos", |
| ], |
| shared_libs: [ |
| "libbase", |
| "libcutils", |
| "libdl", |
| "libext4_utils", |
| "libfs_mgr", |
| "libgsi", |
| "libhidl-gen-utils", |
| "libkeyutils", |
| "liblog", |
| "liblogwrap", |
| "liblp", |
| "libprocessgroup", |
| "libprocessgroup_setup", |
| "libselinux", |
| "libunwindstack", |
| "libutils", |
| ], |
| header_libs: ["bionic_libc_platform_headers"], |
| bootstrap: true, |
| visibility: [":__subpackages__"], |
| } |
| |
| cc_library_headers { |
| name: "libinit_headers", |
| export_include_dirs: ["."], |
| visibility: [":__subpackages__"], |
| } |
| |
| cc_defaults { |
| name: "libinit_defaults", |
| recovery_available: true, |
| defaults: [ |
| "init_defaults", |
| "selinux_policy_version", |
| "vendor_init_defaults", |
| ], |
| srcs: init_common_sources + init_device_sources, |
| export_include_dirs: ["."], |
| generated_sources: [ |
| "apex-info-list", |
| ], |
| whole_static_libs: [ |
| "libcap", |
| "libcom.android.sysprop.init", |
| ], |
| header_libs: ["bootimg_headers"], |
| proto: { |
| type: "lite", |
| export_proto_headers: true, |
| }, |
| |
| target: { |
| recovery: { |
| cflags: ["-DRECOVERY"], |
| exclude_static_libs: [ |
| "libxml2", |
| ], |
| exclude_generated_sources: [ |
| "apex-info-list", |
| ], |
| exclude_shared_libs: [ |
| "libbinder", |
| "libutils", |
| ], |
| }, |
| }, |
| } |
| |
| cc_library_static { |
| name: "libinit", |
| defaults: ["libinit_defaults"], |
| } |
| |
| cc_library_static { |
| name: "libinit.microdroid", |
| defaults: ["libinit_defaults"], |
| cflags: ["-DMICRODROID=1"], |
| } |
| |
| phony { |
| name: "init", |
| required: [ |
| "init_second_stage", |
| ], |
| } |
| |
| cc_defaults { |
| name: "init_second_stage_defaults", |
| recovery_available: true, |
| stem: "init", |
| defaults: ["init_defaults"], |
| srcs: ["main.cpp"], |
| symlinks: ["ueventd"], |
| target: { |
| platform: { |
| required: [ |
| "init.rc", |
| "ueventd.rc", |
| "e2fsdroid", |
| "extra_free_kbytes", |
| "make_f2fs", |
| "mke2fs", |
| "sload_f2fs", |
| ], |
| }, |
| recovery: { |
| cflags: ["-DRECOVERY"], |
| exclude_static_libs: [ |
| "libxml2", |
| ], |
| exclude_shared_libs: [ |
| "libbinder", |
| "libutils", |
| ], |
| required: [ |
| "init_recovery.rc", |
| "ueventd.rc.recovery", |
| "e2fsdroid.recovery", |
| "make_f2fs.recovery", |
| "mke2fs.recovery", |
| "sload_f2fs.recovery", |
| ], |
| }, |
| }, |
| } |
| |
| cc_binary { |
| name: "init_second_stage", |
| defaults: ["init_second_stage_defaults"], |
| static_libs: ["libinit"], |
| } |
| |
| cc_binary { |
| name: "init_second_stage.microdroid", |
| defaults: ["init_second_stage_defaults"], |
| static_libs: ["libinit.microdroid"], |
| cflags: ["-DMICRODROID=1"], |
| installable: false, |
| visibility: ["//packages/modules/Virtualization/microdroid"], |
| } |
| |
| |
| soong_config_module_type { |
| name: "init_first_stage_cc_defaults", |
| module_type: "cc_defaults", |
| config_namespace: "ANDROID", |
| bool_variables: ["BOARD_USES_RECOVERY_AS_BOOT"], |
| properties: ["installable"], |
| } |
| |
| // Do not install init_first_stage even with mma if we're system-as-root. |
| // Otherwise, it will overwrite the symlink. |
| init_first_stage_cc_defaults { |
| name: "init_first_stage_defaults", |
| soong_config_variables: { |
| BOARD_USES_RECOVERY_AS_BOOT: { |
| installable: false, |
| }, |
| }, |
| |
| stem: "init", |
| |
| srcs: [ |
| "block_dev_initializer.cpp", |
| "devices.cpp", |
| "first_stage_console.cpp", |
| "first_stage_init.cpp", |
| "first_stage_main.cpp", |
| "first_stage_mount.cpp", |
| "reboot_utils.cpp", |
| "selabel.cpp", |
| "service_utils.cpp", |
| "snapuserd_transition.cpp", |
| "switch_root.cpp", |
| "uevent_listener.cpp", |
| "util.cpp", |
| ], |
| |
| static_libs: [ |
| "libc++fs", |
| "libfs_avb", |
| "libfs_mgr", |
| "libfec", |
| "libfec_rs", |
| "libsquashfs_utils", |
| "libcrypto_utils", |
| "libavb", |
| "liblp", |
| "libcutils", |
| "libbase", |
| "liblog", |
| "libcrypto_static", |
| "libselinux", |
| "libcap", |
| "libgsi", |
| "liblzma", |
| "libunwindstack_no_dex", |
| "libmodprobe", |
| "libext2_uuid", |
| "libprotobuf-cpp-lite", |
| "libsnapshot_cow", |
| "liblz4", |
| "libzstd", |
| "libsnapshot_init", |
| "update_metadata-protos", |
| "libprocinfo", |
| ], |
| |
| static_executable: true, |
| system_shared_libs: [], |
| |
| cflags: [ |
| "-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", |
| "-DLOG_UEVENTS=0", |
| "-DSEPOLICY_VERSION=30", // TODO(jiyong): externalize the version number |
| ], |
| |
| product_variables: { |
| debuggable: { |
| cflags: [ |
| "-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: { |
| cflags: [ |
| "-USHUTDOWN_ZERO_TIMEOUT", |
| "-DSHUTDOWN_ZERO_TIMEOUT=1", |
| ], |
| }, |
| }, |
| |
| sanitize: { |
| misc_undefined: ["signed-integer-overflow"], |
| |
| // First stage init is weird: it may start without stdout/stderr, and no /proc. |
| hwaddress: false, |
| }, |
| |
| // Install adb_debug.prop into debug ramdisk. |
| // This allows adb root on a user build, when debug ramdisk is used. |
| required: ["adb_debug.prop"], |
| |
| ramdisk: true, |
| |
| install_in_root: true, |
| } |
| |
| cc_binary { |
| name: "init_first_stage", |
| defaults: ["init_first_stage_defaults"], |
| } |
| |
| cc_binary { |
| name: "init_first_stage.microdroid", |
| defaults: ["init_first_stage_defaults"], |
| cflags: ["-DMICRODROID=1"], |
| installable: false, |
| } |
| |
| phony { |
| name: "init_system", |
| required: ["init_second_stage"], |
| } |
| |
| // Tests |
| // ------------------------------------------------------------------------------ |
| |
| cc_test { |
| name: "CtsInitTestCases", |
| defaults: ["init_defaults"], |
| require_root: true, |
| |
| compile_multilib: "first", |
| |
| srcs: [ |
| "devices_test.cpp", |
| "epoll_test.cpp", |
| "firmware_handler_test.cpp", |
| "init_test.cpp", |
| "interprocess_fifo_test.cpp", |
| "keychords_test.cpp", |
| "oneshot_on_test.cpp", |
| "persistent_properties_test.cpp", |
| "property_service_test.cpp", |
| "property_type_test.cpp", |
| "reboot_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: [ |
| "libgmock", |
| "libinit", |
| ], |
| |
| test_suites: [ |
| "cts", |
| "device-tests", |
| ], |
| } |
| |
| cc_benchmark { |
| name: "init_benchmarks", |
| defaults: ["init_defaults"], |
| srcs: [ |
| "subcontext_benchmark.cpp", |
| ], |
| static_libs: ["libinit"], |
| } |
| |
| cc_defaults { |
| name: "libinit_test_utils_libraries_defaults", |
| shared_libs: [ |
| "libbase", |
| "libcutils", |
| "libselinux", |
| "liblog", |
| "libprocessgroup", |
| "libprotobuf-cpp-lite", |
| ], |
| static_libs: [ |
| "libfs_mgr", |
| "libhidl-gen-utils", |
| ], |
| } |
| |
| cc_library_static { |
| name: "libinit_test_utils", |
| defaults: ["libinit_test_utils_libraries_defaults"], |
| cflags: [ |
| "-Wall", |
| "-Wextra", |
| "-Wno-unused-parameter", |
| "-Werror", |
| ], |
| srcs: init_common_sources + [ |
| "test_utils/service_utils.cpp", |
| ], |
| whole_static_libs: [ |
| "libcap", |
| ], |
| export_include_dirs: ["test_utils/include"], // for tests |
| header_libs: ["bionic_libc_platform_headers"], |
| } |
| |
| // 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_defaults { |
| name: "init_host_defaults", |
| host_supported: true, |
| cflags: [ |
| "-Wall", |
| "-Wextra", |
| "-Wno-unused-parameter", |
| "-Werror", |
| ], |
| static_libs: [ |
| "libbase", |
| "libselinux", |
| "libpropertyinfoserializer", |
| "libpropertyinfoparser", |
| ], |
| whole_static_libs: ["libcap"], |
| shared_libs: [ |
| "libcutils", |
| "libhidl-gen-utils", |
| "libhidlmetadata", |
| "liblog", |
| "libprocessgroup", |
| "libprotobuf-cpp-lite", |
| ], |
| proto: { |
| type: "lite", |
| }, |
| generated_headers: [ |
| "generated_stub_builtin_function_map", |
| "generated_android_ids", |
| ], |
| target: { |
| android: { |
| enabled: false, |
| }, |
| darwin: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| cc_binary { |
| name: "host_init_verifier", |
| defaults: ["init_host_defaults"], |
| srcs: init_common_sources + init_host_sources, |
| } |
| |
| cc_library_host_static { |
| name: "libinit_host", |
| defaults: ["init_host_defaults"], |
| srcs: init_common_sources, |
| export_include_dirs: ["."], |
| proto: { |
| export_proto_headers: true, |
| }, |
| visibility: [ |
| // host_apex_verifier performs a subset of init.rc validation |
| "//system/apex/tools", |
| ], |
| } |
| |
| sh_binary { |
| name: "extra_free_kbytes", |
| src: "extra_free_kbytes.sh", |
| filename_from_src: true, |
| } |