cmake_minimum_required(VERSION 3.28 FATAL_ERROR) include(cmake/SetCompilerSettings.cmake) include(cmake/SetupVulkan.cmake) include(cmake/Filter.cmake) set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) if(LINUX) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) endif() 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) 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 target_link_libraries(openVulkanoCpp PRIVATE "-framework CoreFoundation" PRIVATE "-framework Foundation" PRIVATE "-framework CoreImage" PRIVATE "-framework CoreVideo" PRIVATE "-framework Metal" PRIVATE "-framework MetalPerformanceShaders" PRIVATE "-framework ARKit" PRIVATE "-lstdc++" PRIVATE c++ PRIVATE c ) # Locate system libraries on iOS find_library(UIKIT UIKit) find_library(FOUNDATION Foundation) find_library(MOBILECORESERVICES MobileCoreServices) find_library(CFNETWORK CFNetwork) find_library(SYSTEMCONFIGURATION SystemConfiguration) # link the frameworks located above target_link_libraries(openVulkanoCpp PRIVATE ${UIKIT}) target_link_libraries(openVulkanoCpp PRIVATE ${FOUNDATION}) target_link_libraries(openVulkanoCpp PRIVATE ${MOBILECORESERVICES}) target_link_libraries(openVulkanoCpp PRIVATE ${CFNETWORK}) target_link_libraries(openVulkanoCpp PRIVATE ${SYSTEMCONFIGURATION}) endif () #Setup Vulkan SetupVulkan(openVulkanoCpp) set_property(TARGET openVulkanoCpp PROPERTY CXX_STANDARD 17) if (NOT ANDROID AND NOT IOS) Find_Package(libjpeg-turbo) target_include_directories(openVulkanoCpp PRIVATE ${OpenCV_INCLUDE_DIRS}) target_link_libraries(openVulkanoCpp PRIVATE glfw ${OpenCV_LIBS} pugixml) if (libjpeg-turbo_FOUND) target_link_libraries(openVulkanoCpp PRIVATE libjpeg-turbo::turbojpeg) endif() target_link_libraries(openVulkanoCpp PRIVATE assimp) add_compile_definitions(GLM_FORCE_AVX2) target_link_libraries(openVulkanoCpp PRIVATE ftxui::screen ftxui::dom ftxui::component) endif() list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) if (IOS) target_link_libraries(openVulkanoCpp PRIVATE "/opt/libjpeg-turbo-ios/lib/libturbojpeg.a") target_include_directories(openVulkanoCpp PRIVATE "/opt/libjpeg-turbo-ios/include") endif () if (LINUX) find_package(spdlog) find_package(fmt) find_package(yaml-cpp) target_link_libraries(openVulkanoCpp PRIVATE fmt) endif() find_package(LibArchive REQUIRED) set(ZLIB_USE_STATIC_LIBS ON) find_package(ZLIB REQUIRED) target_include_directories(openVulkanoCpp PRIVATE ${LibArchive_INCLUDE_DIR}) target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp spdlog glm pugixml ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} stb eigen utf8cpp imgui_internal TracyClient stud-uuid) add_compile_definitions(GLM_FORCE_INTRINSICS) add_compile_definitions(GLM_FORCE_SILENT_WARNINGS) add_compile_definitions(LIBARCHIVE_STATIC) if(CMAKE_BUILD_TYPE STREQUAL "Debug") add_compile_definitions(DEBUG) endif()