123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #
- # Pavel Kirienko, 2014 <pavel.kirienko@gmail.com>
- #
- CPPSRC := $(wildcard src/*.cpp) \
- $(wildcard src/sys/*.cpp)
- CSRC := $(wildcard lpc_chip_11cxx_lib/src/*.c) \
- $(wildcard src/sys/*.c)
- DEF = -DFW_VERSION_MAJOR=1 -DFW_VERSION_MINOR=0
- INC = -Isrc/sys \
- -isystem lpc_chip_11cxx_lib/inc
- #
- # UAVCAN library
- #
- DEF += -DUAVCAN_TINY=1
- include ../../../libuavcan/include.mk
- CPPSRC += $(LIBUAVCAN_SRC)
- INC += -I$(LIBUAVCAN_INC)
- include ../driver/include.mk
- CPPSRC += $(LIBUAVCAN_LPC11C24_SRC)
- INC += -I$(LIBUAVCAN_LPC11C24_INC)
- $(info $(shell $(LIBUAVCAN_DSDLC) $(UAVCAN_DSDL_DIR)))
- INC += -Idsdlc_generated
- #
- # Git commit hash
- #
- GIT_HASH := $(shell git rev-parse --short HEAD)
- ifeq ($(words $(GIT_HASH)),1)
- DEF += -DGIT_HASH=0x$(GIT_HASH)
- endif
- #
- # Build configuration
- #
- BUILDDIR = build
- OBJDIR = $(BUILDDIR)/obj
- DEPDIR = $(BUILDDIR)/dep
- DEF += -DNDEBUG -DCHIP_LPC11CXX -DCORE_M0 -DTHUMB_NO_INTERWORKING -U__STRICT_ANSI__
- FLAGS = -mthumb -mcpu=cortex-m0 -mno-thumb-interwork -flto -Os -g3 -Wall -Wextra -Werror -Wundef -ffunction-sections \
- -fdata-sections -fno-common -fno-exceptions -fno-unwind-tables -fno-stack-protector -fomit-frame-pointer \
- -Wfloat-equal -Wconversion -Wsign-conversion -Wmissing-declarations
- C_CPP_FLAGS = $(FLAGS) -MD -MP -MF $(DEPDIR)/$(@F).d
- CFLAGS = $(C_CPP_FLAGS) -std=c99
- CPPFLAGS = $(C_CPP_FLAGS) -pedantic -std=c++11 -fno-rtti -fno-threadsafe-statics
- LDFLAGS = $(FLAGS) -nodefaultlibs -lc -lgcc -nostartfiles -Tlpc11c24.ld -Xlinker --gc-sections \
- -Wl,-Map,$(BUILDDIR)/output.map
- # Link with nano newlib. Other toolchains may not support this option, so it can be safely removed.
- LDFLAGS += --specs=nano.specs
- COBJ = $(addprefix $(OBJDIR)/, $(notdir $(CSRC:.c=.o)))
- CPPOBJ = $(addprefix $(OBJDIR)/, $(notdir $(CPPSRC:.cpp=.o)))
- OBJ = $(COBJ) $(CPPOBJ)
- VPATH = $(sort $(dir $(CSRC)) $(dir $(CPPSRC)))
- ELF = $(BUILDDIR)/firmware.elf
- BIN = $(BUILDDIR)/firmware.bin
- #
- # Rules
- #
- TOOLCHAIN ?= arm-none-eabi-
- CC = $(TOOLCHAIN)gcc
- CPPC = $(TOOLCHAIN)g++
- AS = $(TOOLCHAIN)gcc
- LD = $(TOOLCHAIN)g++
- CP = $(TOOLCHAIN)objcopy
- SIZE = $(TOOLCHAIN)size
- all: $(OBJ) $(ELF) $(BIN) size
- $(OBJ): | $(BUILDDIR)
- $(BUILDDIR):
- @mkdir -p $(BUILDDIR)
- @mkdir -p $(DEPDIR)
- @mkdir -p $(OBJDIR)
- $(BIN): $(ELF)
- @echo
- $(CP) -O binary $(ELF) $@
- $(ELF): $(OBJ)
- @echo
- $(LD) $(OBJ) $(LDFLAGS) -o $@
- $(COBJ): $(OBJDIR)/%.o: %.c
- @echo
- $(CC) -c $(DEF) $(INC) $(CFLAGS) $< -o $@
- $(CPPOBJ): $(OBJDIR)/%.o: %.cpp
- @echo
- $(CPPC) -c $(DEF) $(INC) $(CPPFLAGS) $< -o $@
- clean:
- rm -rf $(BUILDDIR) dsdlc_generated
- size: $(ELF)
- @if [ -f $(ELF) ]; then echo; $(SIZE) $(ELF); echo; fi;
- .PHONY: all clean size $(BUILDDIR)
- # Include the dependency files, should be the last of the makefile
- -include $(shell mkdir $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*)
|