CMakeLists.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. cmake_minimum_required(VERSION 3.27)
  2. project(Snake VERSION 1.2.0.0)
  3. set(CMAKE_CXX_STANDARD 23)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_CXX_EXTENSIONS OFF)
  6. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  7. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
  8. include(ProjectHelpers)
  9. include(FetchContent)
  10. FetchContent_Declare(
  11. SDL2
  12. GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
  13. GIT_TAG 15ead9a40d09a1eb9972215cceac2bf29c9b77f6 # release-2.28.5
  14. FIND_PACKAGE_ARGS
  15. )
  16. FetchContent_Declare(
  17. SDL2_image
  18. GIT_REPOSITORY https://github.com/libsdl-org/SDL_image.git
  19. GIT_TAG 28b9daa15a59aa2829cd29944ca9ffbf049d7667 # release-2.8.1
  20. FIND_PACKAGE_ARGS
  21. )
  22. FetchContent_Declare(
  23. SDL2_ttf
  24. GIT_REPOSITORY https://github.com/libsdl-org/SDL_ttf.git
  25. GIT_TAG 89d1692fd8fe91a679bb943d377bfbd709b52c23 # release-2.20.2
  26. FIND_PACKAGE_ARGS
  27. )
  28. FetchContent_MakeAvailable(SDL2 SDL2_image SDL2_ttf)
  29. configure_file(
  30. "${CMAKE_CURRENT_SOURCE_DIR}/Config.hxx.in"
  31. "${CMAKE_CURRENT_BINARY_DIR}/Config.hxx"
  32. @ONLY
  33. )
  34. add_executable(Snake WIN32 MACOSX_BUNDLE
  35. main.cxx
  36. SDL.cxx SDL.hxx
  37. SDLWindow.cxx SDLWindow.hxx
  38. SDLRenderer.cxx SDLRenderer.hxx
  39. game/GameState.hxx
  40. game/GameStateManager.cxx game/GameStateManager.hxx
  41. game/LoadingState.cxx game/LoadingState.hxx
  42. game/SplashState.cxx game/SplashState.hxx
  43. game/MenuState.cxx game/MenuState.hxx
  44. game/PlayingState.cxx game/PlayingState.hxx
  45. game/GameOverState.cxx game/GameOverState.hxx
  46. game/HighScoreState.cxx game/HighScoreState.hxx
  47. game/CreditsState.cxx game/CreditsState.hxx
  48. game/AssetManager.cxx game/AssetManager.hxx
  49. game/ui/Button.cxx game/ui/Button.hxx
  50. game/ui/LineInput.cxx game/ui/LineInput.hxx
  51. game/ui/UiColor.hxx game/ui/UiColor.cxx
  52. game/HighScoreManager.cxx game/HighScoreManager.hxx
  53. ${CMAKE_CURRENT_BINARY_DIR}/Config.hxx
  54. game/TranslationManager.cxx game/TranslationManager.hxx
  55. NonCopyable.hxx
  56. )
  57. file(GLOB assets assets/*)
  58. target_sources(Snake PRIVATE ${assets})
  59. if (WIN32)
  60. target_sources(Snake PRIVATE windows-resources.rc)
  61. endif (WIN32)
  62. if ((NOT WIN32) AND (NOT APPLE))
  63. set_target_properties(Snake PROPERTIES
  64. RUNTIME_OUTPUT_NAME snake
  65. )
  66. endif ()
  67. target_link_libraries(Snake PRIVATE
  68. SDL2::SDL2 SDL2::SDL2main
  69. SDL2_image::SDL2_image
  70. SDL2_ttf::SDL2_ttf
  71. )
  72. if (WIN32)
  73. copy_dependency_dll(TARGET Snake DEPENDENCY SDL2::SDL2)
  74. copy_dependency_dll(TARGET Snake DEPENDENCY SDL2_image::SDL2_image)
  75. copy_dependency_dll(TARGET Snake DEPENDENCY SDL2_ttf::SDL2_ttf)
  76. include(InstallRequiredSystemLibraries)
  77. install(IMPORTED_RUNTIME_ARTIFACTS SDL2::SDL2 SDL2_image::SDL2_image SDL2_ttf::SDL2_ttf)
  78. install(TARGETS Snake DESTINATION bin)
  79. install(FILES ${assets} DESTINATION assets)
  80. set(CPACK_GENERATOR NSIS64)
  81. set(CPACK_PACKAGE_INSTALL_DIRECTORY "Draconic Bytes\\\\Snake")
  82. set(CPACK_PACKAGE_NAME "Snake")
  83. set(CPACK_PACKAGE_VENDOR "Draconic Bytes")
  84. set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
  85. set(CPACK_PACKAGE_EXECUTABLES "snake;Snake")
  86. include(CPack)
  87. elseif (APPLE)
  88. set_source_files_properties(${assets} PROPERTIES
  89. MACOSX_PACKAGE_LOCATION Resources/assets
  90. )
  91. target_sources(Snake PRIVATE snake-icon.icns)
  92. set_source_files_properties(snake-icon.icns PROPERTIES
  93. MACOSX_PACKAGE_LOCATION Resources
  94. )
  95. set_target_properties(Snake PROPERTIES
  96. XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Developer"
  97. XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES"
  98. )
  99. get_dependency_location(SDL2_directory DEPENDENCY SDL2::SDL2)
  100. string(REPLACE "Cellar/sdl2/2.28.5/lib" "lib" dependency_dir "${SDL2_directory}")
  101. configure_file(
  102. "${CMAKE_CURRENT_SOURCE_DIR}/FixupBundle.cmake.in"
  103. "${CMAKE_CURRENT_BINARY_DIR}/FixupBundle.cmake"
  104. @ONLY
  105. )
  106. install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/FixupBundle.cmake")
  107. set(MACOSX_BUNDLE_BUNDLE_NAME "Snake")
  108. set(MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024, Felix Bytow <drako@drako.guru>")
  109. set(MACOSX_BUNDLE_ICON_FILE snake-icon.icns)
  110. else ()
  111. configure_file(
  112. "${CMAKE_CURRENT_SOURCE_DIR}/Snake.desktop.in"
  113. "${CMAKE_CURRENT_BINARY_DIR}/Snake.desktop"
  114. @ONLY
  115. )
  116. install(TARGETS Snake DESTINATION bin)
  117. install(FILES ${assets} DESTINATION share/snake/assets)
  118. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Snake.desktop" DESTINATION share/applications)
  119. endif ()