mirror of
https://github.com/nitraiolo/CfgUSBLoader.git
synced 2024-11-30 15:14:16 +01:00
149 lines
5.1 KiB
Makefile
149 lines
5.1 KiB
Makefile
|
#---------------------------------------------------------------------------------
|
||
|
# Clear the implicit built in rules
|
||
|
#---------------------------------------------------------------------------------
|
||
|
.SUFFIXES:
|
||
|
|
||
|
#---------------------------------------------------------------------------------
|
||
|
# TARGET is the name of the output
|
||
|
# BUILD is the directory where object files & intermediate files will be placed
|
||
|
# SOURCES is a list of directories containing source code
|
||
|
# INCLUDES is a list of directories containing extra header files
|
||
|
#---------------------------------------------------------------------------------
|
||
|
TARGET := $(notdir $(CURDIR))
|
||
|
BUILD := build
|
||
|
SOURCES := source
|
||
|
DATA := data
|
||
|
INCLUDES := include ../libcios/include
|
||
|
#SCRIPTDIR := scripts.debug
|
||
|
SCRIPTDIR := scripts
|
||
|
BIN := bin
|
||
|
|
||
|
#DEBUG := -DDEBUG
|
||
|
|
||
|
STRIPIOSPLUGIN := ../stripiosplugin/stripiosplugin.exe
|
||
|
|
||
|
LIBS :=
|
||
|
LIBDIRS :=
|
||
|
|
||
|
CFLAGS+= $(DEBUG)
|
||
|
|
||
|
#---------------------------------------------------------------------------------
|
||
|
# the prefix on the compiler executables
|
||
|
#---------------------------------------------------------------------------------
|
||
|
#$(DEVKITARM)/bin/
|
||
|
#PREFIX := arm-eabi-
|
||
|
PREFIX := $(DEVKITARM)/bin/arm-eabi-
|
||
|
CC := $(PREFIX)gcc
|
||
|
CXX := $(PREFIX)g++
|
||
|
AR := $(PREFIX)ar
|
||
|
OBJCOPY := $(PREFIX)objcopy
|
||
|
LD := $(PREFIX)g++
|
||
|
AS := $(PREFIX)g++
|
||
|
|
||
|
#---------------------------------------------------------------------------------
|
||
|
# linker script
|
||
|
#---------------------------------------------------------------------------------
|
||
|
LINKSCRIPT := $(ROOT)/$(SCRIPTDIR)/link.ld
|
||
|
SPECS := $(ROOT)/$(SCRIPTDIR)/nostart.specs
|
||
|
|
||
|
ifeq ($(BUILDING),$(emptystring))
|
||
|
|
||
|
export ROOT := $(CURDIR)
|
||
|
|
||
|
|
||
|
all:
|
||
|
@[ -d $(BUILD) ] || mkdir -p $(BUILD)
|
||
|
@$(MAKE) -C $(BUILD) --no-print-directory -f $(CURDIR)/Makefile BUILDING=all
|
||
|
clean:
|
||
|
@echo clean ...
|
||
|
@rm -fr $(BUILD) $(BIN)/*.elf
|
||
|
else
|
||
|
|
||
|
TARGET := $(notdir $(ROOT))
|
||
|
STRIPIOSPLUGIN := $(ROOT)/$(STRIPIOSPLUGIN)
|
||
|
#----------------------------------------------------
|
||
|
# MS Visual Studio Style Fix:
|
||
|
#----------------------------------------------------
|
||
|
#STYLEFIX = 2>&1 | sed -e 's/\([a-zA-Z\.]\+\):\([0-9]\+\):\([0-9]\+:\)\?\(.\+\)/\1(\2):\4/' -e 's/undefined/error: undefined/'
|
||
|
STYLEFIX ?=
|
||
|
|
||
|
#---------------------------------------------------------------------------------
|
||
|
# automatically build a list of object files for our project
|
||
|
#---------------------------------------------------------------------------------
|
||
|
OUTPUT := $(ROOT)/$(BIN)/$(TARGET)
|
||
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(ROOT)/$(dir)/*.c)))
|
||
|
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(ROOT)/$(dir)/*.cpp)))
|
||
|
sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(ROOT)/$(dir)/*.s)))
|
||
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(ROOT)/$(dir)/*.S)))
|
||
|
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(ROOT)/$(dir)/*.*)))
|
||
|
|
||
|
OFILES := $(addsuffix _bin.o,$(BINFILES)) \
|
||
|
$(CPPFILES:.cpp=_cpp.o) $(CFILES:.c=_c.o) \
|
||
|
$(sFILES:.s=_s.o) $(SFILES:.S=_S.o)
|
||
|
|
||
|
DEPENDS := $(OFILES:.o=.d)
|
||
|
|
||
|
VPATH = $(foreach dir,$(SOURCES),$(ROOT)/$(dir))
|
||
|
|
||
|
|
||
|
#---------------------------------------------------------------------------------
|
||
|
# options for code generation
|
||
|
#---------------------------------------------------------------------------------
|
||
|
INCLUDE := $(foreach dir,$(INCLUDES),-I$(ROOT)/$(dir)) \
|
||
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||
|
-I$(ROOT)/$(BUILD)
|
||
|
|
||
|
#---------------------------------------------------------------------------------
|
||
|
# build a list of library paths
|
||
|
#---------------------------------------------------------------------------------
|
||
|
LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||
|
|
||
|
ARCH = -mcpu=arm9tdmi -mtune=arm9tdmi -mthumb -mthumb-interwork -mbig-endian
|
||
|
|
||
|
CFLAGS += -g $(ARCH) $(INCLUDE) -fno-strict-aliasing -Wall -Os -fomit-frame-pointer -ffast-math -fverbose-asm -Wpointer-arith -Winline -Wundef -g -ffunction-sections -fdata-sections -fno-exceptions
|
||
|
CFLAGS += -Wstrict-prototypes
|
||
|
|
||
|
|
||
|
AFLAGS = -g $(ARCH) -x assembler-with-cpp
|
||
|
|
||
|
LDFLAGS = -g $(ARCH) -specs=$(SPECS) -T$(LINKSCRIPT) $(LIBPATHS) $(LIBS) -Wl,--gc-sections -Wl,-static -Wl,-Map,$(TARGET).map -nostartfiles
|
||
|
|
||
|
|
||
|
$(OUTPUT).bin: $(TARGET).elf
|
||
|
@echo Stripping plugin $(notdir $@)
|
||
|
$(OBJCOPY) -O binary $(TARGET).elf $(OUTPUT).bin
|
||
|
# arm-eabi-objcopy -O binary $(TARGET).elf $(OUTPUT).bin
|
||
|
# $(STRIPIOSPLUGIN) $< $@
|
||
|
|
||
|
|
||
|
%.elf: $(OFILES)
|
||
|
@echo linking $(notdir $@)
|
||
|
@$(LD) -g -o $@ $(OFILES) $(LDFLAGS) $(STYLEFIX)
|
||
|
|
||
|
|
||
|
%_cpp.o : %.cpp
|
||
|
@echo $(notdir $<)
|
||
|
@$(CXX) -MMD -MF $*_cpp.d $(CFLAGS) -c $< -o$@ $(STYLEFIX)
|
||
|
|
||
|
%_c.o : %.c
|
||
|
@echo $(notdir $<)
|
||
|
@$(CC) -MMD -MF $*_c.d $(CFLAGS) -c $< -o$@ $(STYLEFIX)
|
||
|
|
||
|
%_s.o : %.s
|
||
|
@echo $(notdir $<)
|
||
|
@$(AS) -MMD -MF $*_s.d $(AFLAGS) -c $< -o$@ $(STYLEFIX)
|
||
|
|
||
|
%_bin.o : %.bin
|
||
|
@echo $(notdir $<)
|
||
|
@$(bin2o)
|
||
|
|
||
|
-include $(DEPENDS)
|
||
|
|
||
|
define bin2o
|
||
|
@echo -e "\t.section .rodata\n\t.align 4\n\t.global $(*)\n\t.global $(*)_end\n$(*):\n\t.incbin \"$(subst /,\\\\\\\\,$(shell echo $< | sed 's=/==;s=/=:/='))\"\n$(*)_end:\n" > $@.s
|
||
|
@$(CC) $(ASFLAGS) $(AFLAGS) -c $@.s -o $@
|
||
|
@rm -rf $@.s
|
||
|
endef
|
||
|
|
||
|
endif
|