diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2025-02-07 22:24:00 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-07 22:24:00 -0700 |
| commit | 008d527ed5bae64e18eff59310bd18d698d4c016 (patch) | |
| tree | ac1d62f7ea28ad5ba81ca9640b6f490c3442ef55 /CMakeLists.txt | |
| parent | 7fe705227028ef136317fbc9eceafd8bd366e6a2 (diff) | |
Torch Static Compile (#187)
* Fix freecam rotation smoothing
* Configure freecam controller
* Fix cont z button and impl freecam on/off events
* Add torch static comp
* Fixed cmake
* Copied yamls
---------
Co-authored-by: KiritoDv <kiritodev01@gmail.com>
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 273 |
1 files changed, 171 insertions, 102 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index bb56c388f..fda59b51b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,23 +23,19 @@ include(FindFontconfig) include(cmake/lus-cvars.cmake) if (WIN32) -include(libultraship/cmake/automate-vcpkg.cmake) -# Forced to use MSVC -set(MSVC ON) - -if(MSVC) +include(cmake/automate-vcpkg.cmake) set(VCPKG_TRIPLET x64-windows-static) set(VCPKG_TARGET_TRIPLET x64-windows-static) -else() -set(VCPKG_TRIPLET x64-mingw-static) -set(VCPKG_TARGET_TRIPLET x64-mingw-static) -endif() - vcpkg_bootstrap() -vcpkg_install_packages(fontconfig sdl2 zlib bzip2 libzip libpng getopt dirent libusb pthread glew glfw3 spdlog) +vcpkg_install_packages(zlib bzip2 libzip libpng sdl2 glew glfw3 nlohmann-json tinyxml2 spdlog libogg libvorbis) -vcpkg_install_packages(zlib bzip2 libzip libpng sdl2 sdl2-net glew glfw3 nlohmann-json tinyxml2) +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}) +endif() +if(NOT EXISTS ${CMAKE_BINARY_DIR}/config.yml) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/config.yml" "${CMAKE_BINARY_DIR}/config.yml") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/yamls/" "${CMAKE_BINARY_DIR}/yamls/") endif() if (MSVC) @@ -58,6 +54,21 @@ 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() + # Set game compilation version set(VERSION us) set(USE_NETWORKING ON) @@ -222,6 +233,14 @@ file(DOWNLOAD "https://raw.githubusercontent.com/DLTcollab/sse2neon/refs/heads/m include_directories(${SSE2NEON_DIR}) +#=================== DRLibs =================== +FetchContent_Declare( + dr_libs + GIT_REPOSITORY https://github.com/mackron/dr_libs.git + GIT_TAG da35f9d6c7374a95353fd1df1d394d44ab66cf01 +) +FetchContent_MakeAvailable(dr_libs) + #==============================================================================# # Libultraship Integration # #==============================================================================# @@ -258,45 +277,31 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic ${SDL2_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS} + ${dr_libs_SOURCE_DIR} ) +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") - if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$<CONFIG:Debug>:" - "_DEBUG;" - "_CRT_SECURE_NO_WARNINGS;" - "ENABLE_DX11;" - ">" - "$<$<CONFIG:Release>:" - "NDEBUG" - ">" - "INCLUDE_GAME_PRINTF;" - "UNICODE;" - "_UNICODE" - STORMLIB_NO_AUTO_LINK - "_CRT_SECURE_NO_WARNINGS;" - "_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS;" - ) - elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32") - target_compile_definitions(${PROJECT_NAME} PRIVATE - "$<$<CONFIG:Debug>:" - "NOINCLUDE_GAME_PRINTF;" - "_DEBUG;" - "_CRT_SECURE_NO_WARNINGS;" - "ENABLE_OPENGL" - ">" - "$<$<CONFIG:Release>:" - "NDEBUG;" - ">" - "INCLUDE_GAME_PRINTF;" - "WIN32;" - "UNICODE;" - "_UNICODE" - STORMLIB_NO_AUTO_LINK - "_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS;" - ) - endif() + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$<CONFIG:Debug>:" + "_DEBUG;" + "_CRT_SECURE_NO_WARNINGS;" + "ENABLE_DX11;" + ">" + "$<$<CONFIG:Release>:" + "NDEBUG" + ">" + "INCLUDE_GAME_PRINTF;" + "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>:" @@ -327,13 +332,18 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang") ) 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") + find_package(Ogg CONFIG REQUIRED) + link_libraries(Ogg::ogg) + + find_package(Vorbis CONFIG REQUIRED) + link_libraries(Vorbis::vorbisfile) set(ADDITIONAL_LIBRARY_DEPENDENCIES "$<$<BOOL:${USE_NETWORKING}>:SDL2_net::SDL2_net-static>" + "Ogg::ogg" + "Vorbis::vorbis" + "Vorbis::vorbisenc" + "Vorbis::vorbisfile" ) elseif(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch") set(ADDITIONAL_LIBRARY_DEPENDENCIES @@ -347,34 +357,48 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "CafeOS") ${DEVKITPRO}/portlibs/wiiu/include/ ) else() + find_package(Ogg REQUIRED) + find_package(Vorbis REQUIRED) set(ADDITIONAL_LIBRARY_DEPENDENCIES "$<$<BOOL:${USE_NETWORKING}>:SDL2_net::SDL2_net>" + "Ogg::ogg" + "Vorbis::vorbis" + "Vorbis::vorbisenc" + "Vorbis::vorbisfile" ) endif() if(USE_NETWORKING) -if(MSVC) -vcpkg_install_packages(sdl2-net) -endif() -find_package(SDL2_net REQUIRED) -include_directories(${SDL2_NET_INCLUDE_DIRS}) -#target_link_libraries(${PROJECT_NAME} PRIVATE SDL2_net::SDL2_net) -#target_compile_definitions(${PROJECT_NAME} PRIVATE USE_NETWORKING) + if(MSVC) + vcpkg_install_packages(sdl2-net) + endif() + find_package(SDL2_net REQUIRED) + include_directories(${SDL2_NET_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE SDL2_net::SDL2_net) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_NETWORKING) endif() -target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES}") +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_SF64 "Build with Star Fox 64 support" OFF) +option(BUILD_FZERO "Build with F-Zero X support" OFF) + +add_subdirectory(torch) +target_link_libraries(${PROJECT_NAME} PRIVATE torch "${ADDITIONAL_LIBRARY_DEPENDENCIES}") if(CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch") -nx_generate_nacp(Lylat.nacp -NAME "${PROJECT_NAME}" -AUTHOR "${PROJECT_TEAM}" -VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" +nx_generate_nacp(${PROJECT_NAME}.nacp + NAME "${PROJECT_NAME}" + AUTHOR "${PROJECT_TEAM}" + VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" ) nx_create_nro(${PROJECT_NAME} -NACP Lylat.nacp + NACP ${PROJECT_NAME}.nacp ) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.nro DESTINATION . COMPONENT ${PROJECT_NAME}) @@ -392,14 +416,14 @@ if(MSVC) if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>: - /Wall; + /w; /Od; /MTd > $<$<CONFIG:Release>: /Oi; /Gy; - /Wall; + /W3; /MT > /permissive-; @@ -408,6 +432,7 @@ if(MSVC) ${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>: @@ -545,56 +570,56 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") > ) else() - if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") - set(CPU_OPTION -msse2 -mfpmath=sse) - endif() + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(CPU_OPTION -msse2 -mfpmath=sse) + endif() - target_compile_options(${PROJECT_NAME} PRIVATE - -Wall -Wextra -Wno-error - -Wno-unused-parameter - -Wno-unused-function - -Wno-unused-variable - -Wno-missing-field-initializers - -Wno-parentheses - -Wno-narrowing - -Wno-missing-braces - -Wno-int-conversion - $<$<COMPILE_LANGUAGE:C>: - -Werror-implicit-function-declaration - -Wno-incompatible-pointer-types - -fpermissive - > - $<$<COMPILE_LANGUAGE:CXX>:-fpermissive> - $<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-enum-enum-conversion> - -pthread - ${CPU_OPTION} - ) + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall -Wextra -Wno-error + -Wno-unused-parameter + -Wno-unused-function + -Wno-unused-variable + -Wno-missing-field-initializers + -Wno-parentheses + -Wno-narrowing + -Wno-missing-braces + -Wno-int-conversion + $<$<COMPILE_LANGUAGE:C>: + -Werror-implicit-function-declaration + -Wno-incompatible-pointer-types + -fpermissive + > + $<$<COMPILE_LANGUAGE:CXX>:-fpermissive> + $<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-enum-enum-conversion> + -pthread + ${CPU_OPTION} + ) - target_link_options(${PROJECT_NAME} PRIVATE - -pthread - -Wl,-export-dynamic - ) + target_link_options(${PROJECT_NAME} PRIVATE + -pthread + -Wl,-export-dynamic + ) endif() endif() include(ExternalProject) -ExternalProject_Add(torch -PREFIX torch -SOURCE_DIR ${CMAKE_SOURCE_DIR}/torch -CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/torch +ExternalProject_Add(TorchExternal + PREFIX TorchExternal + SOURCE_DIR ${CMAKE_SOURCE_DIR}/torch + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/torch ) -ExternalProject_Get_Property(torch install_dir) +ExternalProject_Get_Property(TorchExternal install_dir) if (MSVC) - set(TORCH_EXECUTABLE ${install_dir}/src/torch-build/$<CONFIGURATION>/torch) + set(TORCH_EXECUTABLE ${install_dir}/src/TorchExternal-build/$<CONFIGURATION>/torch) else() - set(TORCH_EXECUTABLE ${install_dir}/src/torch-build/torch) + set(TORCH_EXECUTABLE ${install_dir}/src/TorchExternal-build/torch) endif() message(STATUS "Torch executable path: ${TORCH_EXECUTABLE}") add_custom_target( ExtractAssets - DEPENDS torch + DEPENDS TorchExternal WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND ${TORCH_EXECUTABLE} header -o baserom.us.z64 COMMAND ${TORCH_EXECUTABLE} o2r baserom.us.z64 @@ -602,3 +627,47 @@ add_custom_target( COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/spaghetti.o2r" "${CMAKE_BINARY_DIR}/spaghetti.o2r" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/ship.o2r" "${CMAKE_BINARY_DIR}/ship.o2r" ) + +add_custom_target( + GenerateO2R + DEPENDS TorchExternal + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMAND ${TORCH_EXECUTABLE} pack port spaghetti.o2r o2r + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/spaghetti.o2r" "${CMAKE_BINARY_DIR}/spaghetti.o2r" +) + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") +add_custom_target(CreateOSXIcons + COMMAND mkdir -p ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset + COMMAND sips -z 16 16 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_16x16.png + COMMAND sips -z 32 32 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_16x16@2x.png + COMMAND sips -z 32 32 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_32x32.png + COMMAND sips -z 64 64 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_32x32@2x.png + COMMAND sips -z 128 128 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_128x128.png + COMMAND sips -z 256 256 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_128x128@2x.png + COMMAND sips -z 256 256 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_256x256.png + COMMAND sips -z 512 512 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_256x256@2x.png + COMMAND sips -z 512 512 logo.png --out ${CMAKE_BINARY_DIR}/macosx/spaghettikart.iconset/icon_512x512.png + COMMAND cp logo.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 ..." + ) + add_dependencies(${PROJECT_NAME} CreateOSXIcons) + 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}/logo.png") + +if(CMAKE_SYSTEM_NAME MATCHES "Linux") + set(CPACK_GENERATOR "External") +elseif(CMAKE_SYSTEM_NAME MATCHES "Windows|NintendoSwitch|CafeOS") + set(CPACK_GENERATOR "ZIP") +elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(CPACK_GENERATOR "Bundle") +endif() + +set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/cmake/configure-packaging.cmake) +include(cmake/packaging.cmake)
\ No newline at end of file |
