cmake_minimum_required(VERSION 3.20) project(cyrusengine_imperial VERSION 0.1.0 LANGUAGES C CXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(CYRUSENGINE_BUILD_PLAYGROUND "Build the playground executable" ON) find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) find_package(Threads REQUIRED) find_package(PkgConfig REQUIRED) pkg_check_modules(GLFW3 REQUIRED IMPORTED_TARGET glfw3) file(GLOB_RECURSE CYRUSENGINE_SOURCES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/src/graphics/*.cpp" "${PROJECT_SOURCE_DIR}/src/ecs/*.cpp" "${PROJECT_SOURCE_DIR}/src/physics/*.cpp" "${PROJECT_SOURCE_DIR}/src/3rdparty/Box2D/*.cpp" ) list(APPEND CYRUSENGINE_SOURCES "${PROJECT_SOURCE_DIR}/src/Base.cpp" "${PROJECT_SOURCE_DIR}/src/CyrusEngine.cpp" "${PROJECT_SOURCE_DIR}/src/3rdparty/freetype2/freetype_amalgam.c" ) file(GLOB STB_SOURCES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/src/3rdparty/stb_collection/*.c" ) list(APPEND CYRUSENGINE_SOURCES ${STB_SOURCES}) add_library(cyrusengine STATIC ${CYRUSENGINE_SOURCES}) add_library(CyrusEngine::CyrusEngine ALIAS cyrusengine) target_compile_features(cyrusengine PUBLIC cxx_std_23) target_include_directories(cyrusengine PUBLIC "${PROJECT_SOURCE_DIR}/src" "${PROJECT_SOURCE_DIR}/src/3rdparty" "${PROJECT_SOURCE_DIR}/src/3rdparty/freetype2/include" "${PROJECT_SOURCE_DIR}/src/3rdparty/entt" "${PROJECT_SOURCE_DIR}/src/3rdparty/glm" ) target_link_libraries(cyrusengine PUBLIC OpenGL::GL GLEW::GLEW PkgConfig::GLFW3 ) if(CYRUSENGINE_BUILD_PLAYGROUND) pkg_check_modules(SNDFILE REQUIRED IMPORTED_TARGET sndfile) pkg_check_modules(VORBISFILE REQUIRED IMPORTED_TARGET vorbisfile) pkg_check_modules(PORTAUDIO REQUIRED IMPORTED_TARGET portaudio-2.0) file(GLOB PLAYGROUND_SOURCES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/examples/playground/*.cpp" ) add_executable(playground ${PLAYGROUND_SOURCES}) target_compile_features(playground PRIVATE cxx_std_23) target_include_directories(playground PRIVATE "${PROJECT_SOURCE_DIR}/examples" "${PROJECT_SOURCE_DIR}/src" "${PROJECT_SOURCE_DIR}/src/3rdparty" "${PROJECT_SOURCE_DIR}/src/3rdparty/freetype2/include" "${PROJECT_SOURCE_DIR}/src/3rdparty/entt" "${PROJECT_SOURCE_DIR}/src/3rdparty/glm" "${PROJECT_SOURCE_DIR}/src/3rdparty/microui" ) target_link_libraries(playground PRIVATE CyrusEngine::CyrusEngine PkgConfig::SNDFILE PkgConfig::VORBISFILE PkgConfig::PORTAUDIO Threads::Threads ${CMAKE_DL_LIBS} ) endif()