Mesa (master): meson: try to use cmake as a finder for clang

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 27 22:30:54 UTC 2019


Module: Mesa
Branch: master
Commit: 0ba0c0c15c633a5a3b7a4651a743f800f30bcbf6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0ba0c0c15c633a5a3b7a4651a743f800f30bcbf6

Author: Dylan Baker <dylan at pnwbakers.com>
Date:   Wed May 22 15:49:01 2019 -0700

meson: try to use cmake as a finder for clang

Clang (like LLVM), very annoyingly refuses to provide pkg-config, and
only provides cmake (unlike LLVM which at least provides llvm-config,
even if llvm-config is terrible). Meson has gained the ability to use
cmake to find dependencies, and can successfully find Clang. This change
attempts to use cmake to find clang instead of a bunch of library
searches, when paired with -Dcmake_prefix_path we can much more reliably
use cmake to control which clang we're getting. This is only enabled for
meson >= 0.51, which adds the required options.

Reviewed-by: Eric Engestrom <eric.engestrom at intel.com>

---

 src/gallium/targets/opencl/meson.build | 43 +++++++++++++++++++++-------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/src/gallium/targets/opencl/meson.build b/src/gallium/targets/opencl/meson.build
index 676e0e13174..042307c9db0 100644
--- a/src/gallium/targets/opencl/meson.build
+++ b/src/gallium/targets/opencl/meson.build
@@ -1,4 +1,4 @@
-# Copyright © 2017 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
@@ -29,10 +29,33 @@ if with_ld_version_script
   opencl_link_deps += files('opencl.sym')
 endif
 
+_clang_modules = [
+  'clangCodeGen',
+  'clangFrontendTool',
+  'clangFrontend',
+  'clangDriver',
+  'clangSerialization',
+  'clangParse', 
+  'clangSema',
+  'clangAnalysis',
+  'clangAST',
+  'clangEdit',
+  'clangLex',
+  'clangBasic',
+]
+
+dep_clang = null_dep
 if meson.version().version_compare('>=0.51')
-  llvm_libdir = dep_llvm.get_variable(configtool : 'libdir', cmake : 'LLVM_LIBRARY_DIR')
+  dep_clang = dependency('Clang', modules : _clang_modules, required : false)
+  _llvm_libdir = dep_llvm.get_variable(configtool : 'libdir', cmake : 'LLVM_LIBRARY_DIR')
 else
-  llvm_libdir = dep_llvm.get_configtool_variable('libdir')
+  _llvm_libdir = dep_llvm.get_configtool_variable('libdir')
+endif
+if not dep_clang.found()
+  dep_clang = []
+  foreach m : _clang_modules
+    dep_clang += cpp.find_library(m, dirs : _llvm_libdir)
+  endforeach
 endif
 
 opencl_libname = with_opencl_icd ? 'MesaOpenCL' : 'OpenCL'
@@ -45,19 +68,7 @@ libopencl = shared_library(
   link_whole : libclover,
   link_with : [libpipe_loader_dynamic, libgallium, libmesa_util],
   dependencies : [
-    dep_thread, dep_clock, dep_dl, dep_unwind, dep_elf, dep_expat,
-    cpp.find_library('clangCodeGen', dirs : llvm_libdir),
-    cpp.find_library('clangFrontendTool', dirs : llvm_libdir),
-    cpp.find_library('clangFrontend', dirs : llvm_libdir),
-    cpp.find_library('clangDriver', dirs : llvm_libdir),
-    cpp.find_library('clangSerialization', dirs : llvm_libdir),
-    cpp.find_library('clangParse', dirs : llvm_libdir),
-    cpp.find_library('clangSema', dirs : llvm_libdir),
-    cpp.find_library('clangAnalysis', dirs : llvm_libdir),
-    cpp.find_library('clangAST', dirs : llvm_libdir),
-    cpp.find_library('clangEdit', dirs : llvm_libdir),
-    cpp.find_library('clangLex', dirs : llvm_libdir),
-    cpp.find_library('clangBasic', dirs : llvm_libdir),
+    dep_thread, dep_clock, dep_dl, dep_unwind, dep_elf, dep_expat, dep_clang,
   ],
   version : '@0 at .0.0'.format(opencl_version),
   install : true,




More information about the mesa-commit mailing list