diff --git a/flight/PiOS/STM32F4xx/library.mk b/flight/PiOS/STM32F4xx/library.mk index b2366ca36..d0e403453 100644 --- a/flight/PiOS/STM32F4xx/library.mk +++ b/flight/PiOS/STM32F4xx/library.mk @@ -13,6 +13,7 @@ LINKER_SCRIPTS_BL = $(PIOS_DEVLIB)/link_STM32F4xx_BL_memory.ld \ # Compiler options implied by the F4xx CDEFS += -DSTM32F4XX +CDEFS += -DSYSCLK_FREQ=$(SYSCLK_FREQ) CDEFS += -DHSE_VALUE=$(OSCILLATOR_FREQ) CDEFS += -DUSE_STDPERIPH_DRIVER ARCHFLAGS += -mcpu=cortex-m4 -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard @@ -22,7 +23,7 @@ SRC += $(wildcard $(PIOS_DEVLIB)*.c) EXTRAINCDIRS += $(PIOS_DEVLIB)/inc # CMSIS for the F4 -include $(PIOSCOMMONLIB)/CMSIS2/library.mk +include $(PIOSCOMMON)/Libraries/CMSIS2/library.mk CMSIS2_DEVICEDIR := $(PIOS_DEVLIB)/Libraries/CMSIS2/Device/ST/STM32F4xx SRC += $(wildcard $(CMSIS2_DEVICEDIR)/Source/$(BOARD_NAME)/*.c) EXTRAINCDIRS += $(CMSIS2_DEVICEDIR)/Include diff --git a/flight/targets/Bootloaders/CopterControl/Makefile b/flight/targets/Bootloaders/CopterControl/Makefile index ed1d8f3e8..bdfea5986 100644 --- a/flight/targets/Bootloaders/CopterControl/Makefile +++ b/flight/targets/Bootloaders/CopterControl/Makefile @@ -23,6 +23,7 @@ endif include $(ROOT_DIR)/make/boards/$(BOARD_NAME)/board-info.mk include $(ROOT_DIR)/make/firmware-defs.mk include $(ROOT_DIR)/make/boot-defs.mk +include $(ROOT_DIR)/make/common-defs.mk $(info Making bootloader for CopterControl, board revision $(BOARD_REVISION)) $(info Use BOARD_REVISION=1 for CC, BOARD_REVISION=2 for CC3D (default)) diff --git a/flight/targets/Bootloaders/OSD/Makefile b/flight/targets/Bootloaders/OSD/Makefile index aad1047d2..ed5d04928 100644 --- a/flight/targets/Bootloaders/OSD/Makefile +++ b/flight/targets/Bootloaders/OSD/Makefile @@ -23,3 +23,4 @@ endif include $(ROOT_DIR)/make/boards/$(BOARD_NAME)/board-info.mk include $(ROOT_DIR)/make/firmware-defs.mk include $(ROOT_DIR)/make/boot-defs.mk +include $(ROOT_DIR)/make/common-defs.mk diff --git a/flight/targets/Bootloaders/PipXtreme/Makefile b/flight/targets/Bootloaders/PipXtreme/Makefile index 55df4a8a3..e6a37c2e4 100644 --- a/flight/targets/Bootloaders/PipXtreme/Makefile +++ b/flight/targets/Bootloaders/PipXtreme/Makefile @@ -23,6 +23,7 @@ endif include $(ROOT_DIR)/make/boards/$(BOARD_NAME)/board-info.mk include $(ROOT_DIR)/make/firmware-defs.mk include $(ROOT_DIR)/make/boot-defs.mk +include $(ROOT_DIR)/make/common-defs.mk BLONLY_CDEFS += -DEE_BANK_BASE=$(EE_BANK_BASE) BLONLY_CDEFS += -DEE_BANK_SIZE=$(EE_BANK_SIZE) diff --git a/flight/targets/Bootloaders/RevoMini/Makefile b/flight/targets/Bootloaders/RevoMini/Makefile index aad1047d2..ed5d04928 100644 --- a/flight/targets/Bootloaders/RevoMini/Makefile +++ b/flight/targets/Bootloaders/RevoMini/Makefile @@ -23,3 +23,4 @@ endif include $(ROOT_DIR)/make/boards/$(BOARD_NAME)/board-info.mk include $(ROOT_DIR)/make/firmware-defs.mk include $(ROOT_DIR)/make/boot-defs.mk +include $(ROOT_DIR)/make/common-defs.mk diff --git a/flight/targets/Bootloaders/Revolution/Makefile b/flight/targets/Bootloaders/Revolution/Makefile index aad1047d2..ed5d04928 100644 --- a/flight/targets/Bootloaders/Revolution/Makefile +++ b/flight/targets/Bootloaders/Revolution/Makefile @@ -23,3 +23,4 @@ endif include $(ROOT_DIR)/make/boards/$(BOARD_NAME)/board-info.mk include $(ROOT_DIR)/make/firmware-defs.mk include $(ROOT_DIR)/make/boot-defs.mk +include $(ROOT_DIR)/make/common-defs.mk diff --git a/make/boot-defs.mk b/make/boot-defs.mk index a012f7d6e..b1e37e35f 100644 --- a/make/boot-defs.mk +++ b/make/boot-defs.mk @@ -38,29 +38,12 @@ PIOSINC = $(PIOS)/inc PIOSCOMMON = $(PIOS)/Common PIOSBOARDS = $(PIOS)/Boards FLIGHTLIBINC = $(FLIGHTLIB)/inc -STMSPDSRCDIR = $(STMSPDDIR)/src -STMSPDINCDIR = $(STMSPDDIR)/inc +## PIOS Hardware ifeq ($(MCU),cortex-m3) - PIOSSTM32F10X = $(PIOS)/STM32F10x - APPLIBDIR = $(PIOSSTM32F10X)/Libraries - STMLIBDIR = $(APPLIBDIR) - STMSPDDIR = $(STMLIBDIR)/STM32F10x_StdPeriph_Driver - STMUSBDIR = $(STMLIBDIR)/STM32_USB-FS-Device_Driver - STMUSBSRCDIR = $(STMUSBDIR)/src - STMUSBINCDIR = $(STMUSBDIR)/inc - CMSISDIR = $(STMLIBDIR)/CMSIS/Core/CM3 - DOSFSDIR = $(APPLIBDIR)/dosfs - MSDDIR = $(APPLIBDIR)/msd - RTOSDIR = $(APPLIBDIR)/FreeRTOS - RTOSSRCDIR = $(RTOSDIR)/Source - RTOSINCDIR = $(RTOSSRCDIR)/include + include $(PIOS)/STM32F10x/library.mk else ifeq ($(MCU),cortex-m4) - PIOSSTM32F4XX = $(PIOS)/STM32F4xx - APPLIBDIR = $(PIOSSTM32F4XX)/Libraries - STMLIBDIR = $(APPLIBDIR) - STMSPDDIR = $(STMLIBDIR)/STM32F4xx_StdPeriph_Driver - PIOSCOMMONLIB = $(PIOSCOMMON)/Libraries + include $(PIOS)/STM32F4xx/library.mk else $(error Unsupported MCU: $(MCU)) endif @@ -74,58 +57,6 @@ SRC += $(OPSYSTEM)/pios_board.c SRC += $(OPSYSTEM)/pios_usb_board_data.c SRC += $(OPSYSTEM)/op_dfu.c -## PIOS Hardware -ifeq ($(MCU),cortex-m3) - ## PIOS Hardware (STM32F10x) - SRC += $(PIOSSTM32F10X)/pios_sys.c - SRC += $(PIOSSTM32F10X)/pios_led.c - SRC += $(PIOSSTM32F10X)/pios_delay.c - SRC += $(PIOSSTM32F10X)/pios_usart.c - SRC += $(PIOSSTM32F10X)/pios_irq.c - SRC += $(PIOSSTM32F10X)/pios_debug.c - SRC += $(PIOSSTM32F10X)/pios_gpio.c - SRC += $(PIOSSTM32F10X)/pios_iap.c - SRC += $(PIOSSTM32F10X)/pios_bl_helper.c - SRC += $(PIOSSTM32F10X)/pios_usb.c - SRC += $(PIOSSTM32F10X)/pios_usbhook.c - SRC += $(PIOSSTM32F10X)/pios_usb_hid.c - SRC += $(PIOSSTM32F10X)/pios_usb_hid_istr.c - SRC += $(PIOSSTM32F10X)/pios_usb_hid_pwr.c - - ## Libraries for flight calculations - SRC += $(FLIGHTLIB)/fifo_buffer.c - - ## CMSIS for STM32 - SRC += $(CMSISDIR)/core_cm3.c - SRC += $(CMSISDIR)/system_stm32f10x.c - - ## Used parts of the STM-Library - SRC += $(STMSPDSRCDIR)/stm32f10x_bkp.c - SRC += $(STMSPDSRCDIR)/stm32f10x_crc.c - SRC += $(STMSPDSRCDIR)/stm32f10x_dma.c - SRC += $(STMSPDSRCDIR)/stm32f10x_exti.c - SRC += $(STMSPDSRCDIR)/stm32f10x_flash.c - SRC += $(STMSPDSRCDIR)/stm32f10x_gpio.c - SRC += $(STMSPDSRCDIR)/stm32f10x_pwr.c - SRC += $(STMSPDSRCDIR)/stm32f10x_rcc.c - SRC += $(STMSPDSRCDIR)/stm32f10x_rtc.c - SRC += $(STMSPDSRCDIR)/stm32f10x_spi.c - SRC += $(STMSPDSRCDIR)/stm32f10x_usart.c - SRC += $(STMSPDSRCDIR)/stm32f10x_dbgmcu.c - SRC += $(STMSPDSRCDIR)/misc.c - - ## STM32 USB Library - SRC += $(STMUSBSRCDIR)/usb_core.c - SRC += $(STMUSBSRCDIR)/usb_init.c - SRC += $(STMUSBSRCDIR)/usb_int.c - SRC += $(STMUSBSRCDIR)/usb_mem.c - SRC += $(STMUSBSRCDIR)/usb_regs.c - SRC += $(STMUSBSRCDIR)/usb_sil.c -else ifeq ($(MCU),cortex-m4) - ## PIOS Hardware (STM32F4xx) - include $(PIOS)/STM32F4xx/library.mk -endif - ## PIOS Hardware (Common) SRC += $(PIOSCOMMON)/pios_board_info.c SRC += $(PIOSCOMMON)/pios_com_msg.c @@ -135,15 +66,15 @@ SRC += $(PIOSCOMMON)/pios_usb_util.c # List C source files here which must be compiled in ARM-Mode (no -mthumb). # Use file-extension c for "c-only"-files -SRCARM = +SRCARM += # List C++ source files here. # Use file-extension .cpp for C++-files (not .C) -CPPSRC = +CPPSRC += # List C++ source files here which must be compiled in ARM-Mode. # Use file-extension .cpp for C++-files (not .C) -CPPSRCARM = +CPPSRCARM += # List Assembler source files here. # Make them always end in a capital .S. Files ending in a lowercase .s @@ -152,14 +83,10 @@ CPPSRCARM = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ifeq ($(MCU),cortex-m3) - ASRC = $(PIOSSTM32F10X)/startup_stm32f10x_$(MODEL)$(MODEL_SUFFIX).S -else - ASRC = -endif +ASRC += # List Assembler source files here which must be assembled in ARM-Mode. -ASRCARM = +ASRCARM += # List any extra directories to look for include files here. # Each directory must be seperated by a space. @@ -169,26 +96,9 @@ EXTRAINCDIRS += $(FLIGHTLIBINC) EXTRAINCDIRS += $(PIOSCOMMON) EXTRAINCDIRS += $(PIOSBOARDS) EXTRAINCDIRS += $(STMSPDINCDIR) -EXTRAINCDIRS += $(CMSISDIR) EXTRAINCDIRS += $(HWDEFSINC) EXTRAINCDIRS += $(OPSYSTEMINC) -ifeq ($(MCU),cortex-m3) - EXTRAINCDIRS += $(PIOSSTM32F10X) - EXTRAINCDIRS += $(OPUAVTALK) - EXTRAINCDIRS += $(OPUAVTALKINC) - EXTRAINCDIRS += $(OPUAVOBJ) - EXTRAINCDIRS += $(OPUAVOBJINC) - EXTRAINCDIRS += $(DOSFSDIR) - EXTRAINCDIRS += $(MSDDIR) - EXTRAINCDIRS += $(RTOSINCDIR) - EXTRAINCDIRS += $(STMUSBINCDIR) - EXTRAINCDIRS += $(APPLIBDIR) - EXTRAINCDIRS += $(RTOSSRCDIR)/portable/GCC/ARM_CM3 -else ifeq ($(MCU),cortex-m4) - EXTRAINCDIRS += $(PIOSSTM34FXX) -endif - # List any extra directories to look for library files here. # Also add directories where the linker should search for # includes from linker-script to the list @@ -203,51 +113,6 @@ EXTRA_LIBDIRS = # EXTRA_LIBS = newlib-lpc EXTRA_LIBS = -# Path to linker scripts -ifeq ($(MCU),cortex-m3) - LINKERSCRIPTPATH = $(PIOSSTM32F10X) -else ifeq ($(MCU),cortex-m4) - LINKERSCRIPTPATH = $(PIOSSTM32FXX) -endif - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# Note: 3 is not always the best optimization level. -ifeq ($(DEBUG), YES) - OPT = 0 -else - OPT = s -endif - -# Output format (can be ihex or binary or both). -# binary to create a load-image in raw-binary format i.e. for SAM-BA, -# ihex to create a load-image in Intel hex format -#LOADFORMAT = ihex -#LOADFORMAT = binary -LOADFORMAT = both - -# Debugging format. -DEBUGF = dwarf-2 - -# Place project-specific -D (define) and/or -U options for C here. -ifeq ($(MCU),cortex-m3) - CDEFS = -DSTM32F10X_$(MODEL) -else ifeq ($(MCU),cortex-m4) - CDEFS += -DSTM32F4XX - CDEFS += -DSYSCLK_FREQ=$(SYSCLK_FREQ) - CDEFS += -DHSE_VALUE=$(OSCILLATOR_FREQ) -endif - -CDEFS += -DUSE_$(BOARD) -CDEFS += -DUSE_STDPERIPH_DRIVER - -ifeq ($(ENABLE_DEBUG_PINS), YES) - CDEFS += -DPIOS_ENABLE_DEBUG_PINS -endif -ifeq ($(ENABLE_AUX_UART), YES) - CDEFS += -DPIOS_ENABLE_AUX_UART -endif - # Provide (only) the bootloader with board-specific defines BLONLY_CDEFS += -DBOARD_TYPE=$(BOARD_TYPE) BLONLY_CDEFS += -DBOARD_REVISION=$(BOARD_REVISION) @@ -257,205 +122,13 @@ BLONLY_CDEFS += -DFW_BANK_BASE=$(FW_BANK_BASE) BLONLY_CDEFS += -DFW_BANK_SIZE=$(FW_BANK_SIZE) BLONLY_CDEFS += -DFW_DESC_SIZE=$(FW_DESC_SIZE) -# Place project-specific -D and/or -U options for Assembler with preprocessor here. -#ADEFS = -DUSE_IRQ_ASM_WRAPPER -ADEFS = -D__ASSEMBLY__ - -# Compiler flag to set the C Standard level. -# c89 - "ANSI" C -# gnu89 - c89 plus GCC extensions -# c99 - ISO C99 standard (not yet fully implemented) -# gnu99 - c99 plus GCC extensions -CSTANDARD = -std=gnu99 - -# Compiler flags. -# -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing - -# Flags for C and C++ (arm-elf-gcc/arm-elf-g++) -ifeq ($(MCU),cortex-m4) - # This is not the best place for these. Really should abstract out - # to the board file or something - CFLAGS += -DSTM32F4XX - CFLAGS += -DMEM_SIZE=1024000000 -endif - -CFLAGS += -mcpu=$(MCU) -CFLAGS += $(CDEFS) +# Compiler flags CFLAGS += $(BLONLY_CDEFS) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I. -CFLAGS += -mapcs-frame -CFLAGS += -fomit-frame-pointer -CFLAGS += -O$(OPT) -CFLAGS += -g$(DEBUGF) - -ifeq ($(DEBUG), YES) - CFLAGS += -DDEBUG -else - CFLAGS += -fdata-sections -ffunction-sections -endif - -CFLAGS += -Wall -# FIXME: STM32F4xx library raises strict aliasing and const qualifier warnings -ifneq ($(MCU),cortex-m4) - CFLAGS += -Werror -endif -CFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) - -# Compiler flags to generate dependency files -CFLAGS += -MD -MP -MF $(OUTDIR)/dep/$(@F).d - -# Flags only for C -#CONLYFLAGS += -Wnested-externs -CONLYFLAGS += $(CSTANDARD) - -# Assembler flags. -# -Wa,...: tell GCC to pass this to the assembler. -# -ahlns: create listing -ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp -ASFLAGS += $(ADEFS) -ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) -ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) - -MATH_LIB = -lm - -# Linker flags. -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS += -nostartfiles -Wl,-Map=$(OUTDIR)/$(TARGET).map,--cref,--gc-sections -LDFLAGS += $(patsubst %,-L%,$(EXTRA_LIBDIRS)) -LDFLAGS += $(patsubst %,-l%,$(EXTRA_LIBS)) -LDFLAGS += -lc -lgcc $(MATH_LIB) -LDFLAGS += -Wl,--warn-common -LDFLAGS += -Wl,--fatal-warnings - -ifneq ($(DEBUG), YES) - LDFLAGS += -Wl,-static -endif # Set linker-script name depending on selected submodel name ifeq ($(MCU),cortex-m3) - LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_memory.ld - LDFLAGS += -T$(LINKERSCRIPTPATH)/link_$(BOARD)_BL_sections.ld + LDFLAGS += -T$(LINKER_SCRIPTS_PATH)/link_$(BOARD)_memory.ld + LDFLAGS += -T$(LINKER_SCRIPTS_PATH)/link_$(BOARD)_BL_sections.ld else ifeq ($(MCU),cortex-m4) LDFLAGS += $(addprefix -T,$(LINKER_SCRIPTS_BL)) endif - -# List of all source files. -ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) -# List of all source files without directory and file-extension. -ALLSRCBASE = $(notdir $(basename $(ALLSRC))) - -# Define all object files. -ALLOBJ = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(ALLSRCBASE))) - -# Define all listing files (used for make clean). -LSTFILES = $(addprefix $(OUTDIR)/, $(addsuffix .lst, $(ALLSRCBASE))) -# Define all depedency-files (used for make clean). -DEPFILES = $(addprefix $(OUTDIR)/dep/, $(addsuffix .o.d, $(ALLSRCBASE))) - -# Default target. -all: build - -ifeq ($(LOADFORMAT),ihex) -build: elf hex sym -else ifeq ($(LOADFORMAT),binary) -build: elf bin sym -else ifeq ($(LOADFORMAT),both) -build: elf hex bin sym -else - $(error "$(MSG_FORMATERROR) $(FORMAT)") -endif - -# Link: create ELF output file from object files. -$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ), $(ALLLIB))) - -# Assemble: create object files from assembler source files. -$(foreach src, $(ASRC), $(eval $(call ASSEMBLE_TEMPLATE, $(src)))) - -# Assemble: create object files from assembler source files. ARM-only -$(foreach src, $(ASRCARM), $(eval $(call ASSEMBLE_ARM_TEMPLATE, $(src)))) - -# Compile: create object files from C source files. -$(foreach src, $(SRC), $(eval $(call COMPILE_C_TEMPLATE, $(src)))) - -# Compile: create object files from C source files. ARM-only -$(foreach src, $(SRCARM), $(eval $(call COMPILE_C_ARM_TEMPLATE, $(src)))) - -# Compile: create object files from C++ source files. -$(foreach src, $(CPPSRC), $(eval $(call COMPILE_CPP_TEMPLATE, $(src)))) - -# Compile: create object files from C++ source files. ARM-only -$(foreach src, $(CPPSRCARM), $(eval $(call COMPILE_CPP_ARM_TEMPLATE, $(src)))) - -# Compile: create assembler files from C source files. ARM/Thumb -$(eval $(call PARTIAL_COMPILE_TEMPLATE, SRC)) - -# Compile: create assembler files from C source files. ARM only -$(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) - -$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin - -# Add jtag targets (program and wipe) -$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE),$(OPENOCD_JTAG_CONFIG),$(OPENOCD_CONFIG))) - -.PHONY: elf lss sym hex bin bino -elf: $(OUTDIR)/$(TARGET).elf -lss: $(OUTDIR)/$(TARGET).lss -sym: $(OUTDIR)/$(TARGET).sym -hex: $(OUTDIR)/$(TARGET).hex -bin: $(OUTDIR)/$(TARGET).bin -bino: $(OUTDIR)/$(TARGET).bin.o - -# Display sizes of sections. -$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) - -# Generate Doxygen documents -docs: - doxygen $(DOXYGENDIR)/doxygen.cfg - -# Install: install binary file with prefix/suffix into install directory -install: $(OUTDIR)/$(TARGET).bin -ifneq ($(INSTALL_DIR),) - @$(ECHO) $(MSG_INSTALLING) $(call toprel, $<) - $(V1) $(MKDIR) -p $(INSTALL_DIR) - $(V1) $(INSTALL) $< $(INSTALL_DIR)/$(INSTALL_PFX)$(TARGET)$(INSTALL_SFX).bin -else - $(error INSTALL_DIR must be specified for $@) -endif - -# Target: clean project. -clean: clean_list - -clean_list : - @echo $(MSG_CLEANING) - $(V1) $(RM) -f $(OUTDIR)/$(TARGET).map - $(V1) $(RM) -f $(OUTDIR)/$(TARGET).elf - $(V1) $(RM) -f $(OUTDIR)/$(TARGET).hex - $(V1) $(RM) -f $(OUTDIR)/$(TARGET).bin - $(V1) $(RM) -f $(OUTDIR)/$(TARGET).sym - $(V1) $(RM) -f $(OUTDIR)/$(TARGET).lss - $(V1) $(RM) -f $(OUTDIR)/$(TARGET).bin.o - $(V1) $(RM) -f $(ALLOBJ) - $(V1) $(RM) -f $(LSTFILES) - $(V1) $(RM) -f $(DEPFILES) - $(V1) $(RM) -f $(SRC:.c=.s) - $(V1) $(RM) -f $(SRCARM:.c=.s) - $(V1) $(RM) -f $(CPPSRC:.cpp=.s) - $(V1) $(RM) -f $(CPPSRCARM:.cpp=.s) - -# Create output files directory -# all known MS Windows OS define the ComSpec environment variable -$(shell $(MKDIR) -p $(OUTDIR) 2>/dev/null) - -# Include the dependency files. --include $(shell $(MKDIR) -p $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*) - -# Listing of phony targets. -.PHONY : all build clean clean_list install diff --git a/make/common-defs.mk b/make/common-defs.mk new file mode 100644 index 000000000..cf05fb68a --- /dev/null +++ b/make/common-defs.mk @@ -0,0 +1,235 @@ +# +# Copyright (c) 2009-2013, The OpenPilot Team, http://www.openpilot.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +ifndef OPENPILOT_IS_COOL + $(error Top level Makefile must be used to build this target) +endif + +# +# Common botloader and firmware rules +# + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# Note: 3 is not always the best optimization level. +ifeq ($(DEBUG), YES) + OPT = 0 +else + OPT = s +endif + +# Output format (can be ihex or binary or both). +# binary to create a load-image in raw-binary format i.e. for SAM-BA, +# ihex to create a load-image in Intel hex format +#LOADFORMAT = ihex +#LOADFORMAT = binary +LOADFORMAT = both + +# Debugging format. +DEBUGF = dwarf-2 + +# Place project-specific -D (define) and/or -U options for C here. +CDEFS += -DUSE_$(BOARD) + +ifeq ($(ENABLE_DEBUG_PINS), YES) + CDEFS += -DPIOS_ENABLE_DEBUG_PINS +endif + +ifeq ($(ENABLE_AUX_UART), YES) + CDEFS += -DPIOS_ENABLE_AUX_UART +endif + +# Place project-specific -D and/or -U options for Assembler with preprocessor here. +#ADEFS = -DUSE_IRQ_ASM_WRAPPER +ADEFS = -D__ASSEMBLY__ + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Compiler flags. +# +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing + +# Common architecture-specific flags from the device-specific library makefile +CFLAGS += $(ARCHFLAGS) +CFLAGS += $(CDEFS) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -I. +CFLAGS += -mapcs-frame +CFLAGS += -fomit-frame-pointer +CFLAGS += -O$(OPT) +CFLAGS += -g$(DEBUGF) +CFLAGS += -Wall +CFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) + +# FIXME: STM32F4xx library raises strict aliasing and const qualifier warnings +ifneq ($(MCU),cortex-m4) + CFLAGS += -Werror +endif + +ifeq ($(DEBUG), YES) + CFLAGS += -DDEBUG +else + CFLAGS += -fdata-sections -ffunction-sections +endif + +# Compiler flags to generate dependency files +CFLAGS += -MD -MP -MF $(OUTDIR)/dep/$(@F).d + +# Flags only for C +#CONLYFLAGS += -Wnested-externs +CONLYFLAGS += $(CSTANDARD) + +# Assembler flags. +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlns: create listing +ASFLAGS = -mcpu=$(MCU) -I. -x assembler-with-cpp +ASFLAGS += $(ADEFS) +ASFLAGS += -Wa,-adhlns=$(addprefix $(OUTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) +ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) + +# Linker flags. +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS += -nostartfiles -Wl,-Map=$(OUTDIR)/$(TARGET).map,--cref,--gc-sections +LDFLAGS += $(patsubst %,-L%,$(EXTRA_LIBDIRS)) +LDFLAGS += $(patsubst %,-l%,$(EXTRA_LIBS)) +LDFLAGS += -lc -lgcc -lm +LDFLAGS += -Wl,--warn-common +LDFLAGS += -Wl,--fatal-warnings + +ifneq ($(DEBUG), YES) + LDFLAGS += -Wl,-static +endif + +# List of all source files. +ALLSRC = $(ASRCARM) $(ASRC) $(SRCARM) $(SRC) $(CPPSRCARM) $(CPPSRC) +# List of all source files without directory and file-extension. +ALLSRCBASE = $(notdir $(basename $(ALLSRC))) + +# Define all object files. +ALLOBJ = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(ALLSRCBASE))) + +# Define all listing files (used for make clean). +LSTFILES = $(addprefix $(OUTDIR)/, $(addsuffix .lst, $(ALLSRCBASE))) +# Define all depedency-files (used for make clean). +DEPFILES = $(addprefix $(OUTDIR)/dep/, $(addsuffix .o.d, $(ALLSRCBASE))) + +# Default target. +all: build + +ifeq ($(LOADFORMAT),ihex) +build: elf hex sym +else ifeq ($(LOADFORMAT),binary) +build: elf bin sym +else ifeq ($(LOADFORMAT),both) +build: elf hex bin sym +else + $(error "$(MSG_FORMATERROR) $(FORMAT)") +endif + +# Link: create ELF output file from object files. +$(eval $(call LINK_TEMPLATE, $(OUTDIR)/$(TARGET).elf, $(ALLOBJ))) + +# Assemble: create object files from assembler source files. +$(foreach src, $(ASRC), $(eval $(call ASSEMBLE_TEMPLATE, $(src)))) + +# Assemble: create object files from assembler source files. ARM-only +$(foreach src, $(ASRCARM), $(eval $(call ASSEMBLE_ARM_TEMPLATE, $(src)))) + +# Compile: create object files from C source files. +$(foreach src, $(SRC), $(eval $(call COMPILE_C_TEMPLATE, $(src)))) + +# Compile: create object files from C source files. ARM-only +$(foreach src, $(SRCARM), $(eval $(call COMPILE_C_ARM_TEMPLATE, $(src)))) + +# Compile: create object files from C++ source files. +$(foreach src, $(CPPSRC), $(eval $(call COMPILE_CPP_TEMPLATE, $(src)))) + +# Compile: create object files from C++ source files. ARM-only +$(foreach src, $(CPPSRCARM), $(eval $(call COMPILE_CPP_ARM_TEMPLATE, $(src)))) + +# Compile: create assembler files from C source files. ARM/Thumb +$(eval $(call PARTIAL_COMPILE_TEMPLATE, SRC)) + +# Compile: create assembler files from C source files. ARM only +$(eval $(call PARTIAL_COMPILE_ARM_TEMPLATE, SRCARM)) + +$(OUTDIR)/$(TARGET).bin.o: $(OUTDIR)/$(TARGET).bin + +# Add opfw target +$(eval $(call OPFW_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BOARD_TYPE),$(BOARD_REVISION))) + +# Add jtag targets (program and wipe) +$(eval $(call JTAG_TEMPLATE,$(OUTDIR)/$(TARGET).bin,$(BL_BANK_BASE),$(BL_BANK_SIZE),$(OPENOCD_JTAG_CONFIG),$(OPENOCD_CONFIG))) + +.PHONY: elf lss sym hex bin bino opfw +elf: $(OUTDIR)/$(TARGET).elf +lss: $(OUTDIR)/$(TARGET).lss +sym: $(OUTDIR)/$(TARGET).sym +hex: $(OUTDIR)/$(TARGET).hex +bin: $(OUTDIR)/$(TARGET).bin +bino: $(OUTDIR)/$(TARGET).bin.o +opfw: $(OUTDIR)/$(TARGET).opfw + +# Display sizes of sections. +$(eval $(call SIZE_TEMPLATE, $(OUTDIR)/$(TARGET).elf)) + +# Generate Doxygen documents +docs: + doxygen $(DOXYGENDIR)/doxygen.cfg + +# Target: clean project +clean: + @echo $(MSG_CLEANING) + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).map + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).elf + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).hex + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).bin + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).sym + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).lss + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).bin.o + $(V1) $(RM) -f $(OUTDIR)/$(TARGET).opfw + $(V1) $(RM) -f $(wildcard $(OUTDIR)/*.c) + $(V1) $(RM) -f $(wildcard $(OUTDIR)/*.h) + $(V1) $(RM) -f $(ALLOBJ) + $(V1) $(RM) -f $(LSTFILES) + $(V1) $(RM) -f $(DEPFILES) + $(V1) $(RM) -f $(SRC:.c=.s) + $(V1) $(RM) -f $(SRCARM:.c=.s) + $(V1) $(RM) -f $(CPPSRC:.cpp=.s) + $(V1) $(RM) -f $(CPPSRCARM:.cpp=.s) + +# Create output files directory +# all known MS Windows OS define the ComSpec environment variable +$(shell $(MKDIR) -p $(OUTDIR) 2>/dev/null) + +# Include the dependency files. +-include $(shell $(MKDIR) -p $(OUTDIR)/dep 2>/dev/null) $(wildcard $(OUTDIR)/dep/*) + +# Listing of phony targets. +.PHONY : all build clean install