89 lines3.1 KBMakefile
1#---------------------------------------------------------------------------------
2# PS3 World -- PS3 (PSL1GHT) build (from Resonant-PS3's)
3#
4# make -f Makefile.ps3 the PKG (EBOOT + data)
5# make -f Makefile.ps3 clean
6#
7# Needs PS3DEV/PSL1GHT (ps3toolchain + PSL1GHT) and mbedTLS built for the PPU
8# (MBEDTLS_DIR): .github/workflows/ps3.yml does all of it.
9#
10# Flags as NZ:P PS3 / thug-ps3 run on hardware with this toolchain: -O2,
11# -mcpu=cell, no AltiVec, -mminimal-toc and --no-multi-toc (a split TOC hangs
12# at boot). video_ps3.c at -O1 -fno-inline (PSL1GHT's syscall stubs don't
13# survive aggressive inlining).
14#---------------------------------------------------------------------------------
15.SUFFIXES:
16
17ifeq ($(strip $(PSL1GHT)),)
18$(error "Set PSL1GHT (and PS3DEV) in your environment")
19endif
20
21ROOT := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
22
23include $(PSL1GHT)/ppu_rules
24BUILD := $(ROOT)/build/ps3
25OBJDIR := $(BUILD)/obj
26
27export TITLE := PS3 World
28export APPID := PSWD00001
29export CONTENTID := UP0001-$(APPID)_00-0000000000000000
30export ICON0 := $(ROOT)/art/ICON0.PNG
31export BUILDDIR := $(BUILD)/package
32export PKGFILES := $(BUILD)/pkgfiles
33
34TARGET := $(BUILD)/ps3world
35
36ifneq ($(strip $(PS3PY_DIR)),)
37PKG := python3 $(PS3PY_DIR)/pkg.py
38endif
39
40SOURCES := src/app.c src/gfx.c src/font.c src/input.c src/jobs.c src/lang.c src/i18n.c src/ui.c src/catalog.c src/download.c src/store.c \
41 src/http_common.c src/thirdparty/cJSON.c \
42 src/ps3/main_ps3.c src/ps3/audio_ps3.c src/ps3/video_ps3.c src/ps3/input_ps3.c src/ps3/http_ps3.c src/ps3/osk_ps3.c
43OBJECTS := $(patsubst %.c,$(OBJDIR)/%.o,$(SOURCES))
44
45MBEDTLS_DIR ?= $(PORTLIBS)
46# cJSON recurses once a level: the catalogue nests 7 deep, and 1000 could run a thread's stack out
47DEFINES := -D__PS3__ -DAPP_DIR='"/dev_hdd0/game/$(APPID)/USRDIR"' -DCJSON_NESTING_LIMIT=16
48INCLUDES := -Isrc -Isrc/ps3 $(LIBPSL1GHT_INC) -I$(MBEDTLS_DIR)/include -I$(PORTLIBS)/include
49
50OPT := -O2
51CFLAGS := $(OPT) -mcpu=cell -mtune=cell -mno-altivec -mminimal-toc $(MACHDEP) \
52 -std=gnu99 -fsigned-char -fno-strict-aliasing -fno-common -fwrapv \
53 -Wall -Wno-unused-variable -Wno-unused-but-set-variable -Wno-pointer-sign \
54 -Wno-unused-function -Wno-format-truncation -Wno-stringop-truncation \
55 -MMD -MP $(DEFINES) $(INCLUDES)
56LDFLAGS := $(MACHDEP) -Wl,--no-multi-toc $(LIBPSL1GHT_LIB) -L$(MBEDTLS_DIR)/library -L$(PORTLIBS)/lib
57LIBS := -lrsx -lgcm_sys -lio -lmbedtls -lmbedx509 -lmbedcrypto -lsysfs -lsysmodule \
58 -lsysutil -lnet -laudio -lrt -llv2 -lm
59
60.PHONY: all pkg self clean pkgfiles
61
62all: pkg
63pkg: $(TARGET).pkg
64self: $(TARGET).self
65
66$(OBJDIR)/%.o: %.c
67 @mkdir -p $(@D)
68 @echo $<
69 @$(CC) $(CFLAGS) -c $< -o $@
70
71$(OBJDIR)/src/ps3/video_ps3.o: CFLAGS := $(filter-out $(OPT),$(CFLAGS)) -O1 -fno-inline
72
73$(TARGET).elf: $(OBJECTS)
74 @echo linking $(notdir $@)
75 @$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@
76
77# what ppu_rules' %.pkg rule copies next to EBOOT.BIN
78pkgfiles:
79 @rm -rf $(PKGFILES)
80 @mkdir -p $(PKGFILES)/USRDIR
81 @cp art/PIC1.PNG $(PKGFILES)/PIC1.PNG
82 @cp -r data $(PKGFILES)/USRDIR/data
83
84$(TARGET).pkg: | pkgfiles
85
86clean:
87 rm -rf $(ROOT)/build/ps3
88
89-include $(OBJECTS:.o=.d)