nt9856x/rtos/code/application/source/cardv/OutputImg.mk
2023-06-06 19:03:36 +08:00

436 lines
11 KiB
Makefile
Executable File

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