From 3674e55f833c382562116693389daa097a28a8fc Mon Sep 17 00:00:00 2001 From: gdisirio Date: Thu, 19 Feb 2009 18:30:34 +0000 Subject: [PATCH] git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@789 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/ARM7-AT91SAM7X-GCC/Makefile | 61 +++++++++++---- demos/ARM7-AT91SAM7X-WEB-GCC/Makefile | 67 +++++++++++----- demos/ARM7-LPC214x-G++/Makefile | 2 +- demos/ARM7-LPC214x-GCC-minimal/Makefile | 2 +- demos/ARM7-LPC214x-GCC/Makefile | 2 +- demos/ARMCM3-STM32F103-GCC/Makefile | 100 +++++++++++++++++++----- ports/{ARM7 => ARM}/rules.mk | 26 ++---- ports/ARMCM3/rules.mk | 87 --------------------- 8 files changed, 181 insertions(+), 166 deletions(-) rename ports/{ARM7 => ARM}/rules.mk (81%) delete mode 100644 ports/ARMCM3/rules.mk diff --git a/demos/ARM7-AT91SAM7X-GCC/Makefile b/demos/ARM7-AT91SAM7X-GCC/Makefile index d7e30724a..36df1cd51 100644 --- a/demos/ARM7-AT91SAM7X-GCC/Makefile +++ b/demos/ARM7-AT91SAM7X-GCC/Makefile @@ -5,7 +5,12 @@ # Compiler options here. ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu + USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu +endif + +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) + USE_CPPOPT = -fno-rtti endif # Enable this if you want the linker to remove unused code and data @@ -41,26 +46,39 @@ LDSCRIPT= ch.ld include ../../src/kernel.mk include ../../test/test.mk -# Sources that can be compiled in ARM or THUMB mode depending on the global +# C sources that can be compiled in ARM or THUMB mode depending on the global # setting. -SRC = ../../ports/ARM7/chcore.c \ - ../../ports/ARM7-LPC214x/vic.c \ - ../../ports/ARM7-AT91SAM7X/sam7x_serial.c \ - ${KERNSRC} \ - ${TESTSRC} \ - ../../src/lib/evtimer.c \ - at91lib/aic.c \ - board.c main.c +CSRC = ../../ports/ARM7/chcore.c \ + ../../ports/ARM7-AT91SAM7X/sam7x_serial.c \ + ../../ports/ARM7-AT91SAM7X/sam7x_emac.c \ + ${KERNSRC} \ + ${TESTSRC} \ + at91lib/aic.c \ + board.c main.c -# Sources to be compiled in ARM mode regardless of the global setting. +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = + +# C sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. -ASRC = +ACSRC = -# Sources to be compiled in THUMB mode regardless of the global setting. +# C++ sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. -TSRC = +ACPPSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCPPSRC = # List ASM source files here ASMSRC = ../../ports/ARM7/crt0.s \ @@ -84,6 +102,12 @@ MCU = arm7tdmi TRGT = arm-elf- CC = $(TRGT)gcc +CPPC = $(TRGT)g++ +# Enable loading with g++ only if you need C++ runtime support. +# NOTE: You can use C++ even without C++ support if you are careful. C++ +# runtime support makes code size explode. +LD = $(TRGT)gcc +#LD = $(TRGT)g++ CP = $(TRGT)objcopy AS = $(TRGT)gcc -x assembler-with-cpp OD = $(TRGT)objdump @@ -96,8 +120,11 @@ AOPT = # THUMB-specific options here TOPT = -mthumb -DTHUMB -# Define warning options here -WARN = -Wall -Wstrict-prototypes +# Define C warning options here +CWARN = -Wall -Wstrict-prototypes + +# Define C++ warning options here +CPPWARN = -Wall # # Compiler settings @@ -149,4 +176,4 @@ ULIBS = # End of user defines ############################################################################## -include ../../ports/ARM7/rules.mk +include ../../ports/ARM/rules.mk diff --git a/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile b/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile index 20d44a9d5..c9a08306a 100644 --- a/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile +++ b/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile @@ -5,7 +5,12 @@ # Compiler options here. ifeq ($(USE_OPT),) - USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu + USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu +endif + +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) + USE_CPPOPT = -fno-rtti endif # Enable this if you want the linker to remove unused code and data @@ -50,29 +55,42 @@ USRC = ../../ext/uip-1.0/uip/uip_arp.c \ ../../ext/uip-1.0/apps/webserver/httpd-fs.c \ ../../ext/uip-1.0/apps/webserver/httpd-cgi.c -# Sources that can be compiled in ARM or THUMB mode depending on the global +# C sources that can be compiled in ARM or THUMB mode depending on the global # setting. -SRC = ../../ports/ARM7/chcore.c \ - ../../ports/ARM7-LPC214x/vic.c \ - ../../ports/ARM7-AT91SAM7X/sam7x_serial.c \ - ../../ports/ARM7-AT91SAM7X/sam7x_emac.c \ - ${KERNSRC} \ - ${TESTSRC} \ - ${USRC} \ - ../../src/lib/evtimer.c \ - at91lib/aic.c \ - web/webthread.c \ - board.c main.c +CSRC = ../../ports/ARM7/chcore.c \ + ../../ports/ARM7-AT91SAM7X/sam7x_serial.c \ + ../../ports/ARM7-AT91SAM7X/sam7x_emac.c \ + ${KERNSRC} \ + ${TESTSRC} \ + ${USRC} \ + ../../src/lib/evtimer.c \ + at91lib/aic.c \ + web/webthread.c \ + board.c main.c -# Sources to be compiled in ARM mode regardless of the global setting. +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = + +# C sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. -ASRC = +ACSRC = -# Sources to be compiled in THUMB mode regardless of the global setting. +# C++ sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. -TSRC = +ACPPSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCPPSRC = # List ASM source files here ASMSRC = ../../ports/ARM7/crt0.s \ @@ -97,6 +115,12 @@ MCU = arm7tdmi TRGT = arm-elf- CC = $(TRGT)gcc +CPPC = $(TRGT)g++ +# Enable loading with g++ only if you need C++ runtime support. +# NOTE: You can use C++ even without C++ support if you are careful. C++ +# runtime support makes code size explode. +LD = $(TRGT)gcc +#LD = $(TRGT)g++ CP = $(TRGT)objcopy AS = $(TRGT)gcc -x assembler-with-cpp OD = $(TRGT)objdump @@ -109,8 +133,11 @@ AOPT = # THUMB-specific options here TOPT = -mthumb -DTHUMB -# Define warning options here -WARN = -Wall -Wstrict-prototypes +# Define C warning options here +CWARN = -Wall -Wstrict-prototypes + +# Define C++ warning options here +CPPWARN = -Wall # # Compiler settings @@ -162,4 +189,4 @@ ULIBS = # End of user defines ############################################################################## -include ../../ports/ARM7/rules.mk +include ../../ports/ARM/rules.mk diff --git a/demos/ARM7-LPC214x-G++/Makefile b/demos/ARM7-LPC214x-G++/Makefile index 34c365e86..24a8ce684 100644 --- a/demos/ARM7-LPC214x-G++/Makefile +++ b/demos/ARM7-LPC214x-G++/Makefile @@ -176,4 +176,4 @@ ULIBS = # End of user defines ############################################################################## -include ../../ports/ARM7/rules.mk +include ../../ports/ARM/rules.mk diff --git a/demos/ARM7-LPC214x-GCC-minimal/Makefile b/demos/ARM7-LPC214x-GCC-minimal/Makefile index e802820ee..2ea142e81 100644 --- a/demos/ARM7-LPC214x-GCC-minimal/Makefile +++ b/demos/ARM7-LPC214x-GCC-minimal/Makefile @@ -173,4 +173,4 @@ ULIBS = # End of user defines ############################################################################## -include ../../ports/ARM7/rules.mk +include ../../ports/ARM/rules.mk diff --git a/demos/ARM7-LPC214x-GCC/Makefile b/demos/ARM7-LPC214x-GCC/Makefile index fc417a0cd..6b3620e8a 100644 --- a/demos/ARM7-LPC214x-GCC/Makefile +++ b/demos/ARM7-LPC214x-GCC/Makefile @@ -177,4 +177,4 @@ ULIBS = # End of user defines ############################################################################## -include ../../ports/ARM7/rules.mk +include ../../ports/ARM/rules.mk diff --git a/demos/ARMCM3-STM32F103-GCC/Makefile b/demos/ARMCM3-STM32F103-GCC/Makefile index 2fd02d7f5..46aad57d1 100644 --- a/demos/ARMCM3-STM32F103-GCC/Makefile +++ b/demos/ARMCM3-STM32F103-GCC/Makefile @@ -8,23 +8,41 @@ ifeq ($(USE_OPT),) USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -falign-functions=16 endif +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) + USE_CPPOPT = -fno-rtti +endif + # Enable this if you want the linker to remove unused code and data -ifeq ($(LINK_GC),) +ifeq ($(USE_LINK_GC),) USE_LINK_GC = yes endif +# If enabled, this option allows to compile the application in THUMB mode. +ifeq ($(USE_THUMB),) + USE_THUMB = yes +endif + # Enable register caching optimization (read documentation). ifeq ($(USE_CURRP_CACHING),) USE_CURRP_CACHING = no endif +# +# Build global options +############################################################################## + +############################################################################## +# Architecture or project specific options +# + # Enable this if you really want to use the STM FWLib. ifeq ($(USE_FWLIB),) USE_FWLIB = no endif # -# Build global options +# Architecture or project specific options ############################################################################## ############################################################################## @@ -41,15 +59,39 @@ LDSCRIPT= ch.ld include ../../src/kernel.mk include ../../test/test.mk -# Sources that can be compiled in ARM or THUMB mode depending on the global +# C sources that can be compiled in ARM or THUMB mode depending on the global # setting. -SRC = ../../ports/ARMCM3/chcore.c \ - ../../ports/ARMCM3/nvic.c \ - ../../ports/ARMCM3-STM32F103/stm32_serial.c \ - ${KERNSRC} \ - ${TESTSRC} \ - ../../src/lib/evtimer.c \ - board.c main.c +CSRC = ../../ports/ARMCM3/chcore.c \ + ../../ports/ARMCM3/nvic.c \ + ../../ports/ARMCM3-STM32F103/stm32_serial.c \ + ${KERNSRC} \ + ${TESTSRC} \ + ../../src/lib/evtimer.c \ + board.c main.c + +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = ../../src/lib/ch.cpp + +# C sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +ACSRC = + +# C++ sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +ACPPSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCPPSRC = # List ASM source files here ASMSRC = ../../ports/ARMCM3/crt0.s \ @@ -60,6 +102,7 @@ INCDIR = $(KERNINC) $(TESTINC) \ ../../ports/ARMCM3 \ ../../ports/ARMCM3-STM32F103 \ ./stm32lib/inc + # # Project, sources and paths ############################################################################## @@ -70,18 +113,31 @@ INCDIR = $(KERNINC) $(TESTINC) \ MCU = cortex-m3 -#TRGT = arm-none-eabi- -#TRGT = arm-eabi- TRGT = arm-elf- CC = $(TRGT)gcc +CPPC = $(TRGT)g++ +# Enable loading with g++ only if you need C++ runtime support. +# NOTE: You can use C++ even without C++ support if you are careful. C++ +# runtime support makes code size explode. +LD = $(TRGT)gcc +#LD = $(TRGT)g++ CP = $(TRGT)objcopy AS = $(TRGT)gcc -x assembler-with-cpp OD = $(TRGT)objdump HEX = $(CP) -O ihex BIN = $(CP) -O binary -# Define warning options here -WARN = -Wall -Wstrict-prototypes +# ARM-specific options here +AOPT = + +# THUMB-specific options here +TOPT = -mthumb -DTHUMB + +# Define C warning options here +CWARN = -Wall -Wstrict-prototypes + +# Define C++ warning options here +CPPWARN = -Wall # # Compiler settings @@ -114,12 +170,6 @@ DLIBS = # Start of user section # -# Define project name here -PROJECT = ch - -# Define linker script file here -LDSCRIPT= ch.ld - # List all user C define here, like -D_DEBUG=1 UDEFS = @@ -139,4 +189,12 @@ ULIBS = # End of user defines ############################################################################## -include ../../ports/ARMCM3/rules.mk +ifeq ($(USE_FWLIB),yes) + include ./stm32lib/stm32lib.mk + CSRC += ${STM32SRC} + # The thing generates a lot of aliasing warnings, this disables an + # optimization and the warning disappears, the code is a bit larger however. + USE_OPT += -fno-strict-aliasing +endif + +include ../../ports/ARM/rules.mk diff --git a/ports/ARM7/rules.mk b/ports/ARM/rules.mk similarity index 81% rename from ports/ARM7/rules.mk rename to ports/ARM/rules.mk index d34c557e4..5b7d5ae6f 100644 --- a/ports/ARM7/rules.mk +++ b/ports/ARM/rules.mk @@ -59,20 +59,23 @@ ifneq ($(TSRC),) CPPFLAGS += -DTHUMB_PRESENT ASFLAGS += -DTHUMB_PRESENT ifneq ($(ASRC),) - # Mixed ARM and THUMB case. + # Mixed ARM and THUMB mode. CFLAGS += -mthumb-interwork CPPFLAGS += -mthumb-interwork + ASFLAGS += -mthumb-interwork LDFLAGS += -mthumb-interwork else - # Pure THUMB case, THUMB C code cannot be called by ARM asm code directly. + # Pure THUMB mode, THUMB C code cannot be called by ARM asm code directly. CFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING CPPFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING + ASFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb LDFLAGS += -mno-thumb-interwork -mthumb - ASFLAGS += -DTHUMB_NO_INTERWORKING endif else + # Pure ARM mode CPFLAGS += -mno-thumb-interwork CPPFLAGS += -mno-thumb-interwork + ASFLAGS += -mno-thumb-interwork LDFLAGS += -mno-thumb-interwork endif @@ -121,21 +124,8 @@ $(ASMOBJS) : %.o : %.s clean: -rm -f $(OBJS) - -rm -f $(PROJECT).elf - -rm -f $(PROJECT).dmp - -rm -f $(PROJECT).map - -rm -f $(PROJECT).hex - -rm -f $(PROJECT).bin - -rm -f $(ACSRC:.c=.c.bak) - -rm -f $(ACSRC:.c=.lst) - -rm -f $(TCSRC:.c=.c.bak) - -rm -f $(TCSRC:.c=.lst) - -rm -f $(ACPPSRC:.cpp=.c.bak) - -rm -f $(ACPPSRC:.cpp=.lst) - -rm -f $(TCPPSRC:.cpp=.c.bak) - -rm -f $(TCPPSRC:.cpp=.lst) - -rm -f $(ASMSRC:.s=.s.bak) - -rm -f $(ASMSRC:.s=.lst) + -rm -f $(ACSRC:.c=.lst) $(TCSRC:.c=.lst) $(ACPPSRC:.cpp=.lst) $(TCPPSRC:.cpp=.lst) $(ASMSRC:.s=.lst) + -rm -f $(PROJECT).elf $(PROJECT).dmp $(PROJECT).map $(PROJECT).hex $(PROJECT).bin -rm -fR .dep # diff --git a/ports/ARMCM3/rules.mk b/ports/ARMCM3/rules.mk deleted file mode 100644 index 45f4d0129..000000000 --- a/ports/ARMCM3/rules.mk +++ /dev/null @@ -1,87 +0,0 @@ -# ARM7 common makefile rules. - -OPT = $(USE_OPT) - -ifeq ($(USE_CURRP_CACHING),yes) -OPT += -ffixed-r7 -DCH_CURRP_REGISTER_CACHE='"r7"' -endif - -ifeq ($(USE_LINK_GC),yes) - OPT += -ffunction-sections -fdata-sections -endif - -ifeq ($(USE_FWLIB),yes) - include ./stm32lib/stm32lib.mk - SRC += ${STM32SRC} - # The thing generates a lot of aliasing warnings, this disables an - # optimization and the warning disappears, the code is a bit larger however. - OPT += -fno-strict-aliasing -endif - -XINCDIR = $(patsubst %,-I%,$(INCDIR) $(DINCDIR) $(UINCDIR)) -XLIBDIR = $(patsubst %,-L%,$(LIBDIR) $(DLIBDIR) $(ULIBDIR)) -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) -COBJS = $(SRC:.c=.o) -ASMOBJS = $(ASMSRC:.s=.o) -OBJS = $(ASMOBJS) $(COBJS) -LIBS = $(DLIBS) $(ULIBS) -MCFLAGS = -mcpu=$(MCU) -mthumb - -ODFLAGS = -x --syms -ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS) -CPFLAGS = $(MCFLAGS) $(OPT) $(WARN) -Wa,-alms=$(<:.c=.lst) $(DEFS) -ifeq ($(LINK_GC),yes) - LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch,--gc-sections $(XLIBDIR) -else - LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map,--cref,--no-warn-mismatch $(XLIBDIR) -endif - -# Generate dependency information -CPFLAGS += -MD -MP -MF .dep/$(@F).d - -# -# Makefile rules -# -all: $(OBJS) $(PROJECT).elf $(PROJECT).hex $(PROJECT).bin $(PROJECT).dmp - -$(COBJS) : %.o : %.c - @echo - $(CC) -c $(CPFLAGS) -I . $(XINCDIR) $< -o $@ - -$(ASMOBJS) : %.o : %.s - @echo - $(AS) -c $(ASFLAGS) -I . $(XINCDIR) $< -o $@ - -%elf: $(OBJS) - @echo - $(CC) $(ASMOBJS) $(COBJS) $(LDFLAGS) $(LIBS) -o $@ - -%hex: %elf - $(HEX) $< $@ - -%bin: %elf - $(BIN) $< $@ - -%dmp: %elf - $(OD) $(ODFLAGS) $< > $@ - -clean: - -rm -f $(OBJS) - -rm -f $(PROJECT).elf - -rm -f $(PROJECT).dmp - -rm -f $(PROJECT).map - -rm -f $(PROJECT).hex - -rm -f $(PROJECT).bin - -rm -f $(SRC:.c=.c.bak) - -rm -f $(SRC:.c=.lst) - -rm -f $(ASMSRC:.s=.s.bak) - -rm -f $(ASMSRC:.s=.lst) - -rm -fR .dep - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - -# *** EOF ***