add psvita to cmake

This commit is contained in:
olebeck 2025-06-22 02:16:31 +02:00
parent 2e1d961c2c
commit 1ef3166601
5 changed files with 160 additions and 16 deletions

View File

@ -72,3 +72,6 @@ target_include_directories(imgui PUBLIC ${imgui_SOURCE_DIR})
target_link_libraries(imgui PUBLIC SDL3::Headers)
target_link_libraries(imgui PRIVATE SDL3::SDL3)
set_property(TARGET imgui PROPERTY CXX_CLANG_TIDY "")
if(VITA)
target_compile_definitions(imgui PRIVATE IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS)
endif()

View File

@ -35,7 +35,7 @@ option(ISLE_WERROR "Treat warnings as errors" OFF)
option(ISLE_DEBUG "Enable imgui debug" ON)
cmake_dependent_option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" "${NOT_MINGW}" "WIN32;CMAKE_SIZEOF_VOID_P EQUAL 4" OFF)
cmake_dependent_option(ISLE_MINIWIN "Use miniwin" ON "NOT ISLE_USE_DX5" OFF)
cmake_dependent_option(ISLE_BUILD_CONFIG "Build CONFIG.EXE application" ON "MSVC OR ISLE_MINIWIN" OFF)
cmake_dependent_option(ISLE_BUILD_CONFIG "Build CONFIG.EXE application" ON "MSVC OR ISLE_MINIWIN;NOT VITA" OFF)
cmake_dependent_option(ISLE_COMPILE_SHADERS "Compile shaders" ON "SDL_SHADERCROSS_BIN;TARGET Python3::Interpreter" OFF)
option(CMAKE_POSITION_INDEPENDENT_CODE "Build with -fPIC" ON)
option(ENABLE_CLANG_TIDY "Enable clang-tidy")
@ -43,6 +43,7 @@ option(DOWNLOAD_DEPENDENCIES "Download dependencies" ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" CACHE PATH "Directory where to put executables and dll")
set(ISLE_EMSCRIPTEN_HOST "" CACHE STRING "Host URL for Emscripten streaming (e.g., https://test.com)")
cmake_dependent_option(BUILD_SHARED_LIBS "Build lego1 as a shared library" ON "NOT EMSCRIPTEN" OFF)
set(LIBRARY_TYPE "SHARED")
message(STATUS "Isle app: ${ISLE_BUILD_APP}")
message(STATUS "Config app: ${ISLE_BUILD_CONFIG}")
@ -51,7 +52,42 @@ message(STATUS "Internal miniwin: ${ISLE_MINIWIN}")
message(STATUS "Isle debugging: ${ISLE_DEBUG}")
message(STATUS "Compile shaders: ${ISLE_COMPILE_SHADERS}")
if (DOWNLOAD_DEPENDENCIES)
macro(fetch_iniparser)
FetchContent_Declare(
iniparser
GIT_REPOSITORY "https://gitlab.com/iniparser/iniparser.git"
GIT_TAG "main"
EXCLUDE_FROM_ALL
)
block()
set(BUILD_DOCS off)
set(BUILD_SHARED_LIBS off)
FetchContent_MakeAvailable(iniparser)
endblock()
endmacro()
if(VITA)
set(LIBRARY_TYPE "STATIC")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules")
include(cmake/modules/pvr_psp2.cmake)
FetchContent_Declare(
SDL3
GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git"
GIT_TAG "main"
EXCLUDE_FROM_ALL
)
block()
set(VIDEO_VITA_PVR ON)
get_target_property(PVR_INCLUDES GLESv2 INTERFACE_INCLUDE_DIRECTORIES)
list(APPEND CMAKE_REQUIRED_INCLUDES ${PVR_INCLUDES})
FetchContent_MakeAvailable(SDL3)
target_include_directories(SDL3-static PRIVATE ${PVR_INCLUDES})
endblock()
fetch_iniparser()
elseif (DOWNLOAD_DEPENDENCIES)
# FetchContent downloads and configures dependencies
message(STATUS "Fetching SDL3 and iniparser. This might take a while...")
include(FetchContent)
@ -63,17 +99,7 @@ if (DOWNLOAD_DEPENDENCIES)
)
FetchContent_MakeAvailable(SDL3)
FetchContent_Declare(
iniparser
GIT_REPOSITORY "https://gitlab.com/iniparser/iniparser.git"
GIT_TAG "main"
EXCLUDE_FROM_ALL
)
block()
set(BUILD_DOCS off)
set(BUILD_SHARED_LIBS off)
FetchContent_MakeAvailable(iniparser)
endblock()
fetch_iniparser()
else()
# find_package looks for already-installed system packages.
# Configure with `-DCMAKE_PREFIX_PATH="/path/to/package1;/path/to/package2"`
@ -141,7 +167,7 @@ target_link_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdpar
add_library(Vec::Vec INTERFACE IMPORTED)
target_include_directories(Vec::Vec INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/vec")
add_library(lego1
add_library(lego1 ${LIBRARY_TYPE}
LEGO1/main.cpp
)
target_precompile_headers(lego1 PRIVATE "LEGO1/lego1_pch.h")
@ -644,6 +670,23 @@ endif()
set(CPACK_PACKAGE_DIRECTORY "dist")
set(CPACK_PACKAGE_FILE_NAME "isle-${PROJECT_VERSION}-${ISLE_PACKAGE_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
if(VITA)
include("${VITASDK}/share/vita.cmake" REQUIRED)
target_link_libraries(lego1 PRIVATE GLESv2)
set(ISLE_PACKAGE_NAME "vita-isle")
set(VITA_APP_NAME "Hello World")
set(VITA_TITLEID "VSDK00006")
set(VITA_VERSION "01.00")
vita_create_self(isle.self isle)
vita_create_vpk(isle.vpk ${VITA_TITLEID} isle.self
VERSION ${VITA_VERSION}
NAME ${VITA_APP_NAME}
)
endif()
if(MSVC)
set(CPACK_GENERATOR ZIP)
else()

41
CMakePresets.json Normal file
View File

@ -0,0 +1,41 @@
{
"version": 5,
"cmakeMinimumRequired": {
"major": 3,
"minor": 22,
"patch": 0
},
"configurePresets": [
{
"name": "release",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "debug",
"inherits": ["release"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "vita",
"inherits": ["release"],
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VITASDK}/share/vita.toolchain.cmake"
}
},
{
"name": "vita-debug",
"inherits": ["debug"],
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VITASDK}/share/vita.toolchain.cmake"
}
}
]
}

View File

@ -0,0 +1,53 @@
cmake_minimum_required(VERSION 3.21)
include(FetchContent)
# headers
FetchContent_Declare(
PVR_PSP2
URL https://github.com/GrapheneCt/PVR_PSP2/archive/refs/tags/v3.9.tar.gz
SOURCE_SUBDIR .
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
)
FetchContent_MakeAvailable(PVR_PSP2)
set(PVR_PSP2_SOURCE_DIR ${pvr_psp2_SOURCE_DIR})
set(PVR_PSP2_BINARY_DIR ${pvr_psp2_BINARY_DIR})
# stubs
file(DOWNLOAD
https://github.com/GrapheneCt/PVR_PSP2/releases/download/v3.9/vitasdk_stubs.zip
${PVR_PSP2_BINARY_DIR}/vitasdk_stubs.zip
EXPECTED_HASH SHA256=7ee2498b58cb97871fcb0e3e134ce1045acf2c22ce4873b1844a391b5da4fe47
)
# suprxs
file(DOWNLOAD
https://github.com/GrapheneCt/PVR_PSP2/releases/download/v3.9/PSVita_Release.zip
${PVR_PSP2_BINARY_DIR}/PSVita_Release.zip
EXPECTED_HASH SHA256=ed69be89f21c4894e8009a8c3567c89b1778c8db0beb3c2f4ea134adab4c494f
)
# extract
file(MAKE_DIRECTORY ${PVR_PSP2_BINARY_DIR}/extracted)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${PVR_PSP2_BINARY_DIR}/vitasdk_stubs.zip
WORKING_DIRECTORY ${PVR_PSP2_BINARY_DIR}/extracted)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${PVR_PSP2_BINARY_DIR}/PSVita_Release.zip
WORKING_DIRECTORY ${PVR_PSP2_BINARY_DIR}/extracted)
# create library
add_library(GLESv2 INTERFACE)
target_include_directories(GLESv2 INTERFACE
${PVR_PSP2_SOURCE_DIR}/include
)
target_link_directories(GLESv2 INTERFACE
${PVR_PSP2_BINARY_DIR}/extracted/libGLESv2_stub_vitasdk.a/
${PVR_PSP2_BINARY_DIR}/extracted/libgpu_es4_ext_stub_vitasdk.a/
${PVR_PSP2_BINARY_DIR}/extracted/libIMGEGL_stub_vitasdk.a/
)
target_link_libraries(GLESv2 INTERFACE
libGLESv2_stub_weak
libgpu_es4_ext_stub_weak
libIMGEGL_stub_weak
)

View File

@ -38,12 +38,16 @@ else()
message(STATUS "🧩 OpenGL 1.x support not enabled — needs OpenGL and GLEW")
endif()
find_library(OPENGL_ES2_LIBRARY NAMES GLESv2)
if(TARGET GLESv2)
set(OPENGL_ES2_LIBRARY GLESv2)
else()
find_library(OPENGL_ES2_LIBRARY NAMES GLESv2)
endif()
if(OPENGL_ES2_LIBRARY)
message(STATUS "Found OpenGL: enabling OpenGL ES 2.x renderer")
target_sources(miniwin PRIVATE src/d3drm/backends/opengles2/renderer.cpp)
target_compile_definitions(miniwin PRIVATE USE_OPENGLES2)
target_link_libraries(miniwin PRIVATE OpenGL::GL)
target_link_libraries(miniwin PRIVATE ${OPENGL_ES2_LIBRARY})
else()
message(STATUS "🧩 OpenGL ES 2.x support not enabled")
endif()