Advertisement
SinomSinom

CMakeLists.txt

Mar 18th, 2024 (edited)
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CMake 3.67 KB | None | 0 0
  1. cmake_minimum_required(VERSION 3.20)
  2. project(Bombe)
  3.  
  4. set(CMAKE_CXX_STANDARD 20)
  5.  
  6.  
  7. # Search for required external packages
  8. find_package(SDL2 REQUIRED)
  9. find_package(SDL2_image CONFIG REQUIRED)
  10. find_package(SDL2_mixer CONFIG REQUIRED)
  11. find_package(SDL2_net CONFIG REQUIRED)
  12. find_package(SDL2_ttf CONFIG REQUIRED)
  13. find_package(zstd CONFIG REQUIRED)
  14. find_package(Z3 CONFIG REQUIRED)
  15.  
  16. # Set platform-specific flags and dependencies
  17. set(NO_STEAM true) #remove this for building with steam
  18. if (NOT NO_STEAM)
  19.     set(STEAM_FLAGS "")
  20.     set(STEAM_LDADD "steam_api")
  21. else ()
  22.     set(STEAM_FLAGS "-DNO_STEAM")
  23.     set(STEAM_LDADD "")
  24. endif ()
  25. if (NOT MSVC)
  26.  set(EXTRA_FLAGS "-mpopcnt")
  27. endif ()
  28. set(EXTRA_LDADD "")
  29. set(EXTRA_LD_FLAGS "")
  30. set(EXTRA_SRC "")
  31.  
  32. if (LINUX)
  33.     set(EXTRA_FLAGS "${EXTRA_FLAGS} -DTARGET_LINUX")
  34.     list(APPEND EXTRA_LDADD -lX11 -lpng -pthread)
  35. endif ()
  36.  
  37. if (MACOS)
  38.     set(EXTRA_FLAGS "${EXTRA_FLAGS} -DTARGET_MACOS")
  39.     list(APPEND EXTRA_LD_FLAGS -framework Cocoa)
  40. endif ()
  41.  
  42. # Add executable targets
  43. add_executable(Bombe main.cpp
  44.                     Grid.cpp Grid.h
  45.                     Misc.cpp Misc.h
  46.                     GameState.cpp GameState.h
  47.                     SaveState.cpp SaveState.h
  48.                     LevelSet.cpp LevelSet.h
  49.                     Compress.cpp Compress.h
  50.                     ImgClipBoard.cpp ImgClipBoard.h
  51.                     ${EXTRA_SRC})
  52.  
  53. # Set compiler flags and linker flags
  54. target_compile_options(Bombe PRIVATE ${STEAM_FLAGS} ${EXTRA_FLAGS})
  55.  
  56. target_link_libraries(Bombe PRIVATE ${STEAM_LDADD} ${EXTRA_LDADD})
  57.  
  58. if (EXTRA_LD_FLAGS)
  59.     target_link_options(Bombe PRIVATE ${EXTRA_LD_FLAGS})
  60. endif ()
  61.  
  62. target_compile_definitions(Bombe PUBLIC SECRET_ID=0)
  63.  
  64. # Add libraries
  65. target_include_directories(Bombe PRIVATE ${Z3_CXX_INCLUDE_DIRS})
  66. target_include_directories(Bombe PRIVATE ${SDL2_INCLUDE_DIRS})
  67.  
  68. add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/clip)
  69. target_link_libraries(Bombe PRIVATE clip)
  70. target_link_libraries(Bombe PRIVATE ${Z3_LIBRARIES})
  71. target_link_libraries(Bombe PRIVATE ${SDL2_LIBRARIES})
  72. target_link_libraries(Bombe PRIVATE $<IF:$<TARGET_EXISTS:SDL2_image::SDL2_image>,SDL2_image::SDL2_image,SDL2_image::SDL2_image-static>)
  73. target_link_libraries(Bombe PRIVATE $<IF:$<TARGET_EXISTS:SDL2_mixer::SDL2_mixer>,SDL2_mixer::SDL2_mixer,SDL2_mixer::SDL2_mixer-static>)
  74. target_link_libraries(Bombe PRIVATE $<IF:$<TARGET_EXISTS:SDL2_ttf::SDL2_ttf>,SDL2_ttf::SDL2_ttf,SDL2_ttf::SDL2_ttf-static>)
  75. target_link_libraries(Bombe PRIVATE $<IF:$<TARGET_EXISTS:SDL2_net::SDL2_net>,SDL2_net::SDL2_net,SDL2_net::SDL2_net-static>)
  76.  
  77. target_link_libraries(Bombe PRIVATE $<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>)
  78.  
  79. target_compile_options(Bombe PRIVATE ${Z3_COMPONENT_CXX_FLAGS})
  80.  
  81. # copy required files to out directory afterwards
  82. set(LIST_OF_RESOURCE_FILES
  83.     font-en.ttf
  84.     font-fixed.ttf
  85.     font-jp.otf
  86.     font-sc.otf
  87.     font-tc.otf
  88.     lang.json
  89.     texture.png
  90.     levels.data
  91. )
  92. set(LIST_OF_RESOURCE_FOLDERS
  93.     snd
  94.     tutorial
  95. )
  96.  
  97. foreach(file ${LIST_OF_RESOURCE_FILES})
  98.     add_custom_command(
  99.         TARGET Bombe POST_BUILD
  100.         COMMAND ${CMAKE_COMMAND} -E copy
  101.                 ${CMAKE_SOURCE_DIR}/${file}
  102.                 ${CMAKE_CURRENT_BINARY_DIR}/${file}
  103.         COMMENT "Copying ${file} to output directory"
  104.     )
  105. endforeach()
  106.  
  107. foreach(file ${LIST_OF_RESOURCE_FOLDERS})
  108.     add_custom_command(
  109.         TARGET Bombe POST_BUILD
  110.         COMMAND ${CMAKE_COMMAND} -E copy_directory
  111.                 ${CMAKE_SOURCE_DIR}/${file}
  112.                 ${CMAKE_CURRENT_BINARY_DIR}/${file}
  113.         COMMENT "Copying ${file} to output directory"
  114.     )
  115. endforeach()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement