diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-02-20 17:34:38 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-05-03 01:39:16 +0200 |
commit | a9930fe066b4fd7b36478e3962bb0ccdb6ed5241 (patch) | |
tree | ce04b7fc128ca7fd4ec12062625cf01b42ff531b | |
parent | 5086e34d3a7a06e2121fe4541e6919a784094343 (diff) | |
download | meson-a9930fe066b4fd7b36478e3962bb0ccdb6ed5241.zip meson-a9930fe066b4fd7b36478e3962bb0ccdb6ed5241.tar.gz meson-a9930fe066b4fd7b36478e3962bb0ccdb6ed5241.tar.bz2 |
LLVM: Added CMake backend
-rw-r--r-- | mesonbuild/dependencies/data/CMakeListsLLVM.txt | 70 | ||||
-rw-r--r-- | mesonbuild/dependencies/dev.py | 37 | ||||
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | test cases/common/161 config tool variable/meson.build | 2 | ||||
-rw-r--r-- | test cases/unit/47 native file binary/meson.build | 2 |
5 files changed, 108 insertions, 5 deletions
diff --git a/mesonbuild/dependencies/data/CMakeListsLLVM.txt b/mesonbuild/dependencies/data/CMakeListsLLVM.txt new file mode 100644 index 0000000..3f06441 --- /dev/null +++ b/mesonbuild/dependencies/data/CMakeListsLLVM.txt @@ -0,0 +1,70 @@ +cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} ) + +set(PACKAGE_FOUND FALSE) + +while(TRUE) + find_package(LLVM REQUIRED CONFIG QUIET) + + # ARCHS has to be set via the CMD interface + if(LLVM_FOUND OR "${ARCHS}" STREQUAL "") + break() + endif() + + list(GET ARCHS 0 CMAKE_LIBRARY_ARCHITECTURE) + list(REMOVE_AT ARCHS 0) +endwhile() + +if(LLVM_FOUND) + set(PACKAGE_FOUND TRUE) + + llvm_map_components_to_libnames(llvm_libs ${LLVM_MESON_MODULES}) + set(MESON_RESOLVED_LLVM_MODULES ${llvm_libs}) + + # Check the following variables: + # LLVM_PACKAGE_VERSION + # LLVM_VERSION + # LLVM_VERSION_STRING + if(NOT DEFINED PACKAGE_VERSION) + if(DEFINED LLVM_PACKAGE_VERSION) + set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}") + elseif(DEFINED LLVM_VERSION) + set(PACKAGE_VERSION "${LLVM_VERSION}") + elseif(DEFINED LLVM_VERSION_STRING) + set(PACKAGE_VERSION "${LLVM_VERSION_STRING}") + endif() + endif() + + # Check the following variables: + # LLVM_LIBRARIES + # LLVM_LIBS + set(libs) + if(DEFINED LLVM_LIBRARIES) + set(libs LLVM_LIBRARIES) + elseif(DEFINED LLVM_LIBS) + set(libs LLVM_LIBS) + endif() + + # Check the following variables: + # LLVM_INCLUDE_DIRS + # LLVM_INCLUDES + # LLVM_INCLUDE_DIR + set(includes) + if(DEFINED LLVM_INCLUDE_DIRS) + set(includes LLVM_INCLUDE_DIRS) + elseif(DEFINED LLVM_INCLUDES) + set(includes LLVM_INCLUDES) + elseif(DEFINED LLVM_INCLUDE_DIR) + set(includes LLVM_INCLUDE_DIR) + endif() + + # Check the following variables: + # LLVM_DEFINITIONS + set(definitions) + if(DEFINED LLVM_DEFINITIONS) + set(definitions LLVM_DEFINITIONS) + endif() + + set(PACKAGE_INCLUDE_DIRS "${${includes}}") + set(PACKAGE_DEFINITIONS "${${definitions}}") + set(PACKAGE_LIBRARIES "${${libs}}") +endif() diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index 2a89606..74e1412 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -24,7 +24,7 @@ from .. import mesonlib from ..mesonlib import version_compare, stringlistify, extract_as_list, MachineChoice from .base import ( DependencyException, DependencyMethods, ExternalDependency, PkgConfigDependency, - strip_system_libdirs, ConfigToolDependency, + strip_system_libdirs, ConfigToolDependency, CMakeDependency ) from .misc import ThreadDependency @@ -399,6 +399,36 @@ class LLVMDependencyConfigTool(ConfigToolDependency): return 'modules: ' + ', '.join(self.module_details) return '' +class LLVMDependencyCMake(CMakeDependency): + def __init__(self, env, kwargs): + self.llvm_modules = kwargs.get('modules', []) + super().__init__(name='LLVM', environment=env, language='cpp', kwargs=kwargs) + + # Extract extra include directories and definitions + incDirs = self.get_cmake_var('PACKAGE_INCLUDE_DIRS') + defs = self.get_cmake_var('PACKAGE_DEFINITIONS') + temp = list(map(lambda x: '-I{}'.format(x), incDirs)) + defs + self.compile_args += [x for x in temp if x not in self.compile_args] + + def _main_cmake_file(self): + # Use a custom CMakeLists.txt for LLVM + return 'CMakeListsLLVM.txt' + + def _extra_cmake_opts(self): + return ['-DLLVM_MESON_MODULES={}'.format(';'.join(self.llvm_modules))] + + def _map_module_list(self, modules): + return self.get_cmake_var('MESON_RESOLVED_LLVM_MODULES') + + def need_threads(self): + return True + + def log_details(self): + modules = self.get_cmake_var('MESON_RESOLVED_LLVM_MODULES') + if modules: + return 'modules: ' + ', '.join(modules) + return '' + class LLVMDependency(ExternalDependency): def __init__(self, env, kwargs): super().__init__('LLVM', env, 'cpp', kwargs) @@ -408,6 +438,9 @@ class LLVMDependency(ExternalDependency): methods = cls._process_method_kw(kwargs) candidates = [] + if DependencyMethods.CMAKE in methods: + candidates.append(functools.partial(LLVMDependencyCMake, env, kwargs)) + if DependencyMethods.CONFIG_TOOL in methods: candidates.append(functools.partial(LLVMDependencyConfigTool, env, kwargs)) @@ -415,7 +448,7 @@ class LLVMDependency(ExternalDependency): @staticmethod def get_methods(): - return [DependencyMethods.CONFIG_TOOL] + return [DependencyMethods.CMAKE, DependencyMethods.CONFIG_TOOL] class ValgrindDependency(PkgConfigDependency): ''' @@ -35,7 +35,7 @@ packages = ['mesonbuild', 'mesonbuild.modules', 'mesonbuild.scripts', 'mesonbuild.wrap'] -package_data = {'mesonbuild.dependencies': ['data/CMakeLists.txt', 'data/CMakePathInfo.txt']} +package_data = {'mesonbuild.dependencies': ['data/CMakeLists.txt', 'data/CMakeListsLLVM.txt', 'data/CMakePathInfo.txt']} data_files = [] if sys.platform != 'win32': # Only useful on UNIX-like systems diff --git a/test cases/common/161 config tool variable/meson.build b/test cases/common/161 config tool variable/meson.build index 0643042..9584117 100644 --- a/test cases/common/161 config tool variable/meson.build +++ b/test cases/common/161 config tool variable/meson.build @@ -15,7 +15,7 @@ project('config tool variable', 'cpp') -dep_llvm = dependency('llvm', required : false) +dep_llvm = dependency('llvm', method : 'config-tool', required : false) if not dep_llvm.found() error('MESON_SKIP_TEST LLVM not installed.') endif diff --git a/test cases/unit/47 native file binary/meson.build b/test cases/unit/47 native file binary/meson.build index 4489ac1..c9b6e5d 100644 --- a/test cases/unit/47 native file binary/meson.build +++ b/test cases/unit/47 native file binary/meson.build @@ -8,7 +8,7 @@ if case == 'find_program' assert(result.stdout().strip().endswith('12345'), 'Didn\'t load bash from config file') elif case == 'config_dep' add_languages('cpp') - dep = dependency('llvm') + dep = dependency('llvm', method : 'config-tool') assert(dep.get_configtool_variable('version').endswith('12345'), 'Didn\'t load llvm from config file') elif case == 'python3' prog = import('python3').find_python() |