@@ -2,11 +2,13 @@ $(info "Rules.mk")
22
33PREFIX ?= arm-none-eabi-
44
5- CC = $(PREFIX ) gcc
6- CPP = $(PREFIX ) g++
7- AS = $(CC )
8- LD = $(PREFIX ) ld
9- AR = $(PREFIX ) ar
5+ CC = $(PREFIX ) gcc
6+ CPP = $(PREFIX ) g++
7+ AS = $(CC )
8+ LD = $(PREFIX ) gcc
9+ AR = $(PREFIX ) gcc-ar
10+ RANLIB = $(PREFIX ) gcc-ranlib
11+ NM = $(PREFIX ) gcc-nm
1012
1113BOARD? =BOARD_GD32F207RG
1214ENET_PHY? =RTL8201F
@@ -62,14 +64,10 @@ COPS+=-fstack-usage
6264COPS+ =-ffunction-sections -fdata-sections
6365COPS+ =-Wall -Werror -Wpedantic -Wextra -Wunused -Wsign-conversion -Wconversion -Wduplicated-cond -Wlogical-op
6466COPS+=--specs =nosys.specs
67+ COPS+=-flto =auto
6568
6669include ../common/make/CppOps.mk
67-
68- LDOPS =--gc-sections --print-gc-sections --print-memory-usage
69-
70- PLATFORM_LIBGCC+ = -L $(shell dirname `$(CC ) $(COPS ) -print-libgcc-file-name`)
71-
72- $(info $$PLATFORM_LIBGCC [${PLATFORM_LIBGCC}])
70+ include ../common/make/LdOps.mk
7371
7472C_OBJECTS =$(foreach sdir,$(SRCDIR ) ,$(patsubst $(sdir ) /% .c,$(BUILD )$(sdir ) /% .o,$(wildcard $(sdir ) /* .c) ) )
7573CPP_OBJECTS+ =$(foreach sdir,$(SRCDIR ) ,$(patsubst $(sdir ) /% .cpp,$(BUILD )$(sdir ) /% .o,$(wildcard $(sdir ) /* .cpp) ) )
@@ -117,24 +115,70 @@ $(LIBDEP):
117115 $(MAKE ) -f Makefile.GD32 $(MAKECMDGOALS ) ' PROJECT=${PROJECT}' ' FAMILY=${FAMILY}' ' MCU=${MCU}' ' BOARD=${BOARD}' ' ENET_PHY=${ENET_PHY}' ' MAKE_FLAGS=$(DEFINES)' -C $@
118116
119117#
120- # Build bin
118+ # Startup and support objects
121119#
122120
121+ # Assemble the MCU startup code.
123122$(BUILD ) startup_$(LINE ) .o : $(FIRMWARE_DIR ) /startup_$(LINE ) .S
124123 $(AS ) $(COPS ) -D__ASSEMBLY__ -c $(FIRMWARE_DIR ) /startup_$(LINE ) .S -o $(BUILD ) startup_$(LINE ) .o
125124
125+ # Compile the common HardFault handler.
126126$(BUILD ) hardfault_handler.o : $(FIRMWARE_DIR ) /hardfault_handler.cpp
127127 $(CPP ) $(COPS ) $(CPPOPS ) -c $(FIRMWARE_DIR ) /hardfault_handler.cpp -o $(BUILD ) hardfault_handler.o
128128
129+ # Compile the common debug Stack handler.
129130$(BUILD ) stack_debug_init.o : $(FIRMWARE_DIR ) /stack_debug_init.cpp
130131 $(CPP ) $(COPS ) $(CPPOPS ) -c $(FIRMWARE_DIR ) /stack_debug_init.cpp -o $(BUILD ) stack_debug_init.o
131132
132- $(BUILD ) main.elf : Makefile.GD32 $(LINKER ) $(BUILD ) startup_$(LINE ) .o $(BUILD ) hardfault_handler.o $(BUILD ) stack_debug_init.o $(OBJECTS ) $(LIBDEP )
133- $(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
134- $(PREFIX ) objdump -D $(BUILD ) main.elf | $(PREFIX ) c++filt > $(LIST )
135- $(PREFIX ) size -A -x $(BUILD ) main.elf
133+ #
134+ # Link the ELF image
135+ #
136+
137+ # Link all object files together with the dependent libraries.
138+ # A linker map and a demangled disassembly listing are generated
139+ # for debugging and analysis.
140+ $(BUILD ) main.elf : \
141+ Makefile.GD32 \
142+ $(LINKER ) \
143+ $(BUILD ) startup_$(LINE ) .o \
144+ $(BUILD ) hardfault_handler.o \
145+ $(BUILD ) stack_debug_init.o \
146+ $(OBJECTS ) \
147+ $(LIBDEP ) \
148+ | builddirs
149+ $(LD ) \
150+ $(BUILD ) startup_$(LINE ) .o \
151+ $(BUILD ) hardfault_handler.o \
152+ $(BUILD ) stack_debug_init.o \
153+ $(OBJECTS ) \
154+ -T $(LINKER ) \
155+ $(LDOPS ) \
156+ -o $@ \
157+ $(LIBGD32 ) \
158+ $(LDLIBS ) \
159+ -lgcc
160+
161+ # Generate a demangled disassembly listing.
162+ $(PREFIX)objdump -D $@ | $(PREFIX)c++filt > $(LIST)
163+
164+ # Display the memory usage by section.
165+ $(PREFIX)size -A -x $@
166+
167+ #
168+ # Create the binary firmware image
169+ #
136170
137- $(TARGET ) : $(BUILD ) main.elf
138- $(PREFIX ) objcopy $(BUILD ) main.elf -O binary $(TARGET ) --remove-section=.tcmsram* --remove-section=.ram* --remove-section=.sram1* --remove-section=.sram2* --remove-section=.ramadd* --remove-section=.bkpsram*
171+ # Convert the ELF image into a binary image. RAM-only sections are
172+ # removed because they are initialized at runtime rather than stored
173+ # in flash.
174+ $(TARGET ) : $(BUILD ) main.elf
175+ $(PREFIX ) objcopy $< \
176+ -O binary \
177+ $@ \
178+ --remove-section=.tcmsram* \
179+ --remove-section=.sram1* \
180+ --remove-section=.sram2* \
181+ --remove-section=.ramadd* \
182+ --remove-section=.bkpsram*
139183
140184$(foreach bdir,$(SRCDIR),$(eval $(call compile-objects,$(bdir))))
0 commit comments