summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Raszkowski <[email protected]>2020-01-22 12:26:45 +0100
committerMarge Bot <[email protected]>2020-01-23 12:20:24 +0000
commitbf74a7f092126a985418956df9b249ec128d73cd (patch)
tree416905c1cfa3fe06cbd7168f391e04abb2cccb62
parent54e54ec3e8112e56ef229be483bb1772df6fc0de (diff)
gallium/swr: add option for static link
Set swr-shared to 'false' to link SWR statically into Mesa. Only one swr arch can be specified if swr-shared is set to false. Reviewed-by: Jan Zielinski <[email protected]> Reviewed-by: Dylan Baker <[email protected]> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3510> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3510>
-rw-r--r--meson_options.txt7
-rw-r--r--src/gallium/drivers/swr/meson.build230
-rw-r--r--src/gallium/drivers/swr/swr_loader.cpp2
3 files changed, 159 insertions, 80 deletions
diff --git a/meson_options.txt b/meson_options.txt
index dd7bf4bccaa..20332424054 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -315,6 +315,13 @@ option(
description : 'Architectures to build SWR support for.',
)
option(
+ 'shared-swr',
+ type : 'boolean',
+ value : true,
+ description : 'Whether to link SWR shared or statically.',
+)
+
+option(
'tools',
type : 'array',
value : [],
diff --git a/src/gallium/drivers/swr/meson.build b/src/gallium/drivers/swr/meson.build
index 5a5c46dcbdd..11ea7d3f43e 100644
--- a/src/gallium/drivers/swr/meson.build
+++ b/src/gallium/drivers/swr/meson.build
@@ -1,4 +1,4 @@
-# Copyright © 2017-2018 Intel Corporation
+# Copyright © 2017-2020 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
@@ -193,7 +193,7 @@ if cpp.has_argument('-fno-strict-aliasing')
endif
swr_arch_libs = []
-swr_arch_defines = []
+swr_defines = []
swr_avx_args = cpp.first_supported_argument(
'-target-cpu=sandybridge', '-mavx', '-march=core-avx', '-tp=sandybridge',
@@ -202,51 +202,52 @@ swr_avx_args = cpp.first_supported_argument(
if swr_avx_args == []
error('Cannot find AVX support for swr. (these are required for SWR an all architectures.)')
endif
-if with_swr_arches.contains('avx')
- swr_arch_defines += '-DHAVE_SWR_AVX'
- swr_arch_libs += shared_library(
- 'swrAVX',
- [files_swr_common, files_swr_arch],
- cpp_args : [
- cpp_msvc_compat_args, swr_cpp_args, swr_avx_args,
- '-DKNOB_ARCH=KNOB_ARCH_AVX',
- ],
- link_args : [ld_args_gc_sections],
- include_directories : [swr_incs],
- dependencies : [dep_thread, dep_llvm],
- version : '0.0.0',
- soversion : host_machine.system() == 'windows' ? '' : '0',
- install : true,
- )
+
+shared_swr = get_option('shared-swr')
+if not shared_swr
+ if with_swr_arches.length() > 1
+ error('When SWR is linked statically only one architecture is allowed.')
+ endif
+ swr_defines += '-DHAVE_SWR_BUILTIN'
endif
-if with_swr_arches.contains('avx2')
- swr_avx2_args = cpp.first_supported_argument(
- '-target-cpu=haswell', '-march=core-avx2', '-tp=haswell', '/arch:AVX2',
+if with_swr_arches.contains('skx')
+ swr_skx_args = cpp.first_supported_argument(
+ '-march=skylake-avx512', '-target-cpu=x86-skylake', '-xCORE-AVX512',
)
- if swr_avx2_args == []
- if cpp.has_argument(['-mavx2', '-mfma', '-mbmi2', '-mf16c'])
- swr_avx2_args = ['-mavx2', '-mfma', '-mbmi2', '-mf16c']
- else
- error('Cannot find AVX2 support for swr.')
- endif
+ if swr_skx_args == []
+ error('Cannot find SKX support for swr.')
endif
- swr_arch_defines += '-DHAVE_SWR_AVX2'
- swr_arch_libs += shared_library(
- 'swrAVX2',
- [files_swr_common, files_swr_arch],
- cpp_args : [
- cpp_msvc_compat_args, swr_cpp_args, swr_avx2_args,
- '-DKNOB_ARCH=KNOB_ARCH_AVX2',
- ],
- link_args : [ld_args_gc_sections],
- include_directories : [swr_incs],
- dependencies : [dep_thread, dep_llvm],
- version : '0.0.0',
- soversion : host_machine.system() == 'windows' ? '' : '0',
- install : true,
- )
+ swr_defines += '-DHAVE_SWR_SKX'
+ if shared_swr
+ swr_arch_libs += shared_library(
+ 'swrSKX',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_skx_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX512',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ version : '0.0.0',
+ soversion : host_machine.system() == 'windows' ? '' : '0',
+ install : true,
+ )
+ else
+ swr_arch_libs += static_library(
+ 'swrSKX',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_skx_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX512',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ )
+ endif
endif
if with_swr_arches.contains('knl')
@@ -257,48 +258,114 @@ if with_swr_arches.contains('knl')
error('Cannot find KNL support for swr.')
endif
- swr_arch_defines += '-DHAVE_SWR_KNL'
- swr_arch_libs += shared_library(
- 'swrKNL',
- [files_swr_common, files_swr_arch],
- cpp_args : [
- cpp_msvc_compat_args, swr_cpp_args, swr_knl_args,
- '-DKNOB_ARCH=KNOB_ARCH_AVX512', '-DSIMD_ARCH_KNIGHTS',
- ],
- link_args : [ld_args_gc_sections],
- include_directories : [swr_incs],
- dependencies : [dep_thread, dep_llvm],
- version : '0.0.0',
- soversion : host_machine.system() == 'windows' ? '' : '0',
- install : true,
- )
+ swr_defines += '-DHAVE_SWR_KNL'
+ if shared_swr
+ swr_arch_libs += shared_library(
+ 'swrKNL',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_knl_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX512', '-DSIMD_ARCH_KNIGHTS',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ version : '0.0.0',
+ soversion : host_machine.system() == 'windows' ? '' : '0',
+ install : true,
+ )
+ else
+ swr_arch_libs += static_library(
+ 'swrKNL',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_knl_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX512', '-DSIMD_ARCH_KNIGHTS',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ )
+ endif
endif
-if with_swr_arches.contains('skx')
- swr_skx_args = cpp.first_supported_argument(
- '-march=skylake-avx512', '-target-cpu=x86-skylake', '-xCORE-AVX512',
+
+if with_swr_arches.contains('avx2')
+ swr_avx2_args = cpp.first_supported_argument(
+ '-target-cpu=haswell', '-march=core-avx2', '-tp=haswell', '/arch:AVX2',
)
- if swr_skx_args == []
- error('Cannot find SKX support for swr.')
+ if swr_avx2_args == []
+ if cpp.has_argument(['-mavx2', '-mfma', '-mbmi2', '-mf16c'])
+ swr_avx2_args = ['-mavx2', '-mfma', '-mbmi2', '-mf16c']
+ else
+ error('Cannot find AVX2 support for swr.')
+ endif
endif
- swr_arch_defines += '-DHAVE_SWR_SKX'
- swr_arch_libs += shared_library(
- 'swrSKX',
- [files_swr_common, files_swr_arch],
- cpp_args : [
- cpp_msvc_compat_args, swr_cpp_args, swr_skx_args,
- '-DKNOB_ARCH=KNOB_ARCH_AVX512',
- ],
- link_args : [ld_args_gc_sections],
- include_directories : [swr_incs],
- dependencies : [dep_thread, dep_llvm],
- version : '0.0.0',
- soversion : host_machine.system() == 'windows' ? '' : '0',
- install : true,
- )
+ swr_defines += '-DHAVE_SWR_AVX2'
+ if shared_swr
+ swr_arch_libs += shared_library(
+ 'swrAVX2',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_avx2_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX2',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ version : '0.0.0',
+ soversion : host_machine.system() == 'windows' ? '' : '0',
+ install : true,
+ )
+ else
+ swr_arch_libs += static_library(
+ 'swrAVX2',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_avx2_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX2',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ )
+ endif
endif
+if with_swr_arches.contains('avx')
+ swr_defines += '-DHAVE_SWR_AVX'
+ if shared_swr
+ swr_arch_libs += shared_library(
+ 'swrAVX',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_avx_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ version : '0.0.0',
+ soversion : host_machine.system() == 'windows' ? '' : '0',
+ install : true,
+ )
+ else
+ swr_arch_libs += static_library(
+ 'swrAVX',
+ [files_swr_common, files_swr_arch],
+ cpp_args : [
+ cpp_msvc_compat_args, swr_cpp_args, swr_avx_args,
+ '-DKNOB_ARCH=KNOB_ARCH_AVX',
+ ],
+ link_args : [ld_args_gc_sections],
+ include_directories : [swr_incs],
+ dependencies : [dep_thread, dep_llvm],
+ )
+ endif
+endif
+
+
if swr_arch_libs == []
error('SWR configured, but no SWR architectures configured')
endif
@@ -310,13 +377,18 @@ libmesaswr = static_library(
gen_builder_hpp, gen_builder_meta_hpp, gen_builder_intrin_hpp],
cpp_args : [
cpp_msvc_compat_args, cpp_vis_args, swr_cpp_args, swr_avx_args,
- swr_arch_defines,
+ swr_defines,
],
include_directories : [inc_common, swr_incs],
dependencies : dep_llvm,
)
+link_libs = [libmesaswr]
+if not shared_swr
+ link_libs += swr_arch_libs
+endif
+
driver_swr = declare_dependency(
compile_args : '-DGALLIUM_SWR',
- link_with : libmesaswr
+ link_with : link_libs
)
diff --git a/src/gallium/drivers/swr/swr_loader.cpp b/src/gallium/drivers/swr/swr_loader.cpp
index d9211315e58..97db7ca3e8b 100644
--- a/src/gallium/drivers/swr/swr_loader.cpp
+++ b/src/gallium/drivers/swr/swr_loader.cpp
@@ -36,7 +36,7 @@ swr_initialize_screen_interface(struct swr_screen *screen, const char arch[])
#ifdef HAVE_SWR_BUILTIN
screen->pLibrary = NULL;
screen->pfnSwrGetInterface = SwrGetInterface;
- screen->pfnSwrGetInterface = SwrGetTileInterface;
+ screen->pfnSwrGetTileInterface = SwrGetTileIterface;
InitTilesTable();
swr_print_info("(using: builtin).\n");
#else