Skip to content

Commit 7aa95f4

Browse files
JarrettSJohnsoncharles-lunarg
authored andcommitted
Introduce optional APPLE_USE_SYSTEM_ICD for runtime icd discovery on APPLE
1 parent 4793237 commit 7aa95f4

File tree

3 files changed

+79
-61
lines changed

3 files changed

+79
-61
lines changed

cube/CMakeLists.txt

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,42 @@
1616
# ~~~
1717

1818
if(APPLE)
19-
set(MOLTENVK_REPO_ROOT "MOLTENVK-NOTFOUND" CACHE PATH "Absolute path to a MoltenVK repo directory")
20-
if(NOT MOLTENVK_REPO_ROOT)
21-
message(FATAL_ERROR "Must define location of MoltenVK repo -- see BUILD.md")
19+
option(APPLE_USE_SYSTEM_ICD "Use system Vulkan ICD discovery instead of bundling MoltenVK" OFF)
20+
21+
if(APPLE_USE_SYSTEM_ICD)
22+
message(STATUS "Using system Vulkan loader for ICD discovery")
23+
else()
24+
set(MOLTENVK_REPO_ROOT "MOLTENVK-NOTFOUND" CACHE PATH "Absolute path to a MoltenVK repo directory")
25+
if(NOT MOLTENVK_REPO_ROOT)
26+
message(FATAL_ERROR "Must define location of MoltenVK repo -- see BUILD.md")
27+
endif()
28+
message(STATUS "Using MoltenVK repo location at ${MOLTENVK_REPO_ROOT}")
29+
30+
# Source for the MoltenVK ICD library and JSON file
31+
set(MOLTENVK_DIR ${MOLTENVK_REPO_ROOT})
32+
33+
# MoltenVK JSON File
34+
execute_process(COMMAND mkdir -p ${PROJECT_BINARY_DIR}/staging-json)
35+
execute_process(COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$"
36+
${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json
37+
OUTPUT_FILE ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json)
38+
39+
# ~~~
40+
# Modify the ICD JSON file to adjust the library path.
41+
# The ICD JSON file goes in the Resources/vulkan/icd.d directory, so adjust the
42+
# library_path to the relative path to the Frameworks directory in the bundle.
43+
# The regex does: substitute ':<whitespace>"<whitespace><all occurences of . and />' with:
44+
# ': "../../../Frameworks/'
45+
# ~~~
46+
add_custom_target(MoltenVK_icd-staging-json ALL
47+
COMMAND mkdir -p ${PROJECT_BINARY_DIR}/staging-json
48+
COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$"
49+
${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json > ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json
50+
VERBATIM
51+
DEPENDS "${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json"
52+
)
53+
set_source_files_properties(${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json PROPERTIES GENERATED TRUE)
2254
endif()
23-
message(STATUS "Using MoltenVK repo location at ${MOLTENVK_REPO_ROOT}")
24-
25-
# Source for the MoltenVK ICD library and JSON file
26-
set(MOLTENVK_DIR ${MOLTENVK_REPO_ROOT})
27-
28-
# MoltenVK JSON File
29-
execute_process(COMMAND mkdir -p ${PROJECT_BINARY_DIR}/staging-json)
30-
execute_process(COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$"
31-
${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json
32-
OUTPUT_FILE ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json)
33-
34-
# ~~~
35-
# Modify the ICD JSON file to adjust the library path.
36-
# The ICD JSON file goes in the Resources/vulkan/icd.d directory, so adjust the
37-
# library_path to the relative path to the Frameworks directory in the bundle.
38-
# The regex does: substitute ':<whitespace>"<whitespace><all occurences of . and />' with:
39-
# ': "../../../Frameworks/'
40-
# ~~~
41-
add_custom_target(MoltenVK_icd-staging-json ALL
42-
COMMAND mkdir -p ${PROJECT_BINARY_DIR}/staging-json
43-
COMMAND sed -e "/\"library_path\":/s$:[[:space:]]*\"[[:space:]]*[\\.\\/]*$: \"..\\/..\\/..\\/Frameworks\\/$"
44-
${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json > ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json
45-
VERBATIM
46-
DEPENDS "${MOLTENVK_DIR}/MoltenVK/icd/MoltenVK_icd.json"
47-
)
48-
set_source_files_properties(${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json PROPERTIES GENERATED TRUE)
4955

5056
find_library(COCOA NAMES Cocoa)
5157

cube/macOS/cube/CMakeLists.txt

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717

1818
# VkCube Application Bundle
1919

20-
set(cube_RESOURCES ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json
21-
${CMAKE_CURRENT_LIST_DIR}/Resources/VulkanIcon.icns)
20+
set(cube_RESOURCES ${CMAKE_CURRENT_LIST_DIR}/Resources/VulkanIcon.icns)
21+
if(NOT APPLE_USE_SYSTEM_ICD)
22+
list(APPEND cube_RESOURCES ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json)
23+
endif()
2224

2325
# Have Xcode handle the Storyboard
2426
if(XCODE)
@@ -52,7 +54,9 @@ if(NOT XCODE)
5254
COMMENT "Compiling storyboard")
5355
endif()
5456

55-
add_dependencies(vkcube MoltenVK_icd-staging-json)
57+
if(NOT APPLE_USE_SYSTEM_ICD)
58+
add_dependencies(vkcube MoltenVK_icd-staging-json)
59+
endif()
5660

5761
# Include demo source code dir because the MacOS cube's Objective-C source includes the "original" cube application C source code.
5862
target_include_directories(vkcube PRIVATE ${CMAKE_CURRENT_LIST_DIR})
@@ -70,18 +74,20 @@ set_target_properties(vkcube PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT
7074
# directory basis. If all the files went into the top-level Resource directory, then we could simply set the RESOURCE property to a
7175
# list of all the resource files.
7276
set_source_files_properties(${cube_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
73-
set_source_files_properties("${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json"
74-
PROPERTIES
75-
MACOSX_PACKAGE_LOCATION
76-
"Resources/vulkan/icd.d")
77+
if(NOT APPLE_USE_SYSTEM_ICD)
78+
set_source_files_properties("${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json"
79+
PROPERTIES
80+
MACOSX_PACKAGE_LOCATION
81+
"Resources/vulkan/icd.d")
7782

78-
# Copy the MoltenVK lib into the bundle.
79-
if(XCODE)
80-
add_custom_command(TARGET vkcube POST_BUILD
81-
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
82-
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcube.app/Contents/Frameworks/libMoltenVK.dylib)
83-
else()
84-
add_custom_command(TARGET vkcube POST_BUILD
85-
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
86-
${CMAKE_CURRENT_BINARY_DIR}/vkcube.app/Contents/Frameworks/libMoltenVK.dylib)
83+
# Copy the MoltenVK lib into the bundle.
84+
if(XCODE)
85+
add_custom_command(TARGET vkcube POST_BUILD
86+
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
87+
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcube.app/Contents/Frameworks/libMoltenVK.dylib)
88+
else()
89+
add_custom_command(TARGET vkcube POST_BUILD
90+
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
91+
${CMAKE_CURRENT_BINARY_DIR}/vkcube.app/Contents/Frameworks/libMoltenVK.dylib)
92+
endif()
8793
endif()

cube/macOS/cubepp/CMakeLists.txt

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717

1818
# VkCube Application Bundle
1919

20-
set(cubepp_RESOURCES ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json
21-
${CMAKE_CURRENT_LIST_DIR}/Resources/VulkanIcon.icns)
20+
set(cubepp_RESOURCES ${CMAKE_CURRENT_LIST_DIR}/Resources/VulkanIcon.icns)
21+
if(NOT APPLE_USE_SYSTEM_ICD)
22+
list(APPEND cubepp_RESOURCES ${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json)
23+
endif()
2224

2325
# Have Xcode handle the Storyboard
2426
if(XCODE)
@@ -52,7 +54,9 @@ if(NOT XCODE)
5254
COMMENT "Compiling storyboard")
5355
endif()
5456

55-
add_dependencies(vkcubepp MoltenVK_icd-staging-json)
57+
if(NOT APPLE_USE_SYSTEM_ICD)
58+
add_dependencies(vkcubepp MoltenVK_icd-staging-json)
59+
endif()
5660

5761
# Include demo source code dir because the MacOS vkcubepp's Objective-C source includes the "original" vkcubepp application C++ source
5862
# code.
@@ -68,18 +72,20 @@ set_target_properties(vkcubepp PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRE
6872
# directory basis. If all the files went into the top-level Resource directory, then we could simply set the RESOURCE property to a
6973
# list of all the resource files.
7074
set_source_files_properties(${cubepp_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
71-
set_source_files_properties("${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json"
72-
PROPERTIES
73-
MACOSX_PACKAGE_LOCATION
74-
"Resources/vulkan/icd.d")
75+
if(NOT APPLE_USE_SYSTEM_ICD)
76+
set_source_files_properties("${PROJECT_BINARY_DIR}/staging-json/MoltenVK_icd.json"
77+
PROPERTIES
78+
MACOSX_PACKAGE_LOCATION
79+
"Resources/vulkan/icd.d")
7580

76-
# Copy the MoltenVK lib into the bundle.
77-
if(XCODE)
78-
add_custom_command(TARGET vkcubepp POST_BUILD
79-
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
80-
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcubepp.app/Contents/Frameworks/libMoltenVK.dylib)
81-
else()
82-
add_custom_command(TARGET vkcubepp POST_BUILD
83-
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
84-
${CMAKE_CURRENT_BINARY_DIR}/vkcubepp.app/Contents/Frameworks/libMoltenVK.dylib)
81+
# Copy the MoltenVK lib into the bundle.
82+
if(XCODE)
83+
add_custom_command(TARGET vkcubepp POST_BUILD
84+
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
85+
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/vkcubepp.app/Contents/Frameworks/libMoltenVK.dylib)
86+
else()
87+
add_custom_command(TARGET vkcubepp POST_BUILD
88+
COMMAND ${CMAKE_COMMAND} -E copy "${MOLTENVK_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib"
89+
${CMAKE_CURRENT_BINARY_DIR}/vkcubepp.app/Contents/Frameworks/libMoltenVK.dylib)
90+
endif()
8591
endif()

0 commit comments

Comments
 (0)