From: Krzysztof Raszkowski Date: Wed, 22 Jan 2020 11:26:45 +0000 (+0100) Subject: gallium/swr: add option for static link X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bf74a7f092126a985418956df9b249ec128d73cd;p=mesa.git 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 Reviewed-by: Dylan Baker Tested-by: Marge Bot Part-of: --- diff --git a/meson_options.txt b/meson_options.txt index dd7bf4bccaa..20332424054 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -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', 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