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