Can pass all target kwargs through to SIMD invocations. Closes #2151.

pull/2111/merge
Jussi Pakkanen 7 years ago
parent d335a84b9e
commit cad6bf32f1
  1. 15
      mesonbuild/modules/unstable_simd.py
  2. 3
      test cases/common/155 simd/include/simdheader.h
  3. 3
      test cases/common/155 simd/meson.build
  4. 6
      test cases/common/155 simd/simd_avx.c

@ -43,6 +43,12 @@ class SimdModule(ExtensionModule):
raise mesonlib.MesonException('Argument must be a string.') raise mesonlib.MesonException('Argument must be a string.')
if 'compiler' not in kwargs: if 'compiler' not in kwargs:
raise mesonlib.MesonException('Must specify compiler keyword') raise mesonlib.MesonException('Must specify compiler keyword')
if 'sources' in kwargs:
raise mesonlib.MesonException('SIMD module does not support the "sources" keyword')
basic_kwargs = {}
for key, value in kwargs.items():
if key not in self.isets and key != 'compiler':
basic_kwargs[key] = value
compiler = kwargs['compiler'].compiler compiler = kwargs['compiler'].compiler
if not isinstance(compiler, compilers.compilers.Compiler): if not isinstance(compiler, compilers.compilers.Compiler):
raise mesonlib.MesonException('Compiler argument must be a compiler object.') raise mesonlib.MesonException('Compiler argument must be a compiler object.')
@ -64,7 +70,14 @@ class SimdModule(ExtensionModule):
conf.values['HAVE_' + iset.upper()] = ('1', 'Compiler supports %s.' % iset) conf.values['HAVE_' + iset.upper()] = ('1', 'Compiler supports %s.' % iset)
libname = prefix + '_' + iset libname = prefix + '_' + iset
lib_kwargs = {'sources': iset_fname, lib_kwargs = {'sources': iset_fname,
compiler.get_language() + '_args': args} }
lib_kwargs.update(basic_kwargs)
langarg_key = compiler.get_language() + '_args'
old_lang_args = lib_kwargs.get(langarg_key, [])
if not isinstance(old_lang_args, list):
old_lang_args = [old_lang_args]
all_lang_args = old_lang_args + args
lib_kwargs[langarg_key] = all_lang_args
result.append(interpreter.func_static_lib(None, [libname], lib_kwargs)) result.append(interpreter.func_static_lib(None, [libname], lib_kwargs))
return [result, cdata] return [result, cdata]

@ -0,0 +1,3 @@
#pragma once
#define I_CAN_HAZ_SIMD

@ -28,7 +28,8 @@ rval = simd.check('mysimds',
avx : 'simd_avx.c', avx : 'simd_avx.c',
avx2 : 'simd_avx2.c', avx2 : 'simd_avx2.c',
neon : 'simd_neon.c', neon : 'simd_neon.c',
compiler : cc) compiler : cc,
include_directories : include_directories('include'))
simdlibs = rval[0] simdlibs = rval[0]
cdata.merge_from(rval[1]) cdata.merge_from(rval[1])

@ -1,3 +1,9 @@
#include<simdheader.h>
#ifndef I_CAN_HAZ_SIMD
#error The correct internal header was not used
#endif
#include<simdconfig.h> #include<simdconfig.h>
#include<simdfuncs.h> #include<simdfuncs.h>
#include<stdint.h> #include<stdint.h>

Loading…
Cancel
Save