Skip to content
Snippets Groups Projects
Makefile 2.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
    # The name of your project (used to name the compiled .hex file)
    TARGET = main
    
    # configurable options
    OPTIONS = -DF_CPU=48000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH
    
    # options needed by many Arduino libraries to configure for Teensy 3.0
    OPTIONS += -D__MK20DX128__ -DARDUIO=104
    
    
    #************************************************************************
    # Location of Teensyduino utilities, Toolchain, and Arduino Libraries.
    # To use this makefile without Arduino, copy the resources from these
    # locations and edit the pathnames.  The rest of Arduino is not needed.
    #************************************************************************
    
    # path location for Teensy Loader, teensy_post_compile and teensy_reboot
    TOOLSPATH = ../../../tools   # on Linux
    #TOOLSPATH = ../../../tools/avr/bin   # on Mac or Windows
    
    # path location for Arduino libraries (currently not used)
    LIBRARYPATH = ../../../../libraries
    
    # path location for the arm-none-eabi compiler
    COMPILERPATH = ../../../tools/arm-none-eabi/bin
    
    #************************************************************************
    # Settings below this point usually do not need to be edited
    #************************************************************************
    
    # CPPFLAGS = compiler options for C and C++
    CPPFLAGS = -Wall -g -Os -mcpu=cortex-m4 -mthumb -nostdlib -MMD $(OPTIONS) -I.
    
    # compiler options for C++ only
    CXXFLAGS = -std=gnu++0x -felide-constructors -fno-exceptions -fno-rtti
    
    # compiler options for C only
    CFLAGS =
    
    # linker options
    LDFLAGS = -Os -Wl,--gc-sections -mcpu=cortex-m4 -mthumb -Tmk20dx128.ld
    
    # additional libraries to link
    LIBS = -lm
    
    
    # names for the compiler programs
    CC = $(abspath $(COMPILERPATH))/arm-none-eabi-gcc
    CXX = $(abspath $(COMPILERPATH))/arm-none-eabi-g++
    OBJCOPY = $(abspath $(COMPILERPATH))/arm-none-eabi-objcopy
    SIZE = $(abspath $(COMPILERPATH))/arm-none-eabi-size
    
    # automatically create lists of the sources and objects
    # TODO: this does not handle Arduino libraries yet...
    C_FILES := $(wildcard *.c)
    CPP_FILES := $(wildcard *.cpp)
    OBJS := $(C_FILES:.c=.o) $(CPP_FILES:.cpp=.o)
    
    
    # the actual makefile rules (all .o files built by GNU make's default implicit rules)
    
    all: $(TARGET).hex
    
    $(TARGET).elf: $(OBJS) mk20dx128.ld
    	$(CC) $(LDFLAGS) -o $@ $(OBJS)
    
    %.hex: %.elf
    	$(SIZE) $<
    	$(OBJCOPY) -O ihex -R .eeprom $< $@
    	$(abspath $(TOOLSPATH))/teensy_post_compile -file=$(basename $@) -path=$(shell pwd) -tools=$(abspath $(TOOLSPATH))
    	-$(abspath $(TOOLSPATH))/teensy_reboot
    
    
    # compiler generated dependency info
    -include $(OBJS:.o=.d)
    
    clean:
    	rm -f *.o *.d $(TARGET).elf $(TARGET).hex