TARGET=ubScopin
CC = gcc
CXX = g++
OBJCOPY=avr-objcopy
HEX_FLASH_FLAGS=--pad-to 0x2000
OPTIM=-O2
WARNINGS=-Wall
BUILD=build
SOURCES=src
INCLUDES=src
COMMON =
CFLAGS = $(COMMON) -std=c99
CFLAGS += $(WARNINGS) $(OPTIM) $(WARNINGS) $(INCLUDE)
CFLAGS += -MD -MP -MT $(*F).o -MF $(DEPSDIR)/$(@F).d
CXXFLAGS = $(COMMON)
CXXFLAGS+= $(WARNINGS) $(OPTIM) $(WARNINGS) $(INCLUDE)
CXXFLAGS+= -MD -MP -MT $(*F).o -MF $(DEPSDIR)/$(@F).d
CXXFLAGS+= -ffunction-sections -Wl,--gc-sections
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -lwiringPi
LINKER_FLAGS += -lwiringPi
ifneq ($(BUILD),$(notdir $(CURDIR)))
export MAKEFILE = $(CURDIR)/Makefile
export INCLUDE = $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
-I$(CURDIR)/$(BUILD)
export OUTPUT := $(CURDIR)/$(TARGET)
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
export DEPSDIR := $(CURDIR)/$(BUILD)
export CFILES = $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
export SFILES = $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
export CPPFILES = $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
export AUTOSRC = $(AUTOC) $(AUTOCPP)
#
# Define all object files.
#
export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.S=.o)
.PHONY: $(BUILD) clean
# ----------------------
$(BUILD):
@[ -d $@ ] || mkdir -p $@
@#@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
@make -C $(BUILD) -f $(MAKEFILE)
all: $(BUILD) size
clean:
rm -rf $(BUILD) $(TARGET).elf $(TARGET).{hex,map,elf,lss} html
else
DEPENDS := $(OFILES:.o=.d)
$(OUTPUT).elf: $(OFILES)
size: $(OUTPUT).elf
@echo
@avr-size $(OUTPUT).elf
-include $(DEPENDS)
endif
$(OUTPUT).lss: $(OUTPUT).elf
avr-objdump -h -S $< > $@
$(OUTPUT).elf : $(OFILES) $(MAKEFILE)
$(CXX) $(CXXFLAGS) $(OFILES) $(LINKER_FLAGS) -o$(OUTPUT).elf
%.o: %.c
@echo $(notdir $<)
$(CC) $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
%.o: %.S
@echo $(notdir $<)
$(CC) $(ASMFLAGS) -c $< -o $@ $(ERROR_FILTER)