mirror of
https://github.com/MoHadiShibli/Control4Free.git
synced 2026-10-24 13:01:24 +02:00
95 lines
3.3 KiB
Makefile
95 lines
3.3 KiB
Makefile
# Control4Free -- system-wide virtual controllers for the PS4 (GoldHEN payload).
|
|
#
|
|
# Build:
|
|
# make # build/control4free.elf
|
|
# make C4F_PROBE=1 # plus the rumble/light-bar research probe (dev only)
|
|
# make C4F_DIAG=1 # diagnostic build for a console it fails on
|
|
# make clean
|
|
#
|
|
# A build needs the ps4-payload-sdk; docker/Dockerfile has it, and
|
|
# tools/build.ps1 runs this inside the container.
|
|
|
|
ifdef PS4_PAYLOAD_SDK
|
|
include $(PS4_PAYLOAD_SDK)/toolchain/orbis.mk
|
|
else
|
|
$(error PS4_PAYLOAD_SDK is undefined -- build in Docker, or point it at an SDK)
|
|
endif
|
|
|
|
VERSION := $(shell cat VERSION)
|
|
|
|
NAME := control4free
|
|
ELF := build/$(NAME).elf
|
|
OBJDIR := build/payload
|
|
SOURCES := src/main.c src/log.c src/vda.c src/klog_line.c src/feedback.c src/web.c src/net.c src/rtc.c src/stun.c src/sctp.c
|
|
# The pages' WebRTC connection is encrypted with Mbed TLS (vendor/mbedtls, Apache-2.0),
|
|
# built with only what include/c4f_mbedtls_config.h asks for.
|
|
MBEDTLS := $(patsubst vendor/mbedtls/library/%.c,%,$(wildcard vendor/mbedtls/library/*.c))
|
|
|
|
# Research build: logs what scePadVirtualDeviceGetRemoteSetting returns. Its ELF
|
|
# gets its own name, so it can never be mistaken for a release.
|
|
ifdef C4F_PROBE
|
|
EXTRA_CFLAGS := -DC4F_PROBE_SETTING
|
|
ELF := build/$(NAME)-probe.elf
|
|
OBJDIR := build/probe
|
|
endif
|
|
|
|
# Diagnostic build: logs what the SDK found in the kernel and the host process,
|
|
# and says on screen that it started. The launcher's C4F_DIAG build carries it.
|
|
ifdef C4F_DIAG
|
|
EXTRA_CFLAGS += -DC4F_DIAG
|
|
VERSION := $(VERSION)-diag
|
|
ELF := build/$(NAME)-diag.elf
|
|
OBJDIR := build/diag
|
|
endif
|
|
|
|
OBJECTS := $(SOURCES:src/%.c=$(OBJDIR)/%.o) $(OBJDIR)/client.o $(OBJDIR)/assets.o $(OBJDIR)/qrcodegen.o \
|
|
$(MBEDTLS:%=$(OBJDIR)/mbedtls/%.o)
|
|
|
|
CFLAGS += -std=gnu11 -Wall -Wextra -Wpointer-arith -g -O2
|
|
CFLAGS += -MMD -MP
|
|
CFLAGS += -Iinclude -Ivendor/jsmn -Ivendor/qrcodegen -DC4F_VERSION='"$(VERSION)"' $(EXTRA_CFLAGS)
|
|
CFLAGS += -Ivendor/mbedtls/include -DMBEDTLS_CONFIG_FILE='<c4f_mbedtls_config.h>'
|
|
LDFLAGS += -lScePad -lSceUserService -ldl -lpthread
|
|
|
|
.PHONY: all clean
|
|
.DEFAULT_GOAL := all
|
|
|
|
-include $(OBJECTS:.o=.d)
|
|
|
|
all: $(ELF)
|
|
|
|
$(OBJDIR) $(OBJDIR)/mbedtls build:
|
|
mkdir -p $@
|
|
|
|
# VERSION is compiled into the objects, and make doesn't notice a changed flag,
|
|
# so a new version has to rebuild them.
|
|
$(OBJDIR)/%.o: src/%.c VERSION | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/mbedtls/%.o: vendor/mbedtls/library/%.c include/c4f_mbedtls_config.h | $(OBJDIR)/mbedtls
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
build/client.c: client/index.html tools/embed_client.py | build
|
|
python3 tools/embed_client.py $< $@
|
|
|
|
# The page's Invite QR code (MIT, the same copy the app uses).
|
|
$(OBJDIR)/qrcodegen.o: vendor/qrcodegen/qrcodegen.c | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/client.o: build/client.c | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
# The manifest and icon the page points at, so it can live on a home screen.
|
|
build/assets.c: client/manifest.webmanifest client/icon-192.png tools/embed_file.py | build
|
|
python3 tools/embed_file.py $@ c4fManifest=client/manifest.webmanifest c4fIcon=client/icon-192.png
|
|
|
|
$(OBJDIR)/assets.o: build/assets.c | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(ELF): $(OBJECTS) | build
|
|
$(CC) -o $@ $(OBJECTS) $(LDFLAGS)
|
|
@echo "built $@ ($(VERSION))"
|
|
|
|
clean:
|
|
rm -rf build
|