cmake_minimum_required(VERSION 3.28 FATAL_ERROR) option(USE_ASSIMP "If assimp should be used" ON) include(cmake/VarsFromFile.cmake) include(cmake/SetCompilerSettings.cmake) include(cmake/SetupVulkan.cmake) include(cmake/Filter.cmake) include(cmake/AppleHelper.cmake) set(DEPENDENCY_MIRROR_FILE "DependencyMirrors.txt" CACHE STRING "Dependency mirror") VarsFromFile("${DEPENDENCY_MIRROR_FILE}") # Load mirror list (for CICD) set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) if(LINUX) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") option(TRACY_ENABLE "Enable Tracy Profiler" OFF) add_subdirectory(3rdParty) project (openVulkanoCpp VERSION 1.0 LANGUAGES C CXX) if(NOT IOS) SetOutputDirs("${CMAKE_SOURCE_DIR}/bin") endif() SetOptimisationSettings() if(IOS) set(CMAKE_Swift_LANGUAGE_VERSION 5.0) enable_language(Swift) file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.mm" "openVulkanoCpp/*.m" "openVulkanoCpp/*.c" "openVulkanoCpp/*.cpp" "openVulkanoCpp/*.swift") file(GLOB_RECURSE resources CONFIGURE_DEPENDS "openVulkanoCpp/*.storyboard" "openVulkanoCpp/*.xib") add_executable(openVulkanoCpp examples/main.m ${resources}) else() file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.c" "openVulkanoCpp/*.cpp" "examples/*.cpp") add_executable(openVulkanoCpp examples/main.cpp ${resources}) endif() FilterPlatformPaths(sources) SetWarningSettings(openVulkanoCpp) set_property(TARGET openVulkanoCpp PROPERTY CXX_STANDARD 17) target_sources(openVulkanoCpp PRIVATE ${sources}) target_include_directories(openVulkanoCpp PUBLIC openVulkanoCpp) # Setup IOS if(IOS) set(APP_BUNDLE_IDENTIFIER "eu.georgh93.openVulkano") set(MACOSX_BUNDLE_INFO_STRING ${APP_BUNDLE_IDENTIFIER}) set(MACOSX_BUNDLE_GUI_IDENTIFIER ${APP_BUNDLE_IDENTIFIER}) set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_BUNDLE_IDENTIFIER}) set(CMAKE_OSX_DEPLOYMENT_TARGET "14.1") # The used ARKit features are only available starting with iOS 14 LinkAppleFrameworks(openVulkanoCpp) endif () if (WIN32) # Ws2 target_link_libraries(openVulkanoCpp PRIVATE Ws2_32) file(GLOB_RECURSE DLLS "${CMAKE_BINARY_DIR}/*.dll") if (CMAKE_BUILD_TYPE STREQUAL "Release") set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}" ) elseif (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL}" ) elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO}" ) elseif (CMAKE_BUILD_TYPE STREQUAL "Debug") set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}" ) else () set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) endif() foreach(DLL ${DLLS}) add_custom_command(TARGET openVulkanoCpp POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DLL} ${EXE_OUTPUT_DIR} ) endforeach() endif () SetupVulkan(openVulkanoCpp) if (NOT ANDROID AND NOT IOS) target_link_libraries(openVulkanoCpp PRIVATE glfw pugixml) target_link_libraries(openVulkanoCpp PRIVATE ftxui::screen ftxui::dom ftxui::component) endif() list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal TracyClient stud-uuid ryml) LinkCurl(openVulkanoCpp ${CMAKE_BINARY_DIR}) add_compile_definitions(LIBARCHIVE_STATIC) add_compile_definitions(NOMINMAX) if(CMAKE_BUILD_TYPE STREQUAL "Debug") add_compile_definitions(DEBUG) endif() SetGlmDefines(openVulkanoCpp) LinkAssimp(openVulkanoCpp) LinkLibArchive(openVulkanoCpp) LinkLibJpegTurbo(openVulkanoCpp) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT openVulkanoCpp)