CMakeLists.txt 2.0 KB

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