mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-23 07:19:50 +00:00
meson: Add support for using cmake for finding LLVM
Meson has support for using cmake as a finder for some dependencies,
including LLVM. Using cmake has a lot of advantages: it needs less meson
maintenance to keep working (even for llvm updates); it works more
sanely for cross compiles (as llvm-config is a compiled binary not a
shell script). Meson 0.51.0 also has a new generic variable getter that
can be used to get information from either cmake, pkg-config, or
config-tools dependencies, which is needed for cmake. We continue to
support using llvm-config if you don't have cmake installed, or if cmake
cannot find a suitable version.
Fixes: 0d59459432
("meson: Force the use of config-tool for llvm")
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
This commit is contained in:
parent
3d3685d354
commit
5157a42765
13
meson.build
13
meson.build
@ -1260,7 +1260,6 @@ if _llvm != 'false'
|
||||
with_gallium_opencl or _llvm == 'true'
|
||||
),
|
||||
static : not _shared_llvm,
|
||||
method : 'config-tool',
|
||||
)
|
||||
with_llvm = dep_llvm.found()
|
||||
endif
|
||||
@ -1274,7 +1273,17 @@ if with_llvm
|
||||
# LLVM can be built without rtti, turning off rtti changes the ABI of C++
|
||||
# programs, so we need to build all C++ code in mesa without rtti as well to
|
||||
# ensure that linking works.
|
||||
if dep_llvm.get_configtool_variable('has-rtti') == 'NO'
|
||||
#
|
||||
# In meson 0.51.0 we can use cmake to find LLVM in addittion to meson's
|
||||
# builtin llvm-config based finder. A new generic variable getter method
|
||||
# has also been added, so we'll use that if we can, to cover the cmake case.
|
||||
if meson.version().version_compare('>=0.51')
|
||||
# The CMake finder will return 'ON', the llvm-config will return 'YES'
|
||||
_rtti = ['ON', 'YES'].contains(dep_llvm.get_variable(cmake : 'LLVM_ENABLE_RTTI', configtool: 'has-rtti'))
|
||||
else
|
||||
_rtti = dep_llvm.get_configtool_variable('has-rtti') == 'YES'
|
||||
endif
|
||||
if not _rtti
|
||||
if with_gallium_nouveau
|
||||
error('The Nouveau driver requires rtti. You either need to turn off nouveau or use an LLVM built with LLVM_ENABLE_RTTI.')
|
||||
elif with_gallium_opencl
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright © 2017-2018 Intel Corporation
|
||||
# Copyright © 2017-2019 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
@ -19,14 +19,17 @@
|
||||
# SOFTWARE.
|
||||
|
||||
|
||||
if meson.version().version_compare('>=0.51')
|
||||
_llvm_includedir = dep_llvm.get_variable(configtool : 'includedir', cmake : 'LLVM_INCLUDE_DIR')
|
||||
else
|
||||
_llvm_includedir = dep_llvm.get_configtool_variable('includedir')
|
||||
endif
|
||||
|
||||
gen_builder_hpp = custom_target(
|
||||
'gen_builder.hpp',
|
||||
input : [
|
||||
swr_gen_llvm_ir_macros_py,
|
||||
join_paths(
|
||||
dep_llvm.get_configtool_variable('includedir'), 'llvm', 'IR',
|
||||
'IRBuilder.h'
|
||||
)
|
||||
join_paths(_llvm_includedir, 'llvm', 'IR', 'IRBuilder.h')
|
||||
],
|
||||
output : 'gen_builder.hpp',
|
||||
command : [
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright © 2017-2018 Intel Corporation
|
||||
# Copyright © 2017-2019 Intel Corporation
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
@ -25,6 +25,12 @@ if with_opencl_icd
|
||||
clover_cpp_args += '-DHAVE_CLOVER_ICD'
|
||||
endif
|
||||
|
||||
if meson.version().version_compare('>=0.51')
|
||||
_clang_resources = join_paths(dep_llvm.get_variable(cmake : 'LLVM_LIBRARY_DIR', configtool : 'libdir'), 'clang', dep_llvm.version(), 'include')
|
||||
else
|
||||
_clang_resources = join_paths(dep_llvm.get_configtool_variable('libdir'), 'clang', dep_llvm.version(), 'include')
|
||||
endif
|
||||
|
||||
libclllvm = static_library(
|
||||
'clllvm',
|
||||
files(
|
||||
@ -43,10 +49,7 @@ libclllvm = static_library(
|
||||
cpp_vis_args,
|
||||
'-DLIBCLC_INCLUDEDIR="@0@/"'.format(dep_clc.get_pkgconfig_variable('includedir')),
|
||||
'-DLIBCLC_LIBEXECDIR="@0@/"'.format(dep_clc.get_pkgconfig_variable('libexecdir')),
|
||||
'-DCLANG_RESOURCE_DIR="@0@"'.format(join_paths(
|
||||
dep_llvm.get_configtool_variable('libdir'), 'clang',
|
||||
dep_llvm.version(), 'include',
|
||||
)),
|
||||
'-DCLANG_RESOURCE_DIR="@0@"'.format(_clang_resources),
|
||||
],
|
||||
dependencies : [dep_llvm, dep_elf],
|
||||
override_options : clover_cpp_std,
|
||||
|
@ -29,7 +29,11 @@ if with_ld_version_script
|
||||
opencl_link_deps += files('opencl.sym')
|
||||
endif
|
||||
|
||||
llvm_libdir = dep_llvm.get_configtool_variable('libdir')
|
||||
if meson.version().version_compare('>=0.51')
|
||||
llvm_libdir = dep_llvm.get_variable(configtool : 'libdir', cmake : 'LLVM_LIBRARY_DIR')
|
||||
else
|
||||
llvm_libdir = dep_llvm.get_configtool_variable('libdir')
|
||||
endif
|
||||
|
||||
opencl_libname = with_opencl_icd ? 'MesaOpenCL' : 'OpenCL'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user