diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6f4b04c9..60943008 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,6 +46,7 @@ jobs: - { name: 'iOS', os: 'macos-15', generator: 'Xcode', dx5: false, config: false, brew: true, werror: true, clang-tidy: false, cmake-args: '-DCMAKE_SYSTEM_NAME=iOS', ios: true } - { name: 'Emscripten', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, emsdk: true, werror: true, clang-tidy: false, cmake-wrapper: 'emcmake' } - { name: 'Nintendo 3DS', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, n3ds: true, werror: true, clang-tidy: false, container: 'devkitpro/devkitarm:latest', cmake-args: '-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake' } + - { name: 'Nintendo Switch', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, nx: true, werror: true, clang-tidy: false, container: 'devkitpro/devkitarm:latest', cmake-args: '-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake' } - { name: 'Xbox One', os: 'windows-latest', generator: 'Visual Studio 17 2022', dx5: false, config: false, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64', cmake-args: '-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0', xbox-one: true} - { name: 'Android', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, android: true, werror: true, clang-tidy: false,} - { name: 'Vita', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, vita: true, werror: true, clang-tidy: false, cmake-args: '--toolchain /usr/local/vitasdk/share/vita.toolchain.cmake'} @@ -190,7 +191,7 @@ jobs: run: cmake --build build --verbose --config Release - name: Package (CPack) - if: ${{ !matrix.n3ds && !matrix.android && !matrix.vita }} + if: ${{ !matrix.n3ds && !martrix.nx && !matrix.android && !matrix.vita }} run: | cd build success=0 @@ -238,6 +239,13 @@ jobs: mkdir dist mv *.3dsx dist/ mv *.cia dist/ + + - name: Package (Switch) + if: ${{ matrix.nx }} + run: | + cd build + mkdir dist + mv *.nro dist/ - name: Package (Vita) if: ${{ matrix.vita }} @@ -265,6 +273,7 @@ jobs: build/dist/*.AppImage build/dist/*.3dsx build/dist/*.cia + build/dist/*.nro build/dist/*.apk build/dist/*.vpk diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a6a2d58..5f95aa58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,7 +103,6 @@ if (DOWNLOAD_DEPENDENCIES) EXCLUDE_FROM_ALL ) set(CMAKE_DISABLE_PRECOMPILE_HEADERS ON CACHE BOOL "Disable PCH globally" FORCE) - #set(SDL_PLATFORM_SWITCH ON CACHE BOOL "Enable Switch platform backend" FORCE) else() FetchContent_Declare( SDL3 @@ -906,6 +905,39 @@ if(NINTENDO_3DS) endif() install(FILES "$/isle.3dsx" DESTINATION "${CMAKE_INSTALL_BINDIR}") endif() +if(NINTENDO_SWITCH) + find_program(NACPTOOL NAMES nacptool) + find_program(ELF2NRO NAMES elf2nro) + + add_custom_command( + OUTPUT "isle.nacp" + COMMAND "${NACPTOOL}" + --create + "LEGO Island" + "isledecomp/isle-portable" + "${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.0" + "isle.nacp" + VERBATIM + ) + + add_custom_command( + OUTPUT "isle.nro" + COMMAND "${ELF2NRO}" + "$" + "$/isle.nro" + "--icon=${CMAKE_SOURCE_DIR}/packaging/switch/isle.jpg" + "--nacp=${CMAKE_BINARY_DIR}/isle.nacp" + DEPENDS "${CMAKE_SOURCE_DIR}/packaging/switch/isle.jpg" "${CMAKE_BINARY_DIR}/isle.nacp" + VERBATIM + ) + + add_custom_target(switch-nro + ALL + DEPENDS "${CMAKE_BINARY_DIR}/isle.nro" + COMMENT "Build switch NRO from ELF" + ) + +endif() if(WINDOWS_STORE) install( DIRECTORY diff --git a/ISLE/switch/filesys.h b/ISLE/switch/filesys.h index cd7a1fc3..bd953ee7 100644 --- a/ISLE/switch/filesys.h +++ b/ISLE/switch/filesys.h @@ -2,7 +2,6 @@ #define NX_FILESYS_H #include -#include "SDL_dupes.h" #define SDL_GetPathInfo NX_GetPathInfo // Override broken SDL_GetPathInfo bool NX_GetPathInfo(const char *path, SDL_PathInfo *info); diff --git a/packaging/switch/isle.jpg b/packaging/switch/isle.jpg new file mode 100644 index 00000000..ddaf3569 Binary files /dev/null and b/packaging/switch/isle.jpg differ