Newer
Older
ubScopin / sample / Makefile
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)