1LOCAL_PATH:= $(call my-dir) 2 3####################################### 4# init.rc 5include $(CLEAR_VARS) 6 7LOCAL_MODULE := init.rc 8LOCAL_SRC_FILES := $(LOCAL_MODULE) 9LOCAL_MODULE_CLASS := ETC 10LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) 11LOCAL_REQUIRED_MODULES := fsverity_init 12 13# The init symlink must be a post install command of a file that is to TARGET_ROOT_OUT. 14# Since init.rc is required for init and satisfies that requirement, we hijack it to create the symlink. 15LOCAL_POST_INSTALL_CMD := ln -sf /system/bin/init $(TARGET_ROOT_OUT)/init 16 17include $(BUILD_PREBUILT) 18 19####################################### 20# init-debug.rc 21include $(CLEAR_VARS) 22 23LOCAL_MODULE := init-debug.rc 24LOCAL_SRC_FILES := $(LOCAL_MODULE) 25LOCAL_MODULE_CLASS := ETC 26LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/init 27 28include $(BUILD_PREBUILT) 29 30####################################### 31# asan.options 32ifneq ($(filter address,$(SANITIZE_TARGET)),) 33 34include $(CLEAR_VARS) 35 36LOCAL_MODULE := asan.options 37LOCAL_MODULE_CLASS := ETC 38LOCAL_SRC_FILES := $(LOCAL_MODULE) 39LOCAL_MODULE_PATH := $(TARGET_OUT) 40 41include $(BUILD_PREBUILT) 42 43# ASAN extration. 44ASAN_EXTRACT_FILES := 45ifeq ($(SANITIZE_TARGET_SYSTEM),true) 46include $(CLEAR_VARS) 47LOCAL_MODULE:= asan_extract 48LOCAL_MODULE_TAGS := optional 49LOCAL_MODULE_CLASS := EXECUTABLES 50LOCAL_SRC_FILES := asan_extract.sh 51LOCAL_INIT_RC := asan_extract.rc 52# We need bzip2 on device for extraction. 53LOCAL_REQUIRED_MODULES := bzip2 54include $(BUILD_PREBUILT) 55ASAN_EXTRACT_FILES := asan_extract 56endif 57 58endif 59 60####################################### 61# fsverity_init 62 63include $(CLEAR_VARS) 64LOCAL_MODULE:= fsverity_init 65LOCAL_MODULE_CLASS := EXECUTABLES 66LOCAL_SRC_FILES := fsverity_init.sh 67include $(BUILD_PREBUILT) 68 69####################################### 70# init.environ.rc 71 72include $(CLEAR_VARS) 73LOCAL_MODULE_CLASS := ETC 74LOCAL_MODULE := init.environ.rc 75LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) 76 77EXPORT_GLOBAL_ASAN_OPTIONS := 78ifneq ($(filter address,$(SANITIZE_TARGET)),) 79 EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options 80 LOCAL_REQUIRED_MODULES := asan.options $(ASAN_OPTIONS_FILES) $(ASAN_EXTRACT_FILES) 81endif 82 83EXPORT_GLOBAL_HWASAN_OPTIONS := 84ifneq ($(filter hwaddress,$(SANITIZE_TARGET)),) 85 ifneq ($(HWADDRESS_SANITIZER_GLOBAL_OPTIONS),) 86 EXPORT_GLOBAL_HWASAN_OPTIONS := export HWASAN_OPTIONS $(HWADDRESS_SANITIZER_GLOBAL_OPTIONS) 87 endif 88endif 89 90EXPORT_GLOBAL_GCOV_OPTIONS := 91ifeq ($(NATIVE_COVERAGE),true) 92 EXPORT_GLOBAL_GCOV_OPTIONS := export GCOV_PREFIX /data/misc/gcov 93endif 94 95# Put it here instead of in init.rc module definition, 96# because init.rc is conditionally included. 97# 98# create some directories (some are mount points) and symlinks 99LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \ 100 sbin dev proc sys system data odm oem acct config storage mnt apex debug_ramdisk $(BOARD_ROOT_EXTRA_FOLDERS)); \ 101 ln -sf /system/bin $(TARGET_ROOT_OUT)/bin; \ 102 ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \ 103 ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \ 104 ln -sf /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \ 105 ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard 106ifdef BOARD_USES_VENDORIMAGE 107 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor 108else 109 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor 110endif 111ifdef BOARD_USES_PRODUCTIMAGE 112 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/product 113else 114 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/product $(TARGET_ROOT_OUT)/product 115endif 116ifdef BOARD_USES_PRODUCT_SERVICESIMAGE 117 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/product_services 118else 119 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/product_services $(TARGET_ROOT_OUT)/product_services 120endif 121ifdef BOARD_USES_METADATA_PARTITION 122 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/metadata 123endif 124 125# For /odm partition. 126LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm 127# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 128# both devices with and without /odm partition. Those symlinks are for devices 129# without /odm partition. For devices with /odm partition, mount odm.img under 130# /odm will hide those symlinks. 131LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/app $(TARGET_ROOT_OUT)/odm/app 132LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/bin $(TARGET_ROOT_OUT)/odm/bin 133LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/etc $(TARGET_ROOT_OUT)/odm/etc 134LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/firmware $(TARGET_ROOT_OUT)/odm/firmware 135LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/framework $(TARGET_ROOT_OUT)/odm/framework 136LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib $(TARGET_ROOT_OUT)/odm/lib 137LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib64 $(TARGET_ROOT_OUT)/odm/lib64 138LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/overlay $(TARGET_ROOT_OUT)/odm/overlay 139LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/priv-app $(TARGET_ROOT_OUT)/odm/priv-app 140LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/usr $(TARGET_ROOT_OUT)/odm/usr 141 142ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 143 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache 144else 145 LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache 146endif 147ifdef BOARD_ROOT_EXTRA_SYMLINKS 148# BOARD_ROOT_EXTRA_SYMLINKS is a list of <target>:<link_name>. 149 LOCAL_POST_INSTALL_CMD += $(foreach s, $(BOARD_ROOT_EXTRA_SYMLINKS),\ 150 $(eval p := $(subst :,$(space),$(s)))\ 151 ; mkdir -p $(dir $(TARGET_ROOT_OUT)/$(word 2,$(p))) \ 152 ; ln -sf $(word 1,$(p)) $(TARGET_ROOT_OUT)/$(word 2,$(p))) 153endif 154# The A/B updater uses a top-level /postinstall directory to mount the new 155# system before reboot. 156ifeq ($(AB_OTA_UPDATER),true) 157 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/postinstall 158endif 159 160include $(BUILD_SYSTEM)/base_rules.mk 161 162$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in 163 @echo "Generate: $< -> $@" 164 @mkdir -p $(dir $@) 165 $(hide) sed -e 's?%BOOTCLASSPATH%?$(PRODUCT_BOOTCLASSPATH)?g' $< >$@ 166 $(hide) sed -i -e 's?%DEX2OATBOOTCLASSPATH%?$(PRODUCT_DEX2OAT_BOOTCLASSPATH)?g' $@ 167 $(hide) sed -i -e 's?%SYSTEMSERVERCLASSPATH%?$(PRODUCT_SYSTEM_SERVER_CLASSPATH)?g' $@ 168 $(hide) sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?$(EXPORT_GLOBAL_ASAN_OPTIONS)?g' $@ 169 $(hide) sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?$(EXPORT_GLOBAL_GCOV_OPTIONS)?g' $@ 170 $(hide) sed -i -e 's?%EXPORT_GLOBAL_HWASAN_OPTIONS%?$(EXPORT_GLOBAL_HWASAN_OPTIONS)?g' $@ 171 172# Append PLATFORM_VNDK_VERSION to base name. 173define append_vndk_version 174$(strip \ 175 $(basename $(1)).$(PLATFORM_VNDK_VERSION)$(suffix $(1)) \ 176) 177endef 178 179 180####################################### 181# ld.config.txt selection variables 182# 183_enforce_vndk_at_runtime := false 184ifdef BOARD_VNDK_VERSION 185 ifneq ($(BOARD_VNDK_RUNTIME_DISABLE),true) 186 _enforce_vndk_at_runtime := true 187 endif 188endif 189 190_enforce_vndk_lite_at_runtime := false 191ifeq ($(_enforce_vndk_at_runtime),false) 192 ifeq ($(PRODUCT_TREBLE_LINKER_NAMESPACES)|$(SANITIZE_TARGET),true|) 193 _enforce_vndk_lite_at_runtime := true 194 endif 195endif 196 197####################################### 198# ld.config.txt 199# 200# For VNDK enforced devices that have defined BOARD_VNDK_VERSION, use 201# "ld.config.txt" as a source file. This configuration includes strict VNDK 202# run-time restrictions for vendor process. 203# 204# Other treblized devices, that have not defined BOARD_VNDK_VERSION or that 205# have set BOARD_VNDK_RUNTIME_DISABLE to true, use "ld.config.vndk_lite.txt" 206# as a source file. This configuration does not have strict VNDK run-time 207# restrictions. 208# 209# If the device is not treblized, use "ld.config.legacy.txt" for legacy 210# namespace configuration. 211# 212include $(CLEAR_VARS) 213LOCAL_MODULE := ld.config.txt 214LOCAL_MODULE_CLASS := ETC 215LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 216 217# Start of runtime APEX compatibility. 218# 219# Meta-comment: 220# The placing of this section is somewhat arbitrary. The LOCAL_POST_INSTALL_CMD 221# entries need to be associated with something that goes into /system. 222# ld.config.txt qualifies but it could be anything else in /system until soong 223# supports creation of symlinks. http://b/123333111 224# 225# Keeping the appearance of files/dirs having old locations for apps that have 226# come to rely on them. 227 228# http://b/121248172 - create a link from /system/usr/icu to 229# /apex/com.android.runtime/etc/icu so that apps can find the ICU .dat file. 230# A symlink can't overwrite a directory and the /system/usr/icu directory once 231# existed so the required structure must be created whatever we find. 232LOCAL_POST_INSTALL_CMD = mkdir -p $(TARGET_OUT)/usr && rm -rf $(TARGET_OUT)/usr/icu 233LOCAL_POST_INSTALL_CMD += && ln -sf /apex/com.android.runtime/etc/icu $(TARGET_OUT)/usr/icu 234 235# TODO(b/124106384): Clean up compat symlinks for ART binaries. 236ART_BINARIES := \ 237 dalvikvm \ 238 dalvikvm32 \ 239 dalvikvm64 \ 240 dex2oat \ 241 dexdiag \ 242 dexdump \ 243 dexlist \ 244 dexoptanalyzer \ 245 oatdump \ 246 profman \ 247 248LOCAL_POST_INSTALL_CMD += && mkdir -p $(TARGET_OUT)/bin 249$(foreach b,$(ART_BINARIES), \ 250 $(eval LOCAL_POST_INSTALL_CMD += \ 251 && ln -sf /apex/com.android.runtime/bin/$(b) $(TARGET_OUT)/bin/$(b)) \ 252) 253 254# End of runtime APEX compatibilty. 255 256ifeq ($(_enforce_vndk_at_runtime),true) 257 258# for VNDK enforced devices 259LOCAL_MODULE_STEM := $(call append_vndk_version,$(LOCAL_MODULE)) 260include $(BUILD_SYSTEM)/base_rules.mk 261ld_config_template := $(LOCAL_PATH)/etc/ld.config.txt 262check_backward_compatibility := true 263vndk_version := $(PLATFORM_VNDK_VERSION) 264include $(LOCAL_PATH)/update_and_install_ld_config.mk 265 266else ifeq ($(_enforce_vndk_lite_at_runtime),true) 267 268# for treblized but VNDK lightly enforced devices 269LOCAL_MODULE_STEM := ld.config.vndk_lite.txt 270include $(BUILD_SYSTEM)/base_rules.mk 271ld_config_template := $(LOCAL_PATH)/etc/ld.config.vndk_lite.txt 272vndk_version := $(PLATFORM_VNDK_VERSION) 273libz_is_llndk := true 274include $(LOCAL_PATH)/update_and_install_ld_config.mk 275 276else 277 278# for legacy non-treblized devices 279LOCAL_MODULE_STEM := $(LOCAL_MODULE) 280LOCAL_SRC_FILES := etc/ld.config.legacy.txt 281include $(BUILD_PREBUILT) 282 283endif # ifeq ($(_enforce_vndk_at_runtime),true) 284 285# ld.config.txt for VNDK versions older than PLATFORM_VNDK_VERSION 286# are built with the VNDK libraries lists under /prebuilts/vndk. 287# 288# ld.config.$(VER).txt is built and installed for all VNDK versions 289# listed in PRODUCT_EXTRA_VNDK_VERSIONS. 290# 291# $(1): VNDK version 292define build_versioned_ld_config 293include $(CLEAR_VARS) 294LOCAL_MODULE := ld.config.$(1).txt 295LOCAL_MODULE_CLASS := ETC 296LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 297LOCAL_MODULE_STEM := $$(LOCAL_MODULE) 298include $(BUILD_SYSTEM)/base_rules.mk 299ld_config_template := $(LOCAL_PATH)/etc/ld.config.txt 300check_backward_compatibility := true 301vndk_version := $(1) 302lib_list_from_prebuilts := true 303include $(LOCAL_PATH)/update_and_install_ld_config.mk 304endef 305 306vndk_snapshots := $(wildcard prebuilts/vndk/*) 307supported_vndk_snapshot_versions := \ 308 $(strip $(patsubst prebuilts/vndk/v%,%,$(vndk_snapshots))) 309$(foreach ver,$(supported_vndk_snapshot_versions),\ 310 $(eval $(call build_versioned_ld_config,$(ver)))) 311 312vndk_snapshots := 313supported_vndk_snapshot_versions := 314 315####################################### 316# ld.config.vndk_lite.txt 317# 318# This module is only for GSI. 319# 320ifeq ($(_enforce_vndk_lite_at_runtime),false) 321 322include $(CLEAR_VARS) 323LOCAL_MODULE := ld.config.vndk_lite.txt 324LOCAL_MODULE_CLASS := ETC 325LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 326LOCAL_MODULE_STEM := $(LOCAL_MODULE) 327include $(BUILD_SYSTEM)/base_rules.mk 328ld_config_template := $(LOCAL_PATH)/etc/ld.config.vndk_lite.txt 329vndk_version := $(PLATFORM_VNDK_VERSION) 330libz_is_llndk := true 331include $(LOCAL_PATH)/update_and_install_ld_config.mk 332 333endif # ifeq ($(_enforce_vndk_lite_at_runtime),false) 334 335_enforce_vndk_at_runtime := 336_enforce_vndk_lite_at_runtime := 337 338####################################### 339# ld.config.txt for recovery 340include $(CLEAR_VARS) 341LOCAL_MODULE := ld.config.recovery.txt 342LOCAL_MODULE_CLASS := ETC 343LOCAL_SRC_FILES := etc/ld.config.recovery.txt 344LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/etc 345LOCAL_MODULE_STEM := ld.config.txt 346include $(BUILD_PREBUILT) 347 348####################################### 349# llndk.libraries.txt 350include $(CLEAR_VARS) 351LOCAL_MODULE := llndk.libraries.txt 352LOCAL_MODULE_CLASS := ETC 353LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 354LOCAL_MODULE_STEM := $(call append_vndk_version,$(LOCAL_MODULE)) 355include $(BUILD_SYSTEM)/base_rules.mk 356$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(LLNDK_LIBRARIES) 357$(LOCAL_BUILT_MODULE): 358 @echo "Generate: $@" 359 @mkdir -p $(dir $@) 360 $(hide) echo -n > $@ 361 $(hide) $(foreach lib,$(PRIVATE_LLNDK_LIBRARIES), \ 362 echo $(lib).so >> $@;) 363 364####################################### 365# vndksp.libraries.txt 366include $(CLEAR_VARS) 367LOCAL_MODULE := vndksp.libraries.txt 368LOCAL_MODULE_CLASS := ETC 369LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 370LOCAL_MODULE_STEM := $(call append_vndk_version,$(LOCAL_MODULE)) 371include $(BUILD_SYSTEM)/base_rules.mk 372$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(VNDK_SAMEPROCESS_LIBRARIES) 373$(LOCAL_BUILT_MODULE): 374 @echo "Generate: $@" 375 @mkdir -p $(dir $@) 376 $(hide) echo -n > $@ 377 $(hide) $(foreach lib,$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES), \ 378 echo $(lib).so >> $@;) 379 380####################################### 381# adb_debug.prop in debug ramdisk 382include $(CLEAR_VARS) 383LOCAL_MODULE := adb_debug.prop 384LOCAL_SRC_FILES := $(LOCAL_MODULE) 385LOCAL_MODULE_CLASS := ETC 386LOCAL_MODULE_PATH := $(TARGET_DEBUG_RAMDISK_OUT) 387include $(BUILD_PREBUILT) 388 389include $(call all-makefiles-under,$(LOCAL_PATH)) 390