Files
nextcloud-share/.plans/DockerForVitaSDK.md

12 KiB
Raw Blame History

Docker Build Environment Plan for VitaSDK (PS Vita)

Status: Planning / Research
Last Updated: 2026-01-27


Overview

PS Vita homebrew development uses VitaSDK, a completely separate toolchain from devkitPro. This requires a different container approach but follows similar principles: extend official base images and install all available packages for a complete development environment.

Key Differences from devkitPro:

  • Separate ecosystem with its own toolchain (vita-toolchain)
  • Different package manager: vdpm (shell-based) instead of dkp-pacman
  • Different build system: CMake with Vita-specific macros
  • Official Docker images: vitasdk/vitasdk (not on devkitPro organization)
  • Output formats: SELF (executable), VPK (installable package archive)

PS Vita Platform Capabilities

Hardware Features

  • Networking: Built-in Wi-Fi (802.11 b/g/n)
    • Optional 3G modem (discontinued in 2013, limited availability)
    • Bluetooth 2.1+EDR
  • Screenshots: Native system-level screenshot capability
  • Cameras: Dual 0.3MP cameras (front and back)
    • VGA resolution (640×480 @ 60fps)
    • Can capture photos and videos
  • Display: 5-inch OLED touchscreen (original) or LCD (slim)
  • CPU: Quad-core ARM Cortex-A9 MPCore
  • GPU: Quad-core PowerVR SGX543MP4+
  • RAM: 512 MB system RAM, 128 MB VRAM

Project Fit Assessment

Networking: Yes - Wi-Fi built-in, suitable for Nextcloud uploads
Screenshots: Yes - native system capability for game captures
Cameras: Yes - can take photos with built-in cameras
Homebrew Scene: Active community with VitaSDK
Container Support: Official Docker images available

Priority: HIGH - Meets all requirements (networking + screenshots + cameras)


VitaSDK Ecosystem

Official Resources

Toolchain Components

  • vita-toolchain: ARM-based cross-compiler (MIT license)
  • newlib: PS Vita port of C library (GPL-2.0)
  • vita-headers: System headers (233 stars, 94 forks)
  • buildscripts: CMake-based build system (65 stars)
  • taihen: Plugin framework
  • libvita2d: 2D graphics library

Package Management

  • Tool: vdpm (Vita SDK Package Manager)
  • Type: Shell-based installer scripts
  • Repository: https://github.com/vitasdk/packages
  • Installation: Bootstrap with ./install-all.sh from vdpm repo
  • Build Format: vita-makepkg (similar to Arch Linux makepkg)

Build System

  • Primary: CMake with Vita-specific macros
    • vita_create_self() - Creates SELF executable
    • vita_create_vpk() - Creates VPK package
  • Output Formats:
    • SELF: Signed ELF executable format
    • VPK: Installable package archive (SELF + data + metadata)

Official Docker Images

Available on Docker Hub

# Search results show multiple official images
docker.io/vitasdk/vitasdk              # Main official image
docker.io/vitasdk/vitasdk-softfp       # Soft float variant
docker.io/vitasdk/buildscripts         # Build tools base image

Base Image Structure

From github.com/vitasdk/docker:

Main Dockerfile:

  • Base: vitasdk/buildscripts:latest
  • Installs: git, curl, bash, make, pkgconf, cmake, sudo
  • Uses multi-stage build to clone and install vdpm
  • Installs all packages via vdpm/install-all.sh
  • Environment: VITASDK=/usr/local/vitasdk

Non-root Dockerfile:

  • Same base, but creates unprivileged user
  • Adds sudo access for package installation
  • Better for local development (matches host UID)

Container Strategy

Approach

Unlike devkitPro platforms, VitaSDK already provides comprehensive official images with all packages pre-installed. Our strategy should be:

Option 1: Use Official Images Directly (Recommended)

  • Use vitasdk/vitasdk:latest as-is
  • No custom Dockerfile needed
  • Pull official image when needed
  • Simplest approach, maintained by VitaSDK team

Option 2: Extend Official Images (If customization needed)

  • Base: FROM vitasdk/vitasdk:latest
  • Add project-specific tools or scripts
  • Pin to specific tag for reproducibility
  • Only if we need additional packages

Tagging Strategy

If we publish custom images:

  • Format: tomusan/vitasdk-vita:<date> or tomusan/vitasdk-vita:<date>-v<semver>
  • Example: tomusan/vitasdk-vita:20251231 or tomusan/vitasdk-vita:20251231-v1.0.0
  • Follow same conventions as devkitPro containers

Package Ecosystem Research

Known Libraries (from vdpm)

  • zlib: Compression library
  • freetype: Font rendering
  • libvita2d: 2D graphics library (Vita-specific)
  • taihen: Plugin framework (Vita-specific)

Additional Research Needed

  • Query vdpm package list for available networking libraries
  • Check for curl, libcurl support
  • Verify SSL/TLS libraries (mbedtls, openssl, etc.)
  • Check for image format libraries (PNG, JPEG)
  • Verify XML/JSON parsing libraries
  • Document complete package list similar to devkitPro research

How to Query Packages

# Run official container and list packages
podman run --rm vitasdk/vitasdk:latest bash -c "cd /usr/local/vitasdk && find . -name '*.a' -o -name '*.so'"

# Or check vdpm repository
# Clone https://github.com/vitasdk/packages and inspect package definitions

Hardware Requirements

Hacked Console Required

PS Vita homebrew requires modified firmware:

  • HENkaku: Firmware 3.60
  • h-encore: Firmware 3.65-3.68
  • Trinity: Firmware 3.69-3.70

This is similar to 3DS requiring custom firmware (CFW). Not a blocker for development, but users need hacked consoles to run homebrew.


Implementation Plan

Phase 1: Research & Validation

  • Test official vitasdk/vitasdk image locally
  • Create simple "Hello World" program
  • Build VPK package and test on hardware/emulator
  • Document build process
  • Query complete package list from vdpm
  • Verify networking library availability (curl, SSL/TLS)

Phase 2: Integration Planning

  • Determine if custom Dockerfile is needed (likely not)
  • Create build scripts for Vita platform
    • scripts/build-vita.sh - Build project using container
    • scripts/container-shell-vita.sh - Interactive development shell
  • Update main scripts/build-container.sh to handle VitaSDK
  • Document Vita-specific build flags and configuration

Phase 3: Project Integration

  • Create Vita source directory structure
  • Implement Nextcloud client for Vita
  • Test screenshot upload functionality
  • Test camera photo upload functionality
  • Integrate with main project build system

Platform Priority Assessment

Priority: HIGH

Justification:

  • Full networking support (Wi-Fi built-in)
  • Native screenshot capability for game captures
  • Dual cameras for photo capture
  • Active homebrew community and toolchain
  • Official Docker images available
  • Similar form factor to 3DS (handheld gaming device)
  • Fits project goals perfectly

Recommendation: Add PS Vita alongside 3DS, Switch, and Wii U as HIGH priority platform.


Differences from devkitPro Platforms

Aspect devkitPro VitaSDK
Organization devkitPro vita-dev (separate)
Toolchain devkitARM/A64/PPC vita-toolchain (ARM)
Package Manager dkp-pacman (Arch-style) vdpm (shell scripts)
Build System Native makefiles + CMake CMake with Vita macros
Docker Hub devkitpro/* vitasdk/*
Package Format .pkg.tar.xz vita-makepkg scripts
Output Format .elf, .nro, .rpx .self, .vpk
Install Path /opt/devkitpro /usr/local/vitasdk

Container Usage Examples

Using Official Image Directly

# Pull official image
podman pull vitasdk/vitasdk:latest

# Build project
podman run --rm -v .:/project:z -w /project/vita \
  vitasdk/vitasdk:latest \
  cmake -B build && cmake --build build

# Interactive shell for development
podman run --rm -it -v .:/project:z -w /project \
  vitasdk/vitasdk:latest \
  bash

If Custom Image Needed

# vita.Dockerfile
FROM vitasdk/vitasdk:latest

# Add any project-specific tools
RUN apk add --no-cache \
    vim \
    tree \
    htop

# Set working directory
WORKDIR /project

Community & Support

Official Channels

  • Discord: Active VitaSDK community server
  • Matrix: Bridge to Discord
  • IRC: #vitasdk on libera.chat
  • Forums: Various homebrew forums
  • VitaShell: File manager (reference for file operations)
  • Adrenaline: PSP emulator (advanced homebrew example)
  • RetroArch: Multi-emulator (networking reference)
  • Various homebrew games and apps using VitaSDK

Hardware Specifications

Component Specification
CPU Quad-core ARM Cortex-A9 MPCore
GPU Quad-core PowerVR SGX543MP4+
RAM 512 MB + 128 MB VRAM
Display 5" OLED/LCD touchscreen, 960×544 (qHD)
Storage Proprietary memory cards (4-64 GB)
Cameras Front/back 0.3MP (VGA @ 60fps)
Connectivity Wi-Fi b/g/n, Bluetooth 2.1+EDR, (3G optional)
Battery 2210 mAh (3-5 hours gameplay)
Input Touchscreen, rear touchpad, dual analog sticks, buttons, Sixaxis motion

References

Official Documentation

Docker Images

Hardware Information

Community Resources

  • VitaSDK Discord Server - Active developer community
  • /r/vitahacks - Reddit community

Next Steps

When ready to implement PS Vita support:

  1. Test Official Image:

    podman pull vitasdk/vitasdk:latest
    podman run --rm -it vitasdk/vitasdk:latest bash
    
  2. Create Hello World:

    • Simple CMakeLists.txt
    • Basic main.c with vita2d graphics
    • Build VPK package
  3. Research Networking Libraries:

    • Query vdpm for available packages
    • Test curl/libcurl availability
    • Verify SSL/TLS support
  4. Determine Custom Dockerfile Need:

    • If official image has everything → use directly
    • If missing tools → create custom Dockerfile extending official image
  5. Update Main Plan:

    • Add PS Vita to DockerForDevkitARM.md platform summary
    • Note it uses separate VitaSDK ecosystem
    • Include in Phase 3 implementation alongside Wii U

Notes

  • VitaSDK is completely independent from devkitPro - different organization, different toolchain
  • Official images already include most/all packages via vdpm install-all
  • May not need custom Dockerfile at all - official image might be sufficient
  • PS Vita was discontinued in 2019, but homebrew scene remains active
  • Estimated 15-16 million units sold worldwide (smaller than 3DS but larger than Wii U)
  • Active indie game development continues as of 2026