Files
mortyzip--KeepAwake/Makefile
T

89 lines
2.9 KiB
Makefile

# Payload Manager reads the version from the filename, e.g. keepawake_ps5_v1.4.0.elf
VERSION := 1.4.0
PS5_PAYLOAD_SDK ?= $(abspath ../ps5-payload-sdk)
PS4SDK ?= $(abspath ../ps4-payload-sdk)
PS5_HOST ?= ps5
PS5_PORT ?= 9021
PS4_HOST ?= ps4
PS4_PORT ?= 9090
# The SDKs need an LLVM toolchain; use Homebrew's when it isn't on PATH.
ifneq ($(wildcard /opt/homebrew/opt/llvm/bin/llvm-config),)
export LLVM_CONFIG ?= /opt/homebrew/opt/llvm/bin/llvm-config
endif
LLVM_BIN := $(shell $(or $(LLVM_CONFIG),llvm-config) --bindir 2>/dev/null)
LLVM_PFX := $(if $(LLVM_BIN),$(LLVM_BIN)/)
PS5_ELF := keepawake_ps5_v$(VERSION).elf
PS4_BIN := keepawake_ps4_v$(VERSION).bin
# The control page is embedded into the payloads as a C array.
PAGE_H := build/index_html.h
DEPS := src/web.h $(PAGE_H)
DEFINES := -DKEEPAWAKE_VERSION=\"v$(VERSION)\" -Ibuild
# PS5: ELF for the ps5-payload-sdk ELF loader.
PS5_CC := $(PS5_PAYLOAD_SDK)/bin/prospero-clang
PS5_CFLAGS := -Wall -Werror -O2 -lSceSystemService -lSceUserService $(DEFINES)
# PS4: raw binary for GoldHEN's BinLoader, linked against libPS4.
LIBPS4 := $(PS4SDK)/libPS4
PS4_CC := $(LLVM_PFX)clang
PS4_LD := $(or $(wildcard $(LLVM_PFX)ld.lld),ld.lld)
PS4_OBJCOPY := $(LLVM_PFX)llvm-objcopy
PS4_CFLAGS := --target=x86_64-unknown-freebsd -I$(LIBPS4)/include $(DEFINES) \
-Os -std=c11 -ffreestanding -fno-builtin -nostdlib -fPIE \
-ffunction-sections -fdata-sections -masm=intel -march=btver2 \
-Wall -Werror
PS4_LDFLAGS := -T $(LIBPS4)/linker.x --gc-sections --build-id=none \
-L$(LIBPS4) -lPS4
all: ps5 ps4
ps5: $(PS5_ELF)
ps4: $(PS4_BIN)
$(PAGE_H): src/index.html
@mkdir -p build
cd src && xxd -i index.html > ../$@
$(PS5_ELF): src/ps5.c $(DEPS)
$(PS5_CC) $(PS5_CFLAGS) -o $@ src/ps5.c
$(PS4_BIN): src/ps4.c $(DEPS)
@mkdir -p build
$(PS4_CC) $(PS4_CFLAGS) -c -o build/ps4.o src/ps4.c
$(PS4_CC) --target=x86_64-unknown-freebsd -c -o build/ps4_crt0.o $(LIBPS4)/crt0.s
$(PS4_LD) -o build/ps4.elf build/ps4_crt0.o build/ps4.o $(PS4_LDFLAGS)
$(PS4_OBJCOPY) -O binary build/ps4.elf $@
# Runs the PS5 code on this computer with the console calls stubbed out, for
# working on the control page: make host && ./build/keepawake_host
# Needs BSD network headers (struct if_data), so macOS or BSD only.
host: build/keepawake_host
build/keepawake_host: src/ps5.c tools/host_stubs.c $(DEPS)
cc -Wall -Werror $(DEFINES) -DKEEPAWAKE_SETTINGS=\"build/keepawake.cfg\" -o $@ src/ps5.c tools/host_stubs.c
version:
@echo $(VERSION)
clean:
rm -rf build keepawake*.elf keepawake*.bin
test-ps5: $(PS5_ELF)
$(PS5_PAYLOAD_SDK)/bin/prospero-deploy -h $(PS5_HOST) -p $(PS5_PORT) $<
test-ps4: $(PS4_BIN)
nc -w 1 $(PS4_HOST) $(PS4_PORT) < $<
quit-ps5:
curl -fsS -X POST http://$(PS5_HOST):9031/quit
quit-ps4:
curl -fsS -X POST http://$(PS4_HOST):9031/quit
.PHONY: all ps5 ps4 host version clean test-ps5 test-ps4 quit-ps5 quit-ps4