diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 158 | 
1 files changed, 158 insertions, 0 deletions
| diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..94542db --- /dev/null +++ b/Makefile @@ -0,0 +1,158 @@ +LINKER_NAME = LPC1768 +STARTUP_NAME = startup_LPC17xx +SYSTEM_NAME = system_LPC17xx +TARGET_BOARD = TARGET_LPC1768 +TARGET_VENDOR = TARGET_NXP +TARGET_FAMILY = TARGET_LPC176X +TARGET_SPECIFIC = TARGET_MBED_LPC1768 +CPU = cortex-m3 + +# path to the mbed library +MBED_DIR = ext + +# toolchain specific +TOOLCHAIN = arm-none-eabi- +CC = $(TOOLCHAIN)gcc +CXX = $(TOOLCHAIN)g++ +AS = $(TOOLCHAIN)gcc -x assembler-with-cpp +LD = $(TOOLCHAIN)gcc +OBJCP = $(TOOLCHAIN)objcopy +AR = $(TOOLCHAIN)ar + +# application specific +INSTRUCTION_MODE = thumb +TARGET = mbed +TARGET_EXT = elf +LD_SCRIPT = $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/$(LINKER_NAME).ld + +CC_SYMBOLS = -D$(TARGET_BOARD) -DTOOLCHAIN_GCC_ARM -DNDEBUG + +LIB_DIRS = $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM +LIBS = -lmbed -lstdc++ -lsupc++ -lm -lgcc -lc -lnosys + +MBED_OBJ = $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/board.o +MBED_OBJ += $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/cmsis_nvic.o +MBED_OBJ += $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/$(STARTUP_NAME).o +MBED_OBJ += $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/retarget.o +MBED_OBJ += $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/$(SYSTEM_NAME).o +ifneq ("$(wildcard $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/mbed_overrides.o)","") +	MBED_OBJ += $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM/mbed_overrides.o +endif + +# directories +INC_DIRS = $(MBED_DIR) $(MBED_DIR)/$(TARGET_BOARD) $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM +INC_DIRS += $(MBED_DIR)/$(TARGET_BOARD)/$(TARGET_VENDOR)/$(TARGET_FAMILY) +INC_DIRS += $(MBED_DIR)/$(TARGET_BOARD)/$(TARGET_VENDOR)/$(TARGET_FAMILY)/$(TARGET_SPECIFIC) + +SRC_DIRS = $(MBED_DIR) $(MBED_DIR)/$(TARGET_BOARD) $(MBED_DIR)/$(TARGET_BOARD)/TOOLCHAIN_GCC_ARM . +SRC_DIRS += $(MBED_DIR)/$(TARGET_BOARD)/$(TARGET_VENDOR)/$(TARGET_FAMILY) +SRC_DIRS += $(MBED_DIR)/$(TARGET_BOARD)/$(TARGET_VENDOR)/$(TARGET_FAMILY)/$(TARGET_SPECIFIC) +SRC_DIRS += src +# app source directories (remove comment and add more files) +#SRC_DIRS += + +OUT_DIR = build + +INC_DIRS_F = -I. $(patsubst %, -I%, $(INC_DIRS)) + +ifeq ($(strip $(OUT_DIR)), ) +	OBJ_FOLDER = +else +	OBJ_FOLDER = $(strip $(OUT_DIR))/ +endif + +COMPILER_OPTIONS  = -g -ggdb -Os -Wall -fno-strict-aliasing -fno-rtti +COMPILER_OPTIONS += -ffunction-sections -fdata-sections -fno-exceptions -fno-delete-null-pointer-checks +COMPILER_OPTIONS += -fmessage-length=0 -fno-builtin -m$(INSTRUCTION_MODE) +COMPILER_OPTIONS += -mcpu=$(CPU) -MMD -MP $(CC_SYMBOLS) + +DEPEND_OPTS = -MF $(OBJ_FOLDER)$(@F:.o=.d) + +# Flags +CFLAGS = $(COMPILER_OPTIONS) $(DEPEND_OPTS) $(INC_DIRS_F) -std=gnu99 -c + +CXXFLAGS = $(COMPILER_OPTIONS) $(DEPEND_OPTS) $(INC_DIRS_F) -std=gnu++98 -c + +ASFLAGS = $(COMPILER_OPTIONS) $(INC_DIRS_F) -c + +# Linker options +LD_OPTIONS = -mcpu=$(CPU) -m$(INSTRUCTION_MODE) -Os -L $(LIB_DIRS) -T $(LD_SCRIPT) $(INC_DIRS_F) +LD_OPTIONS += -specs=nano.specs +#use this if %f is used, by default it's commented +#LD_OPTIONS += -u _printf_float -u _scanf_float +LD_OPTIONS += -Wl,-Map=$(OBJ_FOLDER)$(TARGET).map,--gc-sections + +OBJCPFLAGS = -O ihex + +ARFLAGS = cr + +RM = rm -rf + +USER_OBJS = +C_SRCS = +S_SRCS = +C_OBJS = +S_OBJS = + +# All source/object files inside SRC_DIRS +C_SRCS := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +C_OBJS := $(patsubst %.c,$(OBJ_FOLDER)%.o,$(notdir $(C_SRCS))) + +CPP_SRCS := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp)) +CPP_OBJS := $(patsubst %.cpp,$(OBJ_FOLDER)%.o,$(notdir $(CPP_SRCS))) + +S_SRCS := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.s)) +S_OBJS := $(patsubst %.s,$(OBJ_FOLDER)%.o,$(notdir $(S_SRCS))) + +VPATH := $(SRC_DIRS) + +$(OBJ_FOLDER)%.o : %.c +	@echo 'Building file: $(@F)' +	@echo 'Invoking: MCU C Compiler' +	$(CC) $(CFLAGS) $< -o $@ +	@echo 'Finished building: $(@F)' +	@echo ' ' + +$(OBJ_FOLDER)%.o : %.cpp +	@echo 'Building file: $(@F)' +	@echo 'Invoking: MCU C++ Compiler' +	$(CXX) $(CXXFLAGS) $< -o $@ +	@echo 'Finished building: $(@F)' +	@echo ' ' + +$(OBJ_FOLDER)%.o : %.s +	@echo 'Building file: $(@F)' +	@echo 'Invoking: MCU Assembler' +	$(AS) $(ASFLAGS) $< -o $@ +	@echo 'Finished building: $(@F)' +	@echo ' ' + +all: create_outputdir $(OBJ_FOLDER)$(TARGET).$(TARGET_EXT) print_info + +create_outputdir: +	$(shell mkdir $(OBJ_FOLDER) 2>/dev/null) + +# Tool invocations +$(OBJ_FOLDER)$(TARGET).$(TARGET_EXT): $(LD_SCRIPT) $(C_OBJS) $(CPP_OBJS) $(S_OBJS) $(MBED_OBJ) +	@echo 'Building target: $@' +	@echo 'Invoking: MCU Linker' +	$(LD) $(LD_OPTIONS) $(CPP_OBJS) $(C_OBJS) $(S_OBJS) $(MBED_OBJ) $(LIBS) -o $(OBJ_FOLDER)$(TARGET).$(TARGET_EXT) +	@echo 'Finished building target: $@' +	@echo ' ' + +# Other Targets +clean: +	@echo 'Removing entire out directory' +	$(RM) $(TARGET).$(TARGET_EXT) $(TARGET).bin $(TARGET).map $(OBJ_FOLDER)*.* $(OBJ_FOLDER) +	@echo ' ' + +print_info: +	@echo 'Printing size' +	arm-none-eabi-size --totals $(OBJ_FOLDER)$(TARGET).$(TARGET_EXT) +	arm-none-eabi-objcopy -O srec $(OBJ_FOLDER)$(TARGET).$(TARGET_EXT) $(OBJ_FOLDER)$(TARGET).s19 +	arm-none-eabi-objcopy -O binary -v $(OBJ_FOLDER)$(TARGET).$(TARGET_EXT) $(OBJ_FOLDER)$(TARGET).bin +	arm-none-eabi-objdump -D $(OBJ_FOLDER)$(TARGET).$(TARGET_EXT) > $(OBJ_FOLDER)$(TARGET).lst +	arm-none-eabi-nm $(OBJ_FOLDER)$(TARGET).$(TARGET_EXT) > $(OBJ_FOLDER)$(TARGET)-symbol-table.txt +	@echo ' ' + +.PHONY: all clean print_info | 
