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) include(cmake/SetShaderDependency.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() set(BASH_EXECUTABLE "" CACHE FILEPATH "Path to bash executable") if ("${BASH_EXECUTABLE}" STREQUAL "") find_program(BASH_PROGRAM bash NO_CACHE REQUIRED) set(BASH_EXECUTABLE ${BASH_PROGRAM} CACHE FILEPATH "Path to bash executable" FORCE) endif() set(ROOT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/TryCompileShaders.cmake.in ${CMAKE_BINARY_DIR}/TryCompileShaders.cmake @ONLY) execute_process(COMMAND ${BASH_EXECUTABLE} CompileShaders.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Scripts) 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/*.h" "openVulkanoCpp/*.c" "openVulkanoCpp/*.hpp" "openVulkanoCpp/*.cpp" "examples/*.hpp" "examples/*.cpp") add_executable(openVulkanoCpp examples/main.cpp) endif() FilterPlatformPaths(sources) SetWarningSettings(openVulkanoCpp) set_property(TARGET openVulkanoCpp PROPERTY CXX_STANDARD 20) 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) # grabs libcurl.dll libssl-1_1-x64.dll libcrypto-1_1-x64.dll # TODO: statically link libcurl and it's dependencies file(GLOB_RECURSE DLLS "${CMAKE_BINARY_DIR}/deps_curl/INSTALL/bin/*.dll") foreach(DLL ${DLLS}) add_custom_command(TARGET openVulkanoCpp POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DLL} $ ) endforeach() set(CURL_STATIC_LIBS ${CMAKE_BINARY_DIR}/deps_curl/deps_curl) file(GLOB_RECURSE LIBS "${CURL_STATIC_LIBS}/*.lib") target_link_libraries(openVulkanoCpp PRIVATE ${LIBS}) endif () SetupVulkan(openVulkanoCpp) SetShaderDependency(openVulkanoCpp ${CMAKE_CURRENT_SOURCE_DIR}/openVulkanoCpp/Shader ${CMAKE_CURRENT_SOURCE_DIR}/openVulkanoCpp/GeneratedShaderData) 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 unordered_dense Boost::regex) LinkCurl(openVulkanoCpp) 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)