CMakeLists.txt 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. cmake_minimum_required(VERSION 3.25)
  2. project(gaming_core C)
  3. add_subdirectory(glfw SYSTEM)
  4. set(CMAKE_C_STANDARD 23)
  5. set(SRC
  6. "src/Image.c"
  7. "src/Network.c"
  8. "src/WindowManager.c"
  9. )
  10. set(SRC_TESTS
  11. "test/Main.c"
  12. "test/modules/ImageTests.c"
  13. "test/modules/NetworkTests.c"
  14. "test/modules/WindowManagerTests.c"
  15. )
  16. if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  17. set(COMPILE_OPTIONS "")
  18. set(LINK_OPTIONS "")
  19. set(LOG_LEVEL 2)
  20. set(DEFINITIONS CORE_CHECK_MEMORY)
  21. else()
  22. set(DEFINITIONS ERROR_SIMULATOR CORE_CHECK_MEMORY)
  23. if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
  24. set(COMPILE_OPTIONS --coverage)
  25. set(LINK_OPTIONS gcov)
  26. elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
  27. set(COMPILE_OPTIONS -fprofile-instr-generate -fcoverage-mapping)
  28. set(LINK_OPTIONS ${COMPILE_OPTIONS})
  29. endif()
  30. set(LOG_LEVEL 4)
  31. list(APPEND SRC "src/ErrorSimulator.c")
  32. endif()
  33. if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
  34. include("cmake/gcc_warnings.cmake")
  35. set(DEFINITIONS ${DEFINITIONS}
  36. bool=_Bool
  37. true=1
  38. false=0
  39. nullptr=0
  40. static_assert=_Static_assert
  41. )
  42. elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
  43. include("cmake/clang_warnings.cmake")
  44. endif()
  45. add_library(gaming_core STATIC ${SRC})
  46. target_compile_options(gaming_core PUBLIC
  47. ${COMPILE_OPTIONS}
  48. ${WARNINGS}
  49. -fdiagnostics-color=always
  50. )
  51. target_compile_definitions(gaming_core
  52. PUBLIC CORE_LOG_LEVEL=${LOG_LEVEL}
  53. PUBLIC ${DEFINITIONS}
  54. )
  55. target_link_libraries(gaming_core
  56. PRIVATE m core glfw vulkan ${LINK_OPTIONS}
  57. )
  58. target_include_directories(gaming_core SYSTEM
  59. PUBLIC ${CMAKE_INSTALL_PREFIX}/include
  60. PUBLIC enet/include
  61. PUBLIC stb
  62. PUBLIC glfw/include
  63. )
  64. target_link_directories(gaming_core SYSTEM
  65. PUBLIC ${CMAKE_INSTALL_PREFIX}/lib
  66. )
  67. target_sources(gaming_core PUBLIC
  68. FILE_SET HEADERS
  69. BASE_DIRS include
  70. FILES
  71. ./include/core/Image.h
  72. ./include/core/Network.h
  73. ./include/core/WindowManager.h
  74. )
  75. install(TARGETS gaming_core FILE_SET HEADERS)
  76. add_executable(test ${SRC_TESTS})
  77. target_link_libraries(test PRIVATE gaming_core)