TARGET = code.elf
SOURCE = main.S spiral.S rotate.S snd.S gensmp.S filter.S song.S songs.S

# SELECT HERE WHICH VERSION YOU WANT TO BUILD

BUILD = release
#BUILD = release4k
#BUILD = nocomp


# build specific flags:

release4k_OPTFLAGS = -DSMALL
nocomp_OPTFLAGS = -DNOCOMP


export AR			= ar
export AS			= gcc
export CC			= gcc
export LD			= gcc
export SHELL	= sh

OBJFILES  = $(SOURCE:.S=.o)

TARGETOBJ	= $(addprefix $(OBJDIR)/, $(TARGET))

AGBINC	 	=	$(AGBDIR)/include

ASFLAGS   = -I$(AGBINC) -mthumb-interwork
LDFLAGS   = -nostdlib -mthumb -mthumb-interwork -T app.cmd

OBJDIR		= $(BUILD)

colon:= :
empty:=
space:= $(empty) $(empty)

vpath %.S	.:$(subst $(space),$(colon),$(SRCDIRS)):$(subst $(space),$(colon),$(LIBDIRS))
vpath %.o	:$(OBJDIR):$(subst $(space),$(colon),$(SRCDIRS))

OPTFLAGS	= $($(BUILD)_OPTFLAGS) $($(*)_OPTFLAGS)

all: $(TARGETOBJ)

$(TARGETOBJ): $(OBJFILES) app.cmd makefile stub.bin

makefile: $(OBJDIR)

$(OBJDIR):
	-@mkdir $(OBJDIR)

stub.bin: crt0.S appstub.cmd
	@echo as crt0.S
	@$(AS) $(ASFLAGS) $(OPTFLAGS) -o $(OBJDIR)/crt0.o -c crt0.S
	@echo ld stub.elf
	@$(LD) -o $(OBJDIR)/stub.elf $(OBJDIR)/crt0.o -Wl,-Map,stub.map $(LDFLAGS) -T appstub.cmd
	@objcopy -v $(OBJDIR)/stub.elf $(OBJDIR)/stub.bin -O binary

%.elf:
	@echo > $*.map
	@echo ld $@
	@$(LD) -o $@ $(addprefix $(OBJDIR)/,$(OBJFILES)) -Wl,-Map,$*.map $(LDFLAGS)
	@objcopy -v $@ $(subst .elf,.bin,$@) -O binary
ifneq ($($(BUILD)_OPTFLAGS),-DNOCOMP)	
	@agbcomp -b -l $(subst .elf,.bin,$@)
	@agbcomp -b -h 4 $(subst .elf,_LZ.bin,$@)
	@cat $(OBJDIR)/stub.bin $(subst .elf,_LZ_huff.bin,$@) > rotris.bin
else
	@echo Creating uncompressed version of rotris.bin
	@cat $(OBJDIR)/stub.bin $(OBJDIR)/code.bin > rotris.bin
endif

%.o : %.S
	@echo $(AS) $(ASFLAGS) -o $(OBJDIR)/$(@F) -c $<
	@$(AS) $(ASFLAGS) $(OPTFLAGS) -o $(OBJDIR)/$(@F) -c $<

clean:
	@-rm -rf $(OBJDIR)
