diff --git a/Makefile b/Makefile index 8e98609..4339351 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2)) + ifeq ($(strip $(DEVKITARM)),) $(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") endif @@ -17,41 +19,10 @@ TARGET := Lockpick_RCM BUILDDIR := build OUTPUTDIR := output SOURCEDIR = source -VPATH = $(dir $(wildcard ./$(SOURCEDIR)/*/)) $(dir $(wildcard ./$(SOURCEDIR)/*/*/)) -# Main and graphics. -OBJS = $(addprefix $(BUILDDIR)/$(TARGET)/, \ - start.o \ - main.o heap.o \ - keys.o \ - gfx.o \ -) - -# Hardware. -OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ - clock.o cluster.o di.o gpio.o i2c.o mc.o sdram.o sdram_lp0.o pinmux.o se.o smmu.o tsec.o \ - fuse.o \ - sdmmc.o sdmmc_driver.o \ - max17050.o max7762x.o max77620-rtc.o \ - hw_init.o \ -) - -# Utilities. -OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ - btn.o sprintf.o util.o \ -) - -# Horizon. -OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ - nx_emmc.o \ - pkg1.o pkg2.o sept.o \ -) - -# Libraries. -OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \ - lz.o blz.o \ - diskio.o ff.o ffunicode.o ffsystem.o \ -) +OBJS = $(patsubst $(SOURCEDIR)/%.S, $(BUILDDIR)/$(TARGET)/%.o, \ + $(patsubst $(SOURCEDIR)/%.c, $(BUILDDIR)/$(TARGET)/%.o, \ + $(call rwildcard, $(SOURCEDIR), *.S *.c))) ################################################################################ @@ -62,36 +33,30 @@ ARCH := -march=armv4t -mtune=arm7tdmi -mthumb-interwork CFLAGS = $(ARCH) -O2 -nostdlib -ffunction-sections -fdata-sections -fomit-frame-pointer -std=gnu11 -Wall $(CUSTOMDEFINES) LDFLAGS = $(ARCH) -nostartfiles -lgcc -Wl,--nmagic,--gc-sections -Xlinker --defsym=IPL_LOAD_ADDR=$(IPL_LOAD_ADDR) -MODULEDIRS := $(wildcard modules/*) - ################################################################################ -.PHONY: all clean $(MODULEDIRS) +.PHONY: all clean -all: $(TARGET).bin - @echo -n "Payload size is " - @wc -c < $(OUTPUTDIR)/$(TARGET).bin - @echo "Max size is 126296 Bytes." +all: $(OUTPUTDIR)/$(TARGET).bin clean: - @rm -rf $(OBJS) @rm -rf $(BUILDDIR) @rm -rf $(OUTPUTDIR) -$(MODULEDIRS): - $(MAKE) -C $@ $(MAKECMDGOALS) - -$(TARGET).bin: $(BUILDDIR)/$(TARGET)/$(TARGET).elf $(MODULEDIRS) - $(OBJCOPY) -S -O binary $< $(OUTPUTDIR)/$@ +$(OUTPUTDIR)/$(TARGET).bin: $(BUILDDIR)/$(TARGET)/$(TARGET).elf + @mkdir -p "$(@D)" + $(OBJCOPY) -S -O binary $< $@ + @echo -n "Payload size is " + @wc -c < $@ + @echo "Max size is 126296 Bytes." $(BUILDDIR)/$(TARGET)/$(TARGET).elf: $(OBJS) $(CC) $(LDFLAGS) -T $(SOURCEDIR)/link.ld $^ -o $@ -$(BUILDDIR)/$(TARGET)/%.o: %.c +$(BUILDDIR)/$(TARGET)/%.o: $(SOURCEDIR)/%.c + @mkdir -p "$(@D)" $(CC) $(CFLAGS) -c $< -o $@ -$(BUILDDIR)/$(TARGET)/%.o: %.S - @mkdir -p "$(BUILDDIR)" - @mkdir -p "$(BUILDDIR)/$(TARGET)" - @mkdir -p "$(OUTPUTDIR)" +$(BUILDDIR)/$(TARGET)/%.o: $(SOURCEDIR)/%.S + @mkdir -p "$(@D)" $(CC) $(CFLAGS) -c $< -o $@