gallium/swr: add option for static link
authorKrzysztof Raszkowski <krzysztof.raszkowski@intel.com>
Wed, 22 Jan 2020 11:26:45 +0000 (12:26 +0100)
committerMarge Bot <eric+marge@anholt.net>
Thu, 23 Jan 2020 12:20:24 +0000 (12:20 +0000)
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 <jan.zielinski@intel.com>
Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3510>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3510>

meson_options.txt
src/gallium/drivers/swr/meson.build
src/gallium/drivers/swr/swr_loader.cpp

index dd7bf4bccaa4bce79bbf2b64cce098d6eea2e0e0..203324240543e9c36e3c4dd75ff0924fdb9b1353 100644 (file)
@@ -314,6 +314,13 @@ option(
   choices : ['avx', 'avx2', 'knl', 'skx'],
   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',
index 5a5c46dcbddb9de5e8d85c60bc20f43e70bf09d0..11ea7d3f43ed3c9247a26d423e72e34b3f827b05 100644 (file)
@@ -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
 )
index d9211315e5826265a15a8389ca4020e572a9d5e2..97db7ca3e8b8cf36bfdc21e39b390dfdd6c25a06 100644 (file)
@@ -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