summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorcoco875 <59367621+coco875@users.noreply.github.com>2026-07-23 02:02:58 +0200
committerGitHub <noreply@github.com>2026-07-22 18:02:58 -0600
commit4c24ae2bc2294c96a81d296a68b6d404f34358e7 (patch)
tree0a4d1fb0e353e1b14755d1a2c8d2fcc4d4c29b70 /CMakeLists.txt
parent022e0737d598e93429355db66c07be39e974926f (diff)
Refactor cmake (#721)
* some start of refactor * Update SetFlags.cmake * Update SetCmakeVar.cmake * Update SetFlags.cmake * Fix error int-convertion * more refactor * clean up include and source file * fix link of lib * fix a warning * fix include in src/actors * fix include in src/debug * fix include in src/ending * fix include in src/engine/actors * fix include in src/engine/cameras * fix include in src/engine/editor * fix include in src/engine/objects * fix include in src/engine/tracks * fix include in src/port/ui * fix include in src/racing * fix include in src/engine/vehicles * fix include in subfolder of src/engine * fix include in src/engine * fix include in src/enhancements * fix include in src * fix switch * invert common and findlib * Update SetFlags.cmake * clean up some workflow * some splification * Update build.sh * Update Game.h * add header back * Delete test_check.cmake * continue * Update common.cmake
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt891
1 files changed, 200 insertions, 691 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 53ae41d78..883763dfe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,334 +1,113 @@
cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR)
# Set the project version and language
-project(Spaghettify VERSION 1.0.0 LANGUAGES C CXX ASM)
+project(
+ Spaghettify
+ VERSION 1.0.0
+ LANGUAGES C CXX ASM)
include(FetchContent)
-# fmt's consteval format-string checking fails to compile under newer
-# AppleClang (Xcode 16+) with the spdlog/fmt versions in use (both vcpkg's on
-# CI and Torch's bundled copy — see cmake/TorchExternalFixes.cmake for the
-# latter):
-# error: call to consteval function 'fmt::basic_format_string<...>' is not
-# a constant expression
-# Defining FMT_CONSTEVAL as empty falls back to fmt's pre-C++20 constexpr
-# checking, which compiles cleanly with identical runtime behavior. Scoped to
-# AppleClang; other platforms and compilers are untouched.
-# TODO: Temporary hack. Remove this (plus cmake/TorchExternalFixes.cmake and
-# the vcpkg.json fmt/spdlog pins) once the Torch pin is bumped past Torch's
-# spdlog/fmt update. Note the bump also needs matching MK64 loader changes,
-# see the discussion on PR #712.
-if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- add_compile_definitions("FMT_CONSTEVAL=")
-endif()
+# Set Project Version
+include(cmake/GetVersion.cmake)
-set(NATO_PHONETIC_ALPHABET
- "Alfa" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" "Golf" "Hotel"
- "India" "Juliett" "Kilo" "Lima" "Mike" "November" "Oscar" "Papa"
- "Quebec" "Romeo" "Sierra" "Tango" "Uniform" "Victor" "Whiskey"
- "Xray" "Yankee" "Zulu"
-)
-
-# Get the patch version number from the project version
-math(EXPR PATCH_INDEX "${PROJECT_VERSION_PATCH}")
-
-# Use the patch number to select the correct word
-list(GET NATO_PHONETIC_ALPHABET ${PATCH_INDEX} PROJECT_PATCH_WORD)
-
-set(PROJECT_BUILD_NAME "Bolognese ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE)
-set(PROJECT_TEAM "SpaghettiKart Team - HarbourMasters")
-
-execute_process(
- COMMAND git config --global --add safe.directory ${CMAKE_SOURCE_DIR}
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_QUIET
-)
-
-execute_process(
- COMMAND git describe --tags
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_VARIABLE PROJECT_VERSION
- OUTPUT_STRIP_TRAILING_WHITESPACE
-)
-if (DEFINED PROJECT_VERSION AND NOT "${PROJECT_VERSION}" STREQUAL "")
- string(REPLACE "-" ";" PROJECT_VERSION_LIST "${PROJECT_VERSION}")
- list(GET PROJECT_VERSION_LIST 0 PROJECT_VERSION_PATCH)
- string(REPLACE "." ";" PROJECT_VERSION_LIST "${PROJECT_VERSION_PATCH}")
- list(LENGTH PROJECT_VERSION_LIST PROJECT_VERSION_LIST_LENGTH)
- if (${PROJECT_VERSION_LIST_LENGTH} LESS 3)
- set(PROJECT_VERSION_PATCH 0)
- else()
- list(GET PROJECT_VERSION_LIST 2 PROJECT_VERSION_PATCH)
- endif()
-else()
- set(PROJECT_VERSION "Unknown")
- execute_process(
- COMMAND git log --pretty=format:%h -1
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_VARIABLE PROJECT_VERSION_PATCH
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- if (DEFINED PROJECT_VERSION_PATCH AND NOT "${PROJECT_VERSION_PATCH}" STREQUAL "")
- set(PROJECT_VERSION "${PROJECT_VERSION}-${PROJECT_VERSION_PATCH}")
- endif()
- set(PROJECT_VERSION_PATCH 0)
-endif()
+# Set some Cmake variable
+include(cmake/SetCmakeVar.cmake)
-message("Spaghetti Kart version: ${PROJECT_VERSION} ${PROJECT_PATCH_WORD}")
+# add_compile_options(-fsanitize=address) add_link_options(-fsanitize=address)
-if(APPLE)
- enable_language(OBJCXX)
-endif()
-
-# Set the minimum version of CMake and the deployment target for macOS
-set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
-
-# Set CMake to build as Universal Binary for macOS
-set(CMAKE_OSX_ARCHITECTURES=arm64;x86_64)
-
-# Set the C++ standard and enable the MSVC parallel build option
-set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard to use")
-set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Spaghettify)
-#add_compile_options(-fsanitize=address)
-#add_link_options(-fsanitize=address)
-
-# Add a custom module path to locate additional CMake modules
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
set(YAML_CPP_STATIC_DEFINE ON)
-add_compile_definitions(YAML_CPP_STATIC_DEFINE)
-include(cmake/lus-cvars.cmake)
-
-if (WIN32)
- include(cmake/automate-vcpkg.cmake)
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(VCPKG_TRIPLET x64-windows-static)
- set(VCPKG_TARGET_TRIPLET x64-windows-static)
- else()
- set(VCPKG_TRIPLET x86-windows-static)
- set(VCPKG_TARGET_TRIPLET x86-windows-static)
- endif()
- vcpkg_bootstrap()
- vcpkg_install_packages()
+include(libultraship/cmake/cvars.cmake)
- set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})
- set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
+if(WIN32)
+ option(ENABLE_VCPKG "Enable vcpkg for dependencies" ON)
+else()
+ option(ENABLE_VCPKG "Enable vcpkg for dependencies" OFF)
endif()
-if (MSVC)
- set(CPP "${CMAKE_C_COMPILER}" "/EP")
-else()
- set(CPP "${CMAKE_C_COMPILER}" "-E" "-P" "-Wno-trigraphs" "-x" "c")
+if(ENABLE_VCPKG)
+ include(cmake/dependencies/vcpkg.cmake)
endif()
-if(IOS)
+set(SPAGHETTIKART_IOS OFF)
+if(IOS OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ set(SPAGHETTIKART_IOS ON)
set(PLATFORM "OS64")
include(cmake/ios.toolchain.cmake)
- add_compile_definitions(
- PLATFORM_IOS=1
-)
set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "YOUR_TEAM_ID")
set(PROJECT_ID "dev.net64.game")
endif()
-################################################################################
-# Set target arch type if empty. Visual studio solution generator provides it.
-################################################################################
-if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
- if(NOT CMAKE_VS_PLATFORM_NAME)
- set(CMAKE_VS_PLATFORM_NAME "x64")
- endif()
- message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
-
- if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
- OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32"))
- message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
- endif()
-endif()
-
-################################################################################
-# Compiler specific configuration types
-################################################################################
-if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang")
- set(COMMON_FLAGS "-Wall -Wextra -Wno-error \
- -Wno-return-type \
- -Wno-unused-parameter \
- -Wno-unused-function \
- -Wno-unused-variable \
- -Wno-missing-field-initializers \
- -Wno-parentheses \
- -Wno-narrowing \
- -Wno-missing-braces \
- -ffast-math \
- -flto=auto \
- -pipe"
- )
-
- set(COMMON_C_FLAGS "${COMMON_FLAGS} -Wno-int-conversion -Werror-implicit-function-declaration -Wno-incompatible-pointer-types")
- set(COMMON_CXX_FLAGS "${COMMON_FLAGS} -Wno-c++11-narrowing -Wno-deprecated-enum-enum-conversion -fpermissive -fomit-frame-pointer")
-elseif (MSVC)
- set(COMMON_FLAGS "/fp:fast")
- set(COMMON_C_FLAGS "${COMMON_FLAGS}")
- set(COMMON_CXX_FLAGS "${COMMON_FLAGS}")
-else()
- set(COMMON_C_FLAGS "")
- set(COMMON_CXX_FLAGS "")
-endif()
-
-# fix LTO breaks debug information on Apple/Ninja https://gitlab.kitware.com/cmake/cmake/-/issues/25202
-if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "AppleClang" AND "${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
- add_link_options("-fno-lto")
- add_compile_options("-fno-lto")
-endif()
-
-################################################################################
-# Global configuration types
-################################################################################
-if (MSVC)
- set(CMAKE_C_FLAGS_DEBUG "/Od /Zi /DNDEBUG ${COMMON_C_FLAGS}")
- set(CMAKE_CXX_FLAGS_DEBUG "/Od /Zi /DNDEBUG ${COMMON_CXX_FLAGS}")
- set(CMAKE_C_FLAGS_RELEASE "/O2 /DNDEBUG ${COMMON_C_FLAGS}")
- set(CMAKE_CXX_FLAGS_RELEASE "/O2 /DNDEBUG ${COMMON_CXX_FLAGS}")
-else()
- set(CMAKE_C_FLAGS_DEBUG "-g -DNDEBUG ${COMMON_C_FLAGS}")
- set(CMAKE_CXX_FLAGS_DEBUG "-g -DNDEBUG ${COMMON_CXX_FLAGS}")
- set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG ${COMMON_C_FLAGS}")
- set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG ${COMMON_CXX_FLAGS}")
- set(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG ${COMMON_C_FLAGS}")
- set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG ${COMMON_CXX_FLAGS}")
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${COMMON_C_FLAGS}")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${COMMON_CXX_FLAGS}")
-endif()
-
# Toggle for GLES (Required for many ARM/Mobile platforms)
option(USE_OPENGLES "Use OpenGLES instead of Desktop OpenGL" OFF)
# Set game compilation version
set(VERSION us)
-set(USE_NETWORKING OFF)
set(SKIP_XCODE_VERSION_CHECK ON)
# TODO: Sorry i broke this
set(GFX_DEBUG_DISASSEMBLER OFF)
-if(NOT MSVC)
-include(CheckCCompilerFlag)
-include(CheckCXXCompilerFlag)
-check_c_compiler_flag("-Wno-error=int-conversion" HAS_WNO_ERROR_INT_CONVERSION)
-check_cxx_compiler_flag("-Wno-error=changes-meaning" HAS_WNO_ERROR_CHANGES_MEANING)
-
-add_compile_options("$<$<COMPILE_LANGUAGE:C>:-Wno-error=incompatible-pointer-types>" "$<$<COMPILE_LANGUAGE:CXX>:-Wno-error=narrowing>")
-
-if(HAS_WNO_ERROR_INT_CONVERSION)
- add_compile_options("$<$<COMPILE_LANGUAGE:C>:-Wno-error=int-conversion>")
-endif()
-
-if(HAS_WNO_ERROR_CHANGES_MEANING)
- add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:-Wno-error=changes-meaning>")
-endif()
+if(MSVC)
+ set(CPP "${CMAKE_C_COMPILER}" "/EP")
+else()
+ set(CPP "${CMAKE_C_COMPILER}" "-E" "-P" "-Wno-trigraphs" "-x" "c")
endif()
-# Add compile definitions for the target
-add_compile_definitions(
- VERSION_US=1
- $<$<BOOL:${USE_OPENGLES}>:USE_OPENGLES>
- ENABLE_RUMBLE=1
- F3DEX_GBI=1
- _LANGUAGE_C
- _USE_MATH_DEFINES
- CIMGUI_DEFINE_ENUMS_AND_STRUCTS
- NON_MATCHING=1
- NON_EQUIVALENT=1
- AVOID_UB=1
- SPAGHETTI_VERSION="${PROJECT_VERSION}"
-)
-
-
-if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
- configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/properties.h.in ${CMAKE_CURRENT_SOURCE_DIR}/properties.h @ONLY)
+if(WIN32)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/properties.h.in
+ ${CMAKE_CURRENT_SOURCE_DIR}/properties.h @ONLY)
endif()
-# Include directories
-include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${CMAKE_CURRENT_SOURCE_DIR}/include/assets
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- ${CMAKE_CURRENT_SOURCE_DIR}/src/racing
- ${CMAKE_CURRENT_SOURCE_DIR}/src/ending
- ${CMAKE_CURRENT_SOURCE_DIR}/src/data
- ${CMAKE_CURRENT_SOURCE_DIR}/src/buffers
- ${CMAKE_CURRENT_SOURCE_DIR}/src/audio
- ${CMAKE_CURRENT_SOURCE_DIR}/src/debug
- ${CMAKE_CURRENT_SOURCE_DIR}/src/engine
- ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/tracks
- ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/actors
- ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/objects
- ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/sky
- ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/particles
- ${CMAKE_CURRENT_SOURCE_DIR}/src/enhancements
- ${CMAKE_CURRENT_SOURCE_DIR}/src/enhancements/freecam
-)
-
# Collect source files to build the executable
-file(GLOB ALL_FILES_ROOT RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- "src/*.c"
- "src/*.h"
- "src/os/guLookAtF.c"
- "src/os/guPerspectiveF.c"
- "src/os/guMtxF2L.c"
- "src/os/guRotateF.c"
- "src/os/guOrthoF.c"
- "src/os/guScaleF.c"
- "src/os/guTranslateF.c"
- "src/os/guMtxCatF.c"
- "src/os/guMtxCatL.c"
- "src/os/guNormalize.c"
-)
-
-file(GLOB_RECURSE ALL_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- "src/buffers/*.c"
- "src/buffers/*.h"
- "src/data/*.c"
- "src/data/*.h"
- "src/debug/*.c"
- "src/debug/*.h"
- "src/ending/*.c"
- "src/ending/*.h"
- "src/racing/*.c"
- "src/racing/*.h"
- "src/audio/*.c"
- "src/audio/*.h"
- "src/port/*.h"
- "src/port/*.c"
- "src/port/*.cpp"
- "src/mods/*.h"
- "src/mods/*.c"
- "src/mods/*.cpp"
- "assets/code/*.c"
- "courses/*.c"
- "courses/*.h"
- "src/engine/*.cpp"
- "src/engine/*.h"
- "src/engine/tracks/*.c"
- "src/engine/tracks/*.h"
- "src/engine/actors/*.cpp"
- "src/engine/actors/*.h"
- "src/engine/objects/*.cpp"
- "src/engine/objects/*.h"
- "src/engine/sky/*.cpp"
- "src/engine/sky/*.h"
- "src/engine/particles/*.cpp"
- "src/engine/particles/*.h"
- "src/enhancements/*.c"
- "src/enhancements/*.h"
- "src/enhancements/freecam/*.c"
- "src/enhancements/freecam/*.cpp"
- "src/enhancements/freecam/*.h"
- "src/engine/*.cpp"
- "src/engine/*.h"
- "Resource.rc"
-)
+file(
+ GLOB ALL_FILES_ROOT
+ CONFIGURE_DEPENDS
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ "src/*.c"
+ "src/*.h"
+ "src/os/guLookAtF.c"
+ "src/os/guPerspectiveF.c"
+ "src/os/guMtxF2L.c"
+ "src/os/guRotateF.c"
+ "src/os/guOrthoF.c"
+ "src/os/guScaleF.c"
+ "src/os/guTranslateF.c"
+ "src/os/guMtxCatF.c"
+ "src/os/guMtxCatL.c"
+ "src/os/guNormalize.c")
+
+file(
+ GLOB_RECURSE ALL_FILES
+ CONFIGURE_DEPENDS
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ "src/buffers/*.c"
+ "src/buffers/*.h"
+ "src/data/*.c"
+ "src/data/*.h"
+ "src/debug/*.c"
+ "src/debug/*.h"
+ "src/ending/*.c"
+ "src/ending/*.h"
+ "src/racing/*.c"
+ "src/racing/*.h"
+ "src/audio/*.c"
+ "src/audio/*.h"
+ "src/port/*.c"
+ "src/port/*.cpp"
+ "src/port/*.h"
+ "src/mods/*.c"
+ "src/mods/*.cpp"
+ "src/mods/*.h"
+ "assets/code/*.c"
+ "courses/*.c"
+ "courses/*.h"
+ "src/engine/*.cpp"
+ "src/engine/*.c"
+ "src/engine/*.h"
+ "src/enhancements/*.c"
+ "src/enhancements/*.cpp"
+ "src/enhancements/*.h"
+ "Resource.rc")
list(APPEND ALL_FILES ${ALL_FILES_ROOT})
@@ -336,7 +115,7 @@ list(APPEND ALL_FILES ${ALL_FILES_ROOT})
list(FILTER ALL_FILES EXCLUDE REGEX ".*.inc.c")
list(FILTER ALL_FILES EXCLUDE REGEX "./src/debug/crash_screen_enhancement.c")
-if (CMAKE_SYSTEM_NAME STREQUAL "iOS")
+if(SPAGHETTIKART_IOS)
set(IOS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/ios)
set(STORYBOARD_FILE ${IOS_DIR}/Launch.storyboard)
@@ -345,379 +124,95 @@ if (CMAKE_SYSTEM_NAME STREQUAL "iOS")
list(APPEND ALL_FILES ${STORYBOARD_FILE} ${IMAGE_FILES} ${ICON_FILES})
- add_executable(${PROJECT_NAME} ${ALL_FILES})
- set_xcode_property(${PROJECT_NAME} PRODUCT_BUNDLE_IDENTIFIER ${PROJECT_ID} All)
- set_target_properties(
- ${PROJECT_NAME}
- PROPERTIES
- MACOSX_BUNDLE TRUE
- MACOSX_BUNDLE_INFO_PLIST ${IOS_DIR}/plist.in
- RESOURCE "${IMAGE_FILES};${STORYBOARD_FILE};${ICON_FILES}"
- )
-else()
- add_executable(${PROJECT_NAME} ${ALL_FILES})
endif()
-################################################################################
-# OpenGL / OpenGLES library
-################################################################################
-if (UNIX AND NOT APPLE)
- if (USE_OPENGLES)
- find_library(GLESv2_LIBRARY GLESv2 REQUIRED)
- target_link_libraries(${PROJECT_NAME} PRIVATE ${GLESv2_LIBRARY})
- else()
- find_package(OpenGL REQUIRED)
- target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL)
- endif()
-endif()
-
-################################################################################
-# MSVC runtime library
-################################################################################
-if (MSVC)
- if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
- get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
- if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
- string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
- $<$<CONFIG:Debug>:
- MultiThreadedDebug
- >
- $<$<CONFIG:Release>:
- MultiThreaded
- >
- $<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
- )
- elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
- string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
- $<$<CONFIG:Debug>:
- MultiThreadedDebug
- >
- $<$<CONFIG:Release>:
- MultiThreaded
- >
- $<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
- )
- endif()
- set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
- endif()
-endif()
-
-#=================== SSE2NEON ===================
-set(SSE2NEON_DIR ${CMAKE_BINARY_DIR}/_deps/sse2neon)
-file(DOWNLOAD "https://raw.githubusercontent.com/DLTcollab/sse2neon/refs/heads/master/sse2neon.h" "${SSE2NEON_DIR}/sse2neon.h")
-
-include_directories(${SSE2NEON_DIR})
-
-#================== SEMVER ===================
-set(SEMVER_DIR ${CMAKE_BINARY_DIR}/_deps/semver)
-file(DOWNLOAD "https://raw.githubusercontent.com/Neargye/semver/refs/tags/v1.0.0-rc/include/semver.hpp" "${SEMVER_DIR}/semver.hpp")
-
-include_directories(${SEMVER_DIR})
-
-#=================== DRLibs ===================
-FetchContent_Declare(
- dr_libs
- GIT_REPOSITORY https://github.com/mackron/dr_libs.git
- GIT_TAG da35f9d6c7374a95353fd1df1d394d44ab66cf01
-)
-FetchContent_MakeAvailable(dr_libs)
-
-#=================== STB ===================
-include_directories(${STB_DIR})
-
-#=================== tomlplusplus ===================
-include(FetchContent)
-FetchContent_Declare(
- tomlplusplus
- GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
- GIT_TAG v3.4.0
-)
-FetchContent_MakeAvailable(tomlplusplus)
-target_link_libraries(${PROJECT_NAME} PRIVATE tomlplusplus::tomlplusplus)
-
-#==============================================================================#
-# Libultraship Integration #
-#==============================================================================#
-
-# Removes MPQ/OTR support
-set(EXCLUDE_MPQ_SUPPORT TRUE CACHE BOOL "")
-set(ENABLE_EXP_AUTO_CONFIGURE_CONTROLLERS ON CACHE BOOL "")
-add_compile_definitions(EXCLUDE_MPQ_SUPPORT)
-
-if(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
- find_package(SDL2)
+add_executable(${PROJECT_NAME} ${ALL_FILES})
+target_include_directories(
+ ${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/assets
+ ${CMAKE_CURRENT_SOURCE_DIR}/src)
+target_compile_definitions(${PROJECT_NAME} PRIVATE YAML_CPP_STATIC_DEFINE)
+
+if(SPAGHETTIKART_IOS)
+ target_compile_definitions(${PROJECT_NAME} PRIVATE PLATFORM_IOS=1)
+ set_xcode_property(${PROJECT_NAME} PRODUCT_BUNDLE_IDENTIFIER ${PROJECT_ID}
+ All)
+ set_target_properties(
+ ${PROJECT_NAME}
+ PROPERTIES MACOSX_BUNDLE TRUE
+ MACOSX_BUNDLE_INFO_PLIST ${IOS_DIR}/plist.in
+ RESOURCE "${IMAGE_FILES};${STORYBOARD_FILE};${ICON_FILES}")
endif()
-include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/include
- ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/include/libultraship
- ${SDL2_INCLUDE_DIRS}
- ${dr_libs_SOURCE_DIR}
-)
+include(cmake/SetFlags.cmake)
-if (NOT USE_OPENGLES)
- include_directories(${GLEW_INCLUDE_DIRS})
+# ##############################################################################
+# MSVC runtime library
+# ##############################################################################
+if(MSVC)
+ set_property(
+ TARGET ${PROJECT_NAME}
+ PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
-add_subdirectory(libultraship ${CMAKE_CURRENT_SOURCE_DIR}/libultraship)
-add_dependencies(${PROJECT_NAME} libultraship)
-target_link_libraries(${PROJECT_NAME} PRIVATE libultraship)
-
-if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
- target_compile_definitions(${PROJECT_NAME} PRIVATE
- "$<$<CONFIG:Debug>:"
- "_DEBUG;"
- "_CRT_SECURE_NO_WARNINGS;"
- "ENABLE_DX11;"
- ">"
- "$<$<CONFIG:Release>:"
- "NDEBUG"
- ">"
- "INCLUDE_GAME_PRINTF;"
- "NOMINMAX"
- "UNICODE;"
- "_UNICODE;"
- "_CRT_SECURE_NO_WARNINGS;"
- "_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS;"
- )
- add_compile_definitions(STORMLIB_NO_AUTO_LINK)
- set(STORMLIB_NO_AUTO_LINK ON)
-elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS")
- target_compile_definitions(${PROJECT_NAME} PRIVATE
- "$<$<CONFIG:Debug>:"
- "_DEBUG"
- ">"
- "$<$<CONFIG:Release>:"
- "NDEBUG"
- ">"
- "SPDLOG_ACTIVE_LEVEL=3;"
- "SPDLOG_NO_THREAD_ID;"
- "SPDLOG_NO_TLS;"
- "STBI_NO_THREAD_LOCALS;"
- )
-elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang")
- target_compile_definitions(${PROJECT_NAME} PRIVATE
- "$<$<CONFIG:Debug>:"
- "_DEBUG"
- ">"
- "$<$<CONFIG:Release>:"
- "NDEBUG"
- ">"
- "$<$<BOOL:${BUILD_CROWD_CONTROL}>:ENABLE_CROWD_CONTROL>"
- "SPDLOG_ACTIVE_LEVEL=0;"
- "_CONSOLE;"
- "_CRT_SECURE_NO_WARNINGS;"
- "UNICODE;"
- "_UNICODE"
- )
-endif()
-
-if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
- find_package(Ogg CONFIG REQUIRED)
- link_libraries(Ogg::ogg)
-
- find_package(Vorbis CONFIG REQUIRED)
- link_libraries(Vorbis::vorbisfile)
- set(ADDITIONAL_LIBRARY_DEPENDENCIES
- "Ogg::ogg"
- "Vorbis::vorbis"
- "Vorbis::vorbisenc"
- "Vorbis::vorbisfile"
- )
-elseif(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
- set(ADDITIONAL_LIBRARY_DEPENDENCIES
- -lglad
- SDL2::SDL2
- )
-elseif(CMAKE_SYSTEM_NAME STREQUAL "CafeOS")
- set(ADDITIONAL_LIBRARY_DEPENDENCIES
- "$<$<CONFIG:Debug>:-Wl,--wrap=abort>"
- )
- target_include_directories(${PROJECT_NAME} PRIVATE
- ${DEVKITPRO}/portlibs/wiiu/include/
- )
-else()
- find_package(Ogg REQUIRED)
- find_package(Vorbis REQUIRED)
- set(ADDITIONAL_LIBRARY_DEPENDENCIES
- "Ogg::ogg"
- "Vorbis::vorbis"
- "Vorbis::vorbisenc"
- "Vorbis::vorbisfile"
- )
-endif()
+include(cmake/dependencies/common.cmake)
+include(cmake/dependencies/FindLib.cmake)
-if(USE_NETWORKING)
- if(MSVC)
- vcpkg_install_packages(sdl2-net)
- endif()
- include_directories(${SDL2_NET_INCLUDE_DIRS})
- target_compile_definitions(${PROJECT_NAME} PRIVATE USE_NETWORKING)
- if(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
- target_link_libraries(${PROJECT_NAME} PRIVATE SDL2_net)
- elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- find_package(SDL2_net REQUIRED)
- target_link_libraries(${PROJECT_NAME} PRIVATE $<IF:$<TARGET_EXISTS:SDL2_net::SDL2_net>,SDL2_net::SDL2_net,SDL2_net::SDL2_net-static>)
- else()
- find_package(SDL2_net REQUIRED)
- target_link_libraries(${PROJECT_NAME} PRIVATE SDL2_net::SDL2_net-static)
- endif()
+# fmt's consteval format-string checking fails to compile under newer
+# AppleClang (Xcode 16+) with the spdlog/fmt versions in use (both vcpkg's on
+# CI and Torch's bundled copy — see cmake/TorchExternalFixes.cmake for the
+# latter):
+# error: call to consteval function 'fmt::basic_format_string<...>' is not
+# a constant expression
+# Defining FMT_CONSTEVAL as empty falls back to fmt's pre-C++20 constexpr
+# checking, which compiles cleanly with identical runtime behavior. Scoped to
+# AppleClang; other platforms and compilers are untouched.
+# TODO: Temporary hack. Remove this (plus cmake/TorchExternalFixes.cmake and
+# the vcpkg.json fmt/spdlog pins) once the Torch pin is bumped past Torch's
+# spdlog/fmt update. Note the bump also needs matching MK64 loader changes,
+# see the discussion on PR #712.
+if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ foreach(FMT_CONSUMER ${PROJECT_NAME} libultraship torch)
+ target_compile_definitions(${FMT_CONSUMER} PRIVATE "FMT_CONSTEVAL=")
+ endforeach()
endif()
-option(USE_STANDALONE "Build as a standalone executable" OFF)
-option(BUILD_STORMLIB "Build with StormLib support" OFF)
-
-option(BUILD_SM64 "Build with Super Mario 64 support" OFF)
-option(BUILD_MK64 "Build with Mario Kart 64 support" ON)
-option(BUILD_SF64 "Build with Star Fox 64 support" OFF)
-option(BUILD_FZERO "Build with F-Zero X support" OFF)
-option(BUILD_MARIO_ARTIST "Build with Mario Artist support" OFF)
-
-add_subdirectory(torch)
-target_link_libraries(${PROJECT_NAME} PRIVATE torch "${ADDITIONAL_LIBRARY_DEPENDENCIES}")
-
-if(CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch")
-
- nx_generate_nacp(${PROJECT_NAME}.nacp
- NAME "${PROJECT_NAME}"
- AUTHOR "${PROJECT_TEAM}"
- VERSION "${PROJECT_VERSION}"
-)
-
- nx_create_nro(${PROJECT_NAME}
- NACP ${PROJECT_NAME}.nacp
- ICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.png
-)
+if(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
- INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.nro DESTINATION . COMPONENT ${PROJECT_NAME})
+ nx_generate_nacp(
+ ${PROJECT_NAME}.nacp
+ NAME
+ "${PROJECT_NAME}"
+ AUTHOR
+ "${PROJECT_TEAM}"
+ VERSION
+ "${PROJECT_VERSION}")
+
+ nx_create_nro(${PROJECT_NAME} NACP ${PROJECT_NAME}.nacp ICON
+ ${CMAKE_CURRENT_SOURCE_DIR}/icon.png)
+
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.nro
+ DESTINATION .
+ COMPONENT ${PROJECT_NAME})
endif()
-################################################################################
+# ##############################################################################
# Compile and link options
-################################################################################
-if(MSVC)
- if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
- target_compile_options(${PROJECT_NAME} PRIVATE
- $<$<CONFIG:Debug>:
- /w;
- /Od;
- /MTd
- >
- $<$<CONFIG:Release>:
- /Oi;
- /Gy;
- /W3;
- /MT
- >
- /permissive-;
- /MP;
- ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
- ${DEFAULT_CXX_EXCEPTION_HANDLING}
- )
- target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:/ZI;>)
- target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:Release>:/Zi;>)
- elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
- target_compile_options(${PROJECT_NAME} PRIVATE
- $<$<CONFIG:Debug>:
- /MTd
- >
- $<$<CONFIG:Release>:
- /O2;
- /Oi;
- /Gy;
- /MT
- >
- /permissive-;
- /MP;
- /w;
- ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
- ${DEFAULT_CXX_EXCEPTION_HANDLING}
- )
- endif()
- if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
- target_link_options(${PROJECT_NAME} PRIVATE
- $<$<CONFIG:Debug>:
- /INCREMENTAL
- >
- $<$<CONFIG:Release>:
- /OPT:REF;
- /OPT:ICF;
- /INCREMENTAL:NO;
- /FORCE:MULTIPLE
- >
- /MANIFEST:NO;
- /DEBUG;
- /SUBSYSTEM:WINDOWS
- )
- elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
- target_link_options(${PROJECT_NAME} PRIVATE
- $<$<CONFIG:Debug>:
- /STACK:8777216
- >
- $<$<CONFIG:Release>:
- /OPT:REF;
- /OPT:ICF;
- /INCREMENTAL:NO;
- /FORCE:MULTIPLE
- >
- /MANIFEST:NO;
- /DEBUG;
- /SUBSYSTEM:WINDOWS
- )
- endif()
-
- # Remove /RTC from msvc flags
- foreach (fentry
- CMAKE_C_FLAGS
- CMAKE_CXX_FLAGS
- )
- string (REGEX REPLACE "/RTC(su|[1su])" "" ${fentry} "${${fentry}}")
- endforeach(fentry)
-endif()
+# ##############################################################################
-if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
- if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
- target_compile_options(${PROJECT_NAME} PRIVATE
- -pthread
- )
-
- target_link_options(${PROJECT_NAME} PRIVATE
- -pthread
- )
- elseif (CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
- target_compile_options(${PROJECT_NAME} PRIVATE
- -pthread
- )
-
- target_link_options(${PROJECT_NAME} PRIVATE
- -pthread
- )
- elseif (NOT CMAKE_SYSTEM_NAME STREQUAL "CafeOS")
- if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
- set(CPU_OPTION -msse2 -mfpmath=sse)
- endif()
-
- target_compile_options(${PROJECT_NAME} PRIVATE
- -pthread
- ${CPU_OPTION}
- )
-
- target_link_options(${PROJECT_NAME} PRIVATE
- -pthread
- -Wl,-export-dynamic
- )
- endif()
-endif()
add_custom_command(
- TARGET ${PROJECT_NAME} POST_BUILD
- COMMENT "Copying asset yamls..."
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/config.yml" "$<TARGET_FILE_DIR:Spaghettify>/config.yml"
- COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/yamls/" "$<TARGET_FILE_DIR:Spaghettify>/yamls/"
- COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/meta/" "$<TARGET_FILE_DIR:Spaghettify>/meta/"
-)
+ TARGET ${PROJECT_NAME}
+ POST_BUILD
+ COMMENT "Copying asset yamls..."
+ COMMAND
+ ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
+ -DDESTINATION_DIR=$<TARGET_FILE_DIR:${PROJECT_NAME}>
+ -P ${CMAKE_SOURCE_DIR}/cmake/StageRuntimeFiles.cmake
+ VERBATIM)
if(NOT CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
include(ExternalProject)
@@ -736,11 +231,20 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
SOURCE_DIR ${CMAKE_SOURCE_DIR}/torch
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/torch
-DCMAKE_PROJECT_INCLUDE=${CMAKE_SOURCE_DIR}/cmake/TorchExternalFixes.cmake
-)
+ -DUSE_STANDALONE=ON
+ -DBUILD_STORMLIB=${BUILD_STORMLIB}
+ -DBUILD_SM64=${BUILD_SM64}
+ -DBUILD_MK64=${BUILD_MK64}
+ -DBUILD_SF64=${BUILD_SF64}
+ -DBUILD_FZERO=${BUILD_FZERO}
+ -DBUILD_MARIO_ARTIST=${BUILD_MARIO_ARTIST}
+ -DBUILD_NAUDIO=${BUILD_NAUDIO}
+ )
ExternalProject_Get_Property(TorchExternal install_dir)
- if (MSVC)
- set(TORCH_EXECUTABLE ${install_dir}/src/TorchExternal-build/$<CONFIGURATION>/torch)
+ if(MSVC)
+ set(TORCH_EXECUTABLE
+ ${install_dir}/src/TorchExternal-build/$<CONFIGURATION>/torch)
else()
set(TORCH_EXECUTABLE ${install_dir}/src/TorchExternal-build/torch)
endif()
@@ -750,57 +254,62 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
DEPENDS TorchExternal
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMAND ${TORCH_EXECUTABLE} header -o baserom.us.z64
- COMMAND ${TORCH_EXECUTABLE} o2r baserom.us.z64 --additional-files meta/mods.toml
- COMMAND ${TORCH_EXECUTABLE} pack assets spaghetti.o2r o2r
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/mk64.o2r" "${CMAKE_BINARY_DIR}/mk64.o2r"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/spaghetti.o2r" "${CMAKE_BINARY_DIR}/spaghetti.o2r"
-)
+ COMMAND ${TORCH_EXECUTABLE} o2r baserom.us.z64 --additional-files
+ meta/mods.toml
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/mk64.o2r"
+ "${CMAKE_BINARY_DIR}/mk64.o2r"
+ COMMAND
+ ${CMAKE_COMMAND} -DTORCH_EXECUTABLE=${TORCH_EXECUTABLE}
+ -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR}
+ -P ${CMAKE_SOURCE_DIR}/cmake/GenerateO2R.cmake
+ VERBATIM)
add_custom_target(
GenerateO2R
DEPENDS TorchExternal
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- COMMAND ${TORCH_EXECUTABLE} pack assets spaghetti.o2r o2r
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/spaghetti.o2r" "${CMAKE_BINARY_DIR}/spaghetti.o2r"
-)
-
- if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
- install(FILES "${CMAKE_BINARY_DIR}/spaghetti.o2r" DESTINATION . COMPONENT ${PROJECT_NAME})
+ COMMAND
+ ${CMAKE_COMMAND} -DTORCH_EXECUTABLE=${TORCH_EXECUTABLE}
+ -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR}
+ -P ${CMAKE_SOURCE_DIR}/cmake/GenerateO2R.cmake
+ VERBATIM)
+
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ install(
+ FILES "${CMAKE_BINARY_DIR}/spaghetti.o2r"
+ DESTINATION .
+ COMPONENT ${PROJECT_NAME})
endif()
- if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
- add_custom_target(CreateOSXIcons
- COMMAND mkdir -p ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset
- COMMAND sips -z 16 16 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_16x16.png
- COMMAND sips -z 32 32 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_16x16@2x.png
- COMMAND sips -z 32 32 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_32x32.png
- COMMAND sips -z 64 64 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_32x32@2x.png
- COMMAND sips -z 128 128 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_128x128.png
- COMMAND sips -z 256 256 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_128x128@2x.png
- COMMAND sips -z 256 256 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_256x256.png
- COMMAND sips -z 512 512 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_256x256@2x.png
- COMMAND sips -z 512 512 icon.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_512x512.png
- COMMAND cp icon.png ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_512x512@2x.png
- COMMAND iconutil -c icns -o ${CMAKE_BINARY_DIR}/macosx/spaghettikart.icns ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- COMMENT "Creating OSX icons ..."
- )
+ if(APPLE AND NOT SPAGHETTIKART_IOS)
+ add_custom_target(
+ CreateOSXIcons
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/macosx
+ COMMAND sips -s format icns icon.png --out
+ ${CMAKE_BINARY_DIR}/macosx/spaghettikart.icns
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMENT "Creating OSX icons ...")
add_dependencies(${PROJECT_NAME} CreateOSXIcons)
- configure_file("${CMAKE_SOURCE_DIR}/Info.plist" "${CMAKE_BINARY_DIR}/Info.plist" COPYONLY)
+ configure_file("${CMAKE_SOURCE_DIR}/Info.plist"
+ "${CMAKE_BINARY_DIR}/Info.plist" COPYONLY)
endif()
- set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES)
- set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/SpaghettiKart.desktop")
- set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_ICON_FILE "${CMAKE_SOURCE_DIR}/icon.png")
+ set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL
+ YES)
+ set_property(
+ TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_DESKTOP_FILE
+ "${CMAKE_SOURCE_DIR}/SpaghettiKart.desktop")
+ set_property(TARGET ${PROJECT_NAME} PROPERTY APPIMAGE_ICON_FILE
+ "${CMAKE_SOURCE_DIR}/icon.png")
endif()
-if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CPACK_GENERATOR "External")
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows|NintendoSwitch|CafeOS")
set(CPACK_GENERATOR "ZIP")
-elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+elseif(APPLE)
set(CPACK_GENERATOR "Bundle")
endif()
-set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/cmake/configure-packaging.cmake)
+set(CPACK_PROJECT_CONFIG_FILE
+ ${CMAKE_SOURCE_DIR}/cmake/configure-packaging.cmake)
include(cmake/packaging.cmake)