Files
NXST/CMakeLists.txt
T
DragonSpirit 82df796a4a
CI / Build NRO (push) Successful in 36s
CI / Format check (push) Successful in 48s
CI / Layering check (push) Successful in 1s
build: migrate Plutonium to ExternalProject_Add + IMPORTED target
Replaces add_custom_command/add_custom_target with ExternalProject_Add,
which correctly declares BUILD_BYPRODUCTS for Ninja and propagates include
paths via INTERFACE_INCLUDE_DIRECTORIES on the IMPORTED STATIC target.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 20:57:27 +03:00

118 lines
4.2 KiB
CMake

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
)
add_executable(NXST ${NXST_SOURCES})
# ── Include paths ─────────────────────────────────────────────────────────────
target_include_directories(NXST PRIVATE 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})
# ── Plutonium ─────────────────────────────────────────────────────────────────
include(ExternalProject)
set(LIBPU_A ${CMAKE_SOURCE_DIR}/lib/Plutonium/lib/libpu.a)
ExternalProject_Add(plutonium_ep
SOURCE_DIR ${CMAKE_SOURCE_DIR}/lib/Plutonium
CONFIGURE_COMMAND ""
BUILD_COMMAND make -j -C ${CMAKE_SOURCE_DIR}/lib/Plutonium
INSTALL_COMMAND ""
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS ${LIBPU_A}
)
add_library(plutonium STATIC IMPORTED GLOBAL)
add_dependencies(plutonium plutonium_ep)
set_target_properties(plutonium PROPERTIES
IMPORTED_LOCATION ${LIBPU_A}
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/lib/Plutonium/include
)
# ── Link libraries ────────────────────────────────────────────────────────────
# Order matters for static linking: put most dependent libs first.
# 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
plutonium
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()