💿🐜 Antkeeper source code https://antkeeper.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.6 KiB

  1. cmake_minimum_required(VERSION 3.7)
  2. option(VERSION_STRING "Project version string" "0.0.0")
  3. project(antkeeper VERSION ${VERSION_STRING} LANGUAGES CXX)
  4. # Find dependency packages
  5. find_package(dr_wav REQUIRED CONFIG)
  6. find_package(stb REQUIRED CONFIG)
  7. find_package(glad REQUIRED CONFIG)
  8. find_package(EnTT REQUIRED CONFIG)
  9. find_package(OpenGL REQUIRED)
  10. find_package(SDL2 REQUIRED COMPONENTS SDL2::SDL2-static SDL2::SDL2main CONFIG)
  11. find_package(OpenAL REQUIRED CONFIG)
  12. find_library(physfs REQUIRED NAMES physfs-static PATHS "${CMAKE_PREFIX_PATH}/lib")
  13. # Determine dependencies
  14. set(STATIC_LIBS
  15. dr_wav
  16. stb
  17. glad
  18. EnTT
  19. SDL2::SDL2-static
  20. SDL2::SDL2main
  21. OpenAL::OpenAL
  22. ${physfs})
  23. set(SHARED_LIBS
  24. ${OPENGL_gl_LIBRARY})
  25. # Generate configuration header file
  26. configure_file(${PROJECT_SOURCE_DIR}/src/configuration.hpp.in
  27. ${PROJECT_BINARY_DIR}/src/configuration.hpp)
  28. # Collect source files
  29. file(GLOB_RECURSE SOURCE_FILES
  30. ${PROJECT_SOURCE_DIR}/src/*.cpp)
  31. if(MSVC)
  32. # Generate Windows icon resource file
  33. set(ICON_FILE "${PROJECT_SOURCE_DIR}/../antkeeper-data/src/icons/antkeeper.ico")
  34. configure_file(${PROJECT_SOURCE_DIR}/src/platform/windows/icon.rc.in
  35. ${PROJECT_BINARY_DIR}/src/platform/windows/icon.rc)
  36. # Add executable icon
  37. list(APPEND SOURCE_FILES "${PROJECT_BINARY_DIR}/src/platform/windows/icon.rc")
  38. # Make DPI-aware on Windows
  39. list(APPEND SOURCE_FILES "${PROJECT_SOURCE_DIR}/src/platform/windows/dpi-aware.manifest")
  40. endif()
  41. # Add executable target
  42. set(EXECUTABLE_TARGET ${PROJECT_NAME}-executable)
  43. add_executable(${EXECUTABLE_TARGET} ${SOURCE_FILES})
  44. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
  45. # Add compile definitions
  46. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  47. target_compile_definitions(${EXECUTABLE_TARGET} PRIVATE DEBUG)
  48. else()
  49. target_compile_definitions(${EXECUTABLE_TARGET} PRIVATE NDEBUG)
  50. endif()
  51. # Set C++17 standard
  52. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES
  53. CXX_STANDARD 17
  54. CXX_EXTENSIONS OFF)
  55. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  56. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES COMPILE_FLAGS "-std=c++17")
  57. elseif(MSVC)
  58. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES COMPILE_FLAGS "/std:c++17")
  59. endif()
  60. # Set link flags to show console window on debug builds and hide it on release builds
  61. if(MSVC)
  62. #set_target_properties(${EXECUTABLE_TARGET} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:libvcruntime.lib")
  63. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
  64. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /ENTRY:\"mainCRTStartup\"")
  65. endif(MSVC)
  66. # Set include directories
  67. target_include_directories(${EXECUTABLE_TARGET}
  68. PUBLIC
  69. ${PROJECT_SOURCE_DIR}/src
  70. ${PROJECT_BINARY_DIR}/src)
  71. # Link to dependencies
  72. target_link_libraries(${EXECUTABLE_TARGET} ${STATIC_LIBS} ${SHARED_LIBS})
  73. # Install executable
  74. if(PACKAGE_PLATFORM MATCHES "linux")
  75. install(TARGETS ${EXECUTABLE_TARGET} DESTINATION bin)
  76. elseif(PACKAGE_PLATFORM MATCHES "win")
  77. # Install executable
  78. install(TARGETS ${EXECUTABLE_TARGET} DESTINATION .)
  79. # Install SDL2 DLLs
  80. #if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  81. # get_target_property(SDL2_DLL SDL2::SDL2 IMPORTED_LOCATION_DEBUG)
  82. #else()
  83. # get_target_property(SDL2_DLL SDL2::SDL2 IMPORTED_LOCATION_RELEASE)
  84. #endif()
  85. #install(FILES ${SDL2_DLL} DESTINATION .)
  86. # Install OpenAL DLL
  87. #if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  88. # get_target_property(OPENAL_DLL OpenAL::OpenAL IMPORTED_LOCATION_DEBUG)
  89. #else()
  90. # get_target_property(OPENAL_DLL OpenAL::OpenAL IMPORTED_LOCATION_RELEASE)
  91. #endif()
  92. #install(FILES ${OPENAL_DLL} DESTINATION .)
  93. endif()