CMakeLists.txt 2.0 KB

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