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