From 866f6f11d928e6e9b1a45468ec9d6cf12b7f2778 Mon Sep 17 00:00:00 2001 From: Pierre Moreau Date: Sun, 21 Jan 2018 19:10:58 +0100 Subject: [PATCH] meson: Check for SPIRV-Tools and llvm-spirv Changes since: * v12 (Karol Herbst): - rename CLOVER_ALLOW_SPIRV to HAVE_CLOVER_SPIRV * v11 (Karol Herbst): - only set new defines for clover to speed up recompilation - remove autotools * v10: - Add a new flag (`--enable-opencl-spirv` for autotools, and `-Dopencl-spirv=true` for meson) for enabling SPIR-V support in clover, and never automagically enable it without that flag. (Dylan Baker) - When enabling the SPIR-V support, the SPIRV-Tools and SPIRV-LLVM-Translator libraries are now required dependencies. * v7: - Properly align LLVMSPIRVLib comment (Dylan Baker) - Only define CLOVER_ALLOW_SPIRV when **both** dependencies are found: autotools was only requiring one or the other. * v6: Replace the llvm-spirv repository by the new official SPIRV-LLVM-Translator. * v4: Add a comment saying where to find llvm-spirv (Karol Herbst). * v3: - make SPIRV-Tools and llvm-spirv optional (Francisco Jerez); - bump requirement for llvm-spirv to version 0.2 * v2: - Bump the required version of SPIRV-Tools to the latest release; - Add a dependency on llvm-spirv. Reviewed-by: Dylan Baker (v10) Reviewed-by: Karol Herbst Reviewed-by: Francisco Jerez --- meson.build | 13 +++++++++++++ meson_options.txt | 6 ++++++ src/gallium/state_trackers/clover/meson.build | 9 +++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index a50f57991da..5509a67fdeb 100644 --- a/meson.build +++ b/meson.build @@ -712,6 +712,16 @@ if _opencl != 'disabled' with_gallium_opencl = true with_opencl_icd = _opencl == 'icd' + with_opencl_spirv = get_option('opencl-spirv') + if with_opencl_spirv + dep_spirv_tools = dependency('SPIRV-Tools', required : true, version : '>= 2018.0') + # LLVMSPIRVLib is available at https://github.com/KhronosGroup/SPIRV-LLVM-Translator + dep_llvmspirvlib = dependency('LLVMSPIRVLib', required : true, version : '>= 0.2.1') + else + dep_spirv_tools = null_dep + dep_llvmspirvlib = null_dep + endif + if host_machine.cpu_family().startswith('ppc') and cpp.compiles(''' #if !defined(__VEC__) || !defined(__ALTIVEC__) #error "AltiVec not enabled" @@ -721,8 +731,11 @@ if _opencl != 'disabled' endif else dep_clc = null_dep + dep_spirv_tools = null_dep + dep_llvmspirvlib = null_dep with_gallium_opencl = false with_opencl_icd = false + with_opencl_spirv = false endif gl_pkgconfig_c_flags = [] diff --git a/meson_options.txt b/meson_options.txt index a2f86be19ae..3ab2900f929 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -143,6 +143,12 @@ option( value : 'disabled', description : 'build gallium "clover" OpenCL state tracker.', ) +option( + 'opencl-spirv', + type : 'boolean', + value : false, + description : 'build gallium "clover" OpenCL state tracker with SPIR-V binary support.', +) option( 'd3d-drivers-path', type : 'string', diff --git a/src/gallium/state_trackers/clover/meson.build b/src/gallium/state_trackers/clover/meson.build index 2ff060bf35b..9e3ec8d5ad4 100644 --- a/src/gallium/state_trackers/clover/meson.build +++ b/src/gallium/state_trackers/clover/meson.build @@ -19,12 +19,17 @@ # SOFTWARE. clover_cpp_args = [] +clover_spirv_cpp_args = [] clover_incs = [inc_include, inc_src, inc_gallium, inc_gallium_aux] if with_opencl_icd clover_cpp_args += '-DHAVE_CLOVER_ICD' endif +if with_opencl_spirv + clover_spirv_cpp_args += '-DHAVE_CLOVER_SPIRV' +endif + libclllvm = static_library( 'clllvm', files( @@ -40,7 +45,7 @@ libclllvm = static_library( ), include_directories : clover_incs, cpp_args : [ - cpp_vis_args, + clover_spirv_cpp_args, 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( @@ -111,7 +116,7 @@ libclover = static_library( 'clover', [clover_files, sha1_h], include_directories : clover_incs, - cpp_args : [clover_cpp_args, cpp_vis_args], + cpp_args : [clover_spirv_cpp_args, clover_cpp_args, cpp_vis_args], link_with : [libclllvm], override_options : clover_cpp_std, )