Fix vulkan module for linux

Rework the vulkan module:
	- adopt the VULKAN_SDK paths for its linux version
	- add sanity tests for the VULKAN_SDK path
	- add guessing as last fallback, needed on linux systems
	  on which no vulkan pkgconfig is installed [ubuntu atm]
	- restructure exception handling/branching

Not tested on windows yet.
pull/2113/head
nyorain 8 years ago
parent 0c2ef49dc5
commit 005e041645
  1. 64
      mesonbuild/dependencies/ui.py

@ -498,49 +498,71 @@ class VulkanDependency(ExternalDependency):
def __init__(self, environment, kwargs):
super().__init__('vulkan', environment, None, kwargs)
if DependencyMethods.PKGCONFIG in self.methods:
try:
pcdep = PkgConfigDependency('vulkan', environment, kwargs)
if pcdep.found():
self.type_name = 'pkgconfig'
self.is_found = True
self.compile_args = pcdep.get_compile_args()
self.link_args = pcdep.get_link_args()
self.version = pcdep.get_version()
return
except Exception:
pass
if DependencyMethods.SYSTEM in self.methods:
try:
self.vulkan_sdk = os.environ['VULKAN_SDK']
if not os.path.isabs(self.vulkan_sdk):
raise DependencyException('VULKAN_SDK must be an absolute path.')
except KeyError:
self.vulkan_sdk = None
if self.vulkan_sdk:
# TODO: this config might not work on some platforms, fix bugs as reported
# we should at least detect other 64-bit platforms (e.g. armv8)
lib_name = 'vulkan'
if mesonlib.is_windows():
lib_name = 'vulkan-1'
lib_dir = 'Lib32'
inc_dir = 'Include'
if detect_cpu({}) == 'x86_64':
lib_dir = 'Lib'
else:
lib_name = 'vulkan'
lib_dir = 'lib'
inc_dir = 'include'
lib_dir = 'Lib32'
if detect_cpu({}) == 'x86_64':
lib_dir = 'Lib'
# make sure header and lib are valid
inc_path = os.path.join(self.vulkan_sdk, inc_dir)
header = os.path.join(inc_path, 'vulkan', 'vulkan.h')
lib_path = os.path.join(self.vulkan_sdk, lib_dir)
find_lib = self.compiler.find_library('vulkan', environment, lib_path)
if not (find_lib and os.path.isfile(header)):
raise DependencyException('VULKAN_SDK point to invalid directory')
self.type_name = 'vulkan_sdk'
self.is_found = True
self.compile_args.append('-I' + os.path.join(self.vulkan_sdk, 'Include'))
self.link_args.append('-L' + os.path.join(self.vulkan_sdk, lib_dir))
self.compile_args.append('-I' + inc_path)
self.link_args.append('-L' + lib_path)
self.link_args.append('-l' + lib_name)
# TODO: find a way to retrieve the version from the sdk?
# we could try go guess it depending on the vulkan_sdk path.
# usually the paths last component is the vulkan version
# but this might be modified at installation
# Usually it is a part of the path to it (but does not have to be)
self.version = '1'
return
except KeyError:
self.vulkan_sdk = None
if DependencyMethods.PKGCONFIG in self.methods:
try:
pcdep = PkgConfigDependency('vulkan', environment, kwargs)
if pcdep.found():
self.type_name = 'pkgconfig'
else:
# simply try to guess it, usually works on linux
libs = self.compiler.find_library('vulkan', environment, [])
if libs != None and self.compiler.has_header('vulkan/vulkan.h', '', environment):
self.type_name = 'system'
self.is_found = True
self.compile_args = pcdep.get_compile_args()
self.link_args = pcdep.get_link_args()
self.version = pcdep.get_version()
self.version = 1 # TODO
for lib in libs:
self.link_args.append(lib)
return
except Exception:
pass
def get_methods(self):
return [DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM]

Loading…
Cancel
Save