blob: 41c7a953abc2fd4306f99f8a007cfb78cd771049 [file] [log] [blame]
//
// 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",
]
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",
"libfsverity_init",
"liblmkd_utils",
"liblz4",
"libzstd",
"libmini_keyctl_static",
"libmodprobe",
"libprocinfo",
"libprotobuf-cpp-lite",
"libpropertyinfoserializer",
"libpropertyinfoparser",
"libsigningutils",
"libsnapshot_cow",
"libsnapshot_init",
"libxml2",
"lib_apex_manifest_proto_lite",
"update_metadata-protos",
],
shared_libs: [
"libbase",
"libcrypto",
"libcutils",
"libdl",
"libext4_utils",
"libfs_mgr",
"libgsi",
"libhidl-gen-utils",
"libkeyutils",
"liblog",
"liblogwrap",
"liblp",
"libprocessgroup",
"libprocessgroup_setup",
"libselinux",
"libunwindstack",
"libutils",
"libziparchive",
],
header_libs: ["bionic_libc_platform_headers"],
bootstrap: true,
visibility: [":__subpackages__"],
}
cc_library_headers {
name: "libinit_headers",
export_include_dirs: ["."],
visibility: [":__subpackages__"],
}
cc_library_static {
name: "libinit",
recovery_available: true,
defaults: [
"init_defaults",
"selinux_policy_version",
],
srcs: init_common_sources + init_device_sources,
export_include_dirs: ["."],
generated_sources: [
"apex-info-list",
],
whole_static_libs: [
"libcap",
"libcom.android.sysprop.apex",
"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",
],
},
},
visibility: [
"//system/apex/apexd",
"//frameworks/native/cmds/installd",
],
}
phony {
name: "init",
required: [
"init_second_stage",
],
}
cc_binary {
name: "init_second_stage",
recovery_available: true,
stem: "init",
defaults: ["init_defaults"],
static_libs: ["libinit"],
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",
],
},
},
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,
},
},
}
cc_binary {
name: "init_first_stage",
stem: "init",
defaults: ["init_first_stage_defaults"],
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,
}
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: [
"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,
}