nt9856x/build/definitions.mk
2023-03-28 15:07:53 +08:00

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;