.SUFFIXES: ifeq ($(strip $(DEVKITARM)),) $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") endif # Sources and defines TARGET := code11 BUILD := build11 INCLUDES := include SOURCES := source source/arm11 DEFINES := -DARM11 -D_3DS DATA := # Compiler settings ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mthumb-interwork CFLAGS := $(ARCH) -std=c11 -O2 -g -fstrict-aliasing -mword-relocations -fomit-frame-pointer \ -ffast-math -ffunction-sections -Wall -Wextra CXXFLAGS := $(ARCH) -std=c++11 -O2 -g -fstrict-aliasing -mword-relocations -fomit-frame-pointer \ -ffast-math -ffunction-sections -Wall -Wextra ASFLAGS := LDFLAGS := $(CFLAGS) -Wl,--use-blx,--gc-sections -nostartfiles -T arm11.ld PREFIX := arm-none-eabi- CC := $(PREFIX)gcc CXX := $(PREFIX)g++ AS := $(PREFIX)as OBJCOPY := $(PREFIX)objcopy # Do not change anything after this VPATH := $(DATA) $(SOURCES) BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) OFILES := $(foreach file,$(BINFILES),$(BUILD)/$(file).o) \ $(foreach file,$(CFILES:.c=.o),$(BUILD)/$(file)) \ $(foreach file,$(CPPFILES:.cpp=.o),$(BUILD)/$(file)) \ $(foreach file,$(SFILES:.s=.o),$(BUILD)/$(file)) INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) -I$(BUILD) ifeq ($(strip $(CPPFILES)),) LD := $(CC) else LD := $(CXX) endif ifneq ($(strip $(NO_DEBUG)),) DEFINES += -DNDEBUG endif .PHONY: clean release # Main target $(TARGET).bin: $(TARGET).elf @$(OBJCOPY) -O binary $< $@ @echo built ... $(notdir $@) $(TARGET).elf: $(BUILD) $(OFILES) clean: @echo clean ... @rm -rf $(BUILD) $(TARGET).bin $(TARGET).elf release: @$(MAKE) --no-print-directory -f Makefile.arm11 NO_DEBUG=1 $(BUILD): @mkdir -p $(BUILD) %.elf: @echo linking $(notdir $@) $(LD) $(LDFLAGS) $(OFILES) -o $@ $(BUILD)/%.bin.o: %.bin @echo $(notdir $<) bin2s $< | $(AS) -o $(@) echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > $(BUILD)/`(echo $(<F) | tr . _)`.h echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> $(BUILD)/`(echo $(<F) | tr . _)`.h echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> $(BUILD)/`(echo $(<F) | tr . _)`.h $(BUILD)/%.o: %.c @echo $(notdir $<) $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE) -c $< -o $@ $(BUILD)/%.o: %.cpp @echo $(notdir $<) $(CXX) $(CXXFLAGS) $(DEFINES) $(INCLUDE) -c $< -o $@ $(BUILD)/%.o: %.s @echo $(notdir $<) $(CC) $(CFLAGS) -x assembler-with-cpp $(DEFINES) $(INCLUDE) -c $< -o $@