1LOCAL_PATH:= $(call my-dir) 2 3####################################### 4ifneq ($(filter address,$(SANITIZE_TARGET)),) 5ASAN_EXTRACT_FILES := 6ifeq ($(SANITIZE_TARGET_SYSTEM),true) 7ASAN_EXTRACT_FILES := asan_extract 8endif 9endif 10####################################### 11# init.environ.rc 12# TODO(b/353429422): move LOCAL_POST_INSTALL_CMD to other rules and remove Android.mk module. 13 14include $(CLEAR_VARS) 15LOCAL_MODULE_CLASS := ETC 16LOCAL_MODULE := init.environ.rc 17LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 18LOCAL_LICENSE_CONDITIONS := notice 19LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) 20 21ifneq ($(filter address,$(SANITIZE_TARGET)),) 22 LOCAL_REQUIRED_MODULES := asan.options $(ASAN_EXTRACT_FILES) 23endif 24 25# Put it here instead of in init.rc module definition, 26# because init.rc is conditionally included. 27# 28# create some directories (some are mount points) and symlinks 29LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \ 30 dev proc sys system data data_mirror odm oem config storage mnt apex bootstrap-apex debug_ramdisk \ 31 linkerconfig second_stage_resources postinstall tmp $(BOARD_ROOT_EXTRA_FOLDERS)); \ 32 ln -sf /system/bin $(TARGET_ROOT_OUT)/bin; \ 33 ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \ 34 ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \ 35 ln -sfn /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \ 36 ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard; \ 37 ln -sf /product/etc/security/adb_keys $(TARGET_ROOT_OUT)/adb_keys 38 39ALL_ROOTDIR_SYMLINKS := \ 40 $(TARGET_ROOT_OUT)/bin \ 41 $(TARGET_ROOT_OUT)/etc \ 42 $(TARGET_ROOT_OUT)/bugreports \ 43 $(TARGET_ROOT_OUT)/d \ 44 $(TARGET_ROOT_OUT)/sdcard \ 45 $(TARGET_ROOT_OUT)/adb_keys \ 46 47ifdef BOARD_USES_VENDORIMAGE 48 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor 49else 50 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor 51 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/vendor 52endif 53ifdef BOARD_USES_PRODUCTIMAGE 54 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/product 55else 56 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/product $(TARGET_ROOT_OUT)/product 57 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/product 58endif 59ifdef BOARD_USES_SYSTEM_EXTIMAGE 60 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/system_ext 61else 62 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/system_ext $(TARGET_ROOT_OUT)/system_ext 63 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/system_ext 64endif 65ifdef BOARD_USES_METADATA_PARTITION 66 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/metadata 67endif 68 69# For /odm partition. 70LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm 71# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 72# both devices with and without /odm partition. Those symlinks are for devices 73# without /odm partition. For devices with /odm partition, mount odm.img under 74# /odm will hide those symlinks. 75LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/app $(TARGET_ROOT_OUT)/odm/app 76LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/bin $(TARGET_ROOT_OUT)/odm/bin 77LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/etc $(TARGET_ROOT_OUT)/odm/etc 78LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/firmware $(TARGET_ROOT_OUT)/odm/firmware 79LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/framework $(TARGET_ROOT_OUT)/odm/framework 80LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib $(TARGET_ROOT_OUT)/odm/lib 81LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib64 $(TARGET_ROOT_OUT)/odm/lib64 82LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/overlay $(TARGET_ROOT_OUT)/odm/overlay 83LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/priv-app $(TARGET_ROOT_OUT)/odm/priv-app 84LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/usr $(TARGET_ROOT_OUT)/odm/usr 85 86ALL_ROOTDIR_SYMLINKS += \ 87 $(TARGET_ROOT_OUT)/odm/app \ 88 $(TARGET_ROOT_OUT)/odm/bin \ 89 $(TARGET_ROOT_OUT)/odm/etc \ 90 $(TARGET_ROOT_OUT)/odm/firmware \ 91 $(TARGET_ROOT_OUT)/odm/framework \ 92 $(TARGET_ROOT_OUT)/odm/lib \ 93 $(TARGET_ROOT_OUT)/odm/lib64 \ 94 $(TARGET_ROOT_OUT)/odm/overlay \ 95 $(TARGET_ROOT_OUT)/odm/priv-app \ 96 $(TARGET_ROOT_OUT)/odm/usr 97 98 99# For /vendor_dlkm partition. 100LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor_dlkm 101# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 102# both devices with and without /vendor_dlkm partition. Those symlinks are for 103# devices without /vendor_dlkm partition. For devices with /vendor_dlkm 104# partition, mount vendor_dlkm.img under /vendor_dlkm will hide those symlinks. 105# Note that /vendor_dlkm/lib is omitted because vendor DLKMs should be accessed 106# via /vendor/lib/modules directly. 107LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/vendor_dlkm/etc $(TARGET_ROOT_OUT)/vendor_dlkm/etc 108ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/vendor_dlkm/etc 109 110# For /odm_dlkm partition. 111LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm_dlkm 112# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 113# both devices with and without /odm_dlkm partition. Those symlinks are for 114# devices without /odm_dlkm partition. For devices with /odm_dlkm 115# partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks. 116# Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed 117# via /odm/lib/modules directly. 118LOCAL_POST_INSTALL_CMD += ; ln -sf /odm/odm_dlkm/etc $(TARGET_ROOT_OUT)/odm_dlkm/etc 119ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/odm_dlkm/etc 120 121# For /system_dlkm partition 122LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/system_dlkm 123 124ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 125 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache 126else 127 LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache 128 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/cache 129endif 130ifdef BOARD_ROOT_EXTRA_SYMLINKS 131# BOARD_ROOT_EXTRA_SYMLINKS is a list of <target>:<link_name>. 132 LOCAL_POST_INSTALL_CMD += $(foreach s, $(BOARD_ROOT_EXTRA_SYMLINKS),\ 133 $(eval p := $(subst :,$(space),$(s)))\ 134 ; mkdir -p $(dir $(TARGET_ROOT_OUT)/$(word 2,$(p))) \ 135 ; ln -sf $(word 1,$(p)) $(TARGET_ROOT_OUT)/$(word 2,$(p))) 136 ALL_ROOTDIR_SYMLINKS += $(foreach s,$(BOARD_ROOT_EXTRA_SYMLINKS),$(TARGET_ROOT_OUT)/$(call word-colon,2,$s)) 137endif 138 139# The init symlink must be a post install command of a file that is to TARGET_ROOT_OUT. 140# Since init.environ.rc is required for init and satisfies that requirement, we hijack it to create the symlink. 141LOCAL_POST_INSTALL_CMD += ; ln -sf /system/bin/init $(TARGET_ROOT_OUT)/init 142ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/init 143 144ALL_DEFAULT_INSTALLED_MODULES += $(ALL_ROOTDIR_SYMLINKS) 145 146include $(BUILD_SYSTEM)/base_rules.mk 147 148$(ALL_ROOTDIR_SYMLINKS): $(LOCAL_BUILT_MODULE) 149 150init.environ.rc-soong := $(call intermediates-dir-for,ETC,init.environ.rc-soong)/init.environ.rc-soong 151$(eval $(call copy-one-file,$(init.environ.rc-soong),$(LOCAL_BUILT_MODULE))) 152init.environ.rc-soong := 153