project('libmg2d', 'c', default_options : ['c_std=c11']) add_project_arguments('-D_XOPEN_SOURCE=700', language : 'c') lib_src = [ 'bicgstab.c', 'boundary.c', 'components.c', 'cpu.c', 'ell_grid_solve.c', 'log.c', 'mg2d.c', 'ndarray.c', 'residual_calc.c', 'timer.c', 'transfer.c', ] lib_obj = [] verscript = 'libmg2d.v' ver_flag = '-Wl,--version-script,@0@/@1@'.format(meson.current_source_dir(), verscript) cc = meson.get_compiler('c') libm = cc.find_library('m', required : false) libcblas = cc.find_library('blas') liblapacke = cc.find_library('lapacke') dep_tp = declare_dependency(link_args : '-lthreadpool') dep_mpi = dependency('mpi', language: 'c') deps = [dep_tp, libm, libcblas, liblapacke, dep_mpi] cdata = configuration_data() cdata.set10('ARCH_X86', false) cdata.set10('ARCH_X86_64', false) cdata.set10('HAVE_EXTERNAL_ASM', false) arch = host_machine.cpu_family() if arch.startswith('x86') cdata.set10('ARCH_X86', true) if arch == 'x86_64' cdata.set10('ARCH_X86_64', true) nasm = find_program('nasm', required : get_option('nasm')) if nasm.found() cdata.set10('HAVE_EXTERNAL_ASM', true) else warning('nasm not found, no SIMD will be built') endif endif endif configure_file(output : 'config.h', output_format : 'c', configuration : cdata) if nasm.found() cdata_asm = configuration_data() cdata_asm.set10('ARCH_X86', true) cdata_asm.set10('ARCH_X86_64', true) cdata_asm.set10('ARCH_X86_32', false) configure_file(output : 'config.asm', output_format : 'nasm', configuration : cdata_asm) if host_machine.system() == 'windows' nasm_format = 'win' elif host_machine.system() == 'darwin' nasm_format = 'macho' else nasm_format = 'elf' endif nasm_format += '64' nasm_gen = generator(nasm, output: '@BASENAME@.obj', depfile: '@BASENAME@.obj.ndep', arguments: [ '-f', nasm_format, '-I', '@SOURCE_DIR@', '-I', '@0@/'.format(meson.current_build_dir()), '-MQ', '@OUTPUT@', '-MF', '@DEPFILE@', '@EXTRA_ARGS@', '@INPUT@', '-o', '@OUTPUT@' ] ) nasm_sources = files( 'cpuid.asm', 'ndarray.asm', 'residual_calc.asm', 'transfer_interp.asm', ) lib_obj += nasm_gen.process(nasm_sources) endif library('mg2d', lib_src, lib_obj, link_args : ver_flag, dependencies : deps, link_depends : verscript) # test programs test_progs = ['relax', 'relax_mpi', 'mg2d', 'mg2d_mpi'] foreach t : test_progs target = t + '_test' executable(target, [target + '.c'] + lib_src, lib_obj, dependencies : deps + [libm]) endforeach