# ps5-vitals Makefile.
# Per-subcommand ELFs. One source file (src/vitals.c), one ELF per op.
# Each ELF is a single self-contained payload — no PS5 filesystem write
# required, no shared state between runs. The PC CLI picks the right ELF
# and pushes it via elfldr 9021.
#
# Build (WSL2):
#   PS5_PAYLOAD_SDK=/opt/ps5-payload-sdk make                  # all subcommand ELFs
#   PS5_PAYLOAD_SDK=/opt/ps5-payload-sdk make vitals-temp.elf  # one specific
#
# The "all" target produces the four read-side ELFs plus the fan-set ELFs
# at 30/40/50/60/70/80/90°C. Anything outside 30..90 returns usage_error.

PS5_HOST ?= 10.0.0.108
PS5_PORT ?= 9021

ifdef PS5_PAYLOAD_SDK
    include $(PS5_PAYLOAD_SDK)/toolchain/prospero.mk
else
    $(error PS5_PAYLOAD_SDK is undefined)
endif

CFLAGS := -Wall -Werror -g -DPS5_PAYLOAD_SDK_PATH=\"$(PS5_PAYLOAD_SDK)\"

# Fan thresholds shipped as concrete ELFs. The CLI picks by threshold.
FAN_SET_VALUES := 30 40 50 60 70 80 90

# All subcommand ELFs we build by default.
ALL_ELFS := \
    vitals-temp.elf \
    vitals-fan-get.elf \
    vitals-storage.elf \
    vitals-version.elf \
    $(addprefix vitals-fan-set-,$(addsuffix .elf,$(FAN_SET_VALUES)))

all: $(ALL_ELFS)

# Per-subcommand ELFs. The COMMAND macro is embedded at link time.
vitals-temp.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND='"temp"' -o $@ $<

vitals-fan-get.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND='"fan-get"' -o $@ $<

vitals-storage.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND='"storage"' -o $@ $<

vitals-version.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND='"version"' -o $@ $<

# fan-set-N.elf: fixed threshold at link time. Only valid values: 30..90.
vitals-fan-set-30.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND_FAN_SET_N=30 -o $@ $<
vitals-fan-set-40.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND_FAN_SET_N=40 -o $@ $<
vitals-fan-set-50.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND_FAN_SET_N=50 -o $@ $<
vitals-fan-set-60.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND_FAN_SET_N=60 -o $@ $<
vitals-fan-set-70.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND_FAN_SET_N=70 -o $@ $<
vitals-fan-set-80.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND_FAN_SET_N=80 -o $@ $<
vitals-fan-set-90.elf: src/vitals.c
	$(CC) $(CFLAGS) -DCOMMAND_FAN_SET_N=90 -o $@ $<

clean:
	rm -f vitals-*.elf

# Build + push a single ELF to elfldr (uses the SDK's PS5_DEPLOY helper).
#   make test PS5_HOST=10.0.0.108 PS5_ELF=vitals-temp.elf
PS5_ELF ?= vitals-temp.elf
test: $(PS5_ELF)
	$(PS5_DEPLOY) -h $(PS5_HOST) -p $(PS5_PORT) $(PS5_ELF)

.PHONY: all clean test
