Skip to content

Commit 35cb8a5

Browse files
committed
Refactor GD32 firmware build rules
Adopt shared C++ compiler options and timestamp rules, separate C++ objects from C objects, and pass project/MCU context through the sub-make. Also adds the network memory block define, uses nosys specs, and adjusts link inputs for the GD32 template build.
1 parent 8a61fb0 commit 35cb8a5

1 file changed

Lines changed: 11 additions & 13 deletions

File tree

firmware-template-gd32/Rules.mk

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@ LIST=$(FAMILY).list
1717
MAP=$(FAMILY).map
1818
SIZE=$(FAMILY).size
1919
BUILD=build_gd32/
20-
2120
FIRMWARE_DIR=./../firmware-template-gd32/
2221

23-
DEFINES:=$(addprefix -D,$(DEFINES))
22+
PROJECT=$(notdir $(patsubst %/,%,$(CURDIR)))
23+
$(info $$PROJECT [${PROJECT}])
24+
25+
DEFINES:=$(addprefix -D,$(DEFINES)) -DCONFIG_NETWORK_MEMORY_BLOCKS=1
2426

2527
include ../common/make/gd32/Board.mk
2628
include ../common/make/gd32/Mcu.mk
2729
include ../common/make/gd32/Includes.mk
30+
include ../common/make/Timestamp.mk
2831
include ../common/make/gd32/Validate.mk
2932

3033
LIBS+=network superloop board gd32 clib
@@ -50,11 +53,9 @@ COPS+=-Os -nostartfiles -ffreestanding -nostdlib
5053
COPS+=-fstack-usage
5154
COPS+=-ffunction-sections -fdata-sections
5255
COPS+=-Wall -Werror -Wpedantic -Wextra -Wunused -Wsign-conversion -Wconversion -Wduplicated-cond -Wlogical-op
56+
COPS+=--specs=nosys.specs
5357

54-
CPPOPS=-std=c++20
55-
CPPOPS+=-Wnon-virtual-dtor -Woverloaded-virtual -Wnull-dereference -fno-rtti -fno-exceptions -fno-unwind-tables
56-
CPPOPS+=-Wuseless-cast -Wold-style-cast
57-
CPPOPS+=-fno-threadsafe-statics
58+
include ../common/make/CppOps.mk
5859

5960
LDOPS=--gc-sections --print-gc-sections --print-memory-usage
6061

@@ -63,12 +64,12 @@ PLATFORM_LIBGCC+= -L $(shell dirname `$(CC) $(COPS) -print-libgcc-file-name`)
6364
$(info $$PLATFORM_LIBGCC [${PLATFORM_LIBGCC}])
6465

6566
C_OBJECTS=$(foreach sdir,$(SRCDIR),$(patsubst $(sdir)/%.c,$(BUILD)$(sdir)/%.o,$(wildcard $(sdir)/*.c)))
66-
C_OBJECTS+=$(foreach sdir,$(SRCDIR),$(patsubst $(sdir)/%.cpp,$(BUILD)$(sdir)/%.o,$(wildcard $(sdir)/*.cpp)))
67+
CPP_OBJECTS+=$(foreach sdir,$(SRCDIR),$(patsubst $(sdir)/%.cpp,$(BUILD)$(sdir)/%.o,$(wildcard $(sdir)/*.cpp)))
6768
ASM_OBJECTS=$(foreach sdir,$(SRCDIR),$(patsubst $(sdir)/%.S,$(BUILD)$(sdir)/%.o,$(wildcard $(sdir)/*.S)))
6869

6970
BUILD_DIRS:=$(addprefix $(BUILD),$(SRCDIR))
7071

71-
OBJECTS:=$(ASM_OBJECTS) $(C_OBJECTS)
72+
OBJECTS:=$(strip $(ASM_OBJECTS) $(C_OBJECTS) $(CPP_OBJECTS))
7273

7374
define compile-objects
7475
$(BUILD)$1/%.o: $1/%.cpp
@@ -105,15 +106,12 @@ clean: $(LIBDEP)
105106
lisdep: $(LIBDEP)
106107

107108
$(LIBDEP):
108-
$(MAKE) -f Makefile.GD32 $(MAKECMDGOALS) 'FAMILY=${FAMILY}' 'BOARD=${BOARD}' 'ENET_PHY=${ENET_PHY}' 'MAKE_FLAGS=$(DEFINES)' -C $@
109+
$(MAKE) -f Makefile.GD32 $(MAKECMDGOALS) 'PROJECT=${PROJECT}' 'FAMILY=${FAMILY}' 'MCU=${MCU}' 'BOARD=${BOARD}' 'ENET_PHY=${ENET_PHY}' 'MAKE_FLAGS=$(DEFINES)' -C $@
109110

110111
#
111112
# Build bin
112113
#
113114

114-
$(BUILD_DIRS) :
115-
mkdir -p $(BUILD_DIRS)
116-
117115
$(BUILD)startup_$(LINE).o : $(FIRMWARE_DIR)/startup_$(LINE).S
118116
$(AS) $(COPS) -D__ASSEMBLY__ -c $(FIRMWARE_DIR)/startup_$(LINE).S -o $(BUILD)startup_$(LINE).o
119117

@@ -124,7 +122,7 @@ $(BUILD)stack_debug_init.o : $(FIRMWARE_DIR)/stack_debug_init.cpp
124122
$(CPP) $(COPS) $(CPPOPS) -c $(FIRMWARE_DIR)/stack_debug_init.cpp -o $(BUILD)stack_debug_init.o
125123

126124
$(BUILD)main.elf: Makefile.GD32 $(LINKER) $(BUILD)startup_$(LINE).o $(BUILD)hardfault_handler.o $(BUILD)stack_debug_init.o $(OBJECTS) $(LIBDEP)
127-
$(LD) $(BUILD)startup_$(LINE).o $(BUILD)hardfault_handler.o $(OBJECTS) $(BUILD)stack_debug_init.o -Map $(MAP) -T $(LINKER) $(LDOPS) -o $(BUILD)main.elf $(LIBGD32) $(LDLIBS) $(PLATFORM_LIBGCC) -lgcc
125+
$(LD) $(BUILD)startup_$(LINE).o $(BUILD)hardfault_handler.o $(BUILD)stack_debug_init.o $(OBJECTS) -Map $(MAP) -T $(LINKER) $(LDOPS) -o $(BUILD)main.elf $(LIBGD32) $(LDLIBS) $(PLATFORM_LIBGCC) -lgcc
128126
$(PREFIX)objdump -D $(BUILD)main.elf | $(PREFIX)c++filt > $(LIST)
129127
$(PREFIX)size -A -x $(BUILD)main.elf
130128

0 commit comments

Comments
 (0)