💿🐜 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.

126 lines
3.9 KiB

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