| 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 |
|
| 17 | ifeq ($(strip $(PSL1GHT)),) |
| 18 | $(error "Set PSL1GHT (and PS3DEV) in your environment") |
| 19 | endif |
| 20 |
|
| 21 | ROOT := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST))))) |
| 22 |
|
| 23 | include $(PSL1GHT)/ppu_rules |
| 24 | BUILD := $(ROOT)/build/ps3 |
| 25 | OBJDIR := $(BUILD)/obj |
| 26 |
|
| 27 | export TITLE := PS3 World |
| 28 | export APPID := PSWD00001 |
| 29 | export CONTENTID := UP0001-$(APPID)_00-0000000000000000 |
| 30 | export ICON0 := $(ROOT)/art/ICON0.PNG |
| 31 | export BUILDDIR := $(BUILD)/package |
| 32 | export PKGFILES := $(BUILD)/pkgfiles |
| 33 |
|
| 34 | TARGET := $(BUILD)/ps3world |
| 35 |
|
| 36 | ifneq ($(strip $(PS3PY_DIR)),) |
| 37 | PKG := python3 $(PS3PY_DIR)/pkg.py |
| 38 | endif |
| 39 |
|
| 40 | SOURCES := 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 |
| 43 | OBJECTS := $(patsubst %.c,$(OBJDIR)/%.o,$(SOURCES)) |
| 44 |
|
| 45 | MBEDTLS_DIR ?= $(PORTLIBS) |
| 46 | # cJSON recurses once a level: the catalogue nests 7 deep, and 1000 could run a thread's stack out |
| 47 | DEFINES := -D__PS3__ -DAPP_DIR='"/dev_hdd0/game/$(APPID)/USRDIR"' -DCJSON_NESTING_LIMIT=16 |
| 48 | INCLUDES := -Isrc -Isrc/ps3 $(LIBPSL1GHT_INC) -I$(MBEDTLS_DIR)/include -I$(PORTLIBS)/include |
| 49 |
|
| 50 | OPT := -O2 |
| 51 | CFLAGS := $(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) |
| 56 | LDFLAGS := $(MACHDEP) -Wl,--no-multi-toc $(LIBPSL1GHT_LIB) -L$(MBEDTLS_DIR)/library -L$(PORTLIBS)/lib |
| 57 | LIBS := -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 |
|
| 62 | all: pkg |
| 63 | pkg: $(TARGET).pkg |
| 64 | self: $(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 |
| 78 | pkgfiles: |
| 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 |
|
| 86 | clean: |
| 87 | rm -rf $(ROOT)/build/ps3 |
| 88 |
|
| 89 | -include $(OBJECTS:.o=.d) |