1LOCAL_PATH:= $(call my-dir) 2 3$(eval $(call declare-1p-copy-files,system/core/rootdir,)) 4 5####################################### 6# init-debug.rc 7include $(CLEAR_VARS) 8 9LOCAL_MODULE := init-debug.rc 10LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 11LOCAL_LICENSE_CONDITIONS := notice 12LOCAL_SRC_FILES := $(LOCAL_MODULE) 13LOCAL_MODULE_CLASS := ETC 14LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/init 15 16include $(BUILD_PREBUILT) 17 18####################################### 19# asan.options 20ifneq ($(filter address,$(SANITIZE_TARGET)),) 21 22include $(CLEAR_VARS) 23 24LOCAL_MODULE := asan.options 25LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 26LOCAL_LICENSE_CONDITIONS := notice 27LOCAL_MODULE_CLASS := ETC 28LOCAL_SRC_FILES := $(LOCAL_MODULE) 29LOCAL_MODULE_PATH := $(TARGET_OUT) 30 31include $(BUILD_PREBUILT) 32 33# ASAN extration. 34ASAN_EXTRACT_FILES := 35ifeq ($(SANITIZE_TARGET_SYSTEM),true) 36include $(CLEAR_VARS) 37LOCAL_MODULE:= asan_extract 38LOCAL_LICENSE_KINDS:= SPDX-license-identifier-Apache-2.0 39LOCAL_LICENSE_CONDITIONS:= notice 40LOCAL_MODULE_TAGS := optional 41LOCAL_MODULE_CLASS := EXECUTABLES 42LOCAL_SRC_FILES := asan_extract.sh 43LOCAL_INIT_RC := asan_extract.rc 44# We need bzip2 on device for extraction. 45LOCAL_REQUIRED_MODULES := bzip2 46include $(BUILD_PREBUILT) 47ASAN_EXTRACT_FILES := asan_extract 48endif 49 50endif 51 52####################################### 53# init.environ.rc 54 55include $(CLEAR_VARS) 56LOCAL_MODULE_CLASS := ETC 57LOCAL_MODULE := init.environ.rc 58LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 59LOCAL_LICENSE_CONDITIONS := notice 60LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) 61 62EXPORT_GLOBAL_ASAN_OPTIONS := 63ifneq ($(filter address,$(SANITIZE_TARGET)),) 64 EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options 65 LOCAL_REQUIRED_MODULES := asan.options $(ASAN_OPTIONS_FILES) $(ASAN_EXTRACT_FILES) 66endif 67 68EXPORT_GLOBAL_HWASAN_OPTIONS := 69ifneq ($(filter hwaddress,$(SANITIZE_TARGET)),) 70 ifneq ($(HWADDRESS_SANITIZER_GLOBAL_OPTIONS),) 71 EXPORT_GLOBAL_HWASAN_OPTIONS := export HWASAN_OPTIONS $(HWADDRESS_SANITIZER_GLOBAL_OPTIONS) 72 endif 73endif 74 75EXPORT_GLOBAL_GCOV_OPTIONS := 76ifeq ($(NATIVE_COVERAGE),true) 77 EXPORT_GLOBAL_GCOV_OPTIONS := export GCOV_PREFIX /data/misc/trace 78endif 79 80EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := 81ifeq ($(CLANG_COVERAGE),true) 82 ifeq ($(CLANG_COVERAGE_CONTINUOUS_MODE),true) 83 EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := export LLVM_PROFILE_FILE /data/misc/trace/clang%c-%20m.profraw 84 else 85 EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS := export LLVM_PROFILE_FILE /data/misc/trace/clang-%20m.profraw 86 endif 87endif 88 89# Put it here instead of in init.rc module definition, 90# because init.rc is conditionally included. 91# 92# create some directories (some are mount points) and symlinks 93LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \ 94 dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk \ 95 linkerconfig second_stage_resources postinstall $(BOARD_ROOT_EXTRA_FOLDERS)); \ 96 ln -sf /system/bin $(TARGET_ROOT_OUT)/bin; \ 97 ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \ 98 ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \ 99 ln -sfn /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \ 100 ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard 101ifdef BOARD_USES_VENDORIMAGE 102 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor 103else 104 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor 105endif 106ifdef BOARD_USES_PRODUCTIMAGE 107 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/product 108else 109 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/product $(TARGET_ROOT_OUT)/product 110endif 111ifdef BOARD_USES_SYSTEM_EXTIMAGE 112 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/system_ext 113else 114 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/system_ext $(TARGET_ROOT_OUT)/system_ext 115endif 116ifdef BOARD_USES_METADATA_PARTITION 117 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/metadata 118endif 119 120# For /odm partition. 121LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm 122# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 123# both devices with and without /odm partition. Those symlinks are for devices 124# without /odm partition. For devices with /odm partition, mount odm.img under 125# /odm will hide those symlinks. 126LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/app $(TARGET_ROOT_OUT)/odm/app 127LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/bin $(TARGET_ROOT_OUT)/odm/bin 128LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/etc $(TARGET_ROOT_OUT)/odm/etc 129LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/firmware $(TARGET_ROOT_OUT)/odm/firmware 130LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/framework $(TARGET_ROOT_OUT)/odm/framework 131LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib $(TARGET_ROOT_OUT)/odm/lib 132LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib64 $(TARGET_ROOT_OUT)/odm/lib64 133LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/overlay $(TARGET_ROOT_OUT)/odm/overlay 134LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/priv-app $(TARGET_ROOT_OUT)/odm/priv-app 135LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/usr $(TARGET_ROOT_OUT)/odm/usr 136 137 138# For /vendor_dlkm partition. 139LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor_dlkm 140# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 141# both devices with and without /vendor_dlkm partition. Those symlinks are for 142# devices without /vendor_dlkm partition. For devices with /vendor_dlkm 143# partition, mount vendor_dlkm.img under /vendor_dlkm will hide those symlinks. 144# Note that /vendor_dlkm/lib is omitted because vendor DLKMs should be accessed 145# via /vendor/lib/modules directly. 146LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/vendor_dlkm/etc $(TARGET_ROOT_OUT)/vendor_dlkm/etc 147 148# For /odm_dlkm partition. 149LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm_dlkm 150# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 151# both devices with and without /odm_dlkm partition. Those symlinks are for 152# devices without /odm_dlkm partition. For devices with /odm_dlkm 153# partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks. 154# Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed 155# via /odm/lib/modules directly. 156LOCAL_POST_INSTALL_CMD += ; ln -sf /odm/odm_dlkm/etc $(TARGET_ROOT_OUT)/odm_dlkm/etc 157 158# For /system_dlkm partition 159LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/system_dlkm 160 161ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 162 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache 163else 164 LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache 165endif 166ifdef BOARD_ROOT_EXTRA_SYMLINKS 167# BOARD_ROOT_EXTRA_SYMLINKS is a list of <target>:<link_name>. 168 LOCAL_POST_INSTALL_CMD += $(foreach s, $(BOARD_ROOT_EXTRA_SYMLINKS),\ 169 $(eval p := $(subst :,$(space),$(s)))\ 170 ; mkdir -p $(dir $(TARGET_ROOT_OUT)/$(word 2,$(p))) \ 171 ; ln -sf $(word 1,$(p)) $(TARGET_ROOT_OUT)/$(word 2,$(p))) 172endif 173 174# The init symlink must be a post install command of a file that is to TARGET_ROOT_OUT. 175# Since init.environ.rc is required for init and satisfies that requirement, we hijack it to create the symlink. 176LOCAL_POST_INSTALL_CMD += ; ln -sf /system/bin/init $(TARGET_ROOT_OUT)/init 177 178include $(BUILD_SYSTEM)/base_rules.mk 179 180$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in 181 @echo "Generate: $< -> $@" 182 @mkdir -p $(dir $@) 183 $(hide) cp $< $@ 184 $(hide) sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?$(EXPORT_GLOBAL_ASAN_OPTIONS)?g' $@ 185 $(hide) sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?$(EXPORT_GLOBAL_GCOV_OPTIONS)?g' $@ 186 $(hide) sed -i -e 's?%EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS%?$(EXPORT_GLOBAL_CLANG_COVERAGE_OPTIONS)?g' $@ 187 $(hide) sed -i -e 's?%EXPORT_GLOBAL_HWASAN_OPTIONS%?$(EXPORT_GLOBAL_HWASAN_OPTIONS)?g' $@ 188 189# Append PLATFORM_VNDK_VERSION to base name. 190define append_vndk_version 191$(strip \ 192 $(basename $(1)).$(PLATFORM_VNDK_VERSION)$(suffix $(1)) \ 193) 194endef 195 196####################################### 197# sanitizer.libraries.txt 198include $(CLEAR_VARS) 199LOCAL_MODULE := sanitizer.libraries.txt 200LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 201LOCAL_LICENSE_CONDITIONS := notice 202LOCAL_MODULE_CLASS := ETC 203LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 204LOCAL_MODULE_STEM := $(LOCAL_MODULE) 205include $(BUILD_SYSTEM)/base_rules.mk 206$(LOCAL_BUILT_MODULE): PRIVATE_SANITIZER_RUNTIME_LIBRARIES := \ 207 $(SANITIZER_STEMS) \ 208 $(2ND_SANITIZER_STEMS) 209$(LOCAL_BUILT_MODULE): 210 @echo "Generate: $@" 211 @mkdir -p $(dir $@) 212 $(hide) echo -n > $@ 213 $(hide) $(foreach lib,$(PRIVATE_SANITIZER_RUNTIME_LIBRARIES), \ 214 echo $(lib) >> $@;) 215 216####################################### 217# ramdisk_node_list 218include $(CLEAR_VARS) 219 220LOCAL_MODULE := ramdisk_node_list 221LOCAL_MODULE_CLASS := ETC 222LOCAL_SRC_FILES := $(LOCAL_MODULE) 223LOCAL_MODULE_PATH := $(PRODUCT_OUT) 224 225LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 226LOCAL_LICENSE_CONDITIONS := notice 227include $(BUILD_PREBUILT) 228 229include $(call all-makefiles-under,$(LOCAL_PATH)) 230