From 980941f1397e85fc8d3562b890b8d73154663526 Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Sun, 12 Apr 2026 22:55:02 +0300 Subject: [PATCH 1/8] Add SDL3 scripts and patches, cmake files for ps3 --- depends/ps3build.cmake | 60 +++++++++++++++++++++++++++++++++++++++ depends/ps3dev.cmake | 59 ++++++++++++++++++++++++++++++++++++++ patches/SDL3_ttf-1.patch | 13 +++++++++ scripts/043-sdl3.sh | 31 ++++++++++++++++++++ scripts/044-sdl3_mixer.sh | 25 ++++++++++++++++ scripts/045-sdl3_ttf.sh | 32 +++++++++++++++++++++ 6 files changed, 220 insertions(+) create mode 100644 depends/ps3build.cmake create mode 100644 depends/ps3dev.cmake create mode 100644 patches/SDL3_ttf-1.patch create mode 100755 scripts/043-sdl3.sh create mode 100755 scripts/044-sdl3_mixer.sh create mode 100755 scripts/045-sdl3_ttf.sh diff --git a/depends/ps3build.cmake b/depends/ps3build.cmake new file mode 100644 index 00000000..a1307ca9 --- /dev/null +++ b/depends/ps3build.cmake @@ -0,0 +1,60 @@ +# +# CMake platform file for PS3 PPC processor +# + +cmake_minimum_required(VERSION 3.0...3.12) + +INCLUDE(CMakeForceCompiler) + +if(DEFINED ENV{PS3DEV}) + SET(PS3DEV $ENV{PS3DEV}) +else() + message(FATAL_ERROR "The environment variable PS3DEV needs to be defined.") +endif() + +SET(CMAKE_SYSTEM_NAME Generic) +SET(CMAKE_SYSTEM_VERSION 1) +SET(CMAKE_SYSTEM_PROCESSOR powerpc64) + +SET(CMAKE_C_COMPILER powerpc64-ps3-elf-gcc) +SET(CMAKE_CXX_COMPILER powerpc64-ps3-elf-g++) + +SET(CMAKE_C_FLAGS "-I$ENV{PS3DEV}/ppu/include -I$ENV{PS3DEV}/ppu/include/simdmath \ + -O2 -Wall -Wno-unused-function \ + -mcpu=cell -mhard-float \ + -ffunction-sections -fdata-sections \ + -DPS3 -D__PS3__" + CACHE STRING "" FORCE) + +SET(PPC_LDFLAGS "-L$ENV{PS3DEV}/ppu/lib -L$ENV{PS3DEV}/ppu/ppu/lib -Wl,-zmax-page-size=128") + +SET(CMAKE_TARGET_INSTALL_PREFIX $ENV{PS3DEV}/portlibs/ppu/) +SET(CMAKE_PREFIX_PATH $ENV{PS3DEV}/portlibs/ppu/) + +SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) + +SET(CMAKE_C_FLAGS_INIT ${PPC_CFLAGS}) +SET(CMAKE_CXX_FLAGS_INIT ${PPC_CFLAGS}) +SET(CMAKE_EXE_LINKER_FLAGS_INIT ${PPC_LDFLAGS}) + +SET(C_FLAGS ${CMAKE_C_FLAGS} ${PPC_CFLAGS}) + +SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) + +SET(CMAKE_EXE_LINKER_FLAGS + "-L$ENV{PS3DEV}/ppu/lib \ + -Wl,-q \ + -Wl,--gc-sections \ + -Wl,-zmax-page-size=128" + CACHE STRING "" FORCE) + +add_compile_definitions(PS3 __PS3__) + +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostartfiles -Wl,-r -Wl,-d") +SET(PS3 1) +SET(PLATFORM_PS3 1) diff --git a/depends/ps3dev.cmake b/depends/ps3dev.cmake new file mode 100644 index 00000000..8cf5398f --- /dev/null +++ b/depends/ps3dev.cmake @@ -0,0 +1,59 @@ +# +# CMake platform file for PS3 PPC processor +# + +cmake_minimum_required(VERSION 3.0...3.12) + +INCLUDE(CMakeForceCompiler) + +if(DEFINED ENV{PS3DEV}) + SET(PS3DEV $ENV{PS3DEV}) +else() + message(FATAL_ERROR "The environment variable PS3DEV needs to be defined.") +endif() + +SET(CMAKE_SYSTEM_NAME Generic) +SET(CMAKE_SYSTEM_VERSION 1) +SET(CMAKE_SYSTEM_PROCESSOR powerpc64) + +SET(CMAKE_C_COMPILER powerpc64-ps3-elf-gcc) +SET(CMAKE_CXX_COMPILER powerpc64-ps3-elf-g++) + +SET(CMAKE_C_FLAGS "-I$ENV{PS3DEV}/ppu/include -I$ENV{PS3DEV}/ppu/include/simdmath \ + -O2 -Wall -Wno-unused-function \ + -mcpu=cell -mhard-float \ + -ffunction-sections -fdata-sections \ + -DPS3 -D__PS3__" + CACHE STRING "" FORCE) + +SET(PPC_LDFLAGS "-L$ENV{PS3DEV}/ppu/lib -L$ENV{PS3DEV}/ppu/ppu/lib -Wl,-zmax-page-size=128") + +SET(CMAKE_PREFIX_PATH $ENV{PS3DEV}/portlibs/ppu/) + +SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) + +SET(CMAKE_C_FLAGS_INIT ${PPC_CFLAGS}) +SET(CMAKE_CXX_FLAGS_INIT ${PPC_CFLAGS}) +SET(CMAKE_EXE_LINKER_FLAGS_INIT ${PPC_LDFLAGS}) + +SET(C_FLAGS ${CMAKE_C_FLAGS} ${PPC_CFLAGS}) + +SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) + +SET(CMAKE_EXE_LINKER_FLAGS + "-L$ENV{PS3DEV}/ppu/lib \ + -Wl,-q \ + -Wl,--gc-sections \ + -Wl,-zmax-page-size=128" + CACHE STRING "" FORCE) + +add_compile_definitions(PS3 __PS3__) + +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostartfiles -Wl,-r -Wl,-d") +SET(PS3 1) +SET(PLATFORM_PS3 1) diff --git a/patches/SDL3_ttf-1.patch b/patches/SDL3_ttf-1.patch new file mode 100644 index 00000000..72c66a36 --- /dev/null +++ b/patches/SDL3_ttf-1.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7b27db8..35e1251 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -71,7 +71,7 @@ include(GNUInstallDirs) + include(CheckSymbolExists) + + set(PLATFORM_SUPPORTS_SHARED ON) +-if(EMSCRIPTEN OR VITA OR PSP OR PS2 OR N3DS OR RISCOS) ++if(EMSCRIPTEN OR VITA OR PSP OR PS2 OR PS3 OR N3DS OR RISCOS) + set(PLATFORM_SUPPORTS_SHARED OFF) + endif() + diff --git a/scripts/043-sdl3.sh b/scripts/043-sdl3.sh new file mode 100755 index 00000000..92b83383 --- /dev/null +++ b/scripts/043-sdl3.sh @@ -0,0 +1,31 @@ +#!/bin/sh -e +# sdl3.sh by 16rom.com + +BUILD_NAME="SDL3" +BUILD_DIR="build-ppc" + +# Copy make file. +if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then + mkdir -p "$PS3DEV/share" + cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" +fi + +# Download if it's not there. +if [ ! -d "$BUILD_NAME" ]; then + ## Download the source code. + wget https://github.com/onesixromcom/SDL/tarball/ps3 -O "$BUILD_NAME.tar.gz" + ## Unpack the source code. + rm -Rf "$BUILD_NAME" + mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf "$BUILD_NAME".tar.gz +fi + +## Create the build directory. +cd "$BUILD_NAME" +rm -rf "$BUILD_DIR" +mkdir -p "$BUILD_DIR" +cd "$BUILD_DIR" +echo "Building for PPC..." + +cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DSDL_TESTS=OFF -DSDL_EXAMPLES=OFF -DSDL_TEST_LIBRARY=OFF -DSDL_STATIC=ON \ .. +cmake --build . +cmake --install . diff --git a/scripts/044-sdl3_mixer.sh b/scripts/044-sdl3_mixer.sh new file mode 100755 index 00000000..43793126 --- /dev/null +++ b/scripts/044-sdl3_mixer.sh @@ -0,0 +1,25 @@ +#!/bin/sh -e +# sdl3_mixer.sh by 16rom.com + +BUILD_NAME="SDL3_mixer" +BUILD_DIR="build-ppc" + +# Download if it's not there. +if [ ! -d "$DIRECTORY" ]; then + ## Download the source code. + wget https://github.com/libsdl-org/SDL_mixer/releases/download/release-3.2.0/SDL3_mixer-3.2.0.tar.gz + ## Unpack the source code. + rm -Rf "$BUILD_NAME" + mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_mixer-3.2.0.tar.gz +fi + +## Create the build directory. +cd "$BUILD_NAME" +rm -rf "$BUILD_DIR" +mkdir -p "$BUILD_DIR" +cd "$BUILD_DIR" +echo "Building for PPC..." + +cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DBUILD_SHARED_LIBS=OFF -DSDLMIXER_TESTS=OFF -DSDLMIXER_EXAMPLES=OFF -DSDL_STATIC=ON -DSDLMIXER_OPUS=OFF -DSDLMIXER_VORBIS_VORBISFILE=OFF -DSDLMIXER_WAVPACK=OFF -DSDLMIXER_OGG=OFF -DSDLMIXER_FLAC=OFF -DSDLMIXER_MP3_MPG123=OFF -DSDLMIXER_GME=OFF -DSDLMIXER_MOD_XMP=OFF -DSDLMIXER_MIDI_TIMIDITY=OFF .. +cmake --build . +cmake --install . diff --git a/scripts/045-sdl3_ttf.sh b/scripts/045-sdl3_ttf.sh new file mode 100755 index 00000000..5994c9a1 --- /dev/null +++ b/scripts/045-sdl3_ttf.sh @@ -0,0 +1,32 @@ +#!/bin/sh -e +# sdl3_ttf.sh by 16rom.com + +BUILD_NAME="SDL3_ttf" +BUILD_DIR="build-ppc" + +# Download if it's not there. +if [ ! -d "$BUILD_NAME" ]; then + ## Download the source code. + wget https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-3.2.2.tar.gz + ## Unpack the source code. + rm -Rf "$BUILD_NAME" + mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_ttf-3.2.2.tar.gz + cd "$BUILD_NAME" + ## Patch the source code. + cat ../../patches/SDL3_ttf-1.patch | patch -p1 + + # Download vendored libs + ./external/download.sh +else + cd "$BUILD_NAME" +fi + +# Create the build directory. +rm -rf "$BUILD_DIR" +mkdir -p "$BUILD_DIR" +cd "$BUILD_DIR" +echo "Building for PPC..." + +cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DBUILD_SHARED_LIBS=OFF -DSDLTTF_VENDORED=ON -DSDLTTF_HARFBUZZ=OFF -DSDLTTF_SAMPLES=OFF .. +cmake --build . +cmake --install . From 49099a20e841948581319f378b244c288c835736 Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Sat, 18 Apr 2026 14:38:27 +0300 Subject: [PATCH 2/8] Update cmake file with func to build PS3 SELF --- depends/ps3dev.cmake | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/depends/ps3dev.cmake b/depends/ps3dev.cmake index 8cf5398f..5977fb6d 100644 --- a/depends/ps3dev.cmake +++ b/depends/ps3dev.cmake @@ -57,3 +57,32 @@ add_compile_definitions(PS3 __PS3__) SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostartfiles -Wl,-r -Wl,-d") SET(PS3 1) SET(PLATFORM_PS3 1) + +# Build PS3 SELF file +function(build_ps3_self target) + set(ELF_FILE $) + set(STRIPPED_ELF ${ELF_FILE}.stripped.elf) + set(SELF_FILE ${ELF_FILE}.self) + set(FSELF_FILE ${ELF_FILE}.fake.self) + + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND echo "Running PS3 post-build steps..." + + # 1. Fix OPD relocations FIRST, before anything else + COMMAND ${PS3DEV}/bin/sprxlinker ${ELF_FILE} + + # 2. Strip AFTER sprxlinker, preserve OPD with -R flag + COMMAND ${PS3DEV}/ppu/bin/powerpc64-ps3-elf-strip + --strip-debug # only strip debug, keep OPD symbols + ${ELF_FILE} + -o ${STRIPPED_ELF} + + # 3. Package the STRIPPED elf into SELF + COMMAND ${PS3DEV}/bin/make_self ${STRIPPED_ELF} ${SELF_FILE} + COMMAND ${PS3DEV}/bin/fself ${STRIPPED_ELF} ${FSELF_FILE} + + COMMAND echo "Done: ${SELF_FILE}" + ) +endfunction() From eb43af1c9690e5802aa0e83abb8605055bd35c54 Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Thu, 23 Apr 2026 22:53:05 +0300 Subject: [PATCH 3/8] sdl3: update cmake files --- depends/ps3build.cmake | 81 ++++++++++++++---------------------------- depends/ps3dev.cmake | 67 ++++++++++++++-------------------- scripts/043-sdl3.sh | 2 +- 3 files changed, 54 insertions(+), 96 deletions(-) diff --git a/depends/ps3build.cmake b/depends/ps3build.cmake index a1307ca9..02bf8c0e 100644 --- a/depends/ps3build.cmake +++ b/depends/ps3build.cmake @@ -4,57 +4,30 @@ cmake_minimum_required(VERSION 3.0...3.12) -INCLUDE(CMakeForceCompiler) - -if(DEFINED ENV{PS3DEV}) - SET(PS3DEV $ENV{PS3DEV}) -else() - message(FATAL_ERROR "The environment variable PS3DEV needs to be defined.") -endif() - -SET(CMAKE_SYSTEM_NAME Generic) -SET(CMAKE_SYSTEM_VERSION 1) -SET(CMAKE_SYSTEM_PROCESSOR powerpc64) - -SET(CMAKE_C_COMPILER powerpc64-ps3-elf-gcc) -SET(CMAKE_CXX_COMPILER powerpc64-ps3-elf-g++) - -SET(CMAKE_C_FLAGS "-I$ENV{PS3DEV}/ppu/include -I$ENV{PS3DEV}/ppu/include/simdmath \ - -O2 -Wall -Wno-unused-function \ - -mcpu=cell -mhard-float \ - -ffunction-sections -fdata-sections \ - -DPS3 -D__PS3__" - CACHE STRING "" FORCE) - -SET(PPC_LDFLAGS "-L$ENV{PS3DEV}/ppu/lib -L$ENV{PS3DEV}/ppu/ppu/lib -Wl,-zmax-page-size=128") - -SET(CMAKE_TARGET_INSTALL_PREFIX $ENV{PS3DEV}/portlibs/ppu/) -SET(CMAKE_PREFIX_PATH $ENV{PS3DEV}/portlibs/ppu/) - -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - -SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) - -SET(CMAKE_C_FLAGS_INIT ${PPC_CFLAGS}) -SET(CMAKE_CXX_FLAGS_INIT ${PPC_CFLAGS}) -SET(CMAKE_EXE_LINKER_FLAGS_INIT ${PPC_LDFLAGS}) - -SET(C_FLAGS ${CMAKE_C_FLAGS} ${PPC_CFLAGS}) - -SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) - -SET(CMAKE_EXE_LINKER_FLAGS - "-L$ENV{PS3DEV}/ppu/lib \ - -Wl,-q \ - -Wl,--gc-sections \ - -Wl,-zmax-page-size=128" - CACHE STRING "" FORCE) - -add_compile_definitions(PS3 __PS3__) - -SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostartfiles -Wl,-r -Wl,-d") -SET(PS3 1) -SET(PLATFORM_PS3 1) +include(${CMAKE_CURRENT_LIST_DIR}/ps3dev.cmake) + +set(CMAKE_INSTALL_PREFIX ${PORTLIBS} CACHE PATH "install path") + +add_definitions(-DPS3) +set(PS3 TRUE) + +set(SDL_TESTS FALSE) +set(SDL_EXAMPLES FALSE) +set(SDL_TEST_LIBRARY FALSE) +set(SDL_STATIC ON) + +set(SDL_GPU OFF) +set(SDL_CAMERA OFF) +set(SDL_HAPTIC OFF) +set(SDL_HIDAPI OFF) +set(SDL_POWER OFF) +set(SDL_SENSOR OFF) +set(SDL_DIALOG OFF) +set(SDL_DISKAUDIO OFF) +set(SDL_DUMMYAUDIO OFF) +set(SDL_DUMMYCAMERA OFF) +set(SDL_DUMMYVIDEO OFF) +set(SDL_OFFSCREEN OFF) +set(SDL_RENDER_GPU OFF) +set(SDL_TRAY OFF) +set(SDL_VIRTUAL_JOYSTICK OFF) diff --git a/depends/ps3dev.cmake b/depends/ps3dev.cmake index 5977fb6d..4c76716c 100644 --- a/depends/ps3dev.cmake +++ b/depends/ps3dev.cmake @@ -4,62 +4,47 @@ cmake_minimum_required(VERSION 3.0...3.12) -INCLUDE(CMakeForceCompiler) - if(DEFINED ENV{PS3DEV}) - SET(PS3DEV $ENV{PS3DEV}) + set(PS3DEV $ENV{PS3DEV}) else() message(FATAL_ERROR "The environment variable PS3DEV needs to be defined.") endif() -SET(CMAKE_SYSTEM_NAME Generic) -SET(CMAKE_SYSTEM_VERSION 1) -SET(CMAKE_SYSTEM_PROCESSOR powerpc64) - -SET(CMAKE_C_COMPILER powerpc64-ps3-elf-gcc) -SET(CMAKE_CXX_COMPILER powerpc64-ps3-elf-g++) +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR powerpc64) -SET(CMAKE_C_FLAGS "-I$ENV{PS3DEV}/ppu/include -I$ENV{PS3DEV}/ppu/include/simdmath \ - -O2 -Wall -Wno-unused-function \ - -mcpu=cell -mhard-float \ - -ffunction-sections -fdata-sections \ - -DPS3 -D__PS3__" - CACHE STRING "" FORCE) +set(CMAKE_C_COMPILER powerpc64-ps3-elf-gcc) +set(CMAKE_CXX_COMPILER powerpc64-ps3-elf-g++) -SET(PPC_LDFLAGS "-L$ENV{PS3DEV}/ppu/lib -L$ENV{PS3DEV}/ppu/ppu/lib -Wl,-zmax-page-size=128") +set(LIBPSL1GHT_INC "-I${PS3DEV}/ppu/include -I${PS3DEV}/ppu/include/simdmath") +set(LIBPSL1GHT_LIB "-L${PS3DEV}/ppu/lib -L${PS3DEV}/ppu/ppu/lib") +set(PORTLIBS "${PS3DEV}/portlibs/ppu") -SET(CMAKE_PREFIX_PATH $ENV{PS3DEV}/portlibs/ppu/) - -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +set(PPC_MACHDEP "-mhard-float -fmodulo-sched -ffunction-sections -fdata-sections") +set(PPC_CFLAGS "-O2 -Wall -mcpu=cell ${PPC_MACHDEP} ${LIBPSL1GHT_INC}" ) +set(PPC_LDFLAGS "${LIBPSL1GHT_INC} -Wl,-zmax-page-size=128 -Wl,--gc-sections") +set(PPC_LIBS "-lgcm_sys -lrsx -lsysutil -lio -lcairo -lm -lfreetype -lz -lpixman-1 -lrt -llv2") -SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) +set(CMAKE_C_FLAGS_INIT ${PPC_CFLAGS}) +set(CMAKE_CXX_FLAGS_INIT ${PPC_CFLAGS}) +set(CMAKE_EXE_LINKER_FLAGS_INIT ${PPC_LDFLAGS}) +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${PPC_LIBS}") -SET(CMAKE_C_FLAGS_INIT ${PPC_CFLAGS}) -SET(CMAKE_CXX_FLAGS_INIT ${PPC_CFLAGS}) -SET(CMAKE_EXE_LINKER_FLAGS_INIT ${PPC_LDFLAGS}) +set(CMAKE_PREFIX_PATH ${PORTLIBS}) -SET(C_FLAGS ${CMAKE_C_FLAGS} ${PPC_CFLAGS}) - -SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) -SET(CMAKE_EXE_LINKER_FLAGS - "-L$ENV{PS3DEV}/ppu/lib \ - -Wl,-q \ - -Wl,--gc-sections \ - -Wl,-zmax-page-size=128" - CACHE STRING "" FORCE) +set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) add_compile_definitions(PS3 __PS3__) - -SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostartfiles -Wl,-r -Wl,-d") -SET(PS3 1) -SET(PLATFORM_PS3 1) +set(PS3 1) # Build PS3 SELF file -function(build_ps3_self target) +function(ps3_build_self target) set(ELF_FILE $) set(STRIPPED_ELF ${ELF_FILE}.stripped.elf) set(SELF_FILE ${ELF_FILE}.self) @@ -75,7 +60,7 @@ function(build_ps3_self target) # 2. Strip AFTER sprxlinker, preserve OPD with -R flag COMMAND ${PS3DEV}/ppu/bin/powerpc64-ps3-elf-strip - --strip-debug # only strip debug, keep OPD symbols + --strip-debug ${ELF_FILE} -o ${STRIPPED_ELF} diff --git a/scripts/043-sdl3.sh b/scripts/043-sdl3.sh index 92b83383..5156d1e5 100755 --- a/scripts/043-sdl3.sh +++ b/scripts/043-sdl3.sh @@ -26,6 +26,6 @@ mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" echo "Building for PPC..." -cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DSDL_TESTS=OFF -DSDL_EXAMPLES=OFF -DSDL_TEST_LIBRARY=OFF -DSDL_STATIC=ON \ .. +cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. cmake --build . cmake --install . From ad5640b2081be7f0e09d238a26ad6f993c2e9edd Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Sat, 25 Apr 2026 01:33:13 +0300 Subject: [PATCH 4/8] Update cmake files for sdl3 builds --- depends/ps3build.cmake | 41 ++++++++++++++++++++++++++++-- depends/ps3dev.cmake | 53 ++++++++++++++++++++++++--------------- scripts/043-sdl3.sh | 16 ++++++------ scripts/044-sdl3_mixer.sh | 17 +++++++------ scripts/045-sdl3_ttf.sh | 24 +++++++++--------- 5 files changed, 101 insertions(+), 50 deletions(-) diff --git a/depends/ps3build.cmake b/depends/ps3build.cmake index 02bf8c0e..71483a2f 100644 --- a/depends/ps3build.cmake +++ b/depends/ps3build.cmake @@ -6,16 +6,35 @@ cmake_minimum_required(VERSION 3.0...3.12) include(${CMAKE_CURRENT_LIST_DIR}/ps3dev.cmake) -set(CMAKE_INSTALL_PREFIX ${PORTLIBS} CACHE PATH "install path") +string(JOIN " " PPC_CFLAGS_STR ${PPC_CFLAGS}) +string(JOIN " " PPC_LDFLAGS_STR ${PPC_LDFLAGS}) +string(JOIN " " PPC_LIBS_STR ${PPC_LIBS}) +list(TRANSFORM PPC_INC PREPEND "-I" OUTPUT_VARIABLE PPC_INC_FLAGS) +string(JOIN " " PPC_INC_STR ${PPC_INC_FLAGS}) +list(TRANSFORM PPC_LIB PREPEND "-I" OUTPUT_VARIABLE PPC_LIB_FLAGS) +string(JOIN " " PPC_LIB_STR ${PPC_LIB_FLAGS}) + +set(CMAKE_C_FLAGS_INIT "${PPC_CFLAGS_STR} ${PPC_INC_STR}") +set(CMAKE_CXX_FLAGS_INIT ${CMAKE_C_FLAGS_INIT}) +set(CMAKE_EXE_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT} "${PPC_LDFLAGS_STR} ${PPC_LIB_STR}") +set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "${PPC_LIBS_STR}") + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(CMAKE_INSTALL_PREFIX "$ENV{PS3DEV}/portlibs/ppu" CACHE PATH "" FORCE) +set(CMAKE_PREFIX_PATH "$ENV{PS3DEV}/portlibs/ppu" CACHE PATH "" FORCE) add_definitions(-DPS3) set(PS3 TRUE) +# SDL3 set(SDL_TESTS FALSE) set(SDL_EXAMPLES FALSE) set(SDL_TEST_LIBRARY FALSE) set(SDL_STATIC ON) - set(SDL_GPU OFF) set(SDL_CAMERA OFF) set(SDL_HAPTIC OFF) @@ -31,3 +50,21 @@ set(SDL_OFFSCREEN OFF) set(SDL_RENDER_GPU OFF) set(SDL_TRAY OFF) set(SDL_VIRTUAL_JOYSTICK OFF) + +# SDL3_mixer +set(BUILD_SHARED_LIBS OFF) +set(SDLMIXER_TESTS OFF) +set(SDLMIXER_TESTS_INSTALL OFF) +set(SDLMIXER_EXAMPLES OFF) +set(SDLMIXER_OPUS OFF) +set(SDLMIXER_VORBIS_VORBISFILE OFF) +set(SDLMIXER_WAVPACK OFF) +set(SDLMIXER_FLAC OFF) +set(SDLMIXER_MP3_MPG123 OFF) +set(SDLMIXER_GME OFF) +set(DSDLMIXER_MIDI_TIMIDITY OFF) + +# SDL3_ttf +set(SDLTTF_VENDORED ON) +set(SDLTTF_HARFBUZZ OFF) +set(SDLTTF_SAMPLES OFF) diff --git a/depends/ps3dev.cmake b/depends/ps3dev.cmake index 4c76716c..b9c127d3 100644 --- a/depends/ps3dev.cmake +++ b/depends/ps3dev.cmake @@ -17,32 +17,45 @@ set(CMAKE_SYSTEM_PROCESSOR powerpc64) set(CMAKE_C_COMPILER powerpc64-ps3-elf-gcc) set(CMAKE_CXX_COMPILER powerpc64-ps3-elf-g++) -set(LIBPSL1GHT_INC "-I${PS3DEV}/ppu/include -I${PS3DEV}/ppu/include/simdmath") -set(LIBPSL1GHT_LIB "-L${PS3DEV}/ppu/lib -L${PS3DEV}/ppu/ppu/lib") -set(PORTLIBS "${PS3DEV}/portlibs/ppu") - -set(PPC_MACHDEP "-mhard-float -fmodulo-sched -ffunction-sections -fdata-sections") -set(PPC_CFLAGS "-O2 -Wall -mcpu=cell ${PPC_MACHDEP} ${LIBPSL1GHT_INC}" ) -set(PPC_LDFLAGS "${LIBPSL1GHT_INC} -Wl,-zmax-page-size=128 -Wl,--gc-sections") -set(PPC_LIBS "-lgcm_sys -lrsx -lsysutil -lio -lcairo -lm -lfreetype -lz -lpixman-1 -lrt -llv2") - -set(CMAKE_C_FLAGS_INIT ${PPC_CFLAGS}) -set(CMAKE_CXX_FLAGS_INIT ${PPC_CFLAGS}) -set(CMAKE_EXE_LINKER_FLAGS_INIT ${PPC_LDFLAGS}) -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${PPC_LIBS}") - -set(CMAKE_PREFIX_PATH ${PORTLIBS}) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +set(PPC_INC + ${PS3DEV}/ppu/include + ${PS3DEV}/ppu/include/simdmath + ${PS3DEV}/portlibs/ppu/include +) +set(PPC_LIB + ${PS3DEV}/ppu/lib + ${PS3DEV}/ppu/ppu/lib + ${PS3DEV}/portlibs/ppu/lib +) + +set(PPC_MACHDEP -mhard-float -fmodulo-sched -ffunction-sections -fdata-sections) +set(PPC_CFLAGS -O2 -Wall -mcpu=cell ${PPC_MACHDEP}) +set(PPC_LDFLAGS -Wl,-zmax-page-size=128) +set(PPC_LIBS -lgcm_sys -lrsx -lsysutil -lio -lm -lz -lrt -llv2 -laudio) set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) add_compile_definitions(PS3 __PS3__) set(PS3 1) +macro(ps3_target_setup target) + target_compile_options(${target} PRIVATE + ${PPC_CFLAGS} + ) + target_link_options(${target} PRIVATE + ${PPC_LDFLAGS} + ) + target_link_directories(${target} PRIVATE + ${PPC_LIB} + ) + target_include_directories(${target} PUBLIC + ${PPC_INC} + ) + target_link_libraries(${target} PUBLIC + ${PPC_LIBS} + ) +endmacro() + # Build PS3 SELF file function(ps3_build_self target) set(ELF_FILE $) diff --git a/scripts/043-sdl3.sh b/scripts/043-sdl3.sh index 5156d1e5..30722a89 100755 --- a/scripts/043-sdl3.sh +++ b/scripts/043-sdl3.sh @@ -6,20 +6,20 @@ BUILD_DIR="build-ppc" # Copy make file. if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then - mkdir -p "$PS3DEV/share" - cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" + mkdir -p "$PS3DEV/share" + cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" fi # Download if it's not there. if [ ! -d "$BUILD_NAME" ]; then - ## Download the source code. - wget https://github.com/onesixromcom/SDL/tarball/ps3 -O "$BUILD_NAME.tar.gz" - ## Unpack the source code. - rm -Rf "$BUILD_NAME" - mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf "$BUILD_NAME".tar.gz + # Download the source code. + wget https://github.com/onesixromcom/SDL/tarball/ps3 -O "$BUILD_NAME.tar.gz" + # Unpack the source code. + rm -Rf "$BUILD_NAME" + mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf "$BUILD_NAME".tar.gz fi -## Create the build directory. +# Create the build directory. cd "$BUILD_NAME" rm -rf "$BUILD_DIR" mkdir -p "$BUILD_DIR" diff --git a/scripts/044-sdl3_mixer.sh b/scripts/044-sdl3_mixer.sh index 43793126..79b9b775 100755 --- a/scripts/044-sdl3_mixer.sh +++ b/scripts/044-sdl3_mixer.sh @@ -5,21 +5,22 @@ BUILD_NAME="SDL3_mixer" BUILD_DIR="build-ppc" # Download if it's not there. -if [ ! -d "$DIRECTORY" ]; then - ## Download the source code. - wget https://github.com/libsdl-org/SDL_mixer/releases/download/release-3.2.0/SDL3_mixer-3.2.0.tar.gz - ## Unpack the source code. - rm -Rf "$BUILD_NAME" - mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_mixer-3.2.0.tar.gz +if [ ! -d "$BUILD_NAME" ]; then + # Download the source code. + wget https://github.com/libsdl-org/SDL_mixer/releases/download/release-3.2.0/SDL3_mixer-3.2.0.tar.gz + # Unpack the source code. + rm -Rf "$BUILD_NAME" + mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_mixer-3.2.0.tar.gz fi -## Create the build directory. +# Create the build directory. cd "$BUILD_NAME" rm -rf "$BUILD_DIR" mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" echo "Building for PPC..." -cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DBUILD_SHARED_LIBS=OFF -DSDLMIXER_TESTS=OFF -DSDLMIXER_EXAMPLES=OFF -DSDL_STATIC=ON -DSDLMIXER_OPUS=OFF -DSDLMIXER_VORBIS_VORBISFILE=OFF -DSDLMIXER_WAVPACK=OFF -DSDLMIXER_OGG=OFF -DSDLMIXER_FLAC=OFF -DSDLMIXER_MP3_MPG123=OFF -DSDLMIXER_GME=OFF -DSDLMIXER_MOD_XMP=OFF -DSDLMIXER_MIDI_TIMIDITY=OFF .. +#cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DBUILD_SHARED_LIBS=OFF -DSDLMIXER_TESTS=OFF -DSDLMIXER_EXAMPLES=OFF -DSDL_STATIC=ON -DSDLMIXER_OPUS=OFF -DSDLMIXER_VORBIS_VORBISFILE=OFF -DSDLMIXER_WAVPACK=OFF -DSDLMIXER_OGG=OFF -DSDLMIXER_FLAC=OFF -DSDLMIXER_MP3_MPG123=OFF -DSDLMIXER_GME=OFF -DSDLMIXER_MOD_XMP=OFF -DSDLMIXER_MIDI_TIMIDITY=OFF .. +cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. cmake --build . cmake --install . diff --git a/scripts/045-sdl3_ttf.sh b/scripts/045-sdl3_ttf.sh index 5994c9a1..9268f711 100755 --- a/scripts/045-sdl3_ttf.sh +++ b/scripts/045-sdl3_ttf.sh @@ -6,19 +6,19 @@ BUILD_DIR="build-ppc" # Download if it's not there. if [ ! -d "$BUILD_NAME" ]; then - ## Download the source code. - wget https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-3.2.2.tar.gz - ## Unpack the source code. - rm -Rf "$BUILD_NAME" - mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_ttf-3.2.2.tar.gz - cd "$BUILD_NAME" - ## Patch the source code. - cat ../../patches/SDL3_ttf-1.patch | patch -p1 + # Download the source code. + wget https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-3.2.2.tar.gz + # Unpack the source code. + rm -Rf "$BUILD_NAME" + mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_ttf-3.2.2.tar.gz + cd "$BUILD_NAME" + # Patch the source code. + cat ../../patches/SDL3_ttf-1.patch | patch -p1 - # Download vendored libs - ./external/download.sh + # Download vendored libs + ./external/download.sh else - cd "$BUILD_NAME" + cd "$BUILD_NAME" fi # Create the build directory. @@ -27,6 +27,6 @@ mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" echo "Building for PPC..." -cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DBUILD_SHARED_LIBS=OFF -DSDLTTF_VENDORED=ON -DSDLTTF_HARFBUZZ=OFF -DSDLTTF_SAMPLES=OFF .. +cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. cmake --build . cmake --install . From b61fa8119ede44013f8db3a3ef573267c8731ce0 Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Sun, 26 Apr 2026 16:45:09 +0300 Subject: [PATCH 5/8] Fix sdl3_mixer build --- depends/ps3build.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/ps3build.cmake b/depends/ps3build.cmake index 71483a2f..e3067d6b 100644 --- a/depends/ps3build.cmake +++ b/depends/ps3build.cmake @@ -62,7 +62,7 @@ set(SDLMIXER_WAVPACK OFF) set(SDLMIXER_FLAC OFF) set(SDLMIXER_MP3_MPG123 OFF) set(SDLMIXER_GME OFF) -set(DSDLMIXER_MIDI_TIMIDITY OFF) +set(SDLMIXER_MIDI_TIMIDITY OFF) # SDL3_ttf set(SDLTTF_VENDORED ON) From a223e0f2d3c0ed1151a12cd8ab5f78d045bb5aa0 Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:58:54 +0300 Subject: [PATCH 6/8] sdl3 builds added, cmake check --- archives/archives.txt | 3 +++ depends/check-cmake.sh | 5 +++++ depends/ps3dev.cmake | 1 + scripts/033-sdl3.sh | 29 +++++++++++++++++++++++++++++ scripts/034-sdl3_mixer.sh | 29 +++++++++++++++++++++++++++++ scripts/035-sdl3_ttf.sh | 37 +++++++++++++++++++++++++++++++++++++ scripts/043-sdl3.sh | 31 ------------------------------- scripts/044-sdl3_mixer.sh | 26 -------------------------- scripts/045-sdl3_ttf.sh | 32 -------------------------------- 9 files changed, 104 insertions(+), 89 deletions(-) create mode 100755 depends/check-cmake.sh create mode 100755 scripts/033-sdl3.sh create mode 100755 scripts/034-sdl3_mixer.sh create mode 100755 scripts/035-sdl3_ttf.sh delete mode 100755 scripts/043-sdl3.sh delete mode 100755 scripts/044-sdl3_mixer.sh delete mode 100755 scripts/045-sdl3_ttf.sh diff --git a/archives/archives.txt b/archives/archives.txt index d0f49b9d..14666889 100644 --- a/archives/archives.txt +++ b/archives/archives.txt @@ -31,3 +31,6 @@ b6ae1ee2fa3d42ac489287d3ec34c5885730b1296f0801ae577a35193d3affbc 1903175 https: - - https://github.com/sahlberg/libsmb2/tarball/master -> libsmb2.tar.gz - - https://github.com/clienthax/psl1ght/tarball/master -> psl1ght.tar.gz - - https://github.com/bucanero/pthread-emb-ps3/tarball/master -> pthread-emb-ps3.tar.gz +- - https://github.com/onesixromcom/SDL/tarball/ps3-rsx-ps3dev -> sdl3.tar.gz +182a07c745375e113dc740d43964ff21b0be29f29f59876c4dbc4db3d32f6901 5161139 https://github.com/libsdl-org/SDL_mixer/releases/download/release-3.2.4/SDL3_mixer-3.2.4.tar.gz +63547d58d0185c833213885b635a2c0548201cc8f301e6587c0be1a67e1e045d 1545950 https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-3.2.2.tar.gz diff --git a/depends/check-cmake.sh b/depends/check-cmake.sh new file mode 100755 index 00000000..21be1d1c --- /dev/null +++ b/depends/check-cmake.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# check-cmake.sh + +## Check for cmake. +cmake --version 1> /dev/null || { echo "ERROR: Install cmake before continuing."; exit 1; } diff --git a/depends/ps3dev.cmake b/depends/ps3dev.cmake index b9c127d3..e592964a 100644 --- a/depends/ps3dev.cmake +++ b/depends/ps3dev.cmake @@ -16,6 +16,7 @@ set(CMAKE_SYSTEM_PROCESSOR powerpc64) set(CMAKE_C_COMPILER powerpc64-ps3-elf-gcc) set(CMAKE_CXX_COMPILER powerpc64-ps3-elf-g++) +set(CMAKE_ASM_COMPILER powerpc64-ps3-elf-g++) set(PPC_INC ${PS3DEV}/ppu/include diff --git a/scripts/033-sdl3.sh b/scripts/033-sdl3.sh new file mode 100755 index 00000000..ecce3b4f --- /dev/null +++ b/scripts/033-sdl3.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -eo pipefail +# SDL3 by 16rom.com + +SDL3="SDL3_3.4.14" +## Source util functions +source ../utils/utils.sh + +## Download the source code. +../download.sh sdl3.tar.gz + +## Copy make file. +if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then + mkdir -p "$PS3DEV/share" + cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" +fi + +## Unpack the source code. +rm -Rf ${SDL3} +mkdir ${SDL3} +echo "Unpacking ${SDL3}" +extract ../archives/sdl3.tar.gz --strip-components=1 --directory=${SDL3} +cd ${SDL3} +mkdir -p build-ppc +cd build-ppc + +cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. +cmake --build . +cmake --install . diff --git a/scripts/034-sdl3_mixer.sh b/scripts/034-sdl3_mixer.sh new file mode 100755 index 00000000..983c4d66 --- /dev/null +++ b/scripts/034-sdl3_mixer.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -eo pipefail +# SDL3 by 16rom.com + +SDL3_MIXER="SDL3_mixer_3.2.4" +## Source util functions +source ../utils/utils.sh + +## Download the source code. +../download.sh SDL3_mixer-3.2.4.tar.gz + +## Copy make file. +if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then + mkdir -p "$PS3DEV/share" + cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" +fi + +## Unpack the source code. +rm -Rf ${SDL3_MIXER} +mkdir ${SDL3_MIXER} +echo "Unpacking ${SDL3_MIXER}" +extract ../archives/SDL3_mixer-3.2.4.tar.gz --strip-components=1 --directory=${SDL3_MIXER} +cd ${SDL3_MIXER} +mkdir -p build-ppc +cd build-ppc + +cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. +cmake --build . +cmake --install . diff --git a/scripts/035-sdl3_ttf.sh b/scripts/035-sdl3_ttf.sh new file mode 100755 index 00000000..38c18c6a --- /dev/null +++ b/scripts/035-sdl3_ttf.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -eo pipefail +# SDL3_ttf by 16rom.com + +SDL3_TTF="SDL3_ttf-3.2.2" +## Source util functions +source ../utils/utils.sh + +## Download the source code. +../download.sh ${SDL3_TTF}.tar.gz + +## Copy make file. +if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then + mkdir -p "$PS3DEV/share" + cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" +fi + +## Unpack the source code. +rm -Rf ${SDL3_TTF} +mkdir ${SDL3_TTF} +echo "Unpacking ${SDL3_TTF}" +extract ../archives/${SDL3_TTF}.tar.gz --strip-components=1 --directory=${SDL3_TTF} +cd ${SDL3_TTF} + +## Patch the source code. +echo "Patching ${SDL3_TTF} for compatibility..." +cat ../../patches/SDL3_ttf-1.patch | patch -p1 + +# Download vendored libs +./external/download.sh + +mkdir -p build-ppc +cd build-ppc + +cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. +cmake --build . +cmake --install . diff --git a/scripts/043-sdl3.sh b/scripts/043-sdl3.sh deleted file mode 100755 index 30722a89..00000000 --- a/scripts/043-sdl3.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -e -# sdl3.sh by 16rom.com - -BUILD_NAME="SDL3" -BUILD_DIR="build-ppc" - -# Copy make file. -if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then - mkdir -p "$PS3DEV/share" - cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" -fi - -# Download if it's not there. -if [ ! -d "$BUILD_NAME" ]; then - # Download the source code. - wget https://github.com/onesixromcom/SDL/tarball/ps3 -O "$BUILD_NAME.tar.gz" - # Unpack the source code. - rm -Rf "$BUILD_NAME" - mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf "$BUILD_NAME".tar.gz -fi - -# Create the build directory. -cd "$BUILD_NAME" -rm -rf "$BUILD_DIR" -mkdir -p "$BUILD_DIR" -cd "$BUILD_DIR" -echo "Building for PPC..." - -cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. -cmake --build . -cmake --install . diff --git a/scripts/044-sdl3_mixer.sh b/scripts/044-sdl3_mixer.sh deleted file mode 100755 index 79b9b775..00000000 --- a/scripts/044-sdl3_mixer.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -e -# sdl3_mixer.sh by 16rom.com - -BUILD_NAME="SDL3_mixer" -BUILD_DIR="build-ppc" - -# Download if it's not there. -if [ ! -d "$BUILD_NAME" ]; then - # Download the source code. - wget https://github.com/libsdl-org/SDL_mixer/releases/download/release-3.2.0/SDL3_mixer-3.2.0.tar.gz - # Unpack the source code. - rm -Rf "$BUILD_NAME" - mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_mixer-3.2.0.tar.gz -fi - -# Create the build directory. -cd "$BUILD_NAME" -rm -rf "$BUILD_DIR" -mkdir -p "$BUILD_DIR" -cd "$BUILD_DIR" -echo "Building for PPC..." - -#cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_INSTALL_PREFIX="$PS3DEV/portlibs/ppu" -DCMAKE_PREFIX_PATH="$PS3DEV/portlibs/ppu" -DBUILD_SHARED_LIBS=OFF -DSDLMIXER_TESTS=OFF -DSDLMIXER_EXAMPLES=OFF -DSDL_STATIC=ON -DSDLMIXER_OPUS=OFF -DSDLMIXER_VORBIS_VORBISFILE=OFF -DSDLMIXER_WAVPACK=OFF -DSDLMIXER_OGG=OFF -DSDLMIXER_FLAC=OFF -DSDLMIXER_MP3_MPG123=OFF -DSDLMIXER_GME=OFF -DSDLMIXER_MOD_XMP=OFF -DSDLMIXER_MIDI_TIMIDITY=OFF .. -cmake -Wno-dev -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. -cmake --build . -cmake --install . diff --git a/scripts/045-sdl3_ttf.sh b/scripts/045-sdl3_ttf.sh deleted file mode 100755 index 9268f711..00000000 --- a/scripts/045-sdl3_ttf.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -e -# sdl3_ttf.sh by 16rom.com - -BUILD_NAME="SDL3_ttf" -BUILD_DIR="build-ppc" - -# Download if it's not there. -if [ ! -d "$BUILD_NAME" ]; then - # Download the source code. - wget https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-3.2.2.tar.gz - # Unpack the source code. - rm -Rf "$BUILD_NAME" - mkdir "$BUILD_NAME" && tar --strip-components=1 --directory="$BUILD_NAME" -xvzf SDL3_ttf-3.2.2.tar.gz - cd "$BUILD_NAME" - # Patch the source code. - cat ../../patches/SDL3_ttf-1.patch | patch -p1 - - # Download vendored libs - ./external/download.sh -else - cd "$BUILD_NAME" -fi - -# Create the build directory. -rm -rf "$BUILD_DIR" -mkdir -p "$BUILD_DIR" -cd "$BUILD_DIR" -echo "Building for PPC..." - -cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. -cmake --build . -cmake --install . From a617df6a9da79947f3efc5eb20010732249401af Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Thu, 10 Sep 2026 12:51:53 +0300 Subject: [PATCH 7/8] add share folder copy script, fix sdl3 builds --- .../ps3-toolchain.cmake | 0 libraries.sh | 7 + scripts/033-sdl3.sh | 8 +- scripts/034-sdl3_mixer.sh | 8 +- scripts/035-sdl3_ttf.sh | 8 +- share/createPKG.cmake | 138 +++++++++++++++++ share/createSELF.cmake | 145 ++++++++++++++++++ {depends => share}/ps3dev.cmake | 29 +--- 8 files changed, 295 insertions(+), 48 deletions(-) rename depends/ps3build.cmake => cmake/ps3-toolchain.cmake (100%) create mode 100644 share/createPKG.cmake create mode 100644 share/createSELF.cmake rename {depends => share}/ps3dev.cmake (61%) diff --git a/depends/ps3build.cmake b/cmake/ps3-toolchain.cmake similarity index 100% rename from depends/ps3build.cmake rename to cmake/ps3-toolchain.cmake diff --git a/libraries.sh b/libraries.sh index 6076f8bd..b7bef70b 100755 --- a/libraries.sh +++ b/libraries.sh @@ -1,6 +1,13 @@ #!/bin/sh # libraries.sh by Naomi Peori (naomi@peori.ca) +## Copy share file. +if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then + cp -r ./share "$PS3DEV/" +fi + +exit + ## Enter the ps3libraries directory. cd "`dirname $0`" || { echo "ERROR: Could not enter the ps3libraries directory."; exit 1; } diff --git a/scripts/033-sdl3.sh b/scripts/033-sdl3.sh index ecce3b4f..abbe4bdd 100755 --- a/scripts/033-sdl3.sh +++ b/scripts/033-sdl3.sh @@ -9,12 +9,6 @@ source ../utils/utils.sh ## Download the source code. ../download.sh sdl3.tar.gz -## Copy make file. -if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then - mkdir -p "$PS3DEV/share" - cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" -fi - ## Unpack the source code. rm -Rf ${SDL3} mkdir ${SDL3} @@ -24,6 +18,6 @@ cd ${SDL3} mkdir -p build-ppc cd build-ppc -cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. +cmake -DCMAKE_TOOLCHAIN_FILE="../../cmake/ps3-toolchain.cmake" -DCMAKE_BUILD_TYPE=Release .. cmake --build . cmake --install . diff --git a/scripts/034-sdl3_mixer.sh b/scripts/034-sdl3_mixer.sh index 983c4d66..156237c1 100755 --- a/scripts/034-sdl3_mixer.sh +++ b/scripts/034-sdl3_mixer.sh @@ -9,12 +9,6 @@ source ../utils/utils.sh ## Download the source code. ../download.sh SDL3_mixer-3.2.4.tar.gz -## Copy make file. -if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then - mkdir -p "$PS3DEV/share" - cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" -fi - ## Unpack the source code. rm -Rf ${SDL3_MIXER} mkdir ${SDL3_MIXER} @@ -24,6 +18,6 @@ cd ${SDL3_MIXER} mkdir -p build-ppc cd build-ppc -cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. +cmake -DCMAKE_TOOLCHAIN_FILE="../../cmake/ps3-toolchain.cmake" -DCMAKE_BUILD_TYPE=Release .. cmake --build . cmake --install . diff --git a/scripts/035-sdl3_ttf.sh b/scripts/035-sdl3_ttf.sh index 38c18c6a..8687e119 100755 --- a/scripts/035-sdl3_ttf.sh +++ b/scripts/035-sdl3_ttf.sh @@ -9,12 +9,6 @@ source ../utils/utils.sh ## Download the source code. ../download.sh ${SDL3_TTF}.tar.gz -## Copy make file. -if [ ! -f "$PS3DEV/share/ps3dev.cmake" ]; then - mkdir -p "$PS3DEV/share" - cp ../depends/ps3dev.cmake "$PS3DEV/share/ps3dev.cmake" -fi - ## Unpack the source code. rm -Rf ${SDL3_TTF} mkdir ${SDL3_TTF} @@ -32,6 +26,6 @@ cat ../../patches/SDL3_ttf-1.patch | patch -p1 mkdir -p build-ppc cd build-ppc -cmake -DCMAKE_TOOLCHAIN_FILE="../../depends/ps3build.cmake" -DCMAKE_BUILD_TYPE=Release .. +cmake -DCMAKE_TOOLCHAIN_FILE="../../cmake/ps3-toolchain.cmake" -DCMAKE_BUILD_TYPE=Release .. cmake --build . cmake --install . diff --git a/share/createPKG.cmake b/share/createPKG.cmake new file mode 100644 index 00000000..2ca8bc80 --- /dev/null +++ b/share/createPKG.cmake @@ -0,0 +1,138 @@ +cmake_minimum_required(VERSION 3.10) + +# --------------------------------------------------------------------------- +# create_pkg_file +# +# Packages a PS3 ELF/SELF target into a signed .pkg. +# +# Usage: +# +# add_executable(mygame main.c) +# ps3_create_pkg_file( +# TARGET mygame +# TITLE "My Game" +# APPID "TEST00001" +# CONTENTID "UP0001-TEST00001_00-0000000000000000" +# ICON0 "${CMAKE_SOURCE_DIR}/assets/ICON0.PNG" +# SFOXML "${CMAKE_SOURCE_DIR}/assets/sfo.xml" +# ) +# +# All arguments except TARGET are optional and fall back to sane defaults, +# matching the variables at the top of the original Makefile. Any of them +# can be overridden per-call, and PS3DEV-relative defaults can be +# overridden globally by setting the corresponding cache variable before +# calling the macro (e.g. -DPS3_DEFAULT_ICON0=... on the cmake command line). +# --------------------------------------------------------------------------- + +set(PS3_DEFAULT_APPID "TEST00001" CACHE STRING "Default PS3 APPID") +set(PS3_DEFAULT_ICON0 "$ENV{PS3DEV}/bin/ICON0.PNG" CACHE FILEPATH "Default ICON0.PNG path") +set(PS3_DEFAULT_SFOXML "$ENV{PS3DEV}/bin/sfo.xml" CACHE FILEPATH "Default sfo.xml path") + +set(MAKE_SELF_NPDRM_EXECUTABLE "$ENV{PS3DEV}/bin/make_self_npdrm") +set(SFO_EXECUTABLE "$ENV{PS3DEV}/bin/sfo") +set(PKG_EXECUTABLE "$ENV{PS3DEV}/bin/pkg") + +macro(ps3_create_pkg_file) + + set(options) + set(oneValueArgs + TARGET # required, defined by add_executable() before calling ps3_create_pkg_file + TITLE # optional, string, title shown in the PS3 XMB + APPID # optional, e.g. "TEST00001" + CONTENTID # optional, e.g. "UP0001-_00-0000000000000000" + ICON0 # optional, absolute path to ICON0.PNG + SFOXML # optional, absolute path to sfo.xml template + OUTPUT_DIR # optional, directory the final .pkg is written to + OUTPUT_NAME # optional, filename (without extension) of the final .pkg + ) + set(multiValueArgs) + + + cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT DEFINED ARG_TARGET) + message(FATAL_ERROR "create_pkg_file: TARGET must be defined") + endif() + + if(NOT TARGET ${ARG_TARGET}) + message(FATAL_ERROR "create_pkg_file: '${ARG_TARGET}' is not a defined CMake target (call add_executable() first)") + endif() + + # ---- fill in defaults for anything not passed in -------------------- + if(NOT DEFINED ARG_TITLE) + set(ARG_TITLE "${ARG_TARGET}") + endif() + + if(NOT DEFINED ARG_APPID) + set(ARG_APPID "${PS3_DEFAULT_APPID}") + endif() + + if(NOT DEFINED ARG_CONTENTID) + set(ARG_CONTENTID "UP0001-${ARG_APPID}_00-0000000000000000") + endif() + + if(NOT DEFINED ARG_ICON0) + set(ARG_ICON0 "${PS3_DEFAULT_ICON0}") + endif() + + if(NOT DEFINED ARG_SFOXML) + set(ARG_SFOXML "${PS3_DEFAULT_SFOXML}") + endif() + + if(NOT DEFINED ARG_OUTPUT_DIR) + set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") + endif() + + if(NOT DEFINED ARG_OUTPUT_NAME) + set(ARG_OUTPUT_NAME "${ARG_TARGET}") + endif() + + set(PS3_PKG_STAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_TARGET}.pkgdir") + set(PS3_PKG_FILE "${ARG_OUTPUT_DIR}/${ARG_OUTPUT_NAME}.pkg") +# Attached directly to the target's own build steps: runs every time + # ${ARG_TARGET} is (re)built, right after it links, no separate + # "_pkg" target to remember to invoke and no EXCLUDE_FROM_ALL surprises. + add_custom_command( + TARGET ${ARG_TARGET} + POST_BUILD + + # fresh staging tree (mirrors `rm -Rf pkg && mkdir -p pkg/USRDIR`) + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PS3_PKG_STAGE_DIR}" + COMMAND ${CMAKE_COMMAND} -E make_directory "${PS3_PKG_STAGE_DIR}/USRDIR" + + # cp $(ICON0) pkg + COMMAND ${CMAKE_COMMAND} -E copy "${ARG_ICON0}" "${PS3_PKG_STAGE_DIR}/ICON0.PNG" + + # make_self_npdrm $< pkg/USRDIR/EBOOT.BIN $(CONTENTID) + COMMAND "${MAKE_SELF_NPDRM_EXECUTABLE}" + "$" + "${PS3_PKG_STAGE_DIR}/USRDIR/EBOOT.BIN" + "${ARG_CONTENTID}" + + # sfo --title .. --appid .. -f sfo.xml pkg/PARAM.SFO + COMMAND "${SFO_EXECUTABLE}" + --title "${ARG_TITLE}" + --appid "${ARG_APPID}" + -f "${ARG_SFOXML}" + "${PS3_PKG_STAGE_DIR}/PARAM.SFO" + + COMMAND ${CMAKE_COMMAND} -E make_directory "${ARG_OUTPUT_DIR}" + + # pkg --contentid $(CONTENTID) pkg/ $@ + COMMAND "${PKG_EXECUTABLE}" + --contentid "${ARG_CONTENTID}" + "${PS3_PKG_STAGE_DIR}/" + "${PS3_PKG_FILE}" + + # rm -Rf pkg + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PS3_PKG_STAGE_DIR}" + + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + COMMENT "Building PS3 package ${PS3_PKG_FILE}" + VERBATIM + ) + + unset(PS3_PKG_STAGE_DIR) + unset(PS3_PKG_FILE) + +endmacro() \ No newline at end of file diff --git a/share/createSELF.cmake b/share/createSELF.cmake new file mode 100644 index 00000000..fa19916c --- /dev/null +++ b/share/createSELF.cmake @@ -0,0 +1,145 @@ +cmake_minimum_required(VERSION 3.10) + +# --------------------------------------------------------------------------- +# ps3_create_self_file +# +# Runs the PSL1GHT post-build steps needed to turn a plain PPU ELF target +# into a signed SELF (and optionally a fake SELF for use with PS3 loaders), +# equivalent to: +# +# sprxlinker $ +# powerpc64-ps3-elf-strip --strip-debug $ -o +# make_self .self +# fself .fake.self +# +# Usage: +# +# add_executable(mygame main.c) +# create_self_file(TARGET mygame) +# +# Optional arguments let you skip steps or change output locations: +# +# create_self_file( +# TARGET mygame +# OUTPUT_DIR "${CMAKE_BINARY_DIR}/pkg/USRDIR" +# OUTPUT_NAME EBOOT +# NO_SPRXLINK # skip the sprxlinker OPD-fixup step +# NO_STRIP # skip stripping, package the raw ELF instead +# NO_FSELF # don't build the fake SELF +# ) +# --------------------------------------------------------------------------- + +if(NOT DEFINED PS3DEV) + set(PS3DEV "$ENV{PS3DEV}") +endif() + +find_program(SPRXLINKER_EXECUTABLE NAMES sprxlinker PATHS "${PS3DEV}/bin") +find_program(MAKE_SELF_EXECUTABLE NAMES make_self PATHS "${PS3DEV}/bin") +find_program(FSELF_EXECUTABLE NAMES fself PATHS "${PS3DEV}/bin") +find_program(PPU_STRIP_EXECUTABLE NAMES powerpc64-ps3-elf-strip PATHS "${PS3DEV}/ppu/bin") + +macro(ps3_create_self_file) + + set(options + NO_SPRXLINK # optional, skip the sprxlinker OPD-relocation fixup step + NO_STRIP # optional, skip stripping (packages the raw ELF) + NO_FSELF # optional, don't build the fake SELF (.fake.self) + ) + set(oneValueArgs + TARGET # required, defined by add_executable() before calling create_self_file + OUTPUT_DIR # optional, directory the .self/.fake.self are written to (default: target's own output dir) + OUTPUT_NAME # optional, base filename, without extension (default: target name) + STRIP_FLAGS # optional, flags passed to the PPU strip tool (default: --strip-debug) + ) + set(multiValueArgs) + + cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT DEFINED ARG_TARGET) + message(FATAL_ERROR "ps3_create_self_file: TARGET must be defined") + endif() + + if(NOT TARGET ${ARG_TARGET}) + message(FATAL_ERROR "ps3_create_self_file: '${ARG_TARGET}' is not a defined CMake target (call add_executable() first)") + endif() + + if(NOT DEFINED ARG_OUTPUT_NAME) + set(ARG_OUTPUT_NAME "${ARG_TARGET}") + endif() + + if(NOT DEFINED ARG_STRIP_FLAGS) + set(ARG_STRIP_FLAGS "--strip-debug") + endif() + + # ---- sanity check the tools ------------------------------------------- + if(NOT ARG_NO_SPRXLINK AND NOT SPRXLINKER_EXECUTABLE) + message(FATAL_ERROR "ps3_create_self_file: sprxlinker not found, is PS3DEV set and in PATH?") + endif() + if(NOT ARG_NO_STRIP AND NOT PPU_STRIP_EXECUTABLE) + message(FATAL_ERROR "ps3_create_self_file: powerpc64-ps3-elf-strip not found, is PS3DEV set and in PATH?") + endif() + if(NOT MAKE_SELF_EXECUTABLE) + message(FATAL_ERROR "ps3_create_self_file: make_self not found, is PS3DEV set and in PATH?") + endif() + if(NOT ARG_NO_FSELF AND NOT FSELF_EXECUTABLE) + message(FATAL_ERROR "ps3_create_self_file: fself not found, is PS3DEV set and in PATH?") + endif() + + set(PS3_SELF_ELF "$") + + if(DEFINED ARG_OUTPUT_DIR) + set(PS3_SELF_OUT_DIR "${ARG_OUTPUT_DIR}") + else() + set(PS3_SELF_OUT_DIR "$") + endif() + + if(ARG_NO_STRIP) + set(PS3_SELF_PACKAGE_ELF "${PS3_SELF_ELF}") + else() + set(PS3_SELF_PACKAGE_ELF "${PS3_SELF_ELF}.stripped.elf") + endif() + + set(PS3_SELF_FILE "${PS3_SELF_OUT_DIR}/${ARG_OUTPUT_NAME}.self") + set(PS3_FSELF_FILE "${PS3_SELF_OUT_DIR}/${ARG_OUTPUT_NAME}.fake.self") + + add_custom_command( + TARGET ${ARG_TARGET} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${PS3_SELF_OUT_DIR}" + COMMAND ${CMAKE_COMMAND} -E echo "Running PS3 post-build steps for ${ARG_TARGET}..." + + # 1. Fix OPD relocations FIRST, before anything else + $<$>:COMMAND> + $<$>:${SPRXLINKER_EXECUTABLE}> + $<$>:${PS3_SELF_ELF}> + + # 2. Strip AFTER sprxlinker, preserve OPD via the caller-supplied flags + $<$>:COMMAND> + $<$>:${PPU_STRIP_EXECUTABLE}> + $<$>:${ARG_STRIP_FLAGS}> + $<$>:${PS3_SELF_ELF}> + $<$>:-o> + $<$>:${PS3_SELF_PACKAGE_ELF}> + + # 3. Package the (stripped) elf into SELF, and optionally a fake SELF + COMMAND "${MAKE_SELF_EXECUTABLE}" "${PS3_SELF_PACKAGE_ELF}" "${PS3_SELF_FILE}" + + $<$>:COMMAND> + $<$>:${FSELF_EXECUTABLE}> + $<$>:${PS3_SELF_PACKAGE_ELF}> + $<$>:${PS3_FSELF_FILE}> + + COMMAND ${CMAKE_COMMAND} -E echo "Done: ${PS3_SELF_FILE}" + + COMMENT "Building PS3 SELF for ${ARG_TARGET}" + VERBATIM + COMMAND_EXPAND_LISTS + ) + + unset(PS3_SELF_ELF) + unset(PS3_SELF_OUT_DIR) + unset(PS3_SELF_PACKAGE_ELF) + unset(PS3_SELF_FILE) + unset(PS3_FSELF_FILE) + +endmacro() \ No newline at end of file diff --git a/depends/ps3dev.cmake b/share/ps3dev.cmake similarity index 61% rename from depends/ps3dev.cmake rename to share/ps3dev.cmake index e592964a..1cd60b7c 100644 --- a/depends/ps3dev.cmake +++ b/share/ps3dev.cmake @@ -57,31 +57,6 @@ macro(ps3_target_setup target) ) endmacro() -# Build PS3 SELF file -function(ps3_build_self target) - set(ELF_FILE $) - set(STRIPPED_ELF ${ELF_FILE}.stripped.elf) - set(SELF_FILE ${ELF_FILE}.self) - set(FSELF_FILE ${ELF_FILE}.fake.self) +include("${PS3DEV}/share/createSELF.cmake") +include("${PS3DEV}/share/createPKG.cmake") - add_custom_command( - TARGET ${target} - POST_BUILD - COMMAND echo "Running PS3 post-build steps..." - - # 1. Fix OPD relocations FIRST, before anything else - COMMAND ${PS3DEV}/bin/sprxlinker ${ELF_FILE} - - # 2. Strip AFTER sprxlinker, preserve OPD with -R flag - COMMAND ${PS3DEV}/ppu/bin/powerpc64-ps3-elf-strip - --strip-debug - ${ELF_FILE} - -o ${STRIPPED_ELF} - - # 3. Package the STRIPPED elf into SELF - COMMAND ${PS3DEV}/bin/make_self ${STRIPPED_ELF} ${SELF_FILE} - COMMAND ${PS3DEV}/bin/fself ${STRIPPED_ELF} ${FSELF_FILE} - - COMMAND echo "Done: ${SELF_FILE}" - ) -endfunction() From 69d697a5e183e0a8fb4097d912ffb2d8a8e2cb9b Mon Sep 17 00:00:00 2001 From: onesixromcom <16732145+onesixromcom@users.noreply.github.com> Date: Thu, 10 Sep 2026 13:32:07 +0300 Subject: [PATCH 8/8] fix cmake share scripts --- share/createPKG.cmake | 8 ++--- share/createSELF.cmake | 69 +++++++++++++++--------------------------- 2 files changed, 27 insertions(+), 50 deletions(-) diff --git a/share/createPKG.cmake b/share/createPKG.cmake index 2ca8bc80..24a7d00c 100644 --- a/share/createPKG.cmake +++ b/share/createPKG.cmake @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.10) # --------------------------------------------------------------------------- -# create_pkg_file +# ps3_create_pkg_file # # Packages a PS3 ELF/SELF target into a signed .pkg. # @@ -47,7 +47,6 @@ macro(ps3_create_pkg_file) ) set(multiValueArgs) - cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT DEFINED ARG_TARGET) @@ -58,7 +57,6 @@ macro(ps3_create_pkg_file) message(FATAL_ERROR "create_pkg_file: '${ARG_TARGET}' is not a defined CMake target (call add_executable() first)") endif() - # ---- fill in defaults for anything not passed in -------------------- if(NOT DEFINED ARG_TITLE) set(ARG_TITLE "${ARG_TARGET}") endif() @@ -89,9 +87,7 @@ macro(ps3_create_pkg_file) set(PS3_PKG_STAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_TARGET}.pkgdir") set(PS3_PKG_FILE "${ARG_OUTPUT_DIR}/${ARG_OUTPUT_NAME}.pkg") -# Attached directly to the target's own build steps: runs every time - # ${ARG_TARGET} is (re)built, right after it links, no separate - # "_pkg" target to remember to invoke and no EXCLUDE_FROM_ALL surprises. + add_custom_command( TARGET ${ARG_TARGET} POST_BUILD diff --git a/share/createSELF.cmake b/share/createSELF.cmake index fa19916c..ce10b901 100644 --- a/share/createSELF.cmake +++ b/share/createSELF.cmake @@ -15,11 +15,11 @@ cmake_minimum_required(VERSION 3.10) # Usage: # # add_executable(mygame main.c) -# create_self_file(TARGET mygame) +# ps3_create_self_file(TARGET mygame) # # Optional arguments let you skip steps or change output locations: # -# create_self_file( +# ps3_create_self_file( # TARGET mygame # OUTPUT_DIR "${CMAKE_BINARY_DIR}/pkg/USRDIR" # OUTPUT_NAME EBOOT @@ -40,11 +40,6 @@ find_program(PPU_STRIP_EXECUTABLE NAMES powerpc64-ps3-elf-strip PATHS "${PS3D macro(ps3_create_self_file) - set(options - NO_SPRXLINK # optional, skip the sprxlinker OPD-relocation fixup step - NO_STRIP # optional, skip stripping (packages the raw ELF) - NO_FSELF # optional, don't build the fake SELF (.fake.self) - ) set(oneValueArgs TARGET # required, defined by add_executable() before calling create_self_file OUTPUT_DIR # optional, directory the .self/.fake.self are written to (default: target's own output dir) @@ -71,7 +66,6 @@ macro(ps3_create_self_file) set(ARG_STRIP_FLAGS "--strip-debug") endif() - # ---- sanity check the tools ------------------------------------------- if(NOT ARG_NO_SPRXLINK AND NOT SPRXLINKER_EXECUTABLE) message(FATAL_ERROR "ps3_create_self_file: sprxlinker not found, is PS3DEV set and in PATH?") endif() @@ -85,59 +79,46 @@ macro(ps3_create_self_file) message(FATAL_ERROR "ps3_create_self_file: fself not found, is PS3DEV set and in PATH?") endif() - set(PS3_SELF_ELF "$") - if(DEFINED ARG_OUTPUT_DIR) set(PS3_SELF_OUT_DIR "${ARG_OUTPUT_DIR}") else() set(PS3_SELF_OUT_DIR "$") endif() + set(PS3_SELF_WORK_ELF "${PS3_SELF_OUT_DIR}/${ARG_OUTPUT_NAME}") + if(ARG_NO_STRIP) - set(PS3_SELF_PACKAGE_ELF "${PS3_SELF_ELF}") + set(PS3_SELF_PACKAGE_ELF "${PS3_SELF_WORK_ELF}") else() - set(PS3_SELF_PACKAGE_ELF "${PS3_SELF_ELF}.stripped.elf") + set(PS3_SELF_PACKAGE_ELF "${PS3_SELF_OUT_DIR}/${ARG_OUTPUT_NAME}.stripped.elf") endif() set(PS3_SELF_FILE "${PS3_SELF_OUT_DIR}/${ARG_OUTPUT_NAME}.self") set(PS3_FSELF_FILE "${PS3_SELF_OUT_DIR}/${ARG_OUTPUT_NAME}.fake.self") add_custom_command( - TARGET ${ARG_TARGET} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory "${PS3_SELF_OUT_DIR}" - COMMAND ${CMAKE_COMMAND} -E echo "Running PS3 post-build steps for ${ARG_TARGET}..." - - # 1. Fix OPD relocations FIRST, before anything else - $<$>:COMMAND> - $<$>:${SPRXLINKER_EXECUTABLE}> - $<$>:${PS3_SELF_ELF}> - - # 2. Strip AFTER sprxlinker, preserve OPD via the caller-supplied flags - $<$>:COMMAND> - $<$>:${PPU_STRIP_EXECUTABLE}> - $<$>:${ARG_STRIP_FLAGS}> - $<$>:${PS3_SELF_ELF}> - $<$>:-o> - $<$>:${PS3_SELF_PACKAGE_ELF}> - - # 3. Package the (stripped) elf into SELF, and optionally a fake SELF - COMMAND "${MAKE_SELF_EXECUTABLE}" "${PS3_SELF_PACKAGE_ELF}" "${PS3_SELF_FILE}" - - $<$>:COMMAND> - $<$>:${FSELF_EXECUTABLE}> - $<$>:${PS3_SELF_PACKAGE_ELF}> - $<$>:${PS3_FSELF_FILE}> - - COMMAND ${CMAKE_COMMAND} -E echo "Done: ${PS3_SELF_FILE}" - - COMMENT "Building PS3 SELF for ${ARG_TARGET}" - VERBATIM - COMMAND_EXPAND_LISTS + TARGET ${ARG_TARGET} + POST_BUILD + COMMAND echo "Running PS3 post-build steps..." + + # 1. Fix OPD relocations FIRST, before anything else + COMMAND ${SPRXLINKER_EXECUTABLE} ${PS3_SELF_WORK_ELF} + + # 2. Strip AFTER sprxlinker, preserve OPD with -R flag + COMMAND ${PPU_STRIP_EXECUTABLE} + --strip-debug + ${PS3_SELF_WORK_ELF} + -o ${PS3_SELF_PACKAGE_ELF} + + # 3. Package the STRIPPED elf into SELF + COMMAND ${MAKE_SELF_EXECUTABLE} ${PS3_SELF_PACKAGE_ELF} ${PS3_SELF_FILE} + COMMAND ${FSELF_EXECUTABLE} ${PS3_SELF_PACKAGE_ELF} ${PS3_FSELF_FILE} + + COMMAND echo "Done: ${PS3_SELF_FILE}" ) - unset(PS3_SELF_ELF) unset(PS3_SELF_OUT_DIR) + unset(PS3_SELF_WORK_ELF) unset(PS3_SELF_PACKAGE_ELF) unset(PS3_SELF_FILE) unset(PS3_FSELF_FILE)