Android.mk revision 74857cccd2d7de08c74ec8a5b882cc00fefbf9f8
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,$(LLNDK_LIBRARIES))) 211 212vndk_sameprocess_libraries := $(subst $(space),:,$(addsuffix .so,$(VNDK_SAMEPROCESS_LIBRARIES))) 213 214vndk_core_libraries := $(subst $(space),:,$(addsuffix .so,$(VNDK_CORE_LIBRARIES))) 215 216sanitizer_runtime_libraries := $(subst $(space),:,$(addsuffix .so,\ 217$(ADDRESS_SANITIZER_RUNTIME_LIBRARY) \ 218$(UBSAN_RUNTIME_LIBRARY) \ 219$(TSAN_RUNTIME_LIBRARY) \ 220$(2ND_ADDRESS_SANITIZER_RUNTIME_LIBRARY) \ 221$(2ND_UBSAN_RUNTIME_LIBRARY) \ 222$(2ND_TSAN_RUNTIME_LIBRARY))) 223 224$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(llndk_libraries) 225$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(vndk_sameprocess_libraries) 226$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_PRIVATE_LIBRARIES := $(llndk_private_libraries) 227$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_CORE_LIBRARIES := $(vndk_core_libraries) 228$(LOCAL_BUILT_MODULE): PRIVATE_SANITIZER_RUNTIME_LIBRARIES := $(sanitizer_runtime_libraries) 229$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/etc/ld.config.txt.in 230 @echo "Generate: $< -> $@" 231 @mkdir -p $(dir $@) 232 $(hide) sed -e 's?%LLNDK_LIBRARIES%?$(PRIVATE_LLNDK_LIBRARIES)?g' $< >$@ 233 $(hide) sed -i -e 's?%VNDK_SAMEPROCESS_LIBRARIES%?$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES)?g' $@ 234 $(hide) sed -i -e 's?%VNDK_CORE_LIBRARIES%?$(PRIVATE_VNDK_CORE_LIBRARIES)?g' $@ 235 $(hide) sed -i -e 's?%SANITIZER_RUNTIME_LIBRARIES%?$(PRIVATE_SANITIZER_RUNTIME_LIBRARIES)?g' $@ 236 237llndk_libraries := 238vndk_sameprocess_libraries := 239vndk_core_libraries := 240sanitizer_runtime_libraries := 241else # if _enforce_vndk_at_runtime is not true 242 243LOCAL_MODULE := ld.config.txt 244ifeq ($(PRODUCT_TREBLE_LINKER_NAMESPACES)|$(SANITIZE_TARGET),true|) 245LOCAL_SRC_FILES := etc/ld.config.txt 246else 247LOCAL_SRC_FILES := etc/ld.config.legacy.txt 248endif 249LOCAL_MODULE_CLASS := ETC 250LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 251LOCAL_MODULE_STEM := $(LOCAL_MODULE) 252include $(BUILD_PREBUILT) 253endif 254 255####################################### 256# llndk.libraries.txt 257include $(CLEAR_VARS) 258LOCAL_MODULE := llndk.libraries.txt 259LOCAL_MODULE_CLASS := ETC 260LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 261LOCAL_MODULE_STEM := $(LOCAL_MODULE) 262include $(BUILD_SYSTEM)/base_rules.mk 263$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(LLNDK_LIBRARIES) 264$(LOCAL_BUILT_MODULE): 265 @echo "Generate: $@" 266 @mkdir -p $(dir $@) 267 $(hide) echo -n > $@ 268 $(hide) $(foreach lib,$(PRIVATE_LLNDK_LIBRARIES), \ 269 echo $(lib).so >> $@;) 270 271####################################### 272# vndksp.libraries.txt 273include $(CLEAR_VARS) 274LOCAL_MODULE := vndksp.libraries.txt 275LOCAL_MODULE_CLASS := ETC 276LOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 277LOCAL_MODULE_STEM := $(LOCAL_MODULE) 278include $(BUILD_SYSTEM)/base_rules.mk 279$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(VNDK_SAMEPROCESS_LIBRARIES) 280$(LOCAL_BUILT_MODULE): 281 @echo "Generate: $@" 282 @mkdir -p $(dir $@) 283 $(hide) echo -n > $@ 284 $(hide) $(foreach lib,$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES), \ 285 echo $(lib).so >> $@;) 286