Merge pull request #73 from AGraber/nx-new

Add Nintendo Switch support through CMake
This commit is contained in:
aap 2021-06-22 12:50:59 +02:00 committed by GitHub
commit 6f5e6fe4e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 160 additions and 10 deletions

View File

@ -62,7 +62,7 @@ jobs:
conan export cmake/ps2toolchain ps2dev-cmaketoolchain/master@ conan export cmake/ps2toolchain ps2dev-cmaketoolchain/master@
- name: "Download/build dependencies (conan install)" - name: "Download/build dependencies (conan install)"
run: | run: |
conan install ${{ github.workspace }} librw/master@ -if build -o platform=${{ matrix.platform }} -o gl3_gfxlib=${{ matrix.gl3_gfxlib}} --build missing -pr:h ./host_profile -pr:b default conan install ${{ github.workspace }} librw/master@ -if build -o librw:platform=${{ matrix.platform }} -o librw:gl3_gfxlib=${{ matrix.gl3_gfxlib}} --build missing -pr:h ./host_profile -pr:b default
env: env:
CONAN_SYSREQUIRES_MODE: enabled CONAN_SYSREQUIRES_MODE: enabled
- name: "Build librw (conan build)" - name: "Build librw (conan build)"

26
.github/workflows/build-switch.yml vendored Normal file
View File

@ -0,0 +1,26 @@
name: Build for Nintendo Switch using CMake provided by devkitPro
on:
pull_request:
push:
release:
types: published
jobs:
build-nintendo-switch:
runs-on: ubuntu-latest
container: devkitpro/devkita64:latest
steps:
- uses: actions/checkout@v2
- name: "Build files"
run: |
/opt/devkitpro/portlibs/switch/bin/aarch64-none-elf-cmake -S. -Bbuild .. -DLIBRW_PLATFORM=GL3 -DLIBRW_GL3_GFXLIB=GLFW -DLIBRW_INSTALL=True
cmake --build build --parallel
- name: "Create binary package (cpack)"
working-directory: ./build
run: |
cpack
- name: "Archive binary package (github artifacts)"
uses: actions/upload-artifact@v2
with:
name: "switch-gl3"
path: build/*.tar.xz
if-no-files-found: error

View File

@ -1,12 +1,23 @@
cmake_minimum_required(VERSION 3.8) cmake_minimum_required(VERSION 3.8)
project(librw C CXX) project(librw
VERSION 0.0.1
LANGUAGES C CXX
)
set(librw_AUTHOR aap)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
if(WIN32) if(WIN32)
set(LIBRW_PLATFORMS "NULL" "GL3" "D3D9") set(LIBRW_PLATFORMS "NULL" "GL3" "D3D9")
set(LIBRW_PLATFORM_GL3_REQUIRES_OPENGL ON)
elseif(NINTENDO_SWITCH)
set(LIBRW_PLATFORMS "NULL" "GL3")
set(LIBRW_PLATFORM_GL3_REQUIRES_OPENGL OFF)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/nxtoolchain")
include(CheckNXFunctions)
else() else()
set(LIBRW_PLATFORMS "NULL" "GL3" "PS2") set(LIBRW_PLATFORMS "NULL" "GL3" "PS2")
set(LIBRW_PLATFORM_GL3_REQUIRES_OPENGL ON)
endif() endif()
set(LIBRW_PLATFORM "NULL" CACHE STRING "Platform") set(LIBRW_PLATFORM "NULL" CACHE STRING "Platform")
set_property(CACHE LIBRW_PLATFORM PROPERTY STRINGS ${LIBRW_PLATFORMS}) set_property(CACHE LIBRW_PLATFORM PROPERTY STRINGS ${LIBRW_PLATFORMS})
@ -60,6 +71,19 @@ if(LIBRW_INSTALL)
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
) )
if(LIBRW_GL3_GFXLIB STREQUAL "SDL2")
install(
FILES "${CMAKE_CURRENT_LIST_DIR}/cmake/FindSDL2.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
)
endif()
if(NINTENDO_SWITCH)
install(
FILES "${CMAKE_CURRENT_LIST_DIR}/cmake/nxtoolchain/FindNXGL.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake"
)
endif()
string(REPLACE "." ";" cmake_c_compiler_version_list "${CMAKE_C_COMPILER_VERSION}") string(REPLACE "." ";" cmake_c_compiler_version_list "${CMAKE_C_COMPILER_VERSION}")
list(GET cmake_c_compiler_version_list 0 cmake_c_compiler_version_major) list(GET cmake_c_compiler_version_list 0 cmake_c_compiler_version_major)
@ -100,6 +124,8 @@ if(LIBRW_INSTALL)
set(os "-apple") set(os "-apple")
elseif(UNIX) elseif(UNIX)
set(os "-linux") set(os "-linux")
elseif(NINTENDO_SWITCH)
set(os "-switch")
else() else()
set(compiler "-UNK") set(compiler "-UNK")
message(WARNING "Unknown os. Created cpack package will be wrong. (override using cpack -P)") message(WARNING "Unknown os. Created cpack package will be wrong. (override using cpack -P)")

View File

@ -3,13 +3,19 @@ include("${CMAKE_CURRENT_LIST_DIR}/librw-targets.cmake")
set(LIBRW_PLATFORM "@LIBRW_PLATFORM@") set(LIBRW_PLATFORM "@LIBRW_PLATFORM@")
set(LIBRW_PLATFORMS "@LIBRW_PLATFORMS@") set(LIBRW_PLATFORMS "@LIBRW_PLATFORMS@")
set(LIBRW_PLATFORM_@LIBRW_PLATFORM@ ON) set(LIBRW_PLATFORM_@LIBRW_PLATFORM@ ON)
set(LIBRW_PLATFORM_GL3_REQUIRES_OPENGL @LIBRW_PLATFORM_GL3_REQUIRES_OPENGL@)
if(LIBRW_PLATFORM_GL3) if(LIBRW_PLATFORM_GL3)
set(LIBRW_GL3_GFXLIB "@LIBRW_GL3_GFXLIB@") set(LIBRW_GL3_GFXLIB "@LIBRW_GL3_GFXLIB@")
set(LIBRW_GL3_GFXLIBS "@LIBRW_GL3_GFXLIBS@") set(LIBRW_GL3_GFXLIBS "@LIBRW_GL3_GFXLIBS@")
set(OpenGL_GL_PREFERENCE GLVND) if(LIBRW_PLATFORM_GL3_REQUIRES_OPENGL)
find_package(OpenGL REQUIRED) set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
endif()
if(NINTENDO_SWITCH)
find_package(NXGL REQUIRED)
endif()
if(LIBRW_GL3_GFXLIB STREQUAL "GLFW") if(LIBRW_GL3_GFXLIB STREQUAL "GLFW")
find_package(glfw3 REQUIRED) find_package(glfw3 REQUIRED)
elseif(LIBRW_GL3_GFXLIB STREQUAL "SDL2") elseif(LIBRW_GL3_GFXLIB STREQUAL "SDL2")

View File

@ -0,0 +1,7 @@
if(NOT COMMAND nx_generate_nacp)
message(FATAL_ERROR "The `nx_generate_nacp` cmake command is not available. Please use an appropriate Nintendo Switch toolchain.")
endif()
if(NOT COMMAND nx_create_nro)
message(FATAL_ERROR "The `nx_create_nro` cmake command is not available. Please use an appropriate Nintendo Switch toolchain.")
endif()

View File

@ -0,0 +1,38 @@
find_library(NXGL_EGL_LIBRARY EGL)
find_library(NXGL_GLAPI_LIBRARY glapi)
find_library(NXGL_DRM_NOUVEAU_LIBRARY drm_nouveau)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(NXGL
REQUIRED_VARS NXGL_EGL_LIBRARY NXGL_GLAPI_LIBRARY NXGL_DRM_NOUVEAU_LIBRARY
)
if(NXGL_FOUND)
if(NOT TARGET NXGL::EGL)
add_library(NXGL::EGL UNKNOWN IMPORTED)
set_target_properties(NXGL::EGL PROPERTIES
IMPORTED_LOCATION "${NXGL_EGL_LIBRARY}"
)
endif()
if(NOT TARGET NXGL::glapi)
add_library(NXGL::glapi UNKNOWN IMPORTED)
set_target_properties(NXGL::glapi PROPERTIES
IMPORTED_LOCATION "${NXGL_GLAPI_LIBRARY}"
)
endif()
if(NOT TARGET NXGL::drm_nouveau)
add_library(NXGL::drm_nouveau UNKNOWN IMPORTED)
set_target_properties(NXGL::drm_nouveau PROPERTIES
IMPORTED_LOCATION "${NXGL_DRM_NOUVEAU_LIBRARY}"
)
endif()
if(NOT TARGET NXGL::OpenGL)
add_library(NXGL::OpenGL INTERFACE IMPORTED)
set_target_properties(NXGL::OpenGL PROPERTIES
INTERFACE_LINK_LIBRARIES "NXGL::EGL;NXGL::glapi;NXGL::drm_nouveau"
)
endif()
endif()

View File

@ -148,13 +148,16 @@ set_target_properties(librw
) )
if(LIBRW_PLATFORM_GL3) if(LIBRW_PLATFORM_GL3)
set(OpenGL_GL_PREFERENCE GLVND) if(LIBRW_PLATFORM_GL3_REQUIRES_OPENGL)
find_package(OpenGL REQUIRED) set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
target_link_libraries(librw
PUBLIC
OpenGL::GL
)
endif()
target_link_libraries(librw
PUBLIC
OpenGL::GL
)
if (LIBRW_GL3_GFXLIB STREQUAL "GLFW") if (LIBRW_GL3_GFXLIB STREQUAL "GLFW")
find_package(glfw3 REQUIRED) find_package(glfw3 REQUIRED)
target_link_libraries(librw target_link_libraries(librw
@ -175,6 +178,14 @@ if(LIBRW_PLATFORM_GL3)
) )
endif() endif()
endif() endif()
if(NINTENDO_SWITCH)
find_package(NXGL REQUIRED)
target_link_libraries(librw
PUBLIC
NXGL::OpenGL
)
endif()
elseif(LIBRW_PLATFORM_D3D9) elseif(LIBRW_PLATFORM_D3D9)
target_link_libraries(librw target_link_libraries(librw
PUBLIC PUBLIC

View File

@ -12,3 +12,21 @@ if(LIBRW_INSTALL)
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
) )
endif() endif()
if(NINTENDO_SWITCH)
nx_generate_nacp(dumprwtree.nacp
NAME "dumprwtree"
AUTHOR "${librw_AUTHOR}"
VERSION "${librw_VERSION}"
)
nx_create_nro(dumprwtree
NACP dumprwtree.nacp
)
if(LIBRW_INSTALL)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dumprwtree.nro"
DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
endif()
endif()

View File

@ -13,3 +13,21 @@ if(LIBRW_INSTALL)
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
) )
endif() endif()
if(NINTENDO_SWITCH)
nx_generate_nacp(imguitest.nacp
NAME "librw imguitest"
AUTHOR "${librw_AUTHOR}"
VERSION "${librw_VERSION}"
)
nx_create_nro(imguitest
NACP imguitest.nacp
)
if(LIBRW_INSTALL)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/imguitest.nro"
DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
endif()
endif()