1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectLOCAL_PATH:= $(call my-dir)
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
35748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang#######################################
45748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# init.rc
55748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wanginclude $(CLEAR_VARS)
6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
75748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE := init.rc
85748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_SRC_FILES := $(LOCAL_MODULE)
95748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE_CLASS := ETC
105748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
1144b65d047cc39baf30e21bfd8dd438f6bc1f77f5Colin Cross
125748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wanginclude $(BUILD_PREBUILT)
130d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov
140d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov#######################################
157864e3675161ace4d6e54f32a822a90d2e1960f0Mark Salyzyn# init-debug.rc
167864e3675161ace4d6e54f32a822a90d2e1960f0Mark Salyzyninclude $(CLEAR_VARS)
177864e3675161ace4d6e54f32a822a90d2e1960f0Mark Salyzyn
187864e3675161ace4d6e54f32a822a90d2e1960f0Mark SalyzynLOCAL_MODULE := init-debug.rc
197864e3675161ace4d6e54f32a822a90d2e1960f0Mark SalyzynLOCAL_SRC_FILES := $(LOCAL_MODULE)
207864e3675161ace4d6e54f32a822a90d2e1960f0Mark SalyzynLOCAL_MODULE_CLASS := ETC
217864e3675161ace4d6e54f32a822a90d2e1960f0Mark SalyzynLOCAL_MODULE_TAGS := debug
227864e3675161ace4d6e54f32a822a90d2e1960f0Mark SalyzynLOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/init
237864e3675161ace4d6e54f32a822a90d2e1960f0Mark Salyzyn
247864e3675161ace4d6e54f32a822a90d2e1960f0Mark Salyzyninclude $(BUILD_PREBUILT)
257864e3675161ace4d6e54f32a822a90d2e1960f0Mark Salyzyn
267864e3675161ace4d6e54f32a822a90d2e1960f0Mark Salyzyn#######################################
270d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov# asan.options
285039d8cd2180e3ba3c8f320a616a1b84f499e0cfIvan Krasinifneq ($(filter address,$(SANITIZE_TARGET)),)
298ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe
300d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanovinclude $(CLEAR_VARS)
310d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov
320d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii StepanovLOCAL_MODULE := asan.options
330d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii StepanovLOCAL_MODULE_CLASS := ETC
340d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii StepanovLOCAL_SRC_FILES := $(LOCAL_MODULE)
350d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii StepanovLOCAL_MODULE_PATH := $(TARGET_OUT)
360d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov
370d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanovinclude $(BUILD_PREBUILT)
388ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe
398ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe# Modules for asan.options.X files.
408ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe
418ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas GampeASAN_OPTIONS_FILES :=
428ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe
438ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampedefine create-asan-options-module
448ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampeinclude $$(CLEAR_VARS)
458ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas GampeLOCAL_MODULE := asan.options.$(1)
468ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas GampeASAN_OPTIONS_FILES += asan.options.$(1)
478ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas GampeLOCAL_MODULE_CLASS := ETC
488ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe# The asan.options.off.template tries to turn off as much of ASAN as is possible.
498ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas GampeLOCAL_SRC_FILES := asan.options.off.template
508ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas GampeLOCAL_MODULE_PATH := $(TARGET_OUT)
518ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampeinclude $$(BUILD_PREBUILT)
528ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampeendef
538ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe
548ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe# Pretty comprehensive set of native services. This list is helpful if all that's to be checked is an
558ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe# app.
5621bb2e0388059dce89e9767de0d52f580081497dAndreas Gampeifeq ($(SANITIZE_LITE_SERVICES),true)
578ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas GampeSANITIZE_ASAN_OPTIONS_FOR := \
588ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  adbd \
598ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  ATFWD-daemon \
608ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  audioserver \
618ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  bridgemgrd \
628ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  cameraserver \
638ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  cnd \
648ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  debuggerd \
658ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  debuggerd64 \
668ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  dex2oat \
678ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  drmserver \
688ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  fingerprintd \
698ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  gatekeeperd \
708ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  installd \
718ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  keystore \
728ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  lmkd \
738ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  logcat \
748ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  logd \
758ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  lowi-server \
768ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  media.codec \
778ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  mediadrmserver \
788ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  media.extractor \
798ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  mediaserver \
808ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  mm-qcamera-daemon \
818ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  mpdecision \
828ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  netmgrd \
838ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  perfd \
848ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  perfprofd \
858ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  qmuxd \
868ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  qseecomd \
878ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  rild \
888ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  sdcard \
898ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  servicemanager \
908ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  slim_daemon \
918ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  surfaceflinger \
928ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  thermal-engine \
938ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  time_daemon \
948ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  update_engine \
958ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  vold \
968ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  wpa_supplicant \
978ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  zip
988ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampeendif
998ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe
1008ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampeifneq ($(SANITIZE_ASAN_OPTIONS_FOR),)
1018ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe  $(foreach binary, $(SANITIZE_ASAN_OPTIONS_FOR), $(eval $(call create-asan-options-module,$(binary))))
1028ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampeendif
1038ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe
104df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampe# ASAN extration.
105df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeASAN_EXTRACT_FILES :=
106df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampeifeq ($(SANITIZE_TARGET_SYSTEM),true)
107df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampeinclude $(CLEAR_VARS)
108df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeLOCAL_MODULE:= asan_extract
109df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeLOCAL_MODULE_TAGS := optional
110df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeLOCAL_MODULE_CLASS := EXECUTABLES
111df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeLOCAL_SRC_FILES := asan_extract.sh
112df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeLOCAL_INIT_RC := asan_extract.rc
113df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampe# We need bzip2 on device for extraction.
114df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeLOCAL_REQUIRED_MODULES := bzip2
115df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampeinclude $(BUILD_PREBUILT)
116df5496aa65c3a890c6bb584f052c97324330b9caAndreas GampeASAN_EXTRACT_FILES := asan_extract
117df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampeendif
118df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampe
1190d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanovendif
1200d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov
1215748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang#######################################
1225748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# init.environ.rc
1234f5d5176a3d732baebe92ab3748a12166406a198Mike Lockwood
1245748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wanginclude $(CLEAR_VARS)
1255748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE_CLASS := ETC
1265748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE := init.environ.rc
1275748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
1290d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii StepanovEXPORT_GLOBAL_ASAN_OPTIONS :=
1305039d8cd2180e3ba3c8f320a616a1b84f499e0cfIvan Krasinifneq ($(filter address,$(SANITIZE_TARGET)),)
1310d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov  EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options
132df5496aa65c3a890c6bb584f052c97324330b9caAndreas Gampe  LOCAL_REQUIRED_MODULES := asan.options $(ASAN_OPTIONS_FILES) $(ASAN_EXTRACT_FILES)
1330d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanovendif
1340b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell
1350b364732723e5dcecc1a74a4f592e8afcbadd2baRyan CampbellEXPORT_GLOBAL_GCOV_OPTIONS :=
1360b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbellifeq ($(NATIVE_COVERAGE),true)
1370b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell  EXPORT_GLOBAL_GCOV_OPTIONS := export GCOV_PREFIX /data/misc/gcov
1380b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbellendif
1390b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell
1405748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# Put it here instead of in init.rc module definition,
1415748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# because init.rc is conditionally included.
1425748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang#
143595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg# create some directories (some are mount points) and symlinks
14452b59159458a574e11f03940840d63feeb648883Daniel RosenbergLOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
145c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjin    sbin dev proc sys system data oem acct config storage mnt root $(BOARD_ROOT_EXTRA_FOLDERS)); \
146595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg    ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \
147c4084c669495fd1b41ce8b6568c71b1f46d26969Nick Kralevich    ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \
148595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg    ln -sf /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \
149595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg    ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard
1500790431f754aed8f00fb1af9827e21aa1a506af9Dan Willemsenifdef BOARD_USES_VENDORIMAGE
15152b59159458a574e11f03940840d63feeb648883Daniel Rosenberg  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor
15207b69961f2291f002f15cc4168726ba1e306914cJunichi Uekawaelse
15307b69961f2291f002f15cc4168726ba1e306914cJunichi Uekawa  LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor
15452b59159458a574e11f03940840d63feeb648883Daniel Rosenbergendif
155c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjinifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
156c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjin  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache
157c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjinelse
158c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjin  LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache
159c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjinendif
16052b59159458a574e11f03940840d63feeb648883Daniel Rosenbergifdef BOARD_ROOT_EXTRA_SYMLINKS
16152b59159458a574e11f03940840d63feeb648883Daniel Rosenberg# BOARD_ROOT_EXTRA_SYMLINKS is a list of <target>:<link_name>.
16252b59159458a574e11f03940840d63feeb648883Daniel Rosenberg  LOCAL_POST_INSTALL_CMD += $(foreach s, $(BOARD_ROOT_EXTRA_SYMLINKS),\
16352b59159458a574e11f03940840d63feeb648883Daniel Rosenberg    $(eval p := $(subst :,$(space),$(s)))\
16452b59159458a574e11f03940840d63feeb648883Daniel Rosenberg    ; mkdir -p $(dir $(TARGET_ROOT_OUT)/$(word 2,$(p))) \
16552b59159458a574e11f03940840d63feeb648883Daniel Rosenberg    ; ln -sf $(word 1,$(p)) $(TARGET_ROOT_OUT)/$(word 2,$(p)))
166595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenbergendif
167e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymo# The A/B updater uses a top-level /postinstall directory to mount the new
168e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymo# system before reboot.
169e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymoifeq ($(AB_OTA_UPDATER),true)
170e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymo  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/postinstall
171e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymoendif
1725748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang
1735748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wanginclude $(BUILD_SYSTEM)/base_rules.mk
1745748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang
1757011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang# Regenerate init.environ.rc if PRODUCT_BOOTCLASSPATH has changed.
1761fabc35cb51e6f019141c25430e4e285741625fdNarayan Kamathbcp_md5 := $(word 1, $(shell echo $(PRODUCT_BOOTCLASSPATH) $(PRODUCT_SYSTEM_SERVER_CLASSPATH) | $(MD5SUM)))
1777011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wangbcp_dep := $(intermediates)/$(bcp_md5).bcp.dep
1787011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang$(bcp_dep) :
1797011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang	$(hide) mkdir -p $(dir $@) && rm -rf $(dir $@)*.bcp.dep && touch $@
1807011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang
1817011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in $(bcp_dep)
1825748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang	@echo "Generate: $< -> $@"
1835748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang	@mkdir -p $(dir $@)
1845748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang	$(hide) sed -e 's?%BOOTCLASSPATH%?$(PRODUCT_BOOTCLASSPATH)?g' $< >$@
1851fabc35cb51e6f019141c25430e4e285741625fdNarayan Kamath	$(hide) sed -i -e 's?%SYSTEMSERVERCLASSPATH%?$(PRODUCT_SYSTEM_SERVER_CLASSPATH)?g' $@
1861cbe3d944a93fa3a0f0d7a444bb69c644c83f385Evgenii Stepanov	$(hide) sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?$(EXPORT_GLOBAL_ASAN_OPTIONS)?g' $@
1870b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell	$(hide) sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?$(EXPORT_GLOBAL_GCOV_OPTIONS)?g' $@
1885748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang
1897011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wangbcp_md5 :=
1907011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wangbcp_dep :=
191450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Park
1925748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang#######################################
193450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Park# ld.config.txt
194450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkinclude $(CLEAR_VARS)
195450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Park
196367984602abab743630d1fba8e4940f0a69e678bJiyong Park_enforce_vndk_at_runtime := false
197367984602abab743630d1fba8e4940f0a69e678bJiyong Park
198367984602abab743630d1fba8e4940f0a69e678bJiyong Parkifdef BOARD_VNDK_VERSION
199367984602abab743630d1fba8e4940f0a69e678bJiyong Parkifneq ($(BOARD_VNDK_RUNTIME_DISABLE),true)
200367984602abab743630d1fba8e4940f0a69e678bJiyong Park  _enforce_vndk_at_runtime := true
201367984602abab743630d1fba8e4940f0a69e678bJiyong Parkendif
202367984602abab743630d1fba8e4940f0a69e678bJiyong Parkendif
203367984602abab743630d1fba8e4940f0a69e678bJiyong Park
204367984602abab743630d1fba8e4940f0a69e678bJiyong Parkifeq ($(_enforce_vndk_at_runtime),true)
205367984602abab743630d1fba8e4940f0a69e678bJiyong ParkLOCAL_MODULE := ld.config.txt
206367984602abab743630d1fba8e4940f0a69e678bJiyong ParkLOCAL_MODULE_CLASS := ETC
207367984602abab743630d1fba8e4940f0a69e678bJiyong ParkLOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
208367984602abab743630d1fba8e4940f0a69e678bJiyong ParkLOCAL_MODULE_STEM := $(LOCAL_MODULE)
209367984602abab743630d1fba8e4940f0a69e678bJiyong Parkinclude $(BUILD_SYSTEM)/base_rules.mk
210367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_lib_md5 := $(word 1, $(shell echo $(LLNDK_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) | $(MD5SUM)))
211367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_lib_dep := $(intermediates)/$(vndk_lib_md5).dep
212367984602abab743630d1fba8e4940f0a69e678bJiyong Park$(vndk_lib_dep):
213367984602abab743630d1fba8e4940f0a69e678bJiyong Park	$(hide) mkdir -p $(dir $@) && rm -rf $(dir $@)*.dep && touch $@
214367984602abab743630d1fba8e4940f0a69e678bJiyong Park
215367984602abab743630d1fba8e4940f0a69e678bJiyong Parkllndk_libraries := $(subst $(space),:,$(addsuffix .so,$(LLNDK_LIBRARIES)))
216367984602abab743630d1fba8e4940f0a69e678bJiyong Park
217367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_sameprocess_libraries := $(subst $(space),:,$(addsuffix .so,$(VNDK_SAMEPROCESS_LIBRARIES)))
218367984602abab743630d1fba8e4940f0a69e678bJiyong Park
219367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_core_libraries := $(subst $(space),:,$(addsuffix .so,$(VNDK_CORE_LIBRARIES)))
220367984602abab743630d1fba8e4940f0a69e678bJiyong Park
221faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Parksanitizer_runtime_libraries := $(subst $(space),:,$(addsuffix .so,\
222faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park$(ADDRESS_SANITIZER_RUNTIME_LIBRARY) \
223faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park$(UBSAN_RUNTIME_LIBRARY) \
224faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park$(TSAN_RUNTIME_LIBRARY) \
225faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park$(2ND_ADDRESS_SANITIZER_RUNTIME_LIBRARY) \
226faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park$(2ND_UBSAN_RUNTIME_LIBRARY) \
227faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park$(2ND_TSAN_RUNTIME_LIBRARY)))
228faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park
229367984602abab743630d1fba8e4940f0a69e678bJiyong Park$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(llndk_libraries)
230367984602abab743630d1fba8e4940f0a69e678bJiyong Park$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(vndk_sameprocess_libraries)
231367984602abab743630d1fba8e4940f0a69e678bJiyong Park$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_PRIVATE_LIBRARIES := $(llndk_private_libraries)
232367984602abab743630d1fba8e4940f0a69e678bJiyong Park$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_CORE_LIBRARIES := $(vndk_core_libraries)
233faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park$(LOCAL_BUILT_MODULE): PRIVATE_SANITIZER_RUNTIME_LIBRARIES := $(sanitizer_runtime_libraries)
234367984602abab743630d1fba8e4940f0a69e678bJiyong Park$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/etc/ld.config.txt.in $(vndk_lib_dep)
235367984602abab743630d1fba8e4940f0a69e678bJiyong Park	@echo "Generate: $< -> $@"
236367984602abab743630d1fba8e4940f0a69e678bJiyong Park	@mkdir -p $(dir $@)
237367984602abab743630d1fba8e4940f0a69e678bJiyong Park	$(hide) sed -e 's?%LLNDK_LIBRARIES%?$(PRIVATE_LLNDK_LIBRARIES)?g' $< >$@
238367984602abab743630d1fba8e4940f0a69e678bJiyong Park	$(hide) sed -i -e 's?%VNDK_SAMEPROCESS_LIBRARIES%?$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES)?g' $@
239367984602abab743630d1fba8e4940f0a69e678bJiyong Park	$(hide) sed -i -e 's?%VNDK_CORE_LIBRARIES%?$(PRIVATE_VNDK_CORE_LIBRARIES)?g' $@
240faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Park	$(hide) sed -i -e 's?%SANITIZER_RUNTIME_LIBRARIES%?$(PRIVATE_SANITIZER_RUNTIME_LIBRARIES)?g' $@
241367984602abab743630d1fba8e4940f0a69e678bJiyong Park
242367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_lib_md5 :=
243367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_lib_dep :=
244367984602abab743630d1fba8e4940f0a69e678bJiyong Parkllndk_libraries :=
245367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_sameprocess_libraries :=
246367984602abab743630d1fba8e4940f0a69e678bJiyong Parkvndk_core_libraries :=
247faefa6bd3682a0e8f5de2184cca5960a82a00020Jiyong Parksanitizer_runtime_libraries :=
248367984602abab743630d1fba8e4940f0a69e678bJiyong Parkelse # if _enforce_vndk_at_runtime is not true
249367984602abab743630d1fba8e4940f0a69e678bJiyong Park
250450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE := ld.config.txt
251fff6f75fc1de2963254271d7d254e53ae187cadaJiyong Parkifeq ($(PRODUCT_FULL_TREBLE)|$(SANITIZE_TARGET),true|)
252450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_SRC_FILES := etc/ld.config.txt
253450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkelse
254450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_SRC_FILES := etc/ld.config.legacy.txt
255450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkendif
256450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE_CLASS := ETC
257450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
258450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE_STEM := $(LOCAL_MODULE)
259450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkinclude $(BUILD_PREBUILT)
260367984602abab743630d1fba8e4940f0a69e678bJiyong Parkendif
26126335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park
26226335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park#######################################
26326335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park# llndk.libraries.txt
26426335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkinclude $(CLEAR_VARS)
26526335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE := llndk.libraries.txt
26626335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE_CLASS := ETC
26726335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
26826335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE_STEM := $(LOCAL_MODULE)
26926335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkinclude $(BUILD_SYSTEM)/base_rules.mk
27026335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkllndk_md5 = $(word 1, $(shell echo $(LLNDK_LIBRARIES) | $(MD5SUM)))
27126335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkllndk_dep = $(intermediates)/$(llndk_md5).dep
27226335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park$(llndk_dep):
27326335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	$(hide) mkdir -p $(dir $@) && rm -rf $(dir $@)*.dep && touch $@
27426335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park
27526335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park$(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(LLNDK_LIBRARIES)
27626335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park$(LOCAL_BUILT_MODULE): $(llndk_dep)
27726335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	@echo "Generate: $@"
27826335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	@mkdir -p $(dir $@)
27926335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	$(hide) echo -n > $@
28026335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	$(hide) $(foreach lib,$(PRIVATE_LLNDK_LIBRARIES), \
28126335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park		echo $(lib).so >> $@;)
28226335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park
28326335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park#######################################
28426335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park# vndksp.libraries.txt
28526335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkinclude $(CLEAR_VARS)
28626335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE := vndksp.libraries.txt
28726335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE_CLASS := ETC
28826335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
28926335f89b1b25fd386adbc89edfcc600191b9e07Jiyong ParkLOCAL_MODULE_STEM := $(LOCAL_MODULE)
29026335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkinclude $(BUILD_SYSTEM)/base_rules.mk
29126335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkvndksp_md5 = $(word 1, $(shell echo $(LLNDK_LIBRARIES) | $(MD5SUM)))
29226335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Parkvndksp_dep = $(intermediates)/$(vndksp_md5).dep
29326335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park$(vndksp_dep):
29426335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	$(hide) mkdir -p $(dir $@) && rm -rf $(dir $@)*.dep && touch $@
29526335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park
29626335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park$(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(VNDK_SAMEPROCESS_LIBRARIES)
29726335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park$(LOCAL_BUILT_MODULE): $(vndksp_dep)
29826335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	@echo "Generate: $@"
29926335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	@mkdir -p $(dir $@)
30026335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	$(hide) echo -n > $@
30126335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park	$(hide) $(foreach lib,$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES), \
30226335f89b1b25fd386adbc89edfcc600191b9e07Jiyong Park		echo $(lib).so >> $@;)
303