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 1040d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanovendif 1050d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov 1065748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang####################################### 1075748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# init.environ.rc 1084f5d5176a3d732baebe92ab3748a12166406a198Mike Lockwood 1095748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wanginclude $(CLEAR_VARS) 1105748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE_CLASS := ETC 1115748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE := init.environ.rc 1125748ee972de22e3a53bd3ef7d998ed15ea726a69Ying WangLOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 1140d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii StepanovEXPORT_GLOBAL_ASAN_OPTIONS := 1155039d8cd2180e3ba3c8f320a616a1b84f499e0cfIvan Krasinifneq ($(filter address,$(SANITIZE_TARGET)),) 1160d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanov EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options 1178ccc1ad0f71d0587edfbc4c637d6d8de196fe7dfAndreas Gampe LOCAL_REQUIRED_MODULES := asan.options $(ASAN_OPTIONS_FILES) 1180d2dde57fef4db0d0e51369a1d9d9cfa5deb7235Evgenii Stepanovendif 1190b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell 1200b364732723e5dcecc1a74a4f592e8afcbadd2baRyan CampbellEXPORT_GLOBAL_GCOV_OPTIONS := 1210b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbellifeq ($(NATIVE_COVERAGE),true) 1220b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell EXPORT_GLOBAL_GCOV_OPTIONS := export GCOV_PREFIX /data/misc/gcov 1230b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbellendif 1240b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell 1255748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# Put it here instead of in init.rc module definition, 1265748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# because init.rc is conditionally included. 1275748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang# 128595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg# create some directories (some are mount points) and symlinks 12952b59159458a574e11f03940840d63feeb648883Daniel RosenbergLOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \ 130c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjin sbin dev proc sys system data oem acct config storage mnt root $(BOARD_ROOT_EXTRA_FOLDERS)); \ 131595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \ 132c4084c669495fd1b41ce8b6568c71b1f46d26969Nick Kralevich ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \ 133595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg ln -sf /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \ 134595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenberg ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard 1350790431f754aed8f00fb1af9827e21aa1a506af9Dan Willemsenifdef BOARD_USES_VENDORIMAGE 13652b59159458a574e11f03940840d63feeb648883Daniel Rosenberg LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor 13707b69961f2291f002f15cc4168726ba1e306914cJunichi Uekawaelse 13807b69961f2291f002f15cc4168726ba1e306914cJunichi Uekawa LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor 13952b59159458a574e11f03940840d63feeb648883Daniel Rosenbergendif 140c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjinifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 141c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjin LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache 142c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjinelse 143c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjin LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache 144c6535a343f0b0bdd0f4171f0b4c9be401beebf77Patrick Tjinendif 14552b59159458a574e11f03940840d63feeb648883Daniel Rosenbergifdef BOARD_ROOT_EXTRA_SYMLINKS 14652b59159458a574e11f03940840d63feeb648883Daniel Rosenberg# BOARD_ROOT_EXTRA_SYMLINKS is a list of <target>:<link_name>. 14752b59159458a574e11f03940840d63feeb648883Daniel Rosenberg LOCAL_POST_INSTALL_CMD += $(foreach s, $(BOARD_ROOT_EXTRA_SYMLINKS),\ 14852b59159458a574e11f03940840d63feeb648883Daniel Rosenberg $(eval p := $(subst :,$(space),$(s)))\ 14952b59159458a574e11f03940840d63feeb648883Daniel Rosenberg ; mkdir -p $(dir $(TARGET_ROOT_OUT)/$(word 2,$(p))) \ 15052b59159458a574e11f03940840d63feeb648883Daniel Rosenberg ; ln -sf $(word 1,$(p)) $(TARGET_ROOT_OUT)/$(word 2,$(p))) 151595003a3d06a13862052ef2f4f578371dae5ad65Daniel Rosenbergendif 152e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymo# The A/B updater uses a top-level /postinstall directory to mount the new 153e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymo# system before reboot. 154e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymoifeq ($(AB_OTA_UPDATER),true) 155e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymo LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/postinstall 156e120b471acbe136e27e257fdf493590e1cc4ba73Alex Deymoendif 1575748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang 1585748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wanginclude $(BUILD_SYSTEM)/base_rules.mk 1595748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang 1607011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang# Regenerate init.environ.rc if PRODUCT_BOOTCLASSPATH has changed. 1611fabc35cb51e6f019141c25430e4e285741625fdNarayan Kamathbcp_md5 := $(word 1, $(shell echo $(PRODUCT_BOOTCLASSPATH) $(PRODUCT_SYSTEM_SERVER_CLASSPATH) | $(MD5SUM))) 1627011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wangbcp_dep := $(intermediates)/$(bcp_md5).bcp.dep 1637011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang$(bcp_dep) : 1647011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang $(hide) mkdir -p $(dir $@) && rm -rf $(dir $@)*.bcp.dep && touch $@ 1657011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang 1667011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wang$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/init.environ.rc.in $(bcp_dep) 1675748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang @echo "Generate: $< -> $@" 1685748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang @mkdir -p $(dir $@) 1695748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang $(hide) sed -e 's?%BOOTCLASSPATH%?$(PRODUCT_BOOTCLASSPATH)?g' $< >$@ 1701fabc35cb51e6f019141c25430e4e285741625fdNarayan Kamath $(hide) sed -i -e 's?%SYSTEMSERVERCLASSPATH%?$(PRODUCT_SYSTEM_SERVER_CLASSPATH)?g' $@ 1711cbe3d944a93fa3a0f0d7a444bb69c644c83f385Evgenii Stepanov $(hide) sed -i -e 's?%EXPORT_GLOBAL_ASAN_OPTIONS%?$(EXPORT_GLOBAL_ASAN_OPTIONS)?g' $@ 1720b364732723e5dcecc1a74a4f592e8afcbadd2baRyan Campbell $(hide) sed -i -e 's?%EXPORT_GLOBAL_GCOV_OPTIONS%?$(EXPORT_GLOBAL_GCOV_OPTIONS)?g' $@ 1735748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang 1747011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wangbcp_md5 := 1757011a85606bfdeefbd5f8db668c69b61e8d612a5Ying Wangbcp_dep := 176450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Park 1775748ee972de22e3a53bd3ef7d998ed15ea726a69Ying Wang####################################### 178450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Park# ld.config.txt 179450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkinclude $(CLEAR_VARS) 180450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Park 181450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE := ld.config.txt 182450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkifeq ($(PRODUCT_FULL_TREBLE),true) 183450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_SRC_FILES := etc/ld.config.txt 184450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkelse 185450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_SRC_FILES := etc/ld.config.legacy.txt 186450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkendif 187450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE_CLASS := ETC 188450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE_PATH := $(TARGET_OUT_ETC) 189450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong ParkLOCAL_MODULE_STEM := $(LOCAL_MODULE) 190450cff4b68ce09a65a82284ec64fae83b2ef3313Jiyong Parkinclude $(BUILD_PREBUILT) 191