| # |
| # Copyright (c) 2011 Arduino. All right reserved. |
| # |
| # This library is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU Lesser General Public |
| # License as published by the Free Software Foundation; either |
| # version 2.1 of the License, or (at your option) any later version. |
| # |
| # This library 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 Lesser General Public License for more details. |
| # |
| # You should have received a copy of the GNU Lesser General Public |
| # License along with this library; if not, write to the Free Software |
| # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| # |
| |
| # Makefile for compiling validation application |
| .SUFFIXES: .o .a .c .cpp .s |
| |
| # putting default variant |
| ifeq ("$(VARIANT)", "") |
| #VARIANT=sam3s_ek |
| #VARIANT=sam3u_ek |
| #VARIANT=sam3x_ek |
| VARIANT=adk2 |
| endif |
| |
| ifeq ("$(VARIANT)", "sam3s_ek") |
| CHIP=__SAM3S4C__ |
| VARIANT_PATH = ../../../../../../atmel/sam/variants/$(VARIANT) |
| else ifeq ("$(VARIANT)", "sam3u_ek") |
| CHIP=__SAM3U4E__ |
| VARIANT_PATH = ../../../../../../atmel/sam/variants/$(VARIANT) |
| else ifeq ("$(VARIANT)", "sam3x_ek") |
| CHIP=__SAM3X8H__ |
| VARIANT_PATH = ../../../../../../atmel/sam/variants/$(VARIANT) |
| else ifeq ("$(VARIANT)", "adk2") |
| CHIP=__SAM3X8E__ |
| VARIANT_PATH = ../../../../../../google/sam/variants/$(VARIANT) |
| endif |
| |
| TOOLCHAIN=gcc |
| |
| #------------------------------------------------------------------------------- |
| # Path |
| #------------------------------------------------------------------------------- |
| |
| # Libraries |
| PROJECT_BASE_PATH = .. |
| SYSTEM_PATH = ../../../../system |
| |
| ifeq ($(CHIP), __SAM3S4C__) |
| CHIP_NAME=sam3s4c |
| CHIP_SERIE=sam3s |
| else ifeq ($(CHIP), __SAM3U4E__) |
| CHIP_NAME=sam3u4e |
| CHIP_SERIE=sam3u |
| else ifeq ($(CHIP), __SAM3N4C__) |
| CHIP_NAME=sam3n4c |
| CHIP_SERIE=sam3n |
| else ifeq ($(CHIP), __SAM3X8H__) |
| CHIP_NAME=sam3x8h |
| CHIP_SERIE=sam3xa |
| else ifeq ($(CHIP), __SAM3X8E__) |
| CHIP_NAME=sam3x8e |
| CHIP_SERIE=sam3xa |
| else |
| endif |
| |
| CMSIS_ROOT_PATH = $(SYSTEM_PATH)/CMSIS |
| CMSIS_ARM_PATH=$(CMSIS_ROOT_PATH)/CMSIS/Include |
| CMSIS_ATMEL_PATH=$(CMSIS_ROOT_PATH)/Device/ATMEL |
| CMSIS_CHIP_PATH=$(CMSIS_ROOT_PATH)/Device/ATMEL/$(CHIP_SERIE) |
| |
| ARDUINO_CORE_PATH=../../../../cores/arduino |
| ARDUINO_USB_PATH=$(ARDUINO_CORE_PATH)/USB |
| |
| # Output directories |
| OUTPUT_PATH = debug_$(VARIANT) |
| |
| #------------------------------------------------------------------------------- |
| # Files |
| #------------------------------------------------------------------------------- |
| |
| #vpath %.h $(PROJECT_BASE_PATH)/.. $(PROJECT_BASE_PATH)/../USB $(VARIANT_PATH) $(SYSTEM_PATH) $(CMSIS_ARM_PATH) |
| vpath %.cpp $(PROJECT_BASE_PATH) |
| |
| #VPATH+=$(PROJECT_BASE_PATH) |
| |
| INCLUDES = -I$(ARDUINO_CORE_PATH) |
| INCLUDES += -I$(ARDUINO_CORE_PATH)/USB |
| INCLUDES += -I$(VARIANT_PATH) |
| INCLUDES += -I$(SYSTEM_PATH)/libsam |
| INCLUDES += -I$(CMSIS_ARM_PATH) |
| INCLUDES += -I$(CMSIS_ATMEL_PATH) |
| INCLUDES += -I$(CMSIS_CHIP_PATH) |
| |
| #------------------------------------------------------------------------------- |
| ifdef DEBUG |
| include debug.mk |
| else |
| include release.mk |
| endif |
| |
| #------------------------------------------------------------------------------- |
| # Tools |
| #------------------------------------------------------------------------------- |
| |
| include $(TOOLCHAIN).mk |
| |
| #------------------------------------------------------------------------------- |
| ifdef DEBUG |
| OUTPUT_OBJ=debug |
| LIBS_POSTFIX=dbg |
| else |
| OUTPUT_OBJ=release |
| LIBS_POSTFIX=rel |
| endif |
| |
| OUTPUT_BIN=test_$(TOOLCHAIN)_$(LIBS_POSTFIX) |
| LIBS=-Wl,--start-group -lgcc -lc -lstdc++ -lsam_$(CHIP_NAME)_$(TOOLCHAIN)_$(LIBS_POSTFIX) -larduino_$(VARIANT)_$(TOOLCHAIN)_$(LIBS_POSTFIX) -lvariant_$(VARIANT)_$(TOOLCHAIN)_$(LIBS_POSTFIX) -Wl,--end-group |
| |
| LIB_PATH =-L$(PROJECT_BASE_PATH)/.. |
| LIB_PATH+=-L=/lib/thumb2 |
| #LIB_PATH+=-L=/../lib/gcc/arm-none-eabi/4.5.2/thumb2 |
| |
| LDFLAGS= -mcpu=cortex-m3 -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols |
| |
| #------------------------------------------------------------------------------- |
| # CPP source files and objects |
| #------------------------------------------------------------------------------- |
| CPP_SRC=$(wildcard $(PROJECT_BASE_PATH)/*.cpp) |
| |
| CPP_OBJ_TEMP = $(patsubst %.cpp, %.o, $(notdir $(CPP_SRC))) |
| |
| # during development, remove some files |
| CPP_OBJ_FILTER= |
| |
| CPP_OBJ=$(filter-out $(CPP_OBJ_FILTER), $(CPP_OBJ_TEMP)) |
| |
| #------------------------------------------------------------------------------- |
| # Rules |
| #------------------------------------------------------------------------------- |
| all: test |
| |
| test: create_output libsam_$(CHIP_NAME)_$(TOOLCHAIN)_$(LIBS_POSTFIX).a libarduino_$(VARIANT)_$(TOOLCHAIN)_$(LIBS_POSTFIX).a libvariant_$(VARIANT)_$(TOOLCHAIN)_$(LIBS_POSTFIX).a $(OUTPUT_BIN) |
| |
| |
| .PHONY: create_output |
| create_output: |
| @echo ------------------------------------------------------------------------------------ |
| @echo --- Preparing $(VARIANT) files in $(OUTPUT_PATH) $(OUTPUT_BIN) |
| # @echo ------------------------- |
| # @echo *$(INCLUDES) |
| # @echo ------------------------- |
| # @echo *$(C_SRC) |
| # @echo ------------------------- |
| # @echo *$(C_OBJ) |
| # @echo ------------------------- |
| # @echo *$(addprefix $(OUTPUT_PATH)/, $(C_OBJ)) |
| # @echo ------------------------- |
| # @echo *$(CPP_SRC) |
| # @echo ------------------------- |
| # @echo *$(CPP_OBJ) |
| # @echo ------------------------- |
| # @echo *$(addprefix $(OUTPUT_PATH)/, $(CPP_OBJ)) |
| # @echo ------------------------- |
| # @echo *$(A_SRC) |
| # @echo ------------------------- |
| |
| -@mkdir $(OUTPUT_PATH) 1>NUL 2>&1 |
| @echo ------------------------------------------------------------------------------------ |
| |
| $(addprefix $(OUTPUT_PATH)/,$(CPP_OBJ)): $(OUTPUT_PATH)/%.o: %.cpp |
| @echo *** Current folder is $(shell cd) |
| @"$(CXX)" -c $(CPPFLAGS) $< -o $@ |
| # "$(CXX)" -v -c $(CPPFLAGS) $< -o $@ |
| |
| $(OUTPUT_BIN): $(addprefix $(OUTPUT_PATH)/, $(C_OBJ)) $(addprefix $(OUTPUT_PATH)/, $(CPP_OBJ)) $(addprefix $(OUTPUT_PATH)/, $(A_OBJ)) |
| @"$(CC)" $(LIB_PATH) $(LDFLAGS) -T"$(VARIANT_PATH)/linker_scripts/gcc/flash.ld" -Wl,-Map,$(OUTPUT_PATH)/$@.map -o $(OUTPUT_PATH)/$@.elf $^ $(LIBS) |
| # @"$(CC)" $(LIB_PATH) $(LDFLAGS) -T"$(VARIANT_PATH)/linker_scripts/gcc/sram.ld" -Wl,-Map,$(OUTPUT_PATH)/$@.map -o $(OUTPUT_PATH)/$@.elf $^ $(LIBS) |
| @"$(NM)" $(OUTPUT_PATH)/$@.elf >$(OUTPUT_PATH)/$@.elf.txt |
| @"$(OBJCOPY)" -O binary $(OUTPUT_PATH)/$@.elf $(OUTPUT_PATH)/$@.bin |
| $(SIZE) $^ $(OUTPUT_PATH)/$@.elf |
| |
| .PHONY: clean |
| clean: |
| @echo ------------------------------------------------------------------------------------ |
| @echo --- Cleaning test files for $(VARIANT) |
| -@$(RM) $(OUTPUT_PATH) 1>NUL 2>&1 |
| @echo ------------------------------------------------------------------------------------ |
| @echo ------------------------------------------------------------------------------------ |
| @echo Sub-making clean for libsam |
| @$(MAKE) -C $(SYSTEM_PATH)/libsam/build_gcc -f Makefile clean |
| @echo ------------------------------------------------------------------------------------ |
| @echo ------------------------------------------------------------------------------------ |
| @echo Sub-making clean for Arduino core |
| $(MAKE) -C $(ARDUINO_CORE_PATH)/build_gcc -f Makefile clean |
| @echo ------------------------------------------------------------------------------------ |
| @echo ------------------------------------------------------------------------------------ |
| @echo Sub-making clean for variant $(VARIANT) |
| $(MAKE) -C $(VARIANT_PATH)/build_gcc -f Makefile clean |
| @echo ------------------------------------------------------------------------------------ |
| |
| # -$(RM) $(OUTPUT_PATH)/test.o |
| # -$(RM) $(OUTPUT_PATH)/$(OUTPUT_BIN).elf |
| # -$(RM) $(OUTPUT_PATH)/$(OUTPUT_BIN).elf.txt |
| # -$(RM) $(OUTPUT_PATH)/$(OUTPUT_BIN).bin |
| # -$(RM) $(OUTPUT_PATH)/$(OUTPUT_BIN).map |
| |
| debug: test |
| @"$(GDB)" -x "$(VARIANT_PATH)/debug_scripts/gcc/$(VARIANT)_flash.gdb" -ex "reset" -readnow -se $(OUTPUT_PATH)/$(OUTPUT_BIN).elf |
| # @"$(GDB)" -w -x "$(VARIANT_PATH)/debug_scripts/gcc/$(VARIANT)_sram.gdb" -ex "reset" -readnow -se $(OUTPUT_PATH)/$(OUTPUT_BIN).elf |
| |
| libsam_$(CHIP_NAME)_$(TOOLCHAIN)_$(LIBS_POSTFIX).a: |
| @echo ------------------------------------------------------------------------------------ |
| @echo Sub-making $@ |
| @$(MAKE) -C $(SYSTEM_PATH)/libsam/build_gcc -f Makefile $@ |
| @echo ------------------------------------------------------------------------------------ |
| |
| libarduino_$(VARIANT)_$(TOOLCHAIN)_$(LIBS_POSTFIX).a: |
| @echo ------------------------------------------------------------------------------------ |
| @echo Sub-making $@ |
| $(MAKE) -C $(ARDUINO_CORE_PATH)/build_gcc -f Makefile $(VARIANT) |
| @echo ------------------------------------------------------------------------------------ |
| |
| libvariant_$(VARIANT)_$(TOOLCHAIN)_$(LIBS_POSTFIX).a: |
| @echo ------------------------------------------------------------------------------------ |
| @echo Sub-making $@ |
| $(MAKE) -C $(VARIANT_PATH)/build_gcc -f Makefile $(VARIANT) |
| @echo ------------------------------------------------------------------------------------ |
| |