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() 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 ) target_sources(gamingcore PUBLIC FILE_SET CXX_MODULES BASE_DIRS ${CMAKE_INSTALL_PREFIX}/modules FILES "${CMAKE_INSTALL_PREFIX}/modules/Array.cppm" "${CMAKE_INSTALL_PREFIX}/modules/AlignedData.cppm" "${CMAKE_INSTALL_PREFIX}/modules/ArrayList.cppm" "${CMAKE_INSTALL_PREFIX}/modules/BitArray.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Box.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Buffer.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Clock.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Color.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Components.cppm" "${CMAKE_INSTALL_PREFIX}/modules/File.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Frustum.cppm" "${CMAKE_INSTALL_PREFIX}/modules/HashMap.cppm" "${CMAKE_INSTALL_PREFIX}/modules/HashedString.cppm" "${CMAKE_INSTALL_PREFIX}/modules/List.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Logger.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Math.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Matrix.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Meta.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Plane.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Quaternion.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Queue.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Random.cppm" "${CMAKE_INSTALL_PREFIX}/modules/ReadLine.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Terminal.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Test.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Thread.cppm" "${CMAKE_INSTALL_PREFIX}/modules/ToString.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Types.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Unicode.cppm" "${CMAKE_INSTALL_PREFIX}/modules/UniquePointer.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Utility.cppm" "${CMAKE_INSTALL_PREFIX}/modules/Vector.cppm" "${CMAKE_INSTALL_PREFIX}/modules/View.cppm" ) target_link_directories(gamingcore PUBLIC ${CMAKE_INSTALL_PREFIX}/lib ) target_sources(gamingcore PUBLIC FILE_SET HEADERS BASE_DIRS include FILES ./include/core/Image.hpp ./include/core/Network.hpp ./include/core/VulkanBase.hpp ./include/core/VulkanWrapper.hpp ./include/core/WindowManager.hpp ) install(TARGETS gamingcore FILE_SET HEADERS) 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 )