cmake_minimum_required(VERSION 3.28) project(gamingcore CXX) add_subdirectory(glfw SYSTEM) set(CMAKE_CXX_STANDARD 23) set(SRC "src/Image.cpp" "src/Network.cpp" "src/VulkanBase.cpp" "src/VulkanUtility.cpp" "src/VulkanWrapper.cpp" "src/WindowManager.cpp" ) set(SRC_TESTS "test/Main.cpp" "test/modules/ImageTests.cpp" "test/modules/NetworkTests.cpp" "test/modules/WindowManagerTests.cpp" ) if("${CMAKE_BUILD_TYPE}" STREQUAL "Release") set(COMPILE_OPTIONS "") set(LINK_OPTIONS "") set(LOG_LEVEL 2) set(DEFINITIONS CHECK_MEMORY) else() set(DEFINITIONS ERROR_SIMULATOR CHECK_MEMORY DEBUG_VULKAN) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(COMPILE_OPTIONS --coverage) set(LINK_OPTIONS gcov) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(COMPILE_OPTIONS -fprofile-instr-generate -fcoverage-mapping) set(LINK_OPTIONS ${COMPILE_OPTIONS}) endif() set(LOG_LEVEL 4) list(APPEND SRC "src/ErrorSimulator.cpp") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") include("cmake/gcc_warnings.cmake") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") include("cmake/clang_warnings.cmake") endif() include("${CMAKE_INSTALL_PREFIX}/cmake/add_modules.cmake") add_library(gamingcore STATIC ${SRC}) target_compile_options(gamingcore PUBLIC ${COMPILE_OPTIONS} ${WARNINGS} -fdiagnostics-color=always ) target_compile_definitions(gamingcore PRIVATE LOG_LEVEL=${LOG_LEVEL} PUBLIC ${DEFINITIONS} ) target_link_libraries(gamingcore PRIVATE core glfw vulkan ${LINK_OPTIONS} ) target_include_directories(gamingcore SYSTEM PUBLIC enet/include PUBLIC stb PUBLIC glfw/include ) add_modules( TARGET gamingcore NAME core_modules PREFIX ${CMAKE_INSTALL_PREFIX}/ FILES ${core_modules} ) add_modules( TARGET gamingcore NAME gamingcore_modules FILES modules/Image.cppm modules/Network.cppm modules/Vulkan.cppm modules/VulkanBase.cppm modules/VulkanWrapper.cppm modules/VulkanUtility.cppm modules/WindowManager.cppm ) add_modules( TARGET gamingcore NAME gamingcore_private_modules FILES src/GLFW.cppm ) target_link_directories(gamingcore PUBLIC ${CMAKE_INSTALL_PREFIX}/lib ) include("cmake/add_shader.cmake") add_shader(NAME vertex SOURCES shaders/vertex.vert.glsl) add_shader(NAME fragment SOURCES shaders/fragment.frag.glsl) add_executable(test ${SRC_TESTS}) target_link_libraries(test PRIVATE gamingcore) target_compile_definitions(test PRIVATE LOG_LEVEL=4 )