CFLAGS = -Wall -mpoke-function-name -O2 -mlibscl -mthrowback -static

CC = gcc -c $(CFLAGS) -MMD
LINK = gcc $(CFLAGS)

CP = copy
CPOPT = A~CF~NQR~S~T~V

SRCS = \
 suned \
 limp

APP = Apps/File/!SunEd

ROAPP = $(subst /,.,$(APP))
OBJS = $(addprefix build/,$(addsuffix .o, $(SRCS)))

#	Output file
build/!RunImage: $(OBJS)
	$(LINK) -o $@ $^ -mlibscl

#	Object files
build/%.o: src/%.c build/dirs
	$(CC) -MF build/d/$(subst /,.,$(basename $@)) -o $@ $<

#	Pattern rule for injecting version numbers into files
build/%.sed: src/template/% src/Version build/dirs
	sed -f src/Version $< > $@

#	Explicit dependency needed for generated file build/VersionNum.sed
build/suned.o: build/VersionNum.sed

#	Standard clean rule
clean:
	remove binary/zip
	remove source/zip
	x wipe build ~CFR~V

#	Binary RiscPkg archive
binary.zip: build/pkg-dir
	remove binary/zip
	dir build.pkg
	zip -rqI9 ^.^.binary/zip *
	dir ^.^

#	Source zip archive
source.zip: build/src-mani makefile COPYING
	remove source/zip
	zip -rqI9 source/zip src makefile COPYING

all: binary.zip source.zip

build/dirs:
	cdir build
	cdir build.o
	cdir build.d
	create build.dirs

# Double-colon rules execute in the order they're listed. So placing this rule
# here makes sure that the 'build' folder exists prior to the rule below being
# executed.
build/pkg-mani:: build/dirs

# Double-colon rules with no pre-requisites always execute. This allows us to
# make sure that build/pkg-mani is always up-to-date
build/pkg-mani::
	src/manigen src.pkg build.pkg-mani

# Same system as build/pkg-mani
build/src-mani:: build/dirs
build/src-mani::
	src/manigen src build.src-mani

# Create the package dir ready for zipping
build/pkg-dir: build/pkg-mani build/!RunImage build/Control.sed build/!Help.sed COPYING
# Copy over the static files
	x wipe build.pkg ~CFR~V
	$(CP) src.pkg build.pkg $(CPOPT)
# Populate the RiscPkg folder
	cdir build.pkg.RiscPkg
	$(CP) build.Control/sed build.pkg.RiscPkg.Control $(CPOPT)
	$(CP) COPYING build.pkg.RiscPkg.Copyright $(CPOPT)
# Populate the app folder
	$(CP) build.!Help/sed build.pkg.$(ROAPP).!Help $(CPOPT)
	$(CP) build.!RunImage build.pkg.$(ROAPP).!RunImage $(CPOPT)
# Create the dummy file we use to mark the rule as completed
	create build.pkg-dir

# Dependencies
-include build/d/*
