MODULE_NAME = rtos-main .PHONY: all clean install ####################################################################################### #--------- ENVIRONMENT SETTING -------------------------------------------------------# ####################################################################################### # LIB_DEPENDENCY to collect magic symbol and check if needing link again and LIB_DEPENDENCY = \ $(wildcard $(RTOS_CURR_DEMO_DIR)/output/*.a) \ $(wildcard $(NVT_HDAL_DIR)/output/*.a) \ $(wildcard $(NVT_HDAL_DIR)/vendor/output/*.a) \ $(wildcard $(NVT_HDAL_DIR)/vendor/isp/drivers/output/*.a) \ $(wildcard $(NVT_HDAL_DIR)/vendor/media/drivers/output/*.a) \ $(wildcard $(HDAL_SAMPLE_DIR)/output/*.a) \ $(wildcard $(LIBRARY_DIR)/output/*.a) \ $(wildcard $(VOS_DRIVER_DIR)/output/*.a) \ $(wildcard $(NVT_DRIVER_DIR)/output/*.a) \ $(wildcard $(KDRV_DIR)/output/*.a) \ $(wildcard $(EXT_DIR)/panel/output/*.a) \ $(wildcard $(EXT_DIR)/sensor/output/*.a) \ $(wildcard $(EXT_DIR)/ad/output/*.a) \ $(wildcard $(KFLOW_DIR)/output/*.a) \ $(wildcard $(EXT_DIR)/audio/output/*.a) \ $(wildcard $(EXT_DIR)/gyro/output/*.a) \ #LIB DIRs for C_LDFLAGS EXTRA_LIB_DIR += \ -L$(LIBC_LIB_DIR) \ -L$(GCC_LIB_DIR) \ -L$(STDC_LIB_DIR) \ -L$(RTOS_CURR_DEMO_DIR)/output \ -L$(NVT_HDAL_DIR)/output \ -L$(NVT_HDAL_DIR)/vendor/output \ -L$(NVT_HDAL_DIR)/vendor/media/drivers/output/ \ -L$(NVT_HDAL_DIR)/vendor/isp/drivers/output/ \ -L$(KDRV_DIR)/output \ -L$(EXT_DIR)/panel/output \ -L$(EXT_DIR)/sensor/output \ -L$(EXT_DIR)/ad/output \ -L$(EXT_DIR)/audio/output \ -L$(EXT_DIR)/gyro/output \ -L$(KFLOW_DIR)/output \ -L$(HDAL_SAMPLE_DIR)/output \ -L$(LIBRARY_DIR)/output \ -L$(VOS_DRIVER_DIR)/output \ -L$(NVT_VOS_DIR)/output \ -L$(NVT_DRIVER_DIR)/output \ C_CFLAGS = $(PLATFORM_CFLAGS) $(EXTRA_INCLUDE) $(C_PREDEFINED) -Wno-format C_CXXFLAGS = $(PLATFORM_CXXFLAGS) $(EXTRA_INCLUDE) $(C_PREDEFINED) C_AFLAGS = $(PLATFORM_AFLAGS) $(EXTRA_INCLUDE) C_LDFLAGS = \ -Bstatic \ -EL \ --no-wchar-size-warning \ --gc-sections \ -T $(OUTPUT_DIR)/$(LDSCRIPT) \ -Map $(MAP_NAME) \ --start-group \ $(EXTRA_LIB_DIR) \ $(EXTRA_LIB) \ --end-group # FILEs ifeq "$(LDS_SCRIPT)" "HUNTING_LDS" LDSCRIPT = rtos-main-hunting.lds else ifeq "$(LDS_SCRIPT)" "HUNTING_LVGL_LDS" LDSCRIPT = rtos-main-hunting_lvgl.lds else ifeq "$(LDS_SCRIPT)" "CAMERA_LDS" LDSCRIPT = rtos-main-camera.lds else LDSCRIPT = rtos-main.lds endif LDS_EXTERN = extern.lds OUTPUT_NAME = $(OUTPUT_DIR)/$(MODULE_NAME).bin IMG_NAME = $(OUTPUT_DIR)/$(MODULE_NAME).img MAP_NAME = $(OUTPUT_DIR)/$(MODULE_NAME).map SYM_NAME = $(OUTPUT_DIR)/$(MODULE_NAME).sym DASM_NAME = $(OUTPUT_DIR)/$(MODULE_NAME).asm # LDS LDS_REPLACE = \ $(LDS_REPLACE_DEFAULT) \ #--------- END OF ENVIRONMENT SETTING ------------------------------------------------- ####################################################################################### #--------- LINKING LIBs FOR C_LDFLAGS ------------------------------------------------# ####################################################################################### # kernel, vos, libc, others necessary EXTRA_LIB = \ -lfreertos \ -ldrv_portable \ -lc \ -lm \ -lgcc \ -lstdc++ \ -lkwrap \ -lvos \ -lmem \ -ldrv_drtc \ -ldrv_rtc \ -ldrv_serial \ -larb_protected \ -ldrv_misc \ -ldrv_gps \ -lker_pkg # kdrv EXTRA_LIB += \ -lkdrv_adc \ -lkdrv_interrupt \ -lkdrv_pll \ -lkdrv_top \ -lkdrv_usb2dev \ -lkdrv_comm \ -lkdrv_gfx2d \ -lkdrv_afn \ -lkdrv_videocapture \ -lkdrv_videoprocess \ -lkdrv_i2c \ -lkdrv_gpio \ -lkdrv_cpu \ -lkdrv_sdp \ -lnvt_remote \ -lnvt_uvcp \ -lnvt_tse \ -lnvt_sif \ -lkdrv_jpg \ -lkdrv_videoout \ -lnvt_ide \ -lnvt_audio \ -lnvt_kdrv_audio \ -lnvt_spi \ -laud_aec \ -laud_aacd \ -laud_aace \ -laudlib_IIR \ -lkdrv_h26x \ -lkdrv_rtosfdt \ -lkdrv_eth \ -lkdrv_wdt \ -lker_pkg \ -lkdrv_ai \ -lkdrv_builtin \ -lnvt_dsi \ -lkflow_ai \ -lvendor_ai2 \ -lvendor_ai2_pub \ -lnvt_eis \ # kflow EXTRA_LIB += \ -lkflow_videoout \ -lkflow_videoenc \ -lkflow_videodec \ -lkflow_common \ -lkflow_videocapture \ -lkflow_videoprocess \ -lkflow_audiocap \ -lkflow_audioenc \ -lkflow_audiodec \ -lkflow_audioout \ -lnvt_gfx \ -lnvt_videosprite \ # PQ EXTRA_LIB += \ -lvendor_isp \ -lnvt_isp \ -lnvt_ae \ -lnvt_awb \ -lnvt_iq \ -lisp_demon \ -lprebuilt_isp \ -lm \ -lvendor_eis \ # ext_devices EXTRA_LIB += \ -lnvt_dispdev_panel \ -l$(LCD1) \ -lnvt_$(SENSOR1) \ -lnvt_$(SENSOR2) \ -lnvt_aud_emu \ -lnvt_aud_ac108 \ -lnvt_gyro_icm42607 \ # hdal, vendor EXTRA_LIB += \ -lhdal \ -lvendor_media \ -lnvt_vencrc \ -lprebuilt_ai \ # hdal, cv EXTRA_LIB += \ -lkdrv_dis \ -lkflow_dis \ # code/lib EXTRA_LIB += \ -lSxTimer \ -lFileSys \ -lFsUitron \ -lfwsrv \ -lutility \ -lzlib \ -lexif \ -lsizeconvert \ -lgxgfx \ -lnvtuser \ -luicontrol \ -lvcontrol \ -lappcontrol \ -lping \ -ldhcpd \ -lbsmux \ -lfileout \ -lfilein \ -lvf_gfx \ -limageapp_common \ -limageapp_moviemulti \ -limageapp_usbmovie \ -limageapp_voice \ -lpbxfilelist_dcf \ -lpbxfilelist_filedb \ -lpbxfile \ -lplayback \ -limageapp_play \ -lavfile \ -lbsdemux \ -limageapp_movieplay \ -lDCF \ -lfiledb \ -lavfile \ -lGxVideoFile \ -lHfsNvt \ -lWiFiIpc \ -lusockipc \ -lusockcliipc \ -lDhcpNvt \ -lUVAC \ -lUCDC \ -lFontConv \ -lNameRule \ -lgximagefile \ -lnvtlive555 \ -lLviewNvt \ -limageapp_photo \ -lDbgUt \ -lcmdmap \ -lPStore \ -ltop \ -lsw_md \ -llogfile \ -lmd5 \ -lJSONparser \ -lQRCode \ -lCurlNvt \ -lcurl \ -lcurltool \ -lethcamsocket \ -lethsocketcli \ -lethsockcliipc \ -lethsocket \ -lethsockipc \ ifeq "$(UI_STYLE)" "UI_STYLE_LVGL" EXTRA_LIB += \ -llvgl endif ifeq "$(NVT_SDIO_WIFI)" "NVT_SDIO_WIFI_RTK" EXTRA_LIB += \ -l8189ftv \ -lwlan_lib else ifeq "$(NVT_SDIO_WIFI)" "NVT_SDIO_WIFI_ICOMM" EXTRA_LIB += \ -licomm \ -lssv6x5x else ifeq "$(NVT_SDIO_WIFI)" "NVT_SDIO_WIFI_BOUFFALO" EXTRA_LIB += \ -lblwifi \ -lbl602 else EXTRA_LIB += \ -ldummywifi endif # code/driver EXTRA_LIB += \ -ldrv_devusb_msdc \ -ldrv_storage \ -lmsdcnvt \ -liperf \ -ldrv_pmu_ip6303 \ -ldrv_gsensor_da380 \ -ldrv_touch_gt911 \ -lsifar \ # HDAL Samples #--------- END of LINKING LIBs FOR C_LDFLAGS ------------------------------------------ ####################################################################################### #--------- DEVICE TREE CONFIGURATION -------------------------------------------------# ####################################################################################### DTB_SENSOR = $(DTS_SENSOR:.dts=.dtb) DTB_APP = $(DTS_APP:.dts=.dtb) DTB = $(DTB_SENSOR) $(DTB_APP) SENSOR_CFG_DIR = $(NVT_HDAL_DIR)/ext_devices/sensor/configs AD_CFG_DIR = $(NVT_HDAL_DIR)/ext_devices/ad/configs MOTOR_CFG_DIR = $(NVT_HDAL_DIR)/ext_devices/motor/configs ISP_CFG_DIR = $(NVT_HDAL_DIR)/vendor/isp/configs TOUCH_CFG_DIR = $(NVT_DRIVER_DIR)/source/touch/configs DTB_INCLUDE = \ -I$(SENSOR_CFG_DIR)/dtsi \ -I$(AD_CFG_DIR)/dtsi \ -I$(MOTOR_CFG_DIR)/dtsi \ -I$(ISP_CFG_DIR)/dtsi \ -I$(TOUCH_CFG_DIR)/dtsi \ -I$(KERNELDIR)/include \ -I$(KERNELDIR)/arch/arm/boot/dts/include \ -I$(CONFIG_DIR)/include \ -I$(LINUX_BUILD_TOP)/base/linux-BSP/linux-kernel/include #--------- END OF DEVICE TREE CONFIGURATION ------------------------------------------- ####################################################################################### #--------- COMPILING AND LINKING -----------------------------------------------------# ####################################################################################### OBJ = $(SRC:.c=.o) $(ASM:.S=.o) $(CPP_SRC:.cpp=.o) $(DTS_SENSOR:.dts=.o) all: $(DTB_APP) $(OUTPUT_NAME) $(DTB): $(wildcard ./SrcCode/Dx/$(MODEL)/*.dtsi) $(LDS_EXTERN): $(OBJ) $(LIB_DEPENDENCY) $(LDSCRIPT) $(MAIN_C) @echo generate $@ ... && \ echo "EXTERN(" > $@ && \ $(OBJDUMP) -h $(LIB_DEPENDENCY) | grep "\.version\.info" | sed 's/[^.]*\.version\.info\.[^\.]*\.\([^\ ]*\).*/\1_LIBRARY_VERSION_INFO/g' >> $@ @$(OBJDUMP) -h $(LIB_DEPENDENCY) | grep "\.cmdsys\.table" | sed 's/[^.]*\.cmdsys\.table\.\([^\ ]*\).*/\1_cmdsys_main/g' >> $@ @$(OBJDUMP) -h $(LIB_DEPENDENCY) | grep "\.examsys\.table" | sed 's/[^.]*\.examsys\.table\.\([^\ ]*\).*/\1_examsys_main/g' >> $@ @echo ")" >> $@ $(IMG_NAME): $(LDS_EXTERN) @echo Compiling $(MAIN_C) && \ $(CC) $(C_CFLAGS) -c $(MAIN_C) -o $(MAIN_C:.c=.o) && \ echo Creating $@... && \ mkdir -p $(OUTPUT_DIR) && \ sed $(LDS_REPLACE_DEFAULT) $(LDSCRIPT) > $(OUTPUT_DIR)/$(LDSCRIPT).in && \ cpp -nostdinc -x assembler-with-cpp -C -P -E $(C_PREDEFINED) $(OUTPUT_DIR)/$(LDSCRIPT).in > $(OUTPUT_DIR)/$(LDSCRIPT) && \ rm $(OUTPUT_DIR)/$(LDSCRIPT).in && \ $(LD) -o $@ $(OBJ) $(MAIN_C:.c=.o) $(C_LDFLAGS) && \ $(NM) -n $@ > $(SYM_NAME) $(OUTPUT_NAME): $(IMG_NAME) @echo Creating executable $@ ... && \ $(OBJCOPY) --gap-fill=0xff -O binary $< $@.tmp && \ echo Encrypt binary file $@ ... && \ $(NVT_TOOLS_DIR)/encrypt_bin SUM $@.tmp $(BIN_INFO_CHIPNAME) $(BIN_NAME) ifeq ($(FW_TYPE),FW_TYPE_COMPRESS) @$(NVT_TOOLS_DIR)/bfc c lz $@.tmp $@.tmp.lz 0 0 -align && \ cp -f $@.tmp.lz $@ && \ rm -f $@.tmp.lz $@.tmp else ifeq ($(FW_TYPE),FW_TYPE_PARTIAL_COMPRESS) @$(NVT_TOOLS_DIR)/bfc c gz $@.tmp $@.tmp.lz 1 $(CODE_INFO_SECTION01_SIZE) $(BIN_INFO_LENGHT) $(BIN_INFO_BINCTRL) $(BIN_INFO_CHKSUM) $(EMBMEM_BLK_SIZE) && \ cp -f $@.tmp.lz $@ && \ rm -f $@.tmp.lz $@.tmp else ifeq ($(FW_TYPE),FW_TYPE_LZMA) @$(NVT_TOOLS_DIR)/bfc c lzma $@.tmp $@.tmp.lz 0 0 -align && \ cp -f $@.tmp.lz $@ && \ rm -f $@.tmp.lz $@.tmp else @cp -f $@.tmp $@ && \ rm -f $@.tmp endif # inline warning should be ignored with some LVGL static inline functions(e.g. lv_color_mix_with_alpha) %/fbdev.o: %/fbdev.c @echo Compiling $< , skip inline warning @$(CC) $(C_CFLAGS) -Wno-inline -c $< -o $@ %.o: %.c @echo Compiling $< @$(CC) $(C_CFLAGS) -c $< -o $@ %.o: %.cpp @echo Compiling $< @$(CXX) $(C_CXXFLAGS) -c $< -o $@ %.o: %.S @echo Assembling $< @$(CC) $(C_AFLAGS) -c $< -o $@ %.dtb: %.dts @echo Compiling $< @cpp -nostdinc $(DTB_INCLUDE) -undef -x assembler-with-cpp $(C_PREDEFINED) -D__FREERTOS $< > $<.tmp \ && dtc -O dtb -b 0 -o $@ $<.tmp \ && rm $<.tmp %.o: %.dtb @echo Objectizing $< && \ touch $<.tmp.c && \ $(CC) $(C_CFLAGS) -c $<.tmp.c -o $@ && \ $(OBJCOPY) --add-section .sensor=$< $@ && \ rm $<.tmp.c # cim is for coverity check cim: $(DTB) $(OBJ) clean: @rm -rf $(OBJ) $(MAIN_C:.c=.o) $(LDS_EXTERN) $(DTB) $(OUTPUT_DIR) install: $(OUTPUT_NAME) @mkdir -p $(INSTALL_DIR) @cp -avf $(OUTPUT_NAME) $(INSTALL_DIR) @cp -avf $(DTS_APP:.dts=.dtb) $(INSTALL_DIR)/$(notdir $(DTS_APP:.dts=.bin)) dasm: $(IMG_NAME) @echo Disassembly $< to $(DASM_NAME)... \ && $(OBJDUMP) -D $(IMG_NAME) > $(DASM_NAME) # codesize statistics codesize: $(OUTPUT_NAME) @cd $(dir $(SYM_NAME)) && \ $(BUILD_DIR)/nvt-tools/nvt-ld-op -r -s $(notdir $(SYM_NAME)) && \ $(BUILD_DIR)/nvt-tools/nvt-ld-op -a $(notdir $(MAP_NAME)) && \ echo see $(dir $(SYM_NAME))*.txt for the report