Add FindMoltenVK module
This commit is contained in:
@@ -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)
|
||||
|
||||
76
cmake/modules/FindMoltenVK.cmake
Normal file
76
cmake/modules/FindMoltenVK.cmake
Normal file
@@ -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)
|
||||
@@ -5,7 +5,6 @@
|
||||
*/
|
||||
|
||||
#include "Host/GraphicsAppManager.hpp"
|
||||
#include "Base/EngineConfiguration.hpp"
|
||||
#include "ExampleApps/CubesExampleApp.hpp"
|
||||
|
||||
using namespace OpenVulkano;
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <MoltenVK/mvk_vulkan.h>
|
||||
#include "Host/GraphicsAppManager.hpp"
|
||||
#include "ExampleApps/CubesExampleApp.hpp"
|
||||
#include "Base/UI/IVulkanWindow.hpp"
|
||||
|
||||
#import <MetalKit/MTKView.h>
|
||||
@@ -128,7 +127,7 @@ public:
|
||||
}
|
||||
|
||||
-(void*) makeGraphicsApp {
|
||||
return CubesExampleApp::Create();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
-(void) dealloc {
|
||||
|
||||
Reference in New Issue
Block a user