• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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