feat: Add Vita SDK integration with CMake support and update development scripts

This commit is contained in:
2026-01-05 18:08:43 +00:00
parent fbd3600875
commit 7bf0efffcb
5 changed files with 81 additions and 7 deletions

View File

@@ -1,4 +1,11 @@
cmake_minimum_required(VERSION 3.24)
option(ENABLE_VITA "Enable Vita SDK integration" OFF)
if(ENABLE_VITA)
if(NOT DEFINED ENV{VITASDK})
message(FATAL_ERROR "VITASDK environment variable must be set when ENABLE_VITA is ON")
endif()
set(CMAKE_TOOLCHAIN_FILE "$ENV{VITASDK}/share/vita.toolchain.cmake" CACHE FILEPATH "Vita SDK toolchain" FORCE)
endif()
if(CMAKE_GENERATOR MATCHES "Ninja")
if(DEFINED CMAKE_GENERATOR_PLATFORM)
set(CMAKE_GENERATOR_PLATFORM "" CACHE STRING "" FORCE)
@@ -50,6 +57,11 @@ if(ENABLE_CLANG_TIDY)
message(WARNING "clang-tidy requested but not found on the PATH; disabling lint step")
endif()
endif()
if(ENABLE_VITA)
include("$ENV{VITASDK}/share/vita.cmake" REQUIRED)
set(VITA_APP_NAME "SDL3App")
set(VITA_TITLEID "ABCD00001")
endif()
option(BUILD_SDL3_APP "Build the SDL3 Vulkan demo" ON)
set(SDL_VERSION "SDL3" CACHE STRING "SDL version to use: SDL3 or sdl")
set_property(CACHE SDL_VERSION PROPERTY STRINGS "SDL3" "sdl")

View File

@@ -3,6 +3,18 @@
"vendor": {
"conan": {}
},
"configurePresets": [
{
"name": "vita-release",
"inherits": ["conan-release"],
"cacheVariables": {
"ENABLE_VITA": "ON"
},
"environment": {
"VITASDK": "/home/rewrich/vita-toolchain"
}
}
],
"include": [
"build/build/Release/generators/CMakePresets.json"
]

View File

@@ -18,6 +18,16 @@ class SDL3CppConan(ConanFile):
def layout(self):
cmake_layout(self)
def generate(self):
from conan.tools.cmake import CMakeToolchain
tc = CMakeToolchain(self)
if self.settings.os == "Vita":
import os
vitasdk = os.environ.get("VITASDK")
if vitasdk:
tc.toolchain_file = f"{vitasdk}/share/vita.toolchain.cmake"
tc.generate()
def requirements(self):
self.requires("lua/5.4.8")
self.requires("sdl/3.2.20")

13
profiles/vita Normal file
View File

@@ -0,0 +1,13 @@
[settings]
os=Vita
arch=armv7
compiler=gcc
compiler.version=9
compiler.libcxx=libstdc++11
build_type=Release
[tool_requires]
# Vita SDK isn't in Conan; handle separately
[conf]
tools.cmake.cmaketoolchain:generator=Ninja

View File

@@ -180,6 +180,13 @@ def dependencies(args: argparse.Namespace) -> None:
def configure(args: argparse.Namespace) -> None:
"""Configure a CMake project based on the chosen generator and options."""
if args.preset:
cmake_args = ["cmake", "--preset", args.preset]
cmake_extra_args = _strip_leading_double_dash(args.cmake_args)
if cmake_extra_args:
cmake_args.extend(cmake_extra_args)
run_argvs([cmake_args], args.dry_run)
return
generator = args.generator or DEFAULT_GENERATOR
build_dir = _as_build_dir(
args.build_dir, GENERATOR_DEFAULT_DIR.get(generator, "build")
@@ -499,6 +506,11 @@ def gui(args: argparse.Namespace) -> None:
layout = QFormLayout(self)
self.preset_combo = QComboBox()
self.preset_combo.addItems(["default", "vita-release"])
self.preset_combo.setCurrentText("default")
layout.addRow("Preset:", self.preset_combo)
self.generator_combo = QComboBox()
self.generator_combo.addItems(["ninja", "ninja-msvc", "vs"])
self.generator_combo.setCurrentText(DEFAULT_GENERATOR)
@@ -592,6 +604,7 @@ def gui(args: argparse.Namespace) -> None:
self.current_game = None
# Build settings
self.preset = "default"
self.generator = DEFAULT_GENERATOR
self.build_type = "Release"
self.target = "sdl3_app"
@@ -1115,15 +1128,17 @@ def gui(args: argparse.Namespace) -> None:
def show_settings(self):
"""Show build settings dialog"""
dialog = BuildSettingsDialog(self)
dialog.preset_combo.setCurrentText(self.preset)
dialog.generator_combo.setCurrentText(self.generator)
dialog.build_type_combo.setCurrentText(self.build_type)
dialog.target_combo.setCurrentText(self.target)
if dialog.exec() == QDialog.DialogCode.Accepted:
self.preset = dialog.preset_combo.currentText()
self.generator = dialog.generator_combo.currentText()
self.build_type = dialog.build_type_combo.currentText()
self.target = dialog.target_combo.currentText()
self.log(f"Settings updated: Generator={self.generator}, Build Type={self.build_type}, Target={self.target}")
self.log(f"Settings updated: Preset={self.preset}, Generator={self.generator}, Build Type={self.build_type}, Target={self.target}")
def show_new_project_dialog(self):
"""Show new project creation dialog"""
@@ -1609,20 +1624,28 @@ return {{
def run_dependencies(self):
"""Run conan dependencies installation"""
cmd = [sys.executable, __file__, "dependencies"]
if self.preset == "vita-release":
cmd.extend(["--conan-install-args", "--profile", "profiles/vita"])
self.run_command(cmd)
def run_configure(self):
"""Run CMake configuration"""
cmd = [
sys.executable, __file__, "configure",
"--generator", self.generator,
"--build-type", self.build_type
]
cmd = [sys.executable, __file__, "configure"]
if self.preset != "default":
cmd.extend(["--preset", self.preset])
else:
cmd.extend([
"--generator", self.generator,
"--build-type", self.build_type
])
self.run_command(cmd)
def run_build(self):
"""Run build command"""
build_dir = GENERATOR_DEFAULT_DIR.get(self.generator, DEFAULT_BUILD_DIR)
if self.preset != "default":
build_dir = f"build-{self.preset.split('-')[0]}" # e.g., build-vita
else:
build_dir = GENERATOR_DEFAULT_DIR.get(self.generator, DEFAULT_BUILD_DIR)
cmd = [
sys.executable, __file__, "build",
"--build-dir", build_dir,
@@ -1662,6 +1685,10 @@ def main() -> int:
)
deps.set_defaults(func=dependencies)
conf = subparsers.add_parser("configure", help="configure CMake project")
conf.add_argument(
"--preset",
help="use a CMake preset instead of manual configuration",
)
conf.add_argument(
"--generator",
choices=["vs", "ninja", "ninja-msvc"],