Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions archives/archives.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 5 additions & 0 deletions depends/check-cmake.sh
Original file line number Diff line number Diff line change
@@ -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; }
70 changes: 70 additions & 0 deletions depends/ps3build.cmake
Original file line number Diff line number Diff line change
@@ -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)
87 changes: 87 additions & 0 deletions depends/ps3dev.cmake
Original file line number Diff line number Diff line change
@@ -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 $<TARGET_FILE:${target}>)
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()
13 changes: 13 additions & 0 deletions patches/SDL3_ttf-1.patch
Original file line number Diff line number Diff line change
@@ -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()

29 changes: 29 additions & 0 deletions scripts/033-sdl3.sh
Original file line number Diff line number Diff line change
@@ -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 .
29 changes: 29 additions & 0 deletions scripts/034-sdl3_mixer.sh
Original file line number Diff line number Diff line change
@@ -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 .
37 changes: 37 additions & 0 deletions scripts/035-sdl3_ttf.sh
Original file line number Diff line number Diff line change
@@ -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 .