247 lines
10 KiB
Makefile
247 lines
10 KiB
Makefile
#-------------------------------------------------------------------------------
|
|
# Configure environment path
|
|
#-------------------------------------------------------------------------------
|
|
TOP_DIR:=$(TOP_DIR)
|
|
HOST_PLATFORM=win32
|
|
ROOT_DIR:=$(TOP_DIR)/../..
|
|
BUILD_DIR:=build
|
|
IMAGE_BUILD_DIR:=build
|
|
OBJ_DIR:=$(subst $(strip \),/,$(BUILD_DIR)/obj)
|
|
CUR_MAKEFILE := $(abspath $(firstword $(MAKEFILE_LIST)))
|
|
PACKAGE_PATH:=$(dir $(subst $(empty) ,?,$(CUR_MAKEFILE)))
|
|
PACKAGE_PATH:=$(subst ?, ,$(PACKAGE_PATH))
|
|
PACKAGE_PARENT_PATH_TMP:=$(dir $(realpath $(PACKAGE_PATH)))
|
|
PACKAGE_PARENT_PATH:=$(patsubst $(subst $(strip \),/,$(PACKAGE_PATH))%,%,$(PACKAGE_PARENT_PATH_TMP))
|
|
PACKAGE_NAME_TMP1=$(lastword $(subst $(strip /), ,$(PACKAGE_PATH)))
|
|
PACKAGE_NAME_TMP2=$(lastword $(subst $(strip /), ,$(PACKAGE_PARENT_PATH)))
|
|
PACKAGE_NAME:=$(PACKAGE_NAME_TMP1)
|
|
COMLIED_LIB_LIST_FILE:=$(TOP_DIR)\$(IMAGE_BUILD_DIR)/complied_lib.txt
|
|
ASR_PLATFORM := $(strip $(shell type "$(ROOT_DIR)\ql-config\config\CHIP_PLAT.ini"))
|
|
#-------------------------------------------------------------------------------
|
|
# Configure source code files to compile in the source code directories
|
|
#-------------------------------------------------------------------------------
|
|
COMMPILE_DIRS:=$(subst $(strip \),/,$(COMMPILE_DIRS))
|
|
TARGET_COMMPILE_DIRS:=$(patsubst %,%/target_compile_dir,$(COMMPILE_DIRS))
|
|
TARGET_CLEAN_DIRS:=$(patsubst %,%/target_clean_dir,$(COMMPILE_DIRS))
|
|
|
|
SRC_FILES:=$(subst $(strip \),/,$(SRC_FILES))
|
|
SRC_DIRS:=$(dir $(SRC_FILES))
|
|
|
|
OBJS_TMP:= $(SRC_FILES:.c=.o)
|
|
OBJS_TMP:=$(OBJS_TMP:.cpp=.o)
|
|
OBJS_TMP:=$(OBJS_TMP:.cc=.o)
|
|
OBJS_TMP:=$(OBJS_TMP:.cxx=.o)
|
|
OBJS_TMP:=$(OBJS_TMP:.S=.o)
|
|
OBJS_TMP:=$(OBJS_TMP:.s=.o)
|
|
OBJS_TMP:=$(patsubst %,$(subst $(strip \),/,$(OBJ_DIR))/%,$(OBJS_TMP))
|
|
OBJS:=$(OBJS_TMP)
|
|
|
|
DEF_FILES_TMP:= $(SRC_FILES:.c=.d)
|
|
DEF_FILES_TMP:=$(DEF_FILES_TMP:.cpp=.d)
|
|
DEF_FILES_TMP:=$(patsubst %,$(subst $(strip \),/,$(OBJ_DIR))/%,$(DEF_FILES_TMP))
|
|
DEF_FILES:=$(DEF_FILES_TMP)
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Configure GCC installation path, and GCC version.
|
|
# To execute "arm-none-eabi-gcc -v" in command line can get the current gcc version
|
|
#-------------------------------------------------------------------------------
|
|
#COMPILE_TOOL_PATH:=$(ROOT_DIR)\quectel_build\tools\compile_tools
|
|
COMPILE_TOOL_PATH:=$(ROOT_DIR)\ql-cross-tool\$(HOST_PLATFORM)\owtoolchain
|
|
GCC_INSTALL_PATH=$(COMPILE_TOOL_PATH)\gcc-arm-none-eabi
|
|
ifneq (,$(findstring 1603,${ASR_PLATFORM}))
|
|
GCC_STDLIB_TARGET_PATH=thumb\v7\nofp
|
|
MPU_FLAG=-mcpu=cortex-r4 -mfloat-abi=soft
|
|
else
|
|
GCC_STDLIB_TARGET_PATH=thumb\v7+fp\softfp
|
|
MPU_FLAG=-mcpu=cortex-r5 -mfloat-abi=softfp -mfpu=vfpv3-d16
|
|
endif
|
|
GCC_VERSION:=9.2.1
|
|
|
|
NWELIB_NANO=
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Configure compiling utilities
|
|
#-------------------------------------------------------------------------------
|
|
CC:=$(GCC_INSTALL_PATH)\bin\arm-none-eabi-gcc.exe
|
|
CPP:=$(GCC_INSTALL_PATH)\bin\arm-none-eabi-g++.exe
|
|
LD:=$(GCC_INSTALL_PATH)\bin\arm-none-eabi-ld.exe
|
|
AR:=$(GCC_INSTALL_PATH)\bin\arm-none-eabi-ar.exe
|
|
OBJCOPY:=$(GCC_INSTALL_PATH)\bin\arm-none-eabi-objcopy.exe
|
|
MAKE:=$(COMPILE_TOOL_PATH)\gnumake\gnumake.exe
|
|
#CRC_BIN:=$(ROOT_DIR)\quectel_build\bin\crc_bin.exe
|
|
CRC_BIN:=$(ROOT_DIR)\ql-cross-tool\$(HOST_PLATFORM)\host\tools\crc_bin.exe
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Configure standard reference library
|
|
#-------------------------------------------------------------------------------
|
|
ifeq ($(NWELIB_NANO),)
|
|
STDLIB:=\
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libc.a \
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libstdc++.a \
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libg.a
|
|
|
|
else
|
|
STDLIB:=\
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libc_nano.a \
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libstdc++_nano.a \
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libg_nano.a
|
|
endif
|
|
|
|
STDLIB+=\
|
|
$(GCC_INSTALL_PATH)\lib\gcc\arm-none-eabi\$(GCC_VERSION)\$(GCC_STDLIB_TARGET_PATH)\libgcc.a \
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libnosys.a \
|
|
$(GCC_INSTALL_PATH)\arm-none-eabi\lib\$(GCC_STDLIB_TARGET_PATH)\libm.a
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Flag that indicate don't compile functions those built in GCC
|
|
#-------------------------------------------------------------------------------
|
|
FNO_BUILTIN_FLAGS := -fno-builtin-printf \
|
|
-fno-builtin-time \
|
|
-fno-builtin-gmtime \
|
|
-fno-builtin-gettimeofday \
|
|
-fno-builtin-mktime \
|
|
-fno-builtin-puts
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Configure compiling options
|
|
#-------------------------------------------------------------------------------
|
|
SFLAGS:=-c -mlong-calls ${MPU_FLAG} -mlittle-endian -mthumb -mthumb-interwork -Wall -Os
|
|
CFLAGS:=-c -MMD -mlong-calls ${MPU_FLAG} -mlittle-endian -mthumb -mthumb-interwork -Wall -ffunction-sections -fdata-sections $(FNO_BUILTIN_FLAGS) -D__OCPU_COMPILER_GCC__ -D_WANT_USE_LONG_TIME_T -std=c99 -g -Os
|
|
CPPFLAGS:=-c -MMD -mlong-calls ${MPU_FLAG} -mlittle-endian -mthumb -mthumb-interwork -Wall -ffunction-sections -fdata-sections $(FNO_BUILTIN_FLAGS) -D__OCPU_COMPILER_GCC__ -D_WANT_USE_LONG_TIME_T -std=c++11 -g -Os
|
|
ifneq (,$(findstring ENABLE,${APP_INPSRAM}))
|
|
LDFLAGS:= -gc-sections -T$(TOP_DIR)\config\common\app_linkscript_in_psram.ld -nostdlib
|
|
else
|
|
LDFLAGS:= -gc-sections -T$(TOP_DIR)\config\common\app_linkscript.ld -nostdlib
|
|
endif
|
|
ARFLAG:=-rc
|
|
OBJCOPYFLAGS:=
|
|
|
|
|
|
ifneq ($(NWELIB_NANO),)
|
|
CFLAGS+= --specs=nano.specs -u _scanf_float -u _printf_float
|
|
CPPFLAGS+= --specs=nano.specs -u _scanf_float -u _printf_float
|
|
LDFLAGS+= -u _scanf_float -u _printf_float
|
|
endif
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Definition for compiling procedure
|
|
#-------------------------------------------------------------------------------
|
|
.PHONY: all clean CreateDir compile_lib_list
|
|
|
|
|
|
ifeq ($(MAKEFILE_PATH),)
|
|
#-------------------------------------------------------------------------------
|
|
# Top makefile
|
|
#-------------------------------------------------------------------------------
|
|
|
|
PREPARE:=CreateDir
|
|
IAMGE:=app
|
|
|
|
all: $(PREPARE) $(IAMGE)
|
|
|
|
|
|
CreateDir:
|
|
@if not exist $(IMAGE_BUILD_DIR) ( md $(subst $(strip /),\,$(IMAGE_BUILD_DIR)))
|
|
@if exist $(COMLIED_LIB_LIST_FILE) (@echo clean $(COMLIED_LIB_LIST_FILE) & del /s/q $(subst $(strip /),\,$(COMLIED_LIB_LIST_FILE)))
|
|
@echo= > $(COMLIED_LIB_LIST_FILE)
|
|
@if exist $(IMAGE_BUILD_DIR)/$(IAMGE).bin (del /s/q $(subst $(strip /),\,$(IMAGE_BUILD_DIR)/$(IAMGE).bin))
|
|
@if exist $(IMAGE_BUILD_DIR)/$(IAMGE).elf (del /s/q $(subst $(strip /),\,$(IMAGE_BUILD_DIR)/$(IAMGE).elf))
|
|
@if exist $(IMAGE_BUILD_DIR)/$(IAMGE).map (del /s/q $(subst $(strip /),\,$(IMAGE_BUILD_DIR)/$(IAMGE).map))
|
|
|
|
clean: $(TARGET_CLEAN_DIRS)
|
|
@if exist $(IMAGE_BUILD_DIR) (@echo clean $(IMAGE_BUILD_DIR) & rd /s/q $(subst $(strip /),\,$(IMAGE_BUILD_DIR)))
|
|
|
|
%/target_clean_dir:%
|
|
@echo ---------------clean [$<]-------------------
|
|
gnumake -C $< -f Makefile clean TOP_DIR=$(TOP_DIR)
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Top makefile end
|
|
#-------------------------------------------------------------------------------
|
|
|
|
else
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Package makefile
|
|
#-------------------------------------------------------------------------------
|
|
|
|
PREPARE:=CreateDir
|
|
TARGET:=$(BUILD_DIR)/$(subst $(strip /),-,$(PACKAGE_NAME)).lib
|
|
|
|
all:$(PREPARE) compile_lib_list
|
|
|
|
CreateDir:
|
|
@if not exist $(BUILD_DIR) (md $(subst $(strip /),\,$(BUILD_DIR)))
|
|
@if not exist $(OBJ_DIR) (md $(subst $(strip /),\,$(OBJ_DIR)))
|
|
@for /d %%y in ($(subst $(strip /),\,$(SRC_DIRS))) do ( \
|
|
@if not exist $(OBJ_DIR)\%%y ( \
|
|
(@echo creating direcotry $(OBJ_DIR)\%%y) & (md $(subst $(strip /),\,$(OBJ_DIR)\%%y)) \
|
|
) \
|
|
)
|
|
|
|
clean:
|
|
@if exist $(BUILD_DIR) (@echo clean $(BUILD_DIR) & rd /s/q $(BUILD_DIR))
|
|
@if exist $(TARGET) (@echo clean $(TARGET) & rd /s/q $(TARGET))
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Package makefile end
|
|
#-------------------------------------------------------------------------------
|
|
endif
|
|
|
|
|
|
$(IAMGE): $(IMAGE_BUILD_DIR)/$(IAMGE).elf
|
|
@echo --------------objcopy [$(IMAGE_BUILD_DIR)/$(IAMGE).bin]-------------
|
|
$(OBJCOPY) $(OBJCOPYFLAGS) -O binary $< $(IMAGE_BUILD_DIR)/$(IAMGE).bin
|
|
$(CRC_BIN) $(IMAGE_BUILD_DIR)/$(IAMGE).bin
|
|
@echo ----------------------------------------------------
|
|
@echo - GCC Compiling Finished Sucessfully.
|
|
@echo - The target image is in the '$(BUILD_DIR)' directory.
|
|
@echo ----------------------------------------------------
|
|
|
|
$(IMAGE_BUILD_DIR)/$(IAMGE).elf: $(TARGET_COMMPILE_DIRS)
|
|
@echo --------------link [$@]----------------------
|
|
@SETLOCAL ENABLEDELAYEDEXPANSION & \
|
|
(for /f "delims=" %%i in ('type $(subst $(strip /),\,$(COMLIED_LIB_LIST_FILE))') do (set ret=!ret!%%i)) & \
|
|
(echo $(LD) $(LDFLAGS) $(U_LDFLAGS) -Map $(IMAGE_BUILD_DIR)/$(IAMGE).map -o $@ --whole-archive !ret! $(DEFAULT_LIBS) --no-whole-archive $(U_LIBS) $(STDLIB)) & \
|
|
($(LD) $(LDFLAGS) $(U_LDFLAGS) -Map $(IMAGE_BUILD_DIR)/$(IAMGE).map -o $@ --whole-archive !ret! $(DEFAULT_LIBS) --no-whole-archive $(U_LIBS) $(STDLIB)) & \
|
|
ENDLOCAL
|
|
|
|
%/target_compile_dir:%
|
|
@echo -----------------compile [$<]--------------------
|
|
gnumake -C $< -f Makefile TOP_DIR=$(TOP_DIR)
|
|
|
|
compile_lib_list:$(TARGET)
|
|
@echo $(PACKAGE_PATH)/$(TARGET) >> $(COMLIED_LIB_LIST_FILE)
|
|
ifneq ($(U_LIBS),)
|
|
@for /d %%y in ($(subst $(strip /),\,$(U_LIBS))) do ( \
|
|
(@echo %%y >> $(COMLIED_LIB_LIST_FILE)) \
|
|
)
|
|
endif
|
|
|
|
$(TARGET):$(OBJS)
|
|
@echo ---------------create lib [$@]-------------------
|
|
$(AR) $(ARFLAG) $@ $^
|
|
|
|
$(OBJ_DIR)/%.o: %.S
|
|
$(CC) $(SFLAGS) -o $@ $<
|
|
|
|
$(OBJ_DIR)/%.o: %.s
|
|
$(CC) $(SFLAGS) -o $@ $<
|
|
|
|
$(OBJ_DIR)/%.o: %.c
|
|
$(CC) $(CFLAGS) $(DFLAGS) $(U_FLAGS) $(INC_DIRS) -o $@ $<
|
|
|
|
$(OBJ_DIR)/%.o: %.cpp
|
|
$(CPP) $(CPPFLAGS) $(DFLAGS) $(U_CPPFLAGS) $(INC_DIRS) -o $@ $<
|
|
|
|
$(OBJ_DIR)/%.o: %.cc
|
|
$(CPP) $(CPPFLAGS) $(DFLAGS) $(U_CPPFLAGS) $(INC_DIRS) -o $@ $<
|
|
|
|
$(OBJ_DIR)/%.o: %.cxx
|
|
$(CPP) $(CPPFLAGS) $(DFLAGS) $(U_CPPFLAGS) $(INC_DIRS) -o $@ $<
|
|
|
|
-include $(DEF_FILES)
|