304 lines
12 KiB
Makefile
Executable File
304 lines
12 KiB
Makefile
Executable File
SHELL=/bin/bash
|
|
checkdep = cd $(1); \
|
|
target=`echo $$n | awk -F'nvt@lib@' '{print $$NF;}'`; \
|
|
if [ -f $$target/Makefile ]; then \
|
|
dep=`cat $$target/Makefile | grep DEP_LIBRARIES | awk -F'=' '{print $$NF;}'`; \
|
|
if [ ! -z `echo $$dep | tr -d ' '` ]; then \
|
|
dep_cond="TRUE"; \
|
|
for dep_n in $$dep; do \
|
|
if [ ! -z `echo $$dep_n | grep nvt@ext@lib@` ]; then \
|
|
make_target=`echo $$dep_n | awk -F'nvt@ext@lib@' '{print $$NF;}'`; \
|
|
cd $(LIBRARY_DIR)/external; if [ ! -f `find . -maxdepth 1 -type d -name "$$make_target*"`/.nvt_finish ]; then dep_cond="FALSE"; fi; \
|
|
elif [ ! -z `echo $$dep_n | grep nvt@ext@app@` ]; then \
|
|
make_target=`echo $$dep_n | awk -F'nvt@ext@app@' '{print $$NF;}'`; \
|
|
cd $(APP_DIR)/external; if [ ! -f `find . -maxdepth 1 -type d -name "$$make_target*"`/.nvt_finish ]; then dep_cond="FALSE"; fi; \
|
|
elif [ ! -z `echo $$dep_n | grep nvt@lib@` ]; then \
|
|
make_target=`echo $$dep_n | awk -F'nvt@lib@' '{print $$NF;}'`; \
|
|
cd $(LIBRARY_DIR)/source; if [ ! -f `find . -maxdepth 1 -type d -name "$$make_target*"`/.nvt_finish ]; then dep_cond="FALSE"; fi; \
|
|
else \
|
|
if [ ! -f $(APP_DIR)/$$dep_n/.nvt_finish ]; then \
|
|
dep_cond="FALSE"; \
|
|
fi; \
|
|
fi; \
|
|
done; \
|
|
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> $(2) Dep = $$dep <<<<<<<<<<<<<<<<<<<<<<<<<<<"; \
|
|
if [ $$dep_cond == "TRUE" ]; then \
|
|
dirname=`echo $(2)| tr -d ' '`; \
|
|
cd $(1); $(MAKE) -C $$target all || exit "$$?"; $(MAKE) -C $$target install; \
|
|
touch $$target/.nvt_finish; \
|
|
tmp=`echo $(2) | tr -d ' '`; \
|
|
maked_list=`echo $$maked_list | sed -e 's/\<'$$tmp'\>//g'`; \
|
|
fi; \
|
|
else \
|
|
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> $(2) Non-dep <<<<<<<<<<<<<<<<<<<<<<<<<<<"; \
|
|
dirname=`echo $(2)| tr -d ' '`; \
|
|
cd $(1); $(MAKE) -C $$target all || exit "$$?"; $(MAKE) -C $$target install; \
|
|
touch $$target/.nvt_finish; \
|
|
tmp=`echo $(2) | tr -d ' '`; \
|
|
maked_list=`echo $$maked_list | sed -e 's/\<'$$tmp'\>//g'`; \
|
|
fi; \
|
|
fi; \
|
|
|
|
makedep = make_cond="TRUE"; \
|
|
maked_list="$(1)"; \
|
|
while [ $$make_cond == "TRUE" ];\
|
|
do \
|
|
echo $$maked_list; \
|
|
maked_list_old=`echo $$maked_list`; \
|
|
for n in $$maked_list; do \
|
|
if [ ! -z `echo $$n | grep nvt@ext@lib@` ]; then \
|
|
echo "Check lib/ext $$n"; \
|
|
make_target=`echo $$n | awk -F'nvt@ext@lib@' '{print $$NF;}'`; \
|
|
cd $(LIBRARY_DIR)/external; \
|
|
if [ ! -f $$make_target*/.nvt_finish ]; then \
|
|
make $$make_target; make install; \
|
|
if [ $$? == 0 ]; then \
|
|
dirname=`find . -maxdepth 1 -type d -name "$$make_target*"`; \
|
|
touch $$dirname/.nvt_finish; \
|
|
fi; \
|
|
fi; \
|
|
maked_list=`echo $$maked_list | sed -e 's/\<'$$n'\>//g'`; \
|
|
elif [ ! -z `echo $$n | grep nvt@ext@app@` ]; then \
|
|
echo "Check app/ext $$n"; \
|
|
make_target=`echo $$n | awk -F'nvt@ext@app@' '{print $$NF;}'`; \
|
|
cd $(APP_DIR)/external; \
|
|
dirname=`find . -maxdepth 1 -type d -name "$$make_target*" | head -n 1`; \
|
|
if [ ! -f $$dirname/.nvt_finish ] || [ "$$dirname" == "" ]; then \
|
|
make $$make_target; make install; \
|
|
if [ $$? == 0 ]; then \
|
|
dirname=`find . -maxdepth 1 -type d -name "$$make_target*"`; \
|
|
touch $$dirname/.nvt_finish; \
|
|
fi; \
|
|
fi; \
|
|
maked_list=`echo $$maked_list | sed -e 's/\<'$$n'\>//g'`; \
|
|
elif [ ! -z `echo $$n | grep nvt@lib@` ]; then \
|
|
echo "checkdep $$n"; \
|
|
$(call checkdep, $(LIBRARY_DIR)/source, $$n) \
|
|
else \
|
|
echo "checkdep $$n"; \
|
|
$(call checkdep, $(APP_DIR)/source, $$n) \
|
|
fi; \
|
|
done; \
|
|
if [ -z "$$maked_list" ]; then \
|
|
make_cond="FALSE"; \
|
|
elif [ "`echo $$maked_list | tr -d ' '`" == "`echo $$maked_list_old | tr -d ' '`" ]; then \
|
|
echo -e "\e[1;41mStop build, because $$maked_list can't pass build system check\e[0m"; \
|
|
exit 1; \
|
|
make_cond="FALSE"; \
|
|
fi; \
|
|
done
|
|
|
|
makelist = $(foreach n, $(1), $(MAKE) -C $(n) $(2) || exit "$$?"; if [ ! -z `echo $(2) | grep clean` ]; then rm -f $(n)/.nvt_finish; fi;)
|
|
|
|
update_modelcfg_to_build = $(shell cp $$NVT_PRJCFG_MODEL_CFG $$BUILD_DIR/.nvt_modelcfg)
|
|
|
|
list_subdir = $(shell cd $(1); find . -maxdepth 1 -type d -not -name ".*" -not -name "external" | sed -e 's/.\///g')
|
|
chk_src = $(shell cd $(1); for n in $(modelcfg_diff); do \
|
|
stat=`grep -r $$n . | egrep 'defined|ifdef|ifeq|define'`; \
|
|
if [ ! -z "$$stat" ]; then \
|
|
stat="true"; \
|
|
break; \
|
|
fi; \
|
|
done; \
|
|
echo $$stat; \
|
|
)
|
|
chk_src_makefile = $(shell cd $(1); for n in $(modelcfg_diff); do \
|
|
stat=`grep -r $$n Makefile`; \
|
|
if [ ! -z "$$stat" ]; then \
|
|
stat="true"; \
|
|
break; \
|
|
fi; \
|
|
done; \
|
|
echo $$stat; \
|
|
)
|
|
modelcfg_diff = $(shell if [ -f $(BUILD_DIR)/.nvt_modelcfg ]; then \
|
|
ret_now=`sdiff $(NVT_PRJCFG_MODEL_CFG) $(BUILD_DIR)/.nvt_modelcfg | grep '[|]' | awk -F'|' '{print $$2}' | awk -F'=' '{print $$1}' | sed -e "/\#/d"`; \
|
|
if [ -f $(BUILD_DIR)/.nvt_modelcfg_tmp ]; then \
|
|
ret_prev=`sdiff $(BUILD_DIR)/.nvt_modelcfg_tmp $(BUILD_DIR)/.nvt_modelcfg | grep '[|]' | awk -F'|' '{print $$2}' | awk -F'=' '{print $$1}' | sed -e "/\#/d"`; \
|
|
fi; \
|
|
ret="$$ret_now $$ret_prev"; \
|
|
ret_now=""; ret_prev=""; \
|
|
for n in $$ret; do \
|
|
ret_now="$$ret_now `grep -r $$n $(NVT_PRJCFG_MODEL_CFG) | awk -F'=' '{print $$1}' | sed -e "/\#/d" | sed -e "/$$n/d"`"; \
|
|
if [ -f $(BUILD_DIR)/.nvt_modelcfg_tmp ]; then \
|
|
ret_prev="$$ret_prev `grep -r $$n $(BUILD_DIR)/.nvt_modelcfg_tmp | awk -F'=' '{print $$1}' | sed -e "/\#/d" | sed -e "/$$n/d"`"; \
|
|
fi; \
|
|
done; \
|
|
for n in $$ret_now $$ret_prev; \
|
|
do \
|
|
if [ ! -z $$n ]; then \
|
|
if [ -z "`echo $$ret | grep $$n`" ]; then \
|
|
ret="$$ret $$n"; \
|
|
fi; \
|
|
fi; \
|
|
done; \
|
|
echo $$ret; \
|
|
else \
|
|
exit 2; \
|
|
fi;)
|
|
|
|
dep_build_list = $(shell dep_build_list=""; \
|
|
for n in $(modelcfg_diff); do \
|
|
cd $(1); \
|
|
for src_dir in $(call list_subdir, $(1)); do \
|
|
if [ -d $$src_dir ]; then \
|
|
stat=`grep -r $$n $$src_dir | egrep 'defined|ifdef|ifeq'`; \
|
|
if [ ! -z "$$stat" ]; then \
|
|
dep_build_list="$$src_dir $$dep_build_list"; \
|
|
fi; \
|
|
fi; \
|
|
done; \
|
|
done; \
|
|
echo $$dep_build_list; \
|
|
)
|
|
str_remove_duplicate = $(shell result=""; \
|
|
for n in $(1); \
|
|
do \
|
|
if [ ! -z $$n ]; then \
|
|
if [ -z "`echo $$result | grep $$n`" ]; then \
|
|
result="$$result $$n"; \
|
|
fi; \
|
|
fi; \
|
|
done; \
|
|
echo $$result;)
|
|
|
|
get_ext_list = $(shell cd $(1)/external; echo `make list`;)
|
|
|
|
get_ext_rebuild_list = $(shell result=""; \
|
|
for n in $(call get_ext_list, $(1)); \
|
|
do \
|
|
for k in $(2); \
|
|
do \
|
|
if [ ! -z "`$(BUILD_DIR)/get_ext_target_content.sh "$$n:" "$(1)/external/Makefile" | grep "$$k"`" ]; then \
|
|
result="$$result $$n"; \
|
|
fi; \
|
|
done; \
|
|
done; \
|
|
echo $$result;)
|
|
|
|
chk_for_kernel_rebuild = $(shell chk_str="NVT_CFG_KERNEL_CFG NVT_LINUX_SMP"; \
|
|
for n in $$chk_str; \
|
|
do \
|
|
if [ ! -z "`echo $(modelcfg_diff) | grep $$n`" ]; then \
|
|
echo "true"; \
|
|
exit; \
|
|
fi; \
|
|
done; \
|
|
)
|
|
|
|
chk_for_rootfs_rebuild = $(shell chk_str="NVT_ROOTFS_ETC NVT_BINARY_FILE_STRIP"; \
|
|
for n in $$chk_str; \
|
|
do \
|
|
if [ ! -z "`echo $(modelcfg_diff) | grep $$n`" ]; then \
|
|
echo "true"; \
|
|
exit; \
|
|
fi; \
|
|
done; \
|
|
)
|
|
|
|
chk_for_app_rebuild = $(shell chk_str="NVT_CFG_APP_EXTERNAL NVT_CFG_APP"; \
|
|
for n in $$chk_str; \
|
|
do \
|
|
if [ ! -z "`echo $(modelcfg_diff) | grep $$n`" ]; then \
|
|
echo "true"; \
|
|
exit; \
|
|
fi; \
|
|
done; \
|
|
)
|
|
|
|
make_dep_by_modelselect = \
|
|
if [ ! -f $(BUILD_DIR)/.nvt_modelcfg ]; then echo "Please build all firstly"; exit 1; fi; \
|
|
if [ ! -f $(BUILD_DIR)/.nvt_modelcfg_tmp ]; then cp $(NVT_PRJCFG_MODEL_CFG) $(BUILD_DIR)/.nvt_modelcfg_tmp; fi; \
|
|
build_stat=""; \
|
|
for n in $(call str_remove_duplicate, $(call dep_build_list, $(APP_DIR))); \
|
|
do \
|
|
if [ ! -z $$n ]; then cd $(APP_DIR)/$$n; make clean; build_stat="true"; fi; \
|
|
done; \
|
|
for n in $(call str_remove_duplicate, $(call dep_build_list, $(LIBRARY_DIR))); \
|
|
do \
|
|
if [ ! -z $$n ]; then cd $(LIBRARY_DIR)/$$n; make clean; build_stat="true"; fi; \
|
|
done; \
|
|
cd $(LIBRARY_DIR)/external; \
|
|
for n in $(call get_ext_rebuild_list, $(LIBRARY_DIR), $(modelcfg_diff)); \
|
|
do \
|
|
dirname=`find . -maxdepth 1 -type d -not -name ".*" | sed -e 's/.\///g' | grep $$n`; \
|
|
rm -rf $$dirname; \
|
|
build_stat="true"; \
|
|
done; \
|
|
for n in $(call get_ext_rebuild_list, $(APP_DIR), $(modelcfg_diff)); \
|
|
do \
|
|
dirname=`find . -maxdepth 1 -type d -not -name ".*" | sed -e 's/.\///g' | grep $$n`; \
|
|
rm -rf $$dirname; \
|
|
build_stat="true"; \
|
|
done; \
|
|
if [ "$$build_stat" == "true" ] || [ "true" == "$(chk_for_app_rebuild)" ]; then cd $(APP_DIR); make all || exit "$$?"; fi; \
|
|
build_stat=""; \
|
|
if [ "true" == "$(call chk_src, $(UBOOT_DIR))" ]; then \
|
|
cd $(LINUX_BUILD_TOP); make uboot || exit "$$?"; \
|
|
fi; \
|
|
if [ "true" == "$(chk_for_kernel_rebuild)" ]; then \
|
|
cd $(LINUX_BUILD_TOP); make linux || exit "$$?"; make modules || exit "$$?"; make supplement || exit "$$?"; \
|
|
build_stat="true"; \
|
|
else \
|
|
if [ "true" == "$(call chk_src_makefile, $(SUPPLEMENT_DIR))" ]; then \
|
|
cd $(LINUX_BUILD_TOP); make supplement || exit "$$?"; \
|
|
build_stat="true"; \
|
|
fi; \
|
|
fi; \
|
|
if [ "true" == "$(chk_for_rootfs_rebuild)" ] || [ "true" == "$(call chk_src_makefile, $(ROOTFS_DIR))" ] || [ "true" == "$$build_stat" ]; then \
|
|
cd $(LINUX_BUILD_TOP); make rootfs || exit "$$?"; \
|
|
fi; \
|
|
if [ ! -z "$(modelcfg_diff)" ]; then \
|
|
cd $(LINUX_BUILD_TOP); make uitron_clean; make uitron || exit "$$?"; \
|
|
fi; \
|
|
if [ ! -z "$(modelcfg_diff)" ]; then echo -e "\e[1;33mChanged model config items >>> $(modelcfg_diff) \e[0m"; make pack; else echo -e "\e[1;33mModel config without any change\e[0m"; fi; \
|
|
cp $(NVT_PRJCFG_MODEL_CFG) $(BUILD_DIR)/.nvt_modelcfg; rm $(BUILD_DIR)/.nvt_modelcfg_tmp;
|
|
|
|
gen_nvt_pack = \
|
|
NVT_BIN_NAME=`cat $(NVT_PRJCFG_MODEL_CFG) | grep -E '(^|\s)BIN_NAME($|\s)' | grep = | awk -F'= ' '{print $$NF}' | tr -d ' '`; \
|
|
if [ "FW\$$(CHIP)A" == "$$NVT_BIN_NAME" ]; then \
|
|
NVT_BIN_NAME=FW`cat $(NVT_PRJCFG_MODEL_CFG) | grep -E '(^|\s)CHIP($|\s)' | grep -v FW | grep = | awk -F'= ' '{print $$NF}'`A; \
|
|
fi; \
|
|
DSP1_BIN=`cat $(NVT_PRJCFG_MODEL_CFG) | grep DSP1_TYPE | grep -v "\#" | grep DSP1_FREERTOS`; \
|
|
DSP2_BIN=`cat $(NVT_PRJCFG_MODEL_CFG) | grep DSP2_TYPE | grep -v "\#" | grep DSP2_FREERTOS`; \
|
|
if [ -f $(OUTPUT_DIR)/$$NVT_BIN_NAME.ini ]; then \
|
|
echo -e "\e[1;33mnvt pack config is existing...\e[0m"; \
|
|
else \
|
|
echo -e "\e[1;33mnvt pack config generation...\e[0m"; \
|
|
cd $(OUTPUT_DIR); $(BUILD_DIR)/nvt-tools/nvtpack -dtb nvt-evb.bin; \
|
|
if [ ! -z "$$DSP1_BIN" ]; then \
|
|
sed -i 's/0 DSP1/1 DSP1/g' $(OUTPUT_DIR)/$$NVT_BIN_NAME.ini; \
|
|
fi; \
|
|
if [ ! -z "$$DSP2_BIN" ]; then \
|
|
sed -i 's/0 DSP2/1 DSP2/g' $(OUTPUT_DIR)/$$NVT_BIN_NAME.ini; \
|
|
fi; \
|
|
fi; \
|
|
echo -e "\e[1;33mnvt pack image is generated...\e[0m"; \
|
|
cd $(OUTPUT_DIR); $(BUILD_DIR)/nvt-tools/nvtpack -fw $(OUTPUT_DIR)/$$NVT_BIN_NAME.ini; cp $(OUTPUT_DIR)/packed/$(BIN_NAME).bin $(OUTPUT_DIR)/packed/$(BIN_NAME_T).bin
|
|
|
|
rm_nvt_pack = \
|
|
NVT_BIN_NAME=`cat $(NVT_PRJCFG_MODEL_CFG) | grep -E '(^|\s)BIN_NAME($|\s)' | grep = | awk -F'= ' '{print $$NF}'`; \
|
|
if [ "FW\$$(CHIP)A" == "$$NVT_BIN_NAME" ]; then \
|
|
NVT_BIN_NAME=FW`cat $(NVT_PRJCFG_MODEL_CFG) | grep -E '(^|\s)CHIP($|\s)' | grep -v FW | grep = | awk -F'= ' '{print $$NF}'`A; \
|
|
fi; \
|
|
if [ -f $(OUTPUT_DIR)/$$NVT_BIN_NAME.ini ]; then rm $(OUTPUT_DIR)/$$NVT_BIN_NAME.ini; echo -e "\e[1;33mnvt pack config is removed...\e[0m"; fi; \
|
|
rm -rf $(OUTPUT_DIR)/packed;
|
|
|
|
gen_mbr = \
|
|
NVT_BIN_NAME=`cat $(NVT_PRJCFG_MODEL_CFG) | grep -E '(^|\s)BIN_NAME($|\s)' | grep = | awk -F'= ' '{print $$NF}'`; \
|
|
if [ "FW\$$(CHIP)A" == "$$NVT_BIN_NAME" ]; then \
|
|
NVT_BIN_NAME=FW`cat $(NVT_PRJCFG_MODEL_CFG) | grep -E '(^|\s)CHIP($|\s)' | grep -v FW | grep = | awk -F'= ' '{print $$NF}'`A; \
|
|
fi; \
|
|
EMBMEM=`cat $(NVT_PRJCFG_MODEL_CFG) | grep -E '(^|\s)EMBMEM($|\s)' | grep = | awk -F'= ' '{print $$NF}'`; \
|
|
if [ "$$EMBMEM" == "EMBMEM_EMMC" ]; then \
|
|
echo -e "\e[1;33mGenerate MBR\e[0m"; \
|
|
cd $(OUTPUT_DIR); \
|
|
$(BUILD_DIR)/nvt-tools/make_mbr.sh $(OUTPUT_DIR)/nvt-evb.bin; \
|
|
fi
|
|
|
|
remove_lost_symbolic = \
|
|
cd $(1); find -xtype l -delete;
|
|
|
|
gen_toybox_symbolic = \
|
|
cd $(1); rm -rf linuxrc; ln -s sbin/init linuxrc;
|