Skip to content
Merged
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
27 changes: 26 additions & 1 deletion .github/scripts/setup_pspdev.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,29 @@ if command -v brew >/dev/null 2>&1; then
fi

echo "PSPDEV setup complete: $PSPDEV_PATH"
echo "PSP toolchain ready to use."
echo "PSP toolchain ready to use."

# Ensure CMake is available (install if missing)
if ! command -v cmake >/dev/null 2>&1; then
echo "CMake not found. Installing..."
case "$OS" in
ubuntu-*)
sudo apt-get update
sudo apt-get install -y cmake
;;
macos-*)
if ! command -v brew >/dev/null 2>&1; then
echo "Homebrew not found on macOS runner; cannot install CMake automatically."
exit 1
fi
brew update
brew install cmake
;;
*)
echo "CMake auto-install not supported on OS: $OS"
exit 1
;;
esac
fi

cmake --version || true
16 changes: 15 additions & 1 deletion .github/workflows/Build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
make
make install

- name: Build all samples
- name: Build all samples (Vanilla Makefile)
run: |
set -euo pipefail
for d in samples/*/ ; do
Expand All @@ -45,3 +45,17 @@ jobs:
make -C "$d"
fi
done

- name: Build all samples (CMake)
run: |
set -euo pipefail
for d in samples/*/ ; do
if [ -f "$d/CMakeLists.txt" ]; then
echo "Building (CMake) $d"
(
cd "$d"
cmake --preset psp
cmake --build --preset psp -j
)
fi
done
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ samples/**/*.elf
samples/**/*.PBP
samples/**/*.prx
samples/**/*.SFO
samples/**/cbuild

# Ignore documentation directory
doc/html
Expand Down
50 changes: 50 additions & 0 deletions samples/OSK/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
cmake_minimum_required(VERSION 3.10)
project(OSK C)

add_executable(osk main.c)

# Link OSLib and PSP SDK libs (SDK libs last)
target_link_libraries(osk PRIVATE
osl
png jpeg z m
pspdisplay pspge pspuser pspdebug
pspsdk pspctrl psphprm pspumd psprtc pspgu pspgum pspaudiolib pspaudio pspaudiocodec psppower pspusb pspusbstor psputility pspssl psphttp pspwlan
)

# Ensure PSP SDK lib search paths
execute_process(COMMAND psp-config --psp-prefix OUTPUT_VARIABLE PSPDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
if(PSPDIR)
target_link_directories(osk PRIVATE "${PSPDIR}/sdk/lib" "${PSPDIR}/lib")
target_link_options(osk PRIVATE "-L${PSPDIR}/sdk/lib" "-L${PSPDIR}/lib")
endif()

set_target_properties(osk PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")

find_program(MKSFOEX mksfoex)
find_program(PACKPBP pack-pbp)

set(OUT_DIR "${CMAKE_BINARY_DIR}")
set(PARAM_SFO "${OUT_DIR}/PARAM.SFO")
set(EBOOT_PBP "${OUT_DIR}/EBOOT.PBP")
set(TITLE "OSK test")

if(MKSFOEX AND PACKPBP)
add_custom_command(TARGET osk POST_BUILD
COMMAND ${MKSFOEX} "${TITLE}" "${PARAM_SFO}"
COMMAND ${PACKPBP} "${EBOOT_PBP}" "${PARAM_SFO}" NULL NULL NULL NULL NULL $<TARGET_FILE:osk> NULL
BYPRODUCTS "${PARAM_SFO}" "${EBOOT_PBP}"
COMMENT "Packaging EBOOT.PBP (ELF)" VERBATIM)
endif()

file(GLOB SAMPLE_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*")
foreach(F ${SAMPLE_FILES})
string(TOLOWER "${F}" F_LC)
if(F_LC MATCHES "\\.(c|h|o|elf|prx|pbp)$" OR F_LC STREQUAL "makefile")
continue()
endif()
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${F}")
add_custom_command(TARGET osk POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/${F}" "${OUT_DIR}/${F}" VERBATIM)
else()
add_custom_command(TARGET osk POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${F}" "${OUT_DIR}/${F}" VERBATIM)
endif()
endforeach()
21 changes: 21 additions & 0 deletions samples/OSK/CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"version": 4,
"cmakeMinimumRequired": { "major": 3, "minor": 16 },
"configurePresets": [
{
"name": "psp",
"displayName": "PSP (Unix Makefiles)",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/cbuild",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../../cmake/PSP.cmake"
}
}
],
"buildPresets": [
{
"name": "psp",
"configurePreset": "psp"
}
]
}
51 changes: 51 additions & 0 deletions samples/adhoc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
cmake_minimum_required(VERSION 3.10)
project(adhoc C)

add_executable(adhoc main.c)

# Link OSLib and PSP SDK libs (SDK libs last)
target_link_libraries(adhoc PRIVATE
osl
png jpeg z m
pspdisplay pspge pspuser pspdebug
pspsdk pspctrl psphprm pspumd psprtc pspgu pspgum pspaudiolib pspaudio pspaudiocodec psppower pspusb pspusbstor psputility pspssl psphttp pspwlan
pspnet pspnet_apctl pspnet_adhoc pspnet_adhocctl pspnet_adhocmatching
)

# Ensure PSP SDK lib search paths
execute_process(COMMAND psp-config --psp-prefix OUTPUT_VARIABLE PSPDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
if(PSPDIR)
target_link_directories(adhoc PRIVATE "${PSPDIR}/sdk/lib" "${PSPDIR}/lib")
target_link_options(adhoc PRIVATE "-L${PSPDIR}/sdk/lib" "-L${PSPDIR}/lib")
endif()

set_target_properties(adhoc PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")

find_program(MKSFOEX mksfoex)
find_program(PACKPBP pack-pbp)

set(OUT_DIR "${CMAKE_BINARY_DIR}")
set(PARAM_SFO "${OUT_DIR}/PARAM.SFO")
set(EBOOT_PBP "${OUT_DIR}/EBOOT.PBP")
set(TITLE "Ad hoc sample")

if(MKSFOEX AND PACKPBP)
add_custom_command(TARGET adhoc POST_BUILD
COMMAND ${MKSFOEX} "${TITLE}" "${PARAM_SFO}"
COMMAND ${PACKPBP} "${EBOOT_PBP}" "${PARAM_SFO}" NULL NULL NULL NULL NULL $<TARGET_FILE:adhoc> NULL
BYPRODUCTS "${PARAM_SFO}" "${EBOOT_PBP}"
COMMENT "Packaging EBOOT.PBP (ELF)" VERBATIM)
endif()

file(GLOB SAMPLE_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*")
foreach(F ${SAMPLE_FILES})
string(TOLOWER "${F}" F_LC)
if(F_LC MATCHES "\\.(c|h|o|elf|prx|pbp)$" OR F_LC STREQUAL "makefile")
continue()
endif()
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${F}")
add_custom_command(TARGET adhoc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/${F}" "${OUT_DIR}/${F}" VERBATIM)
else()
add_custom_command(TARGET adhoc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${F}" "${OUT_DIR}/${F}" VERBATIM)
endif()
endforeach()
21 changes: 21 additions & 0 deletions samples/adhoc/CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"version": 4,
"cmakeMinimumRequired": { "major": 3, "minor": 16 },
"configurePresets": [
{
"name": "psp",
"displayName": "PSP (Unix Makefiles)",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/cbuild",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../../cmake/PSP.cmake"
}
}
],
"buildPresets": [
{
"name": "psp",
"configurePreset": "psp"
}
]
}
51 changes: 51 additions & 0 deletions samples/dialog/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
cmake_minimum_required(VERSION 3.10)
project(dialog C)

add_executable(dialog main.c)

# Link OSLib and PSP SDK libs (SDK libs last)
target_link_libraries(dialog PRIVATE
osl
png jpeg z m
pspdisplay pspge pspuser pspdebug
pspsdk pspctrl psphprm pspumd psprtc pspgu pspgum pspaudiolib pspaudio pspaudiocodec psppower pspusb pspusbstor psputility pspssl psphttp pspwlan
pspnet pspnet_apctl
)

# Ensure PSP SDK lib search paths
execute_process(COMMAND psp-config --psp-prefix OUTPUT_VARIABLE PSPDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
if(PSPDIR)
target_link_directories(dialog PRIVATE "${PSPDIR}/sdk/lib" "${PSPDIR}/lib")
target_link_options(dialog PRIVATE "-L${PSPDIR}/sdk/lib" "-L${PSPDIR}/lib")
endif()

set_target_properties(dialog PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")

find_program(MKSFOEX mksfoex)
find_program(PACKPBP pack-pbp)

set(OUT_DIR "${CMAKE_BINARY_DIR}")
set(PARAM_SFO "${OUT_DIR}/PARAM.SFO")
set(EBOOT_PBP "${OUT_DIR}/EBOOT.PBP")
set(TITLE "Dialog test")

if(MKSFOEX AND PACKPBP)
add_custom_command(TARGET dialog POST_BUILD
COMMAND ${MKSFOEX} "${TITLE}" "${PARAM_SFO}"
COMMAND ${PACKPBP} "${EBOOT_PBP}" "${PARAM_SFO}" NULL NULL NULL NULL NULL $<TARGET_FILE:dialog> NULL
BYPRODUCTS "${PARAM_SFO}" "${EBOOT_PBP}"
COMMENT "Packaging EBOOT.PBP (ELF)" VERBATIM)
endif()

file(GLOB SAMPLE_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*")
foreach(F ${SAMPLE_FILES})
string(TOLOWER "${F}" F_LC)
if(F_LC MATCHES "\\.(c|h|o|elf|prx|pbp)$" OR F_LC STREQUAL "makefile")
continue()
endif()
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${F}")
add_custom_command(TARGET dialog POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/${F}" "${OUT_DIR}/${F}" VERBATIM)
else()
add_custom_command(TARGET dialog POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${F}" "${OUT_DIR}/${F}" VERBATIM)
endif()
endforeach()
21 changes: 21 additions & 0 deletions samples/dialog/CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"version": 4,
"cmakeMinimumRequired": { "major": 3, "minor": 16 },
"configurePresets": [
{
"name": "psp",
"displayName": "PSP (Unix Makefiles)",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/cbuild",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../../cmake/PSP.cmake"
}
}
],
"buildPresets": [
{
"name": "psp",
"configurePreset": "psp"
}
]
}
70 changes: 70 additions & 0 deletions samples/helloWorld/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
cmake_minimum_required(VERSION 3.10)
project(helloWorld C)

# Build executable from sample sources
add_executable(helloworld main.c)

# Link against installed OSLib and PSP SDK libs; put SDK libs last
target_link_libraries(helloworld PRIVATE
osl
png jpeg z m
pspdisplay pspge pspuser pspdebug
pspsdk pspctrl psphprm pspumd psprtc pspgu pspgum pspaudiolib pspaudio pspaudiocodec psppower pspusb pspusbstor psputility pspssl psphttp pspwlan
pspnet_adhoc pspnet_adhocctl pspnet_adhocmatching
)

# Ensure PSP SDK lib search paths are available to the linker
execute_process(
COMMAND psp-config --psp-prefix
OUTPUT_VARIABLE PSPDIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(PSPDIR)
# Some CMake+toolchain combos may ignore link_directories; ensure via explicit -L
target_link_directories(helloworld PRIVATE "${PSPDIR}/sdk/lib" "${PSPDIR}/lib")
target_link_options(helloworld PRIVATE "-L${PSPDIR}/sdk/lib" "-L${PSPDIR}/lib")
endif()

# Outputs go to the build directory for this sample
set_target_properties(helloworld PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")

# PSP packaging tools
find_program(MKSFOEX mksfoex)
find_program(PACKPBP pack-pbp)
find_program(PSP_PRXGEN psp-prxgen)

set(OUT_DIR "${CMAKE_BINARY_DIR}")
set(PARAM_SFO "${OUT_DIR}/PARAM.SFO")
set(EBOOT_PBP "${OUT_DIR}/EBOOT.PBP")
set(TITLE "Hello World")

if(MKSFOEX AND PACKPBP)
add_custom_command(TARGET helloworld POST_BUILD
COMMAND ${MKSFOEX} "${TITLE}" "${PARAM_SFO}"
COMMAND ${PACKPBP} "${EBOOT_PBP}" "${PARAM_SFO}" NULL NULL NULL NULL NULL $<TARGET_FILE:helloworld> NULL
BYPRODUCTS "${PARAM_SFO}" "${EBOOT_PBP}"
COMMENT "Packaging EBOOT.PBP (ELF)"
VERBATIM)
endif()

# Copy assets (non-source files) to OUT_DIR
file(GLOB SAMPLE_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*")
foreach(F ${SAMPLE_FILES})
string(TOLOWER "${F}" F_LC)
if(F_LC MATCHES "\\.(c|h|o|elf|prx|pbp)$" OR F_LC STREQUAL "makefile")
continue()
endif()
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${F}")
add_custom_command(TARGET helloworld POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_CURRENT_SOURCE_DIR}/${F}"
"${OUT_DIR}/${F}"
VERBATIM)
else()
add_custom_command(TARGET helloworld POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_SOURCE_DIR}/${F}"
"${OUT_DIR}/${F}"
VERBATIM)
endif()
endforeach()
21 changes: 21 additions & 0 deletions samples/helloWorld/CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"version": 4,
"cmakeMinimumRequired": { "major": 3, "minor": 16 },
"configurePresets": [
{
"name": "psp",
"displayName": "PSP (Unix Makefiles)",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/cbuild",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../../cmake/PSP.cmake"
}
}
],
"buildPresets": [
{
"name": "psp",
"configurePreset": "psp"
}
]
}
Loading