Преглед на файлове

:sparkles: added cpack for building windows installers

Felix Bytow преди 1 година
родител
ревизия
d878252ff3
променени са 2 файла, в които са добавени 39 реда и са изтрити 5 реда
  1. 38 4
      CMakeLists.txt
  2. 1 1
      game/GameStateManager.cxx

+ 38 - 4
CMakeLists.txt

@@ -1,11 +1,14 @@
 cmake_minimum_required(VERSION 3.27)
-project(Snake)
+project(Snake VERSION 1.0.0.0)
 
 set(CMAKE_CXX_STANDARD 23)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_CXX_EXTENSIONS OFF)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+include(ProjectHelpers)
+
 include(FetchContent)
 FetchContent_Declare(
     SDL2
@@ -30,6 +33,11 @@ FetchContent_MakeAvailable(SDL2 SDL2_image SDL2_ttf)
 set(Boost_USE_MULTITHREADED ON)
 set(Boost_USE_STATIC_LIBS ON)
 set(Boost_USE_STATIC_RUNTIME OFF)
+if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+  set(Boost_USE_DEBUG_LIBS ON)
+else ()
+  set(Boost_USE_DEBUG_LIBS OFF)
+endif ()
 find_package(Boost 1.74.0 REQUIRED COMPONENTS serialization program_options)
 
 configure_file(
@@ -62,8 +70,10 @@ add_executable(Snake WIN32 MACOSX_BUNDLE
 
 file(GLOB assets assets/*)
 target_sources(Snake PRIVATE ${assets})
-set_source_files_properties(${assets} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/assets)
 
+set_target_properties(Snake PROPERTIES
+    RUNTIME_OUTPUT_NAME snake
+)
 target_link_libraries(Snake PRIVATE
     SDL2::SDL2 SDL2::SDL2main
     SDL2_image::SDL2_image
@@ -71,5 +81,29 @@ target_link_libraries(Snake PRIVATE
     Boost::headers Boost::serialization Boost::program_options
 )
 
-install(TARGETS Snake DESTINATION bin)
-install(FILES ${assets} DESTINATION share/snake/assets)
+if (WIN32)
+  copy_dependency_dll(TARGET Snake DEPENDENCY SDL2::SDL2)
+  copy_dependency_dll(TARGET Snake DEPENDENCY SDL2_image::SDL2_image)
+  copy_dependency_dll(TARGET Snake DEPENDENCY SDL2_ttf::SDL2_ttf)
+
+  include(InstallRequiredSystemLibraries)
+  install(IMPORTED_RUNTIME_ARTIFACTS SDL2::SDL2 SDL2_image::SDL2_image SDL2_ttf::SDL2_ttf)
+
+  install(TARGETS Snake DESTINATION bin)
+  install(FILES ${assets} DESTINATION assets)
+
+  set(CPACK_GENERATOR NSIS64)
+  set(CPACK_PACKAGE_INSTALL_DIRECTORY "Draconic Bytes\\\\Snake")
+  set(CPACK_PACKAGE_NAME "Snake")
+  set(CPACK_PACKAGE_VENDOR "Draconic Bytes")
+  set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
+  set(CPACK_PACKAGE_EXECUTABLES "snake;Snake")
+  include(CPack)
+elseif (APPLE)
+  set_source_files_properties(${assets} PROPERTIES
+      MACOSX_PACKAGE_LOCATION Resources/assets
+  )
+else ()
+  install(TARGETS Snake DESTINATION bin)
+  install(FILES ${assets} DESTINATION share/snake/assets)
+endif ()

+ 1 - 1
game/GameStateManager.cxx

@@ -21,7 +21,7 @@ GameState* GameStateManager::enum_to_state(GameStates const state)
   default:
     // this should no longer be reachable as all states are handled
     assert(false);
-    break;
+    return nullptr;
   case GameStates::Loading:
     return &loading_;
   case GameStates::Splash: