|
| 1 | +# Simple CMake script to compile MoltenVK with SPIRV-Cross as a shared library target |
| 2 | + |
| 3 | +# Prepare MoltenVK Git revision |
| 4 | +find_package(Git) |
| 5 | +if(GIT_FOUND) |
| 6 | + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD |
| 7 | + OUTPUT_VARIABLE MVK_GIT_REV |
| 8 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK |
| 9 | + ERROR_QUIET |
| 10 | + OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 11 | +endif() |
| 12 | +set(MVK_GENERATED_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}/Generated) |
| 13 | +file(WRITE ${MVK_GENERATED_INCLUDES}/mvkGitRevDerived.h "static const char* mvkRevString = \"${MVK_GIT_REV}\";") |
| 14 | +message(STATUS "MoltenVK revision: ${MVK_GIT_REV}") |
| 15 | + |
| 16 | +# Prepare MoltenVK version |
| 17 | +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/MoltenVK/API/mvk_private_api.h MVK_PRIVATE_API) |
| 18 | +string(REGEX MATCH "#define MVK_VERSION_MAJOR [0-9]+" MVK_VERSION_MAJOR_LINE "${MVK_PRIVATE_API}") |
| 19 | +string(REGEX MATCH "[0-9]+" MVK_VERSION_MAJOR "${MVK_VERSION_MAJOR_LINE}") |
| 20 | +string(REGEX MATCH "#define MVK_VERSION_MINOR [0-9]+" MVK_VERSION_MINOR_LINE "${MVK_PRIVATE_API}") |
| 21 | +string(REGEX MATCH "[0-9]+" MVK_VERSION_MINOR "${MVK_VERSION_MINOR_LINE}") |
| 22 | +string(REGEX MATCH "#define MVK_VERSION_PATCH [0-9]+" MVK_VERSION_PATCH_LINE "${MVK_PRIVATE_API}") |
| 23 | +string(REGEX MATCH "[0-9]+" MVK_VERSION_PATCH "${MVK_VERSION_PATCH_LINE}") |
| 24 | +set(MVK_VERSION "${MVK_VERSION_MAJOR}.${MVK_VERSION_MINOR}.${MVK_VERSION_PATCH}") |
| 25 | +message(STATUS "MoltenVK version: ${MVK_VERSION}") |
| 26 | + |
| 27 | +# Find required system libraries |
| 28 | +find_library(APPKIT_LIBRARY AppKit REQUIRED) |
| 29 | +find_library(FOUNDATION_LIBRARY Foundation REQUIRED) |
| 30 | +find_library(IOKIT_LIBRARY IOKit REQUIRED) |
| 31 | +find_library(IOSURFACE_LIBRARY IOSurface REQUIRED) |
| 32 | +find_library(METAL_LIBRARY Metal REQUIRED) |
| 33 | +find_library(QUARTZCORE_LIBRARY QuartzCore REQUIRED) |
| 34 | + |
| 35 | +# SPIRV-Cross |
| 36 | +option(SPIRV_CROSS_CLI "" OFF) |
| 37 | +option(SPIRV_CROSS_ENABLE_TESTS "" OFF) |
| 38 | +option(SPIRV_CROSS_ENABLE_HLSL "" OFF) |
| 39 | +option(SPIRV_CROSS_ENABLE_CPP "" OFF) |
| 40 | +option(SPIRV_CROSS_SKIP_INSTALL "" ON) |
| 41 | +add_subdirectory(SPIRV-Cross) |
| 42 | + |
| 43 | +# Common |
| 44 | +set(MVK_COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/Common) |
| 45 | +file(GLOB_RECURSE MVK_COMMON_SOURCES CONFIGURE_DEPENDS |
| 46 | + ${MVK_COMMON_DIR}/*.cpp |
| 47 | + ${MVK_COMMON_DIR}/*.m |
| 48 | + ${MVK_COMMON_DIR}/*.mm) |
| 49 | +set(MVK_COMMON_INCLUDES ${MVK_COMMON_DIR}) |
| 50 | + |
| 51 | +add_library(MoltenVKCommon STATIC ${MVK_COMMON_SOURCES}) |
| 52 | +target_include_directories(MoltenVKCommon PUBLIC ${MVK_COMMON_INCLUDES}) |
| 53 | +target_compile_options(MoltenVKCommon PRIVATE -w) |
| 54 | + |
| 55 | +# MoltenVKShaderConverter |
| 56 | +set(MVK_SHADER_CONVERTER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVKShaderConverter) |
| 57 | +file(GLOB_RECURSE MVK_SHADER_CONVERTER_SOURCES CONFIGURE_DEPENDS |
| 58 | + ${MVK_SHADER_CONVERTER_DIR}/MoltenVKShaderConverter/*.cpp |
| 59 | + ${MVK_SHADER_CONVERTER_DIR}/MoltenVKShaderConverter/*.m |
| 60 | + ${MVK_SHADER_CONVERTER_DIR}/MoltenVKShaderConverter/*.mm) |
| 61 | +set(MVK_SHADER_CONVERTER_INCLUDES ${MVK_SHADER_CONVERTER_DIR} ${MVK_SHADER_CONVERTER_DIR}/include) |
| 62 | + |
| 63 | +add_library(MoltenVKShaderConverter STATIC ${MVK_SHADER_CONVERTER_SOURCES}) |
| 64 | +target_include_directories(MoltenVKShaderConverter PUBLIC ${MVK_SHADER_CONVERTER_INCLUDES}) |
| 65 | +target_compile_options(MoltenVKShaderConverter PRIVATE -w) |
| 66 | +target_link_libraries(MoltenVKShaderConverter PRIVATE spirv-cross-msl spirv-cross-reflect MoltenVKCommon) |
| 67 | +target_compile_definitions(MoltenVKShaderConverter PRIVATE MVK_EXCLUDE_SPIRV_TOOLS=1) |
| 68 | + |
| 69 | +# MoltenVK |
| 70 | +set(MVK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK) |
| 71 | +file(GLOB_RECURSE MVK_SOURCES CONFIGURE_DEPENDS |
| 72 | + ${MVK_DIR}/MoltenVK/*.cpp |
| 73 | + ${MVK_DIR}/MoltenVK/*.m |
| 74 | + ${MVK_DIR}/MoltenVK/*.mm) |
| 75 | +file(GLOB MVK_SRC_INCLUDES LIST_DIRECTORIES ON ${MVK_DIR}/MoltenVK/*) |
| 76 | +set(MVK_INCLUDES |
| 77 | + ${MVK_SRC_INCLUDES} ${MVK_GENERATED_INCLUDES} ${MVK_DIR}/include |
| 78 | + ${UNLEASHED_RECOMP_THIRDPARTY_ROOT}/Vulkan-Headers/include) |
| 79 | + |
| 80 | +add_library(MoltenVK SHARED ${MVK_SOURCES}) |
| 81 | +target_include_directories(MoltenVK PRIVATE ${MVK_INCLUDES}) |
| 82 | +target_compile_options(MoltenVK PRIVATE -w) |
| 83 | +target_link_libraries(MoltenVK PRIVATE |
| 84 | + ${APPKIT_LIBRARY} ${FOUNDATION_LIBRARY} ${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} ${METAL_LIBRARY} ${QUARTZCORE_LIBRARY} |
| 85 | + spirv-cross-msl MoltenVKCommon MoltenVKShaderConverter) |
| 86 | +target_compile_definitions(MoltenVK PRIVATE MVK_FRAMEWORK_VERSION=${MVK_VERSION} MVK_USE_CEREAL=0) |
0 commit comments