
MAKEFILE_DIR   := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))

SRCS				?= $(sort $(wildcard src/*.s))
OBJS				?= $(patsubst src/%.s,obj/%.o,$(SRCS))

TIMCAT         ?= tools/timcat.c
SORBUS_UART_DEV ?= /dev/ttyACM0

PROGRAM        := nolimit.sx4
MAP_FILE       := $(basename $(PROGRAM)).map
LABELS_FILE    := $(basename $(PROGRAM)).labels
LST_FILE       := $(basename $(PROGRAM)).lst
ZIP_FILE       := ../1kLEDsIsNoLimit.zip

LINK_CFG       ?= cfg/sorbus_demo.cfg

CP             ?= cp
MKDIR          ?= mkdir -p
#ZIP            ?= zip
ZIP            ?= 7z a -mx=9
LS             ?= ls -l

AR65           ?= ar65
CA65           ?= ca65
CC65           ?= cc65
CL65           ?= cl65
LD65           ?= ld65

CFG_DIR        ?= cfg
INC_DIR        ?= inc
OBJ_DIR        ?= obj

SYS_FLAGS      ?= --cpu 65sc02 -t none --asm-include-dir $(INC_DIR) -C $(LINK_CFG) -l $(LST_FILE) -Ln $(LABELS_FILE) -m $(MAP_FILE)
ASM_FLAGS      ?= --cpu 65sc02 -t none -I $(INC_DIR) -I $(OBJ_DIR)

all: $(PROGRAM)

.phony: all sdk clean tests debug tailspace

$(PROGRAM): $(OBJS)
	@$(MKDIR) $(dir $@)
	$(CL65) $(SYS_FLAGS) --asm-include-dir $(INC_DIR) -o $@ $^
	ls -l $(basename $@).*
	@printf "end address of $@: $$%04x\n" $$((1024+$$(wc -c <$@)))
	@echo "that's <= $$(((768+$$(wc -c <$@))/1024))k of 51k"

obj/%.o: src/%.s
	@$(MKDIR) $(dir $@)
	$(CA65) $(ASM_FLAGS) -o $@ $<

tailspace:
	grep -l ' $$' $(wildcard */*.c) $(wildcard */*.s) $(wildcard */*.inc) | xargs sed -i -e 's/  *$$//g'

send: $(PROGRAM) $(TIMCAT)
	$(TIMCAT) $(SORBUS_UART_DEV) 0x400 $(PROGRAM)

clean:
	$(RM) -r $(OBJ_DIR) nolimit.labels nolimit.map $(ZIP_FILE)

release:
	$(MAKE) clean
	tools/greetings.sh
	tools/kickhand.c
	$(MAKE) all
	$(MAKE) clean
	$(ZIP) -r $(ZIP_FILE) *
	#advzip -z4 $(ZIP_FILE) || :
	$(LS) $(ZIP_FILE)

