CMakeLists.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. cmake_minimum_required(VERSION 3.28)
  2. project(gamingcore CXX)
  3. add_subdirectory(glfw SYSTEM)
  4. set(CMAKE_CXX_STANDARD 23)
  5. set(SRC
  6. "src/Image.cpp"
  7. "src/Network.cpp"
  8. "src/VulkanBase.cpp"
  9. "src/VulkanUtility.cpp"
  10. "src/VulkanWrapper.cpp"
  11. "src/WindowManager.cpp"
  12. )
  13. set(SRC_TESTS
  14. "test/Main.cpp"
  15. "test/modules/ImageTests.cpp"
  16. "test/modules/NetworkTests.cpp"
  17. "test/modules/WindowManagerTests.cpp"
  18. )
  19. if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  20. set(COMPILE_OPTIONS "")
  21. set(LINK_OPTIONS "")
  22. set(LOG_LEVEL 2)
  23. set(DEFINITIONS CHECK_MEMORY)
  24. else()
  25. set(DEFINITIONS ERROR_SIMULATOR CHECK_MEMORY DEBUG_VULKAN)
  26. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  27. set(COMPILE_OPTIONS --coverage)
  28. set(LINK_OPTIONS gcov)
  29. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  30. set(COMPILE_OPTIONS -fprofile-instr-generate -fcoverage-mapping)
  31. set(LINK_OPTIONS ${COMPILE_OPTIONS})
  32. endif()
  33. set(LOG_LEVEL 4)
  34. list(APPEND SRC "src/ErrorSimulator.cpp")
  35. endif()
  36. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  37. include("cmake/gcc_warnings.cmake")
  38. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  39. include("cmake/clang_warnings.cmake")
  40. endif()
  41. add_library(gamingcore STATIC ${SRC})
  42. target_compile_options(gamingcore PUBLIC
  43. ${COMPILE_OPTIONS}
  44. ${WARNINGS}
  45. -fdiagnostics-color=always
  46. )
  47. target_compile_definitions(gamingcore
  48. PRIVATE LOG_LEVEL=${LOG_LEVEL}
  49. PUBLIC ${DEFINITIONS}
  50. )
  51. target_link_libraries(gamingcore
  52. PRIVATE core glfw vulkan ${LINK_OPTIONS}
  53. )
  54. target_include_directories(gamingcore SYSTEM
  55. PUBLIC enet/include
  56. PUBLIC stb
  57. PUBLIC glfw/include
  58. )
  59. target_sources(gamingcore PUBLIC
  60. FILE_SET CXX_MODULES
  61. BASE_DIRS ${CMAKE_INSTALL_PREFIX}/modules
  62. FILES
  63. "${CMAKE_INSTALL_PREFIX}/modules/Array.cppm"
  64. "${CMAKE_INSTALL_PREFIX}/modules/AlignedData.cppm"
  65. "${CMAKE_INSTALL_PREFIX}/modules/ArrayList.cppm"
  66. "${CMAKE_INSTALL_PREFIX}/modules/BitArray.cppm"
  67. "${CMAKE_INSTALL_PREFIX}/modules/Box.cppm"
  68. "${CMAKE_INSTALL_PREFIX}/modules/Buffer.cppm"
  69. "${CMAKE_INSTALL_PREFIX}/modules/Clock.cppm"
  70. "${CMAKE_INSTALL_PREFIX}/modules/Color.cppm"
  71. "${CMAKE_INSTALL_PREFIX}/modules/Components.cppm"
  72. "${CMAKE_INSTALL_PREFIX}/modules/File.cppm"
  73. "${CMAKE_INSTALL_PREFIX}/modules/Frustum.cppm"
  74. "${CMAKE_INSTALL_PREFIX}/modules/HashMap.cppm"
  75. "${CMAKE_INSTALL_PREFIX}/modules/HashedString.cppm"
  76. "${CMAKE_INSTALL_PREFIX}/modules/List.cppm"
  77. "${CMAKE_INSTALL_PREFIX}/modules/Logger.cppm"
  78. "${CMAKE_INSTALL_PREFIX}/modules/Math.cppm"
  79. "${CMAKE_INSTALL_PREFIX}/modules/Matrix.cppm"
  80. "${CMAKE_INSTALL_PREFIX}/modules/Meta.cppm"
  81. "${CMAKE_INSTALL_PREFIX}/modules/Plane.cppm"
  82. "${CMAKE_INSTALL_PREFIX}/modules/Quaternion.cppm"
  83. "${CMAKE_INSTALL_PREFIX}/modules/Queue.cppm"
  84. "${CMAKE_INSTALL_PREFIX}/modules/Random.cppm"
  85. "${CMAKE_INSTALL_PREFIX}/modules/ReadLine.cppm"
  86. "${CMAKE_INSTALL_PREFIX}/modules/Terminal.cppm"
  87. "${CMAKE_INSTALL_PREFIX}/modules/Test.cppm"
  88. "${CMAKE_INSTALL_PREFIX}/modules/Thread.cppm"
  89. "${CMAKE_INSTALL_PREFIX}/modules/ToString.cppm"
  90. "${CMAKE_INSTALL_PREFIX}/modules/Types.cppm"
  91. "${CMAKE_INSTALL_PREFIX}/modules/Unicode.cppm"
  92. "${CMAKE_INSTALL_PREFIX}/modules/UniquePointer.cppm"
  93. "${CMAKE_INSTALL_PREFIX}/modules/Utility.cppm"
  94. "${CMAKE_INSTALL_PREFIX}/modules/Vector.cppm"
  95. "${CMAKE_INSTALL_PREFIX}/modules/View.cppm"
  96. )
  97. target_link_directories(gamingcore
  98. PUBLIC ${CMAKE_INSTALL_PREFIX}/lib
  99. )
  100. target_sources(gamingcore PUBLIC
  101. FILE_SET HEADERS
  102. BASE_DIRS include
  103. FILES
  104. ./include/core/Image.hpp
  105. ./include/core/Network.hpp
  106. ./include/core/VulkanBase.hpp
  107. ./include/core/VulkanWrapper.hpp
  108. ./include/core/WindowManager.hpp
  109. )
  110. install(TARGETS gamingcore FILE_SET HEADERS)
  111. include("cmake/add_shader.cmake")
  112. add_shader(NAME vertex SOURCES shaders/vertex.vert.glsl)
  113. add_shader(NAME fragment SOURCES shaders/fragment.frag.glsl)
  114. add_executable(test ${SRC_TESTS})
  115. target_link_libraries(test PRIVATE gamingcore)
  116. target_compile_definitions(test
  117. PRIVATE LOG_LEVEL=4
  118. )