You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
8.6 KiB
253 lines
8.6 KiB
# STM32 library paths
|
|
F1_LIB_PATH=./STM32F10X_Platform
|
|
F4_LIB_PATH=./STM32F4XX_Platform
|
|
|
|
# MCU external clock frequency (Hz)
|
|
CLK_PI_F4=12000000
|
|
CLK_DEF=8000000
|
|
|
|
# Directory Structure
|
|
BINDIR=.
|
|
OBJDIR_F1=obj_f1
|
|
OBJDIR_F4=obj_f4
|
|
|
|
# Output files
|
|
BINELF_F1=dvm-firmware-hs_f1.elf
|
|
BINHEX_F1=dvm-firmware-hs_f1.hex
|
|
BINBIN_F1=dvm-firmware-hs_f1.bin
|
|
BINELF_F1BL=dvm-firmware-hs_f1bl.elf
|
|
BINHEX_F1BL=dvm-firmware-hs_f1bl.hex
|
|
BINBIN_F1BL=dvm-firmware-hs_f1bl.bin
|
|
BINELF_F4=dvm-firwmare-hs_f4.elf
|
|
BINHEX_F4=dvm-firmware-hs_f4.hex
|
|
BINBIN_F4=dvm-firmware-hs_f4.bin
|
|
|
|
# Header directories
|
|
INC_F1= . $(F1_LIB_PATH)/CMSIS/ $(F1_LIB_PATH)/Device/ $(F1_LIB_PATH)/STM32F10x_StdPeriph_Driver/inc/ $(F1_LIB_PATH)/usb/inc/
|
|
INCLUDES_F1=$(INC_F1:%=-I%)
|
|
INC_F4= . $(F4_LIB_PATH)/CMSIS/Include/ $(F4_LIB_PATH)/Device/ $(F4_LIB_PATH)/STM32F4xx_StdPeriph_Driver/include/
|
|
INCLUDES_F4=$(INC_F4:%=-I%)
|
|
|
|
# CMSIS libraries
|
|
INCLUDES_LIBS_F1=
|
|
INCLUDES_LIBS_F4=$(F4_LIB_PATH)/CMSIS/Lib/GCC/libarm_cortexM4lf_math.a
|
|
|
|
# STM32F1 Standard Peripheral Libraries source path
|
|
STD_LIB_F1=$(F1_LIB_PATH)/STM32F10x_StdPeriph_Driver/src
|
|
|
|
# STM32F1 USB support source path
|
|
USB_F1=$(F1_LIB_PATH)/usb
|
|
|
|
# STM32F4 Standard Peripheral Libraries source path
|
|
STD_LIB_F4=$(F4_LIB_PATH)/STM32F4xx_StdPeriph_Driver/source
|
|
|
|
# STM32F1 system source path
|
|
SYS_DIR_F1=$(F1_LIB_PATH)/Device
|
|
STARTUP_DIR_F1=$(F1_LIB_PATH)/Device/startup
|
|
|
|
# STM32F4 system source path
|
|
SYS_DIR_F4=$(F4_LIB_PATH)/Device
|
|
STARTUP_DIR_F4=$(F4_LIB_PATH)/Device/startup
|
|
|
|
# GNU ARM Embedded Toolchain
|
|
CC=arm-none-eabi-gcc
|
|
CXX=arm-none-eabi-g++
|
|
LD=arm-none-eabi-ld
|
|
AR=arm-none-eabi-ar
|
|
AS=arm-none-eabi-as
|
|
CP=arm-none-eabi-objcopy
|
|
OD=arm-none-eabi-objdump
|
|
NM=arm-none-eabi-nm
|
|
SIZE=arm-none-eabi-size
|
|
A2L=arm-none-eabi-addr2line
|
|
|
|
# Default reference oscillator frequencies
|
|
ifndef $(OSC)
|
|
ifeq ($(MAKECMDGOALS),pi-f4)
|
|
OSC=$(CLK_PI_F4)
|
|
else
|
|
OSC=$(CLK_DEF)
|
|
endif
|
|
endif
|
|
|
|
# Build object lists
|
|
CXXSRC=$(wildcard ./*.cpp) $(wildcard ./dmr/*.cpp) $(wildcard ./p25/*.cpp) $(wildcard ./nxdn/*.cpp)
|
|
CSRC_STD_F1=$(wildcard $(STD_LIB_F1)/*.c)
|
|
SYS_F1=$(wildcard $(SYS_DIR_F1)/*.c)
|
|
STARTUP_F1=$(wildcard $(STARTUP_DIR_F1)/*.c)
|
|
CXX_USB_F1=$(wildcard $(USB_F1)/*.cpp)
|
|
C_USB_F1=$(wildcard $(USB_F1)/*.c)
|
|
CSRC_STD_F4=$(wildcard $(STD_LIB_F4)/*.c)
|
|
SYS_F4=$(wildcard $(SYS_DIR_F4)/*.c)
|
|
STARTUP_F4=$(wildcard $(STARTUP_DIR_F4)/*.c)
|
|
OBJ_F1=$(CXXSRC:./%.cpp=$(OBJDIR_F1)/%.o) $(CSRC_STD_F1:$(STD_LIB_F1)/%.c=$(OBJDIR_F1)/%.o) $(SYS_F1:$(SYS_DIR_F1)/%.c=$(OBJDIR_F1)/%.o) $(STARTUP_F1:$(STARTUP_DIR_F1)/%.c=$(OBJDIR_F1)/%.o)
|
|
OBJ_F1BL=$(CXXSRC:./%.cpp=$(OBJDIR_F1)/%.o) $(CSRC_STD_F1:$(STD_LIB_F1)/%.c=$(OBJDIR_F1)/%.o) $(SYS_F1:$(SYS_DIR_F1)/%.c=$(OBJDIR_F1)/%.o) $(STARTUP_F1:$(STARTUP_DIR_F1)/%.c=$(OBJDIR_F1)/%.o) $(CXX_USB_F1:$(USB_F1)/%.cpp=$(OBJDIR_F1)/%.o) $(C_USB_F1:$(USB_F1)/%.c=$(OBJDIR_F1)/%.o)
|
|
OBJ_F4=$(CXXSRC:./%.cpp=$(OBJDIR_F4)/%.o) $(CSRC_STD_F4:$(STD_LIB_F4)/%.c=$(OBJDIR_F4)/%.o) $(SYS_F4:$(SYS_DIR_F4)/%.c=$(OBJDIR_F4)/%.o) $(STARTUP_F4:$(STARTUP_DIR_F4)/%.c=$(OBJDIR_F4)/%.o)
|
|
|
|
# MCU flags
|
|
MCFLAGS_F1=-mcpu=cortex-m3 -march=armv7-m -mthumb
|
|
MCFLAGS_F4=-mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb-interwork
|
|
|
|
# Compile flags
|
|
DEFS_F1_HS=-DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD -DHSE_VALUE=$(OSC) -DVECT_TAB_OFFSET=0x0 -DMADEBYMAKEFILE
|
|
DEFS_F1_HS_BL=-DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD -DHSE_VALUE=$(OSC) -DVECT_TAB_OFFSET=0x2000 -DMADEBYMAKEFILE
|
|
# STM32F446 Pi-Hat board:
|
|
DEFS_PI_F4=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F446xx -DSTM32F4_PI -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE
|
|
# STM32F4 Nucleo-64 F446RE board:
|
|
DEFS_F446=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F446xx -DSTM32F4_NUCLEO -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE
|
|
|
|
# Build compiler flags
|
|
CFLAGS_F1=-c $(MCFLAGS_F1) $(INCLUDES_F1)
|
|
CXXFLAGS_F1=-c $(MCFLAGS_F1) $(INCLUDES_F1)
|
|
CFLAGS_F4=-c $(MCFLAGS_F4) $(INCLUDES_F4)
|
|
CXXFLAGS_F4=-c $(MCFLAGS_F4) $(INCLUDES_F4)
|
|
# Linker flags
|
|
LDFLAGS_F1_N =-T stm32f10x_normal.ld $(MCFLAGS_F1) $(INCLUDES_LIBS_F1)
|
|
LDFLAGS_F1_D =-T stm32f10x_debug.ld $(MCFLAGS_F1) $(INCLUDES_LIBS_F1)
|
|
LDFLAGS_F1_BL =-T stm32f10x_bootloader.ld $(MCFLAGS_F1) $(INCLUDES_LIBS_F1)
|
|
LDFLAGS_F4 =-T stm32f4xx_link.ld $(MCFLAGS_F4) $(INCLUDES_LIBS_F4)
|
|
LDFLAGS_F4_D =-T stm32f4xx_link_debug.ld $(MCFLAGS_F4) $(INCLUDES_LIBS_F4)
|
|
|
|
# Common flags
|
|
CFLAGS=-Os -g -ffunction-sections -fdata-sections -fno-builtin -Wno-implicit -DCUSTOM_NEW -DNO_EXCEPTIONS
|
|
CXXFLAGS=-Os -g -fno-exceptions -ffunction-sections -fdata-sections -fno-builtin -fno-rtti -DCUSTOM_NEW -DNO_EXCEPTIONS
|
|
LDFLAGS=-Os -g --specs=nano.specs --specs=nosys.specs
|
|
|
|
# Build Rules
|
|
.PHONY: all release_f1 release_f4 hs bl pi-f4 f446 clean
|
|
|
|
all: hs
|
|
|
|
#error "Either PI_HAT_7021_REV_02, ZUMSPOT_ADF7021, LONESTAR_USB, MMDVM_HS_HAT_REV12, MMDVM_HS_DUAL_HAT_REV10, NANO_HOTSPOT, NANO_DV_REV11, or SKYBRIDGE_HS
|
|
|
|
zumspot-adf7021: CFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USART1_HOST
|
|
zumspot-adf7021: CXXFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USART1_HOST
|
|
zumspot-adf7021: hs
|
|
zumspot-adf7021-duplex: CFLAGS+=-DDUPLEX
|
|
zumspot-adf7021-duplex: CXXFLAGS+=-DDUPLEX
|
|
zumspot-adf7021-duplex: zumspot-adf7021
|
|
zumspot-adf7021-usb: CFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USB_HOST
|
|
zumspot-adf7021-usb: CXXFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USB_HOST
|
|
zumspot-adf7021-usb: bl
|
|
zumspot-adf7021-usb-duplex: CFLAGS+=-DDUPLEX
|
|
zumspot-adf7021-usb-duplex: CXXFLAGS+=-DDUPLEX
|
|
zumspot-adf7021-usb-duplex: zumspot-adf7021-usb
|
|
|
|
pihat-7021-r2: CFLAGS+=-DPI_HAT_7021_REV_02 -DSTM32_USART1_HOST
|
|
pihat-7021-r2: CXXFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USART1_HOST
|
|
pihat-7021-r2: hs
|
|
pihat-7021-r2-duplex: CFLAGS+=-DDUPLEX
|
|
pihat-7021-r2-duplex: CXXFLAGS+=-DDUPLEX
|
|
pihat-7021-r2-duplex: pihat-7021-r2
|
|
|
|
lonestar-usb: CFLAGS+=-DLONESTAR_USB -DSTM32_USB_HOST
|
|
lonestar-usb: CXXFLAGS+=-DLONESTAR_USB -DSTM32_USB_HOST
|
|
lonestar-usb: bl
|
|
|
|
mmdvm-hs-hat: CFLAGS+=-DMMDVM_HS_HAT_REV12 -DSTM32_USART1_HOST
|
|
mmdvm-hs-hat: CXXFLAGS+=-DMMDVM_HS_HAT_REV12 -DSTM32_USART1_HOST
|
|
mmdvm-hs-hat: hs
|
|
mmdvm-hs-hat-debug: CFLAGS+=-DMMDVM_HS_HAT_REV12 -DSTM32_USART1_HOST
|
|
mmdvm-hs-hat-debug: CXXFLAGS+=-DMMDVM_HS_HAT_REV12 -DSTM32_USART1_HOST
|
|
mmdvm-hs-hat-debug: hs-debug
|
|
mmdvm-hs-hat-dual: CFLAGS+=-DDUPLEX
|
|
mmdvm-hs-hat-dual: CXXFLAGS+=-DDUPLEX
|
|
mmdvm-hs-hat-dual: mmdvm-hs-hat
|
|
mmdvm-hs-hat-dual-debug: CFLAGS+=-DDUPLEX
|
|
mmdvm-hs-hat-dual-debug: CXXFLAGS+=-DDUPLEX
|
|
mmdvm-hs-hat-dual-debug: mmdvm-hs-hat-debug
|
|
mmdvm-hs-hat-usb: CFLAGS+=-DMMDVM_HS_HAT_REV12 -DSTM32_USB_HOST
|
|
mmdvm-hs-hat-usb: CXXFLAGS+=-DMMDVM_HS_HAT_REV12 -DSTM32_USB_HOST
|
|
mmdvm-hs-hat-usb: bl
|
|
mmdvm-hs-hat-usb-dual: CFLAGS+=-DDUPLEX
|
|
mmdvm-hs-hat-usb-dual: CXXFLAGS+=-DDUPLEX
|
|
mmdvm-hs-hat-usb-dual: mmdvm-hs-hat-usb
|
|
|
|
hs: CFLAGS+=$(CFLAGS_F1) $(DEFS_F1_HS)
|
|
hs: CXXFLAGS+=$(CXXFLAGS_F1) $(DEFS_F1_HS)
|
|
hs: LDFLAGS+=$(LDFLAGS_F1_N)
|
|
hs: release_f1
|
|
|
|
hs-debug: CFLAGS+=$(CFLAGS_F1) $(DEFS_F1_HS)
|
|
hs-debug: CXXFLAGS+=$(CXXFLAGS_F1) $(DEFS_F1_HS)
|
|
hs-debug: LDFLAGS+=$(LDFLAGS_F1_D)
|
|
hs-debug: release_f1
|
|
|
|
bl: CFLAGS+=$(CFLAGS_F1) $(DEFS_F1_HS_BL)
|
|
bl: CXXFLAGS+=$(CXXFLAGS_F1) $(DEFS_F1_HS_BL)
|
|
bl: LDFLAGS+=$(LDFLAGS_F1_BL)
|
|
bl: release_f1bl
|
|
|
|
release_f1: $(BINDIR)
|
|
release_f1: $(OBJDIR_F1)
|
|
release_f1: $(BINDIR)/$(BINBIN_F1)
|
|
|
|
release_f1bl: $(BINDIR)
|
|
release_f1bl: $(OBJDIR_F1)
|
|
release_f1bl: $(BINDIR)/$(BINBIN_F1BL)
|
|
|
|
release_f4: $(BINDIR)
|
|
release_f4: $(OBJDIR_F4)
|
|
release_f4: $(BINDIR)/$(BINBIN_F4)
|
|
|
|
$(BINDIR):
|
|
mkdir $@
|
|
$(OBJDIR_F1):
|
|
mkdir $@
|
|
mkdir $@/dmr
|
|
mkdir $@/p25
|
|
mkdir $@/nxdn
|
|
$(OBJDIR_F4):
|
|
mkdir $@
|
|
mkdir $@/dmr
|
|
mkdir $@/p25
|
|
mkdir $@/nxdn
|
|
|
|
$(BINDIR)/$(BINBIN_F1BL): $(BINDIR)/$(BINELF_F1BL)
|
|
$(CP) -O binary $< $@
|
|
$(BINDIR)/$(BINELF_F1BL): $(OBJ_F1BL)
|
|
$(CXX) $(OBJ_F1BL) $(LDFLAGS) -o $@
|
|
$(SIZE) $(BINDIR)/$(BINELF_F1BL)
|
|
|
|
$(BINDIR)/$(BINBIN_F1): $(BINDIR)/$(BINELF_F1)
|
|
$(CP) -O binary $< $@
|
|
$(BINDIR)/$(BINELF_F1): $(OBJ_F1)
|
|
$(CXX) $(OBJ_F1) $(LDFLAGS) -o $@
|
|
$(SIZE) $(BINDIR)/$(BINELF_F1)
|
|
|
|
$(BINDIR)/$(BINBIN_F4): $(BINDIR)/$(BINELF_F4)
|
|
$(CP) -O binary $< $@
|
|
$(BINDIR)/$(BINELF_F4): $(OBJ_F4)
|
|
$(CXX) $(OBJ_F4) $(LDFLAGS) -o $@
|
|
$(SIZE) $(BINDIR)/$(BINELF_F4)
|
|
|
|
$(OBJDIR_F1)/%.o: ./%.cpp
|
|
$(CXX) $(CXXFLAGS) $< -o $@
|
|
$(OBJDIR_F4)/%.o: ./%.cpp
|
|
$(CXX) $(CXXFLAGS) $< -o $@
|
|
$(OBJDIR_F1)/%.o: $(STD_LIB_F1)/%.c
|
|
$(CC) $(CFLAGS) $< -o $@
|
|
$(OBJDIR_F4)/%.o: $(STD_LIB_F4)/%.c
|
|
$(CC) $(CFLAGS) $< -o $@
|
|
$(OBJDIR_F1)/%.o: $(SYS_DIR_F1)/%.c
|
|
$(CC) $(CFLAGS) $< -o $@
|
|
$(OBJDIR_F1)/%.o: $(STARTUP_DIR_F1)/%.c
|
|
$(CC) $(CFLAGS) $< -o $@
|
|
$(OBJDIR_F4)/%.o: $(SYS_DIR_F4)/%.c
|
|
$(CC) $(CFLAGS) $< -o $@
|
|
$(OBJDIR_F4)/%.o: $(STARTUP_DIR_F4)/%.c
|
|
$(CC) $(CFLAGS) $< -o $@
|
|
$(OBJDIR_F1)/%.o: $(USB_F1)/%.cpp
|
|
$(CXX) $(CXXFLAGS) $< -o $@
|
|
$(OBJDIR_F1)/%.o: $(USB_F1)/%.c
|
|
$(CC) $(CFLAGS) $< -o $@
|
|
|
|
clean-objs:
|
|
test ! -d $(OBJDIR_F1) || rm -rf $(OBJDIR_F1)
|
|
test ! -d $(OBJDIR_F4) || rm -rf $(OBJDIR_F4)
|
|
clean:
|
|
test ! -d $(OBJDIR_F1) || rm -rf $(OBJDIR_F1)
|
|
test ! -d $(OBJDIR_F4) || rm -rf $(OBJDIR_F4)
|
|
rm -f $(BINDIR)/*.bin $(BINDIR)/*.elf
|
|
|