diff --git a/mesonbuild/modules/unstable_simd.py b/mesonbuild/modules/unstable_simd.py index 4aebc02f6..828afecf1 100644 --- a/mesonbuild/modules/unstable_simd.py +++ b/mesonbuild/modules/unstable_simd.py @@ -43,6 +43,12 @@ class SimdModule(ExtensionModule): raise mesonlib.MesonException('Argument must be a string.') if 'compiler' not in kwargs: 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 if not isinstance(compiler, compilers.compilers.Compiler): 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) libname = prefix + '_' + iset 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)) return [result, cdata] diff --git a/test cases/common/155 simd/include/simdheader.h b/test cases/common/155 simd/include/simdheader.h new file mode 100644 index 000000000..6515e413e --- /dev/null +++ b/test cases/common/155 simd/include/simdheader.h @@ -0,0 +1,3 @@ +#pragma once + +#define I_CAN_HAZ_SIMD diff --git a/test cases/common/155 simd/meson.build b/test cases/common/155 simd/meson.build index 9da165185..2628a1234 100644 --- a/test cases/common/155 simd/meson.build +++ b/test cases/common/155 simd/meson.build @@ -28,7 +28,8 @@ rval = simd.check('mysimds', avx : 'simd_avx.c', avx2 : 'simd_avx2.c', neon : 'simd_neon.c', - compiler : cc) + compiler : cc, + include_directories : include_directories('include')) simdlibs = rval[0] cdata.merge_from(rval[1]) diff --git a/test cases/common/155 simd/simd_avx.c b/test cases/common/155 simd/simd_avx.c index 989620ba3..1c84dae35 100644 --- a/test cases/common/155 simd/simd_avx.c +++ b/test cases/common/155 simd/simd_avx.c @@ -1,3 +1,9 @@ +#include + +#ifndef I_CAN_HAZ_SIMD +#error The correct internal header was not used +#endif + #include #include #include