Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

macOS: Install instructions should include need to add /usr/local/lib to the library search paths. #1001

Open
billhollings opened this issue Mar 25, 2024 · 4 comments
Labels
build This is relevant to the build system documentation Improvements or additions to documentation Mac

Comments

@billhollings
Copy link
Collaborator

On macOS, the Vulkan SDK installer deposits the Vulkan and MoltenVK dylib files in /usr/local/lib. In order to run Vulkan Samples, this path needs to be included in the library search paths vulkan_samples runs under. Without this, Volk fails to initialize.

macOS does not include /usr/local/lib in the library search paths by default. It can be included a couple of different ways, including either of the following:

  • Include /usr/local/lib in the LD_RUNPATH_SEARCH_PATHS build setting when building vulkan_samples on macOS. Although I am not a cmake expert, I assume this could probably be done by updating the build config files.

  • Invoke export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH prior to launching vulkan_samples from the command line. Since this can be done by the user, this might just need some documentation in either the Usage or Build/macOS sections of the Vulkan Samples documentation.

Also, on a related note, the Build/macOS instructions includes a requirement:

Vulkan SDK ./install_vulkan.py

I suggest this could probably be reworded to just "Installed Vulkan SDK", and removing the reference to ./install_vulkan.py. These days, Vulkan Installer App takes care of installing the dylibs automatically for most Vulkan SDK installations, and the referenced Vulkan SDK Getting Started guide already covers the details of both the installer app and ./install_vulkan.py, if a user wants to install from the command line instead of using the installer app.

@billhollings billhollings added documentation Improvements or additions to documentation build This is relevant to the build system labels Mar 26, 2024
@jeroenbakker-atmind
Copy link
Collaborator

Not sure, but just adding it here as it isn't mentioned and perhaps this case should also be considered/included in the docs.

I use source ./setup-env.sh from the Vulkan SDK folder. This adds DYLD_LIBRARY_PATH=/Users/jeroen/VulkanSDK/1.3.275.0/macOS/lib to the environment variables.

@gpx1000
Copy link
Collaborator

gpx1000 commented Apr 6, 2024

That's the correct solution, it also would work to use iOS/setup-env.sh for the iOS libs.

@SRSaunders
Copy link
Contributor

SRSaunders commented May 29, 2024

Agree with @jeroenbakker-atmind above. Futhermore, when using Xcode I find the following cmake snippet useful for setting things up properly. This of course assumes you have done source ./setup-env.sh prior to generation.

Note this approach avoids having to use the Global System Installation option of the SDK, which simplifies testing against multiple SDK versions without reinstallation.

Note: In spite of the comments above, DYLD_LIBRARY_PATH does not have to be explicitly defined if CMakeLists.txt sets link_libraries(${Vulkan_LIBRARY} ...) or target_link_libraries(<target_name> ${Vulkan_LIBRARY} ...). In that case the rpaths are explicitly defined and the library will be found automatically. It just so happens this project does not do this in CMakeLists.txt and thus the problem is evident.

IF (CMAKE_GENERATOR MATCHES "Xcode")
	# Suppress regeneration for Xcode since environment variables will be lost if not set in Xcode locations/custom paths
	set(CMAKE_SUPPRESS_REGENERATION ON)
	set(CMAKE_XCODE_GENERATE_SCHEME ON)

	# If the Vulkan loader's environment variables are defined, make them available within Xcode schemes
	IF (DEFINED ENV{DYLD_LIBRARY_PATH})
		set(CMAKE_XCODE_SCHEME_ENVIRONMENT "${CMAKE_XCODE_SCHEME_ENVIRONMENT};DYLD_LIBRARY_PATH=$ENV{DYLD_LIBRARY_PATH}")
	ENDIF()
	IF (DEFINED ENV{VK_ADD_LAYER_PATH})
		set(CMAKE_XCODE_SCHEME_ENVIRONMENT "${CMAKE_XCODE_SCHEME_ENVIRONMENT};VK_ADD_LAYER_PATH=$ENV{VK_ADD_LAYER_PATH}")
	ENDIF()
	IF (DEFINED ENV{VK_ICD_FILENAMES})
		set(CMAKE_XCODE_SCHEME_ENVIRONMENT "${CMAKE_XCODE_SCHEME_ENVIRONMENT};VK_ICD_FILENAMES=$ENV{VK_ICD_FILENAMES}")
	ENDIF()
	IF (DEFINED ENV{VK_DRIVER_FILES})
		set(CMAKE_XCODE_SCHEME_ENVIRONMENT "${CMAKE_XCODE_SCHEME_ENVIRONMENT};VK_DRIVER_FILES=$ENV{VK_DRIVER_FILES}")
	ENDIF()
ENDIF()

@jaidonlybbert
Copy link

I think we can close this, source ./setup-env.sh addressed in documentation additions in this PR #1177

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build This is relevant to the build system documentation Improvements or additions to documentation Mac
Projects
None yet
Development

No branches or pull requests

6 participants