diff --git a/kernel/meson.build b/kernel/meson.build new file mode 100644 index 000000000..79e36a0e0 --- /dev/null +++ b/kernel/meson.build @@ -0,0 +1,98 @@ +# Ordered As per https://netlib.org/blas/blasqr.pdf +# NOTE: xROTG xROTMG xROTM have no kernels? +_kinds = [] +_rk = ['s', 'd'] +_ck = ['c', 'z'] +_std_dk = _rk + _ck # Standard precisions +# TODO: Actually test and set this +if fma3 + fma3_flag = '-mfma' +endif +# TODO: This is currently following x86_64 generic for src and dir, but it needs +# to diversify +# NOTE: The def and undefs are from Makefile.L1 +# Construct all PRECsymbKERNEL from src and dir via files(dir + src) +# For the precs array, the following mapping is used for c_args: +# undef --> -Uwhatever +# def --> -Dwhatever +# addl --> passed AS IS +kops_array = [ + # Level 1 BLAS + { + 'base': 'rot', + # TODO: A lot of these flags are basically repeating.. + 'precs': { + 's' : { + 'dir': 'arm', + 'kernel': 'rot.c', + 'undef': ['COMPLEX', 'DOUBLE'], + 'addl': [fma3_flag], + }, + 'd' : { + 'dir': 'arm', + 'kernel': 'rot.c', + 'undef': ['COMPLEX'], + 'def': ['DOUBLE'], + 'addl': [fma3_flag], + }, + 'q' : { + 'dir': 'arm', + 'kernel': 'zrot.c', + 'undef': ['COMPLEX'], + 'def': ['DXDOUBLE'], + }, + 'cs' : { + 'dir': 'arm', + 'kernel': 'zrot.c', + 'undef': ['DOUBLE'], + 'def': ['COMPLEX'], + }, + 'zd' : { + 'dir': 'arm', + 'kernel': 'zrot.c', + 'def': ['COMPLEX', 'DOUBLE'], + }, + 'xq' : { + 'dir': 'arm', + 'kernel': 'zrot.c', + 'def': ['COMPLEX', 'DXDOUBLE'], + }, + }, + }, + {'symb': 'swap', + 'src': {'real': 'swap', 'cmplx': 'zswap', 'ext': '.c'}, + 'dir': 'arm', 'precs': _std_dk }, + {'symb': 'scal', + 'src': {'real': 'scal', 'cmplx': 'zscal', 'ext': '.c'}, + 'dir': 'arm', 'precs': _std_dk }, + {'symb': 'copy', + 'src': {'real': 'copy', 'cmplx': 'zcopy', 'ext': '.c'}, + 'dir': 'arm', 'precs': _std_dk }, + {'symb': 'axpy', + 'src': {'real': 'axpy', 'cmplx': 'zaxpy', 'ext': '.c'}, + 'dir': 'arm', 'precs': _std_dk }, + {'symb': 'dot', + 'src': {'real': 'dot', 'cmplx': 'zdot', 'ext': '.c'}, + 'dir': 'arm', 'precs': _std_dk }, +] + +kernel_confs = [] + +foreach root : blas1_roots + fname = root + '.S' + defs = [] + foreach prec : real_kinds + name = prec + fname + '_k' + kernel_confs += {'defs': defs, 'name': name, 'src': fname} + endforeach +endforeach + +_static_libs = [] +foreach conf: kernel_confs + _static_libs += static_library( + conf['name'], + conf['src'], + include_directories: _inc, + c_args: conf['defs'], + ) +endforeach