diff --git a/archives/archives.txt b/archives/archives.txt index d0f49b9..1466688 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 0000000..21be1d1 --- /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/ps3build.cmake b/depends/ps3build.cmake new file mode 100644 index 0000000..e3067d6 --- /dev/null +++ b/depends/ps3build.cmake @@ -0,0 +1,70 @@ +# +# CMake platform file for PS3 PPC processor +# + +cmake_minimum_required(VERSION 3.0...3.12) + +include(${CMAKE_CURRENT_LIST_DIR}/ps3dev.cmake) + +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) +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) + +# 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(SDLMIXER_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 new file mode 100644 index 0000000..e592964 --- /dev/null +++ b/depends/ps3dev.cmake @@ -0,0 +1,87 @@ +# +# CMake platform file for PS3 PPC processor +# + +cmake_minimum_required(VERSION 3.0...3.12) + +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_ASM_COMPILER powerpc64-ps3-elf-g++) + +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 $) + 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 + ${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() diff --git a/patches/SDL3_ttf-1.patch b/patches/SDL3_ttf-1.patch new file mode 100644 index 0000000..72c66a3 --- /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/033-sdl3.sh b/scripts/033-sdl3.sh new file mode 100755 index 0000000..ecce3b4 --- /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 0000000..983c4d6 --- /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 0000000..38c18c6 --- /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 .