From f83a56b17f010785164ecbaaee8f90c74526848c Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Mon, 27 Nov 2023 09:22:11 +0100 Subject: [PATCH] Add FindMoltenVK module --- cmake/SetupVulkan.cmake | 13 +--- cmake/modules/FindMoltenVK.cmake | 76 +++++++++++++++++++ examples/main.cpp | 1 - .../Host/iOS/OpenVulkanoViewController.mm | 3 +- 4 files changed, 79 insertions(+), 14 deletions(-) create mode 100644 cmake/modules/FindMoltenVK.cmake diff --git a/cmake/SetupVulkan.cmake b/cmake/SetupVulkan.cmake index fc8132c..a880584 100644 --- a/cmake/SetupVulkan.cmake +++ b/cmake/SetupVulkan.cmake @@ -1,16 +1,7 @@ function(SetupVulkan TARGET) if (APPLE) - # Try to find xcframework of MoltenVK - cmake_path(SET MoltenVK_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK/") - cmake_path(SET MoltenVK_XC_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK/MoltenVK.xcframework") - if (EXISTS "${MoltenVK_path}" AND EXISTS "${MoltenVK_XC_path}") - if (EXISTS "${MoltenVK_path}/include") - set(Vulkan_INCLUDE_DIR "${MoltenVK_path}/include") - endif() - - target_link_libraries(MadVoxel_Scan PRIVATE "${MoltenVK_XC_path}/ios-arm64/libMoltenVK.a") - message("Found MoltenVK xcframework: ${MoltenVK_XC_path}") - endif() + find_package(MoltenVK REQUIRED) + target_link_libraries(${TARGET} PRIVATE ${MoltenVK_LIBRARIES}) else () find_package(Vulkan REQUIRED) target_link_libraries(${TARGET} PRIVATE Vulkan::Vulkan) diff --git a/cmake/modules/FindMoltenVK.cmake b/cmake/modules/FindMoltenVK.cmake new file mode 100644 index 0000000..ae0ad70 --- /dev/null +++ b/cmake/modules/FindMoltenVK.cmake @@ -0,0 +1,76 @@ +cmake_minimum_required(VERSION 3.28 FATAL_ERROR) + +if (NOT APPLE) + message(STATUS "MoltenVK is only available on Apple platforms") + return() +endif () + +option(MOLTENVK_USE_STATIC "Prefer static linked MoltenVK over dynamic linked version" ON) +option(MOLTENVK_DOWNLOAD "Use FetchContent to download MoltenVK if it failed to find a MoltenVK/Vulkan SDK install" ON) + +# Check if environment variable MOLTENVK_SDK is set +if (NOT DEFINED ENV{MOLTENVK_SDK} AND DEFINED ENV{VULKAN_SDK}) + message(STATUS "Checking for MoltenVK in Vulkan_SDK path") + cmake_path(SET MoltenVK_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK/") +elseif (DEFINED ENV{MOLTENVK_SDK}) + cmake_path(SET MoltenVK_path NORMALIZE "$ENV{MOLTENVK_SDK}/") +endif () +if (NOT IS_DIRECTORY ${MoltenVK_path}) + message(STATUS "${MoltenVK_path} does not exist!") + set(MoltenVK_path) +endif () +if (MOLTENVK_DOWNLOAD AND NOT DEFINED MoltenVK_path) + message(STATUS "Downloading MoltenVK") + include(FetchContent) + FetchContent_Declare(MoltenVK_ALL + URL_HASH SHA256=4252fdd71d511b47a12bc859fe3a9f43e20e77006e5d7eeb9c3732447de1b7b5 + URL https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.6/MoltenVK-all.tar + ) + FetchContent_MakeAvailable(MoltenVK_ALL) + set(MoltenVK_path "${MoltenVK_ALL-SOURCE_DIR}/MoltenVK/") +endif () + +if (NOT DEFINED MoltenVK_path) + message(WARNING "Unable to find path to MoltenVK!") +elseif (IS_DIRECTORY ${MoltenVK_path}) + if (IS_DIRECTORY "${MoltenVK_path}/include") + set(Vulkan_INCLUDE_DIR "${MoltenVK_path}/include") + message(STATUS "Found MoltenVK includes at: ${Vulkan_INCLUDE_DIR}") + endif() + + # Check for framework + set(LEGACY_MoltenVK_XC_path "${MoltenVK_path}/MoltenVK.xcframework") + set(STATIC_MoltenVK_XC_path "${MoltenVK_path}/static/MoltenVK.xcframework") + set(DYNAMIC_MoltenVK_XC_path "${MoltenVK_path}/dynamic/MoltenVK.xcframework") + if (IS_DIRECTORY "${LEGACY_MoltenVK_XC_path}") + set(MoltenVK_XC_path ${LEGACY_MoltenVK_XC_path}) + elseif (IS_DIRECTORY "${STATIC_MoltenVK_XC_path}" AND MOLTENVK_USE_STATIC) + set(MoltenVK_XC_path ${STATIC_MoltenVK_XC_path}) + elseif (IS_DIRECTORY "${DYNAMIC_MoltenVK_XC_path}") + set(MoltenVK_XC_path ${DYNAMIC_MoltenVK_XC_path}) + endif () + if (DEFINED MoltenVK_XC_path) + message("Found MoltenVK xcframework at: ${MoltenVK_XC_path}") + set(Vulkan_LIBRARIES ${MoltenVK_XC_path}) + endif () +else () + message(WARNING "Provided path ${MoltenVK_path} does not exist!") +endif () + +include(FindPackageHandleStandardArgs) +#TODO handle version +find_package_handle_standard_args(MoltenVK + DEFAULT_MSG + Vulkan_INCLUDE_DIR + Vulkan_LIBRARIES +) + +if(MoltenVK_FOUND) + set(MoltenVK_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR}) + set(MoltenVK_LIBRARIES ${Vulkan_LIBRARIES}) +else() + set(MoltenVK_INCLUDE_DIRS) + set(MoltenVK_LIBRARIES) +endif() + +mark_as_advanced(MoltenVK_path LEGACY_MoltenVK_XC_path STATIC_MoltenVK_XC_path DYNAMIC_MoltenVK_XC_path MoltenVK_XC_path) \ No newline at end of file diff --git a/examples/main.cpp b/examples/main.cpp index ad8ae41..acc1b76 100644 --- a/examples/main.cpp +++ b/examples/main.cpp @@ -5,7 +5,6 @@ */ #include "Host/GraphicsAppManager.hpp" -#include "Base/EngineConfiguration.hpp" #include "ExampleApps/CubesExampleApp.hpp" using namespace OpenVulkano; diff --git a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm index 873bb95..20f6237 100644 --- a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm +++ b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm @@ -8,7 +8,6 @@ #include #include "Host/GraphicsAppManager.hpp" -#include "ExampleApps/CubesExampleApp.hpp" #include "Base/UI/IVulkanWindow.hpp" #import @@ -128,7 +127,7 @@ public: } -(void*) makeGraphicsApp { - return CubesExampleApp::Create(); + return nullptr; } -(void) dealloc {