mirror of
https://github.com/MoHadiShibli/Control4Free.git
synced 2026-10-06 17:00:33 +02:00
The version is passed in as a compiler flag, and make doesn't notice a changed flag. After the bump to 1.1.0, only files whose source had changed were recompiled, so main.c and log.c still logged 1.0.0 and the app could show it. Objects now depend on VERSION. Builds from a clean checkout, as CI does, were never affected.
73 lines
2.2 KiB
Makefile
73 lines
2.2 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 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
|
|
|
|
# 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
|
|
|
|
OBJECTS := $(SOURCES:src/%.c=$(OBJDIR)/%.o) $(OBJDIR)/client.o $(OBJDIR)/assets.o
|
|
|
|
CFLAGS += -std=gnu11 -Wall -Wextra -Wpointer-arith -g -O2
|
|
CFLAGS += -MMD -MP
|
|
CFLAGS += -Iinclude -Ivendor/jsmn -DC4F_VERSION='"$(VERSION)"' $(EXTRA_CFLAGS)
|
|
LDFLAGS += -lScePad -lSceUserService -ldl -lpthread
|
|
|
|
.PHONY: all clean
|
|
.DEFAULT_GOAL := all
|
|
|
|
-include $(OBJECTS:.o=.d)
|
|
|
|
all: $(ELF)
|
|
|
|
$(OBJDIR) 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 $@
|
|
|
|
build/client.c: client/index.html tools/embed_client.py | build
|
|
python3 tools/embed_client.py $< $@
|
|
|
|
$(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
|