108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
.DEFAULT_GOAL := all
 | 
						|
 | 
						|
APPLICATION ?= blinky
 | 
						|
 | 
						|
PLATFORM ?= nrf52
 | 
						|
TARGET_FILE ?= $(APPLICATION).elf
 | 
						|
 | 
						|
CC = $(CROSS_COMPILE)gcc
 | 
						|
CPP = $(CROSS_COMPILE)cpp
 | 
						|
CXX = $(CROSS_COMPILE)g++
 | 
						|
OBJCOPY = $(CROSS_COMPILE)objcopy
 | 
						|
OBJDUMP = $(CROSS_COMPILE)objdump
 | 
						|
SIZE = $(CROSS_COMPILE)size
 | 
						|
CHECK = cppcheck
 | 
						|
 | 
						|
SRC_DIR = src
 | 
						|
OBJ_DIR = obj/$(PLATFORM)
 | 
						|
BIN_DIR = bin/$(PLATFORM)
 | 
						|
 | 
						|
CPP_FLAGS += $(addprefix -I, $(INCLUDES))
 | 
						|
 | 
						|
C_SRCS = $(wildcard $(SRC_DIR)/*.c)
 | 
						|
C_SRCS += $(wildcard $(SRC_DIR)/platform/$(PLATFORM)/*.c)
 | 
						|
C_SRCS += $(wildcard $(SRC_DIR)/application/$(APPLICATION)/*.c)
 | 
						|
C_OBJS = $(patsubst $(SRC_DIR)%,$(OBJ_DIR)%,$(patsubst %.c,%.c.o,$(C_SRCS)))
 | 
						|
 | 
						|
CC_SRCS = $(wildcard $(SRC_DIR)/*.cc)
 | 
						|
CC_SRCS += $(wildcard $(SRC_DIR)/platform/$(PLATFORM)/*.cc)
 | 
						|
CC_SRCS += $(wildcard $(SRC_DIR)/application/$(APPLICATION)/*.cc)
 | 
						|
CC_OBJS = $(patsubst $(SRC_DIR)%,$(OBJ_DIR)%,$(patsubst %.cc,%.cc.o,$(CC_SRCS)))
 | 
						|
 | 
						|
OBJS = $(NRF_A_OBJS) $(NRF_C_OBJS) $(C_OBJS) $(CC_OBJS)
 | 
						|
 | 
						|
TARGET = $(BIN_DIR)/$(TARGET_FILE)
 | 
						|
TARGET_HEX = $(patsubst %.elf,%.hex,$(TARGET))
 | 
						|
TARGET_PACKAGE = $(patsubst %.hex,%.zip,$(TARGET_HEX))
 | 
						|
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
 | 
						|
 | 
						|
INCLUDES += src/
 | 
						|
INCLUDES += interfaces/
 | 
						|
INCLUDES += include/
 | 
						|
INCLUDES += include/platform/$(PLATFORM)
 | 
						|
 | 
						|
OPT = 3
 | 
						|
C_FLAGS += -O$(OPT) -g$(OPT)
 | 
						|
C_FLAGS += -Wall -Werror
 | 
						|
C_FLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
 | 
						|
C_FLAGS += -DPLATFORM_$(PLATFORM)
 | 
						|
 | 
						|
CXX_FLAGS += -O$(OPT) -g$(OPT)
 | 
						|
CXX_FLAGS += -Wall -Werror
 | 
						|
CXX_FLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
 | 
						|
CXX_FLAGS += -DPLATFORM_$(PLATFORM)
 | 
						|
 | 
						|
CHECK_FLAGS = $(addprefix -I,$(INCLUDES))
 | 
						|
CHECK_FLAGS += --enable=all --template=gcc --error-exitcode=1 --suppress=missingIncludeSystem --inline-suppr --force --language=c++
 | 
						|
 | 
						|
include build_system/platform/$(PLATFORM)/Makefile.$(PLATFORM)
 | 
						|
 | 
						|
.PHONY: all install uninstall clean distclean debug check
 | 
						|
all: $(TARGET)
 | 
						|
 | 
						|
debug:
 | 
						|
	@echo $(CC_OBJS)
 | 
						|
 | 
						|
clean:
 | 
						|
	rm -f $(TARGET) $(TARGET_HEX) $(TARGET_PACKAGE)
 | 
						|
	rm -f $(OBJS) $(patsubst %.o,%.d,$(OBJS))
 | 
						|
 | 
						|
distclean:
 | 
						|
	rm -rf bin obj
 | 
						|
 | 
						|
.PHONY:
 | 
						|
check: $(C_SRCS)
 | 
						|
	$(CHECK) $(CHECK_FLAGS) $(CC_SRCS)
 | 
						|
 | 
						|
$(TARGET): $(OBJS) $(THIS_MAKEFILE)
 | 
						|
	@mkdir -p $(dir $@)
 | 
						|
	$(CXX) $(CXX_FLAGS) $(LD_FLAGS) $(OBJS) $(addprefix -l,$(LIBS)) -Wl,-Map=$@.map -o $@
 | 
						|
	$(OBJDUMP) --disassemble-all --section=.text --source -EL -C --wide  --line-numbers --inlines $@ > $@.text.disassemble
 | 
						|
	ln -sf $(shell pwd)/$@ $(shell pwd)/bin/firmware.elf
 | 
						|
	$(SIZE) -x $@ > $@.size
 | 
						|
	@cat $@.size
 | 
						|
 | 
						|
$(TARGET_HEX): $(TARGET) $(THIS_MAKEFILE)
 | 
						|
	$(OBJCOPY) -O ihex $(TARGET) $(TARGET_HEX)
 | 
						|
	ln -sf $(shell pwd)/$@ $(shell pwd)/bin/firmware.hex
 | 
						|
 | 
						|
$(OBJ_DIR)/%.d: $(SRC_DIR)/%.c $(THIS_MAKEFILE)
 | 
						|
	@mkdir -p $(dir $@)
 | 
						|
	$(CPP) -MM -MF $@ -MP -MT $(patsubst %.d,%.o,$@) $(C_FLAGS) $(CPP_FLAGS) $(patsubst $(OBJ_DIR)/%.d,$(SRC_DIR)/%.c,$@)
 | 
						|
 | 
						|
$(OBJ_DIR)/%.d: $(SRC_DIR)/%.cc $(THIS_MAKEFILE)
 | 
						|
	@mkdir -p $(dir $@)
 | 
						|
	$(CPP) -MM -MF $@ -MP -MT $(patsubst %.d,%.o,$@) $(CXX_FLAGS) $(CPP_FLAGS) $(patsubst $(OBJ_DIR)/%.d,$(SRC_DIR)/%.cc,$@)
 | 
						|
 | 
						|
$(OBJ_DIR)/%.cc.o: $(SRC_DIR)/%.cc $(THIS_MAKEFILE)
 | 
						|
	@mkdir -p $(dir $@)
 | 
						|
	$(CXX) -c $(CPP_FLAGS) $(CXX_FLAGS) $< -o $@
 | 
						|
 | 
						|
$(OBJ_DIR)/%.c.o: $(SRC_DIR)/%.c $(THIS_MAKEFILE)
 | 
						|
	@mkdir -p $(dir $@)
 | 
						|
	$(CC) -c $(CPP_FLAGS) $(C_FLAGS) $< -o $@
 | 
						|
 | 
						|
ifeq "$(findstring $(MAKECMDGOALS), clean distclean)" ""
 | 
						|
-include $(patsubst %.o,%.d,$(OBJS))
 | 
						|
endif
 |