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 acct 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 46ifdef BOARD_USES_VENDORIMAGE 47 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor 48else 49 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor 50 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/vendor 51endif 52ifdef BOARD_USES_PRODUCTIMAGE 53 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/product 54else 55 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/product $(TARGET_ROOT_OUT)/product 56 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/product 57endif 58ifdef BOARD_USES_SYSTEM_EXTIMAGE 59 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/system_ext 60else 61 LOCAL_POST_INSTALL_CMD += ; ln -sf /system/system_ext $(TARGET_ROOT_OUT)/system_ext 62 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/system_ext 63endif 64ifdef BOARD_USES_METADATA_PARTITION 65 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/metadata 66endif 67 68# For /odm partition. 69LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm 70# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 71# both devices with and without /odm partition. Those symlinks are for devices 72# without /odm partition. For devices with /odm partition, mount odm.img under 73# /odm will hide those symlinks. 74LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/app $(TARGET_ROOT_OUT)/odm/app 75LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/bin $(TARGET_ROOT_OUT)/odm/bin 76LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/etc $(TARGET_ROOT_OUT)/odm/etc 77LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/firmware $(TARGET_ROOT_OUT)/odm/firmware 78LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/framework $(TARGET_ROOT_OUT)/odm/framework 79LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib $(TARGET_ROOT_OUT)/odm/lib 80LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/lib64 $(TARGET_ROOT_OUT)/odm/lib64 81LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/overlay $(TARGET_ROOT_OUT)/odm/overlay 82LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/priv-app $(TARGET_ROOT_OUT)/odm/priv-app 83LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/odm/usr $(TARGET_ROOT_OUT)/odm/usr 84 85ALL_ROOTDIR_SYMLINKS += \ 86 $(TARGET_ROOT_OUT)/odm/app \ 87 $(TARGET_ROOT_OUT)/odm/bin \ 88 $(TARGET_ROOT_OUT)/odm/etc \ 89 $(TARGET_ROOT_OUT)/odm/firmware \ 90 $(TARGET_ROOT_OUT)/odm/framework \ 91 $(TARGET_ROOT_OUT)/odm/lib \ 92 $(TARGET_ROOT_OUT)/odm/lib64 \ 93 $(TARGET_ROOT_OUT)/odm/overlay \ 94 $(TARGET_ROOT_OUT)/odm/priv-app \ 95 $(TARGET_ROOT_OUT)/odm/usr 96 97 98# For /vendor_dlkm partition. 99LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor_dlkm 100# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 101# both devices with and without /vendor_dlkm partition. Those symlinks are for 102# devices without /vendor_dlkm partition. For devices with /vendor_dlkm 103# partition, mount vendor_dlkm.img under /vendor_dlkm will hide those symlinks. 104# Note that /vendor_dlkm/lib is omitted because vendor DLKMs should be accessed 105# via /vendor/lib/modules directly. 106LOCAL_POST_INSTALL_CMD += ; ln -sf /vendor/vendor_dlkm/etc $(TARGET_ROOT_OUT)/vendor_dlkm/etc 107ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/vendor_dlkm/etc 108 109# For /odm_dlkm partition. 110LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm_dlkm 111# For Treble Generic System Image (GSI), system-as-root GSI needs to work on 112# both devices with and without /odm_dlkm partition. Those symlinks are for 113# devices without /odm_dlkm partition. For devices with /odm_dlkm 114# partition, mount odm_dlkm.img under /odm_dlkm will hide those symlinks. 115# Note that /odm_dlkm/lib is omitted because odm DLKMs should be accessed 116# via /odm/lib/modules directly. 117LOCAL_POST_INSTALL_CMD += ; ln -sf /odm/odm_dlkm/etc $(TARGET_ROOT_OUT)/odm_dlkm/etc 118ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/odm_dlkm/etc 119 120# For /system_dlkm partition 121LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/system_dlkm 122 123ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 124 LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache 125else 126 LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache 127 ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/cache 128endif 129ifdef BOARD_ROOT_EXTRA_SYMLINKS 130# BOARD_ROOT_EXTRA_SYMLINKS is a list of <target>:<link_name>. 131 LOCAL_POST_INSTALL_CMD += $(foreach s, $(BOARD_ROOT_EXTRA_SYMLINKS),\ 132 $(eval p := $(subst :,$(space),$(s)))\ 133 ; mkdir -p $(dir $(TARGET_ROOT_OUT)/$(word 2,$(p))) \ 134 ; ln -sf $(word 1,$(p)) $(TARGET_ROOT_OUT)/$(word 2,$(p))) 135 ALL_ROOTDIR_SYMLINKS += $(foreach s,$(BOARD_ROOT_EXTRA_SYMLINKS),$(TARGET_ROOT_OUT)/$(call word-colon,2,$s)) 136endif 137 138# The init symlink must be a post install command of a file that is to TARGET_ROOT_OUT. 139# Since init.environ.rc is required for init and satisfies that requirement, we hijack it to create the symlink. 140LOCAL_POST_INSTALL_CMD += ; ln -sf /system/bin/init $(TARGET_ROOT_OUT)/init 141ALL_ROOTDIR_SYMLINKS += $(TARGET_ROOT_OUT)/init 142 143ALL_DEFAULT_INSTALLED_MODULES += $(ALL_ROOTDIR_SYMLINKS) 144 145include $(BUILD_SYSTEM)/base_rules.mk 146 147$(ALL_ROOTDIR_SYMLINKS): $(LOCAL_BUILT_MODULE) 148 149init.environ.rc-soong := $(call intermediates-dir-for,ETC,init.environ.rc-soong)/init.environ.rc-soong 150$(eval $(call copy-one-file,$(init.environ.rc-soong),$(LOCAL_BUILT_MODULE))) 151init.environ.rc-soong := 152