Android.mk revision 6b369bee69fda98e52c580d95e94fe820a44189c
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)
11
12include $(BUILD_PREBUILT)
13
14#######################################
15# init-debug.rc
16include $(CLEAR_VARS)
17
18LOCAL_MODULE := init-debug.rc
19LOCAL_SRC_FILES := $(LOCAL_MODULE)
20LOCAL_MODULE_CLASS := ETC
21LOCAL_MODULE_TAGS := debug
22LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/init
23
24include $(BUILD_PREBUILT)
25
26#######################################
27# asan.options
28ifneq ($(filter address,$(SANITIZE_TARGET)),)
29
30include $(CLEAR_VARS)
31
32LOCAL_MODULE := asan.options
33LOCAL_MODULE_CLASS := ETC
34LOCAL_SRC_FILES := $(LOCAL_MODULE)
35LOCAL_MODULE_PATH := $(TARGET_OUT)
36
37include $(BUILD_PREBUILT)
38
39# Modules for asan.options.X files.
40
41ASAN_OPTIONS_FILES :=
42
43define create-asan-options-module
44include $$(CLEAR_VARS)
45LOCAL_MODULE := asan.options.$(1)
46ASAN_OPTIONS_FILES += asan.options.$(1)
47LOCAL_MODULE_CLASS := ETC
48# The asan.options.off.template tries to turn off as much of ASAN as is possible.
49LOCAL_SRC_FILES := asan.options.off.template
50LOCAL_MODULE_PATH := $(TARGET_OUT)
51include $$(BUILD_PREBUILT)
52endef
53
54# Pretty comprehensive set of native services. This list is helpful if all that's to be checked is an
55# app.
56ifeq ($(SANITIZE_LITE_SERVICES),true)
57SANITIZE_ASAN_OPTIONS_FOR := \
58  adbd \
59  ATFWD-daemon \
60  audioserver \
61  bridgemgrd \
62  cameraserver \
63  cnd \
64  debuggerd \
65  dex2oat \
66  drmserver \
67  fingerprintd \
68  gatekeeperd \
69  installd \
70  keystore \
71  lmkd \
72  logcat \
73  logd \
74  lowi-server \
75  media.codec \
76  mediadrmserver \
77  media.extractor \
78  mediaserver \
79  mm-qcamera-daemon \
80  mpdecision \
81  netmgrd \
82  perfd \
83  perfprofd \
84  qmuxd \
85  qseecomd \
86  rild \
87  sdcard \
88  servicemanager \
89  slim_daemon \
90  surfaceflinger \
91  thermal-engine \
92  time_daemon \
93  update_engine \
94  vold \
95  wpa_supplicant \
96  zip
97endif
98
99ifneq ($(SANITIZE_ASAN_OPTIONS_FOR),)
100  $(foreach binary, $(SANITIZE_ASAN_OPTIONS_FOR), $(eval $(call create-asan-options-module,$(binary))))
101endif
102
103# ASAN extration.
104ASAN_EXTRACT_FILES :=
105ifeq ($(SANITIZE_TARGET_SYSTEM),true)
106include $(CLEAR_VARS)
107LOCAL_MODULE:= asan_extract
108LOCAL_MODULE_TAGS := optional
109LOCAL_MODULE_CLASS := EXECUTABLES
110LOCAL_SRC_FILES := asan_extract.sh
111LOCAL_INIT_RC := asan_extract.rc
112# We need bzip2 on device for extraction.
113LOCAL_REQUIRED_MODULES := bzip2
114include $(BUILD_PREBUILT)
115ASAN_EXTRACT_FILES := asan_extract
116endif
117
118endif
119
120#######################################
121# init.environ.rc
122
123include $(CLEAR_VARS)
124LOCAL_MODULE_CLASS := ETC
125LOCAL_MODULE := init.environ.rc
126LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
127
128EXPORT_GLOBAL_ASAN_OPTIONS :=
129ifneq ($(filter address,$(SANITIZE_TARGET)),)
130  EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options
131  LOCAL_REQUIRED_MODULES := asan.options $(ASAN_OPTIONS_FILES) $(ASAN_EXTRACT_FILES)
132endif
133
134EXPORT_GLOBAL_GCOV_OPTIONS :=
135ifeq ($(NATIVE_COVERAGE),true)
136  EXPORT_GLOBAL_GCOV_OPTIONS := export GCOV_PREFIX /data/misc/gcov
137endif
138
139# Put it here instead of in init.rc module definition,
140# because init.rc is conditionally included.
141#
142# create some directories (some are mount points) and symlinks
143LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
144    sbin dev proc sys system data oem acct config storage mnt $(BOARD_ROOT_EXTRA_FOLDERS)); \
145    ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \
146    ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \
147    ln -sf /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \
148    ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard
149ifdef BOARD_USES_VENDORIMAGE
150  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor
151else
152  LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor
153endif
154ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
155  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache
156else
157  LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache
158endif
159ifdef BOARD_ROOT_EXTRA_SYMLINKS
160# BOARD_ROOT_EXTRA_SYMLINKS is a list of <target>:<link_name>.
161  LOCAL_POST_INSTALL_CMD += $(foreach s, $(BOARD_ROOT_EXTRA_SYMLINKS),\
162    $(eval p := $(subst :,$(space),$(s)))\
163    ; mkdir -p $(dir $(TARGET_ROOT_OUT)/$(word 2,$(p))) \
164    ; ln -sf $(word 1,$(p)) $(TARGET_ROOT_OUT)/$(word 2,$(p)))
165endif
166# The A/B updater uses a top-level /postinstall directory to mount the new
167# system before reboot.
168ifeq ($(AB_OTA_UPDATER),true)
169  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/postinstall
170endif
171
172include $(BUILD_SYSTEM)/base_rules.mk
173
174# Regenerate init.environ.rc if PRODUCT_BOOTCLASSPATH has changed.
175bcp_md5 := $(word 1, $(shell echo $(PRODUCT_BOOTCLASSPATH) $(PRODUCT_SYSTEM_SERVER_CLASSPATH) | $(MD5SUM)))
176bcp_dep := $(intermediates)/$(bcp_md5).bcp.dep
177$(bcp_dep) :
178	$(hide) mkdir -p $(dir $@) && rm -rf $(dir $@)*.bcp.dep && touch $@
179
180$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in $(bcp_dep)
181	@echo "Generate: $< -> $@"
182	@mkdir -p $(dir $@)
183	$(hide) sed -e 's?%BOOTCLASSPATH%?$(PRODUCT_BOOTCLASSPATH)?g' $< >$@
184	$(hide) sed -i -e 's?%SYSTEMSERVERCLASSPATH%?$(PRODUCT_SYSTEM_SERVER_CLASSPATH)?g' $@
185	$(hide) sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?$(EXPORT_GLOBAL_ASAN_OPTIONS)?g' $@
186	$(hide) sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?$(EXPORT_GLOBAL_GCOV_OPTIONS)?g' $@
187
188bcp_md5 :=
189bcp_dep :=
190
191#######################################
192# ld.config.txt
193include $(CLEAR_VARS)
194
195_enforce_vndk_at_runtime := false
196
197ifdef BOARD_VNDK_VERSION
198ifneq ($(BOARD_VNDK_RUNTIME_DISABLE),true)
199  _enforce_vndk_at_runtime := true
200endif
201endif
202
203ifeq ($(_enforce_vndk_at_runtime),true)
204LOCAL_MODULE := ld.config.txt
205LOCAL_MODULE_CLASS := ETC
206LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
207LOCAL_MODULE_STEM := $(LOCAL_MODULE)
208include $(BUILD_SYSTEM)/base_rules.mk
209
210llndk_libraries := $(subst $(space),:,$(addsuffix .so,\
211$(filter-out $(VNDK_PRIVATE_LIBRARIES),$(LLNDK_LIBRARIES))))
212
213vndk_sameprocess_libraries := $(subst $(space),:,$(addsuffix .so,\
214$(filter-out $(VNDK_PRIVATE_LIBRARIES),$(VNDK_SAMEPROCESS_LIBRARIES))))
215
216vndk_core_libraries := $(subst $(space),:,$(addsuffix .so,\
217$(filter-out $(VNDK_PRIVATE_LIBRARIES),$(VNDK_CORE_LIBRARIES))))
218
219sanitizer_runtime_libraries := $(subst $(space),:,$(addsuffix .so,\
220$(ADDRESS_SANITIZER_RUNTIME_LIBRARY) \
221$(UBSAN_RUNTIME_LIBRARY) \
222$(TSAN_RUNTIME_LIBRARY) \
223$(2ND_ADDRESS_SANITIZER_RUNTIME_LIBRARY) \
224$(2ND_UBSAN_RUNTIME_LIBRARY) \
225$(2ND_TSAN_RUNTIME_LIBRARY)))
226
227$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(llndk_libraries)
228$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(vndk_sameprocess_libraries)
229$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_PRIVATE_LIBRARIES := $(llndk_private_libraries)
230$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_CORE_LIBRARIES := $(vndk_core_libraries)
231$(LOCAL_BUILT_MODULE): PRIVATE_SANITIZER_RUNTIME_LIBRARIES := $(sanitizer_runtime_libraries)
232$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/etc/ld.config.txt.in
233	@echo "Generate: $< -> $@"
234	@mkdir -p $(dir $@)
235	$(hide) sed -e 's?%LLNDK_LIBRARIES%?$(PRIVATE_LLNDK_LIBRARIES)?g' $< >$@
236	$(hide) sed -i -e 's?%VNDK_SAMEPROCESS_LIBRARIES%?$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES)?g' $@
237	$(hide) sed -i -e 's?%VNDK_CORE_LIBRARIES%?$(PRIVATE_VNDK_CORE_LIBRARIES)?g' $@
238	$(hide) sed -i -e 's?%SANITIZER_RUNTIME_LIBRARIES%?$(PRIVATE_SANITIZER_RUNTIME_LIBRARIES)?g' $@
239
240llndk_libraries :=
241vndk_sameprocess_libraries :=
242vndk_core_libraries :=
243sanitizer_runtime_libraries :=
244else # if _enforce_vndk_at_runtime is not true
245
246LOCAL_MODULE := ld.config.txt
247ifeq ($(PRODUCT_TREBLE_LINKER_NAMESPACES)|$(SANITIZE_TARGET),true|)
248LOCAL_SRC_FILES := etc/ld.config.txt
249else
250LOCAL_SRC_FILES := etc/ld.config.legacy.txt
251endif
252LOCAL_MODULE_CLASS := ETC
253LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
254LOCAL_MODULE_STEM := $(LOCAL_MODULE)
255include $(BUILD_PREBUILT)
256endif
257
258#######################################
259# llndk.libraries.txt
260include $(CLEAR_VARS)
261LOCAL_MODULE := llndk.libraries.txt
262LOCAL_MODULE_CLASS := ETC
263LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
264LOCAL_MODULE_STEM := $(LOCAL_MODULE)
265include $(BUILD_SYSTEM)/base_rules.mk
266$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(LLNDK_LIBRARIES)
267$(LOCAL_BUILT_MODULE):
268	@echo "Generate: $@"
269	@mkdir -p $(dir $@)
270	$(hide) echo -n > $@
271	$(hide) $(foreach lib,$(PRIVATE_LLNDK_LIBRARIES), \
272		echo $(lib).so >> $@;)
273
274#######################################
275# vndksp.libraries.txt
276include $(CLEAR_VARS)
277LOCAL_MODULE := vndksp.libraries.txt
278LOCAL_MODULE_CLASS := ETC
279LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
280LOCAL_MODULE_STEM := $(LOCAL_MODULE)
281include $(BUILD_SYSTEM)/base_rules.mk
282$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(VNDK_SAMEPROCESS_LIBRARIES)
283$(LOCAL_BUILT_MODULE):
284	@echo "Generate: $@"
285	@mkdir -p $(dir $@)
286	$(hide) echo -n > $@
287	$(hide) $(foreach lib,$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES), \
288		echo $(lib).so >> $@;)
289