.POSIX:

CFLAGS = -std=c99 -Os -Wall -Wextra -Wpedantic -Wshadow
CFLAGS += -ffreestanding -fno-builtin -nostdlib
CFLAGS += -fno-pic -fno-pie
CFLAGS += -fomit-frame-pointer -fno-stack-protector
CFLAGS += -ffast-math

AS = as

#DROP = T=/tmp/u;tail -n +2 $$0|xzcat>$$T;chmod +x $$T;$$T;rm $$T;exit
#DROP = T=/tmp/u;tail -n +2 $$0|xzcat>$$T;chmod +x $$T;printf "\\033[?25l";$$T;printf "\\033[?25h";clear;rm $$T;exit
#DROP = T=/tmp/u;trap "rm -f $$T;printf \"\\033[?25h\\e[2J\\e[H\"" EXIT INT TERM;printf "\\033[?25l";tail -n+2 $$0|xzcat > $$T;chmod +x $$T;$$T;exit
#DROP = T=/tmp/u;trap "rm -f $$T;printf \"\\33c\"" 0;printf "\\33[?25l";tail -n +2 $$0|xzcat>$$T;chmod +x $$T;$$T;exit
DROP = T=/tmp/u;trap "rm -f $$T;printf \"\\33c\"" 0;printf "\\33[?25l";tail -n +2 $$0|xzcat>$$T;chmod +x $$T;$$T|aplay -fdat;exit

OUT = bps-sd-emergent

all: $(OUT)

$(OUT): a.out
	@rm -f $@
	@touch $@
	@printf '$(DROP)\n' >> $@
	@#@xz -e6 -c $^ >> $@
	@#lzma -e6 -c $^ >> $@
	@@xz --arm64 --lzma2=preset=9,lc=0 -c $^ >> $@
	@chmod +x $@
	@wc -c a.out
	@wc -c $@

a.out: combined.o
	objcopy -O binary -j .text $^ $@
	@chmod +x $@

combined.o: main.o audio.o
	ld -T linker.ld $^ -o combined.o

main.o: main.s
	$(AS) -o $@ $^

audio.o: audio.c
	#$(CC) $(CFLAGS) -S $^ -o audio.s
	$(CC) $(CFLAGS) -c $^ -o $@

clean:
	rm main.o audio.o combined.o a.out $(OUT)
