depenencies/llvm: Handle llvm-config --shared-mode failing (#7379)

* depenencies/llvm: Handle llvm-config --shared-mode failing

Fixes: #7371
Fixes: #7878

* test cases/llvm: Refactor to use test.json

Instead of trying to cover everything internally
pull/7896/head
Dylan Baker 4 years ago committed by GitHub
parent e7009d439c
commit e8399c8c6e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      mesonbuild/dependencies/dev.py
  2. 6
      run_project_tests.py
  3. 67
      test cases/frameworks/15 llvm/meson.build
  4. 10
      test cases/frameworks/15 llvm/meson_options.txt
  5. 17
      test cases/frameworks/15 llvm/test.json

@ -281,7 +281,13 @@ class LLVMDependencyConfigTool(ConfigToolDependency):
def _set_new_link_args(self, environment):
"""How to set linker args for LLVM versions >= 3.9"""
mode = self.get_config_value(['--shared-mode'], 'link_args')[0]
try:
mode = self.get_config_value(['--shared-mode'], 'link_args')[0]
except IndexError:
mlog.debug('llvm-config --shared-mode returned an error')
self.is_found = False
return
if not self.static and mode == 'static':
# If llvm is configured with LLVM_BUILD_LLVM_DYLIB but not with
# LLVM_LINK_LLVM_DYLIB and not LLVM_BUILD_SHARED_LIBS (which

@ -865,6 +865,12 @@ def skippable(suite, test):
if any([x in test for x in ['16 sdl', '17 mpi']]):
return True
# We test cmake, and llvm-config. Some linux spins don't provide cmake or
# don't provide either the static or shared llvm libraries (fedora and
# opensuse only have the dynamic ones, for example).
if test.endswith('15 llvm'):
return True
# No frameworks test should be skipped on linux CI, as we expect all
# prerequisites to be installed
if mesonlib.is_linux():

@ -1,28 +1,23 @@
project('llvmtest', ['c', 'cpp'], default_options : ['c_std=c99'])
d = dependency('llvm', required : false, method : 'config-tool')
method = get_option('method')
static = get_option('link-static')
d = dependency('llvm', required : false, method : method, static : static)
if not d.found()
d = dependency('llvm', required : false, static : true)
if not d.found()
error('MESON_SKIP_TEST llvm not found.')
else
static = true
endif
else
static = false
error('MESON_SKIP_TEST llvm not found.')
endif
d = dependency('llvm', modules : 'not-found', required : false, static : static)
d = dependency('llvm', modules : 'not-found', required : false, static : static, method : method)
assert(d.found() == false, 'not-found llvm module found')
d = dependency('llvm', version : '<0.1', required : false, static : static)
d = dependency('llvm', version : '<0.1', required : false, static : static, method : method)
assert(d.found() == false, 'ancient llvm module found')
d = dependency('llvm', optional_modules : 'not-found', required : false, static : static)
d = dependency('llvm', optional_modules : 'not-found', required : false, static : static, method : method)
assert(d.found() == true, 'optional module stopped llvm from being found.')
# Check we can apply a version constraint
d = dependency('llvm', version : ['< 500', '>=@0@'.format(d.version())], required: false, static : static)
d = dependency('llvm', version : ['< 500', '>=@0@'.format(d.version())], required: false, static : static, method : method)
assert(d.found() == true, 'Cannot set version constraints')
dep_tinfo = dependency('tinfo', required : false)
@ -31,29 +26,23 @@ if not dep_tinfo.found()
dep_tinfo = cpp.find_library('tinfo', required: false)
endif
foreach method : ['config-tool', 'cmake']
foreach static : [true, false]
message('Trying method @0@ for @1@ link'.format(method, static ? 'static' : 'dynamic'))
llvm_dep = dependency(
'llvm',
modules : ['bitwriter', 'asmprinter', 'executionengine', 'target',
'mcjit', 'nativecodegen', 'amdgpu'],
required : false,
static : static,
method : method,
)
if llvm_dep.found()
name = static ? 'static' : 'dynamic'
executable(
'sum-@0@-@1@'.format(name, method),
'sum.c',
dependencies : [
llvm_dep, dep_tinfo,
# zlib will be statically linked on windows
dependency('zlib', required : host_machine.system() != 'windows'),
meson.get_compiler('c').find_library('dl', required : false),
]
)
endif
endforeach
endforeach
llvm_dep = dependency(
'llvm',
modules : ['bitwriter', 'asmprinter', 'executionengine', 'target',
'mcjit', 'nativecodegen', 'amdgpu'],
required : false,
static : static,
method : method,
)
if llvm_dep.found()
executable(
'sum',
'sum.c',
dependencies : [
llvm_dep, dep_tinfo,
# zlib will be statically linked on windows
dependency('zlib', required : host_machine.system() != 'windows'),
meson.get_compiler('c').find_library('dl', required : false),
]
)
endif

@ -0,0 +1,10 @@
option(
'method',
type : 'combo',
choices : ['config-tool', 'cmake']
)
option(
'link-static',
type : 'boolean',
value : false,
)

@ -0,0 +1,17 @@
{
"matrix": {
"options": {
"method": [
{ "val": "config-tool" },
{ "val": "cmake" }
],
"link-static": [
{ "val": true },
{ "val": false }
]
},
"exclude": [
{ "method": "cmake", "link-static": false }
]
}
}
Loading…
Cancel
Save