cmake_minimum_required(VERSION 3.20) project(NXST LANGUAGES CXX VERSION 0.1.0 ) # ── C++ standard and flags ──────────────────────────────────────────────────── # Arch/linker/libnx flags are already injected by the Switch.cmake toolchain. set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) # gnu++17 add_compile_options( -fno-rtti -fno-exceptions -O2 -g -D_GNU_SOURCE=1 ) # Export compilation database (enables clangd / clang-tidy on the host) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # ── Sources ─────────────────────────────────────────────────────────────────── file(GLOB_RECURSE NXST_SOURCES src/app/*.cpp src/domain/*.cpp src/infra/net/*.cpp src/infra/fs/*.cpp src/infra/sys/*.cpp src/service/*.cpp src/ui/*.cpp ) file(GLOB_RECURSE PLUTONIUM_SOURCES lib/Plutonium/source/*.cpp ) add_executable(NXST ${NXST_SOURCES} ${PLUTONIUM_SOURCES}) # ── Include paths ───────────────────────────────────────────────────────────── target_include_directories(NXST PRIVATE include lib/Plutonium/include ) # ── pkg-config (uses aarch64-none-elf-pkg-config set by Switch.cmake) ───────── find_package(PkgConfig REQUIRED) set(NXST_PKG_MODULES SDL2_ttf SDL2_gfx SDL2_image SDL2_mixer freetype2 harfbuzz minizip libpng libjpeg libwebp glesv2 egl glapi zlib ) pkg_check_modules(PORTLIBS REQUIRED IMPORTED_TARGET ${NXST_PKG_MODULES}) target_include_directories(NXST PRIVATE ${PORTLIBS_INCLUDE_DIRS}) # ── Link libraries ──────────────────────────────────────────────────────────── # ── Plutonium static library ────────────────────────────────────────────────── set(LIBPU_A ${CMAKE_SOURCE_DIR}/lib/Plutonium/lib/libpu.a) add_custom_command( OUTPUT ${LIBPU_A} COMMAND make -C ${CMAKE_SOURCE_DIR}/lib/Plutonium -j COMMENT "Building Plutonium (libpu.a)" ) add_custom_target(plutonium DEPENDS ${LIBPU_A}) add_dependencies(NXST plutonium) # ── Link libraries ──────────────────────────────────────────────────────────── # Order matters for static linking: put most dependent libs first. # libpu.a first (contains C wrappers not in Plutonium source). # drm_nouveau, harfbuzz, freetype, z appended explicitly after pkg-config output # to fix the freetype→harfbuzz static link order (see build notes from libnx update). target_link_libraries(NXST PRIVATE ${LIBPU_A} PkgConfig::PORTLIBS drm_nouveau harfbuzz freetype z ) # ── NACP + NRO ──────────────────────────────────────────────────────────────── set(NXST_NACP ${CMAKE_CURRENT_BINARY_DIR}/NXST.nacp) nx_generate_nacp( OUTPUT ${NXST_NACP} NAME "NXST" AUTHOR "DragonSpirit" VERSION "04.26.2026" ) nx_create_nro(NXST OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/NXST.nro ICON ${CMAKE_SOURCE_DIR}/icon.png NACP ${NXST_NACP} ) # ── Convenience targets ──────────────────────────────────────────────────────── find_program(NXLINK_EXE nxlink HINTS ${DEVKITPRO}/tools/bin) if(NXLINK_EXE) add_custom_target(send COMMAND ${NXLINK_EXE} ${CMAKE_CURRENT_BINARY_DIR}/NXST.nro DEPENDS NXST_nro COMMENT "Sending NXST.nro via nxlink" ) add_custom_target(debug COMMAND ${NXLINK_EXE} -s ${CMAKE_CURRENT_BINARY_DIR}/NXST.nro DEPENDS NXST_nro COMMENT "Sending NXST.nro with stdio bridge" ) endif()