From 0043edb066f800bf0815db6df071399fbabafb46 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Mon, 11 Mar 2024 01:33:29 +0000 Subject: [PATCH] MAINT: Try a better way to grab archs --- interface/meson.build | 1 + meson.build | 82 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 72 insertions(+), 11 deletions(-) diff --git a/interface/meson.build b/interface/meson.build index 7c457afd2..50f9ad420 100644 --- a/interface/meson.build +++ b/interface/meson.build @@ -40,6 +40,7 @@ blas3_roots = [ # } # Generated +# NOTE: Remember to check sourcesets as a simpler mechanism # TODO: Generated the imax and max via use_abs use_min configurations = [] blas_roots += blas1_roots diff --git a/meson.build b/meson.build index b6d40508c..e2543500d 100644 --- a/meson.build +++ b/meson.build @@ -52,16 +52,76 @@ else endif # Makefile.prebuild stuff -# TODO: Handle cpuidemu, and the target falgs -getarch = executable('getarch', - ['getarch.c', 'cpuid.S']) -getarch_two = executable('getarch_2nd', - ['getarch_2nd.c']) -config_h = custom_target('gen_config_h', - # input: ['getarch.c'], - output: ['config.h'], - command: [getarch, '3'] - ) +# TODO: Handle cpuidemu, and the target flags +# getarch = executable('getarch', +# ['getarch.c', 'cpuid.S']) +# getarch_two = executable('getarch_2nd', +# ['getarch_2nd.c']) +# config_h = custom_target('gen_config_h', +# # input: ['getarch.c'], +# output: ['config.h'], +# command: [getarch, '3'] +# ) + +_check_prefix = [] +conf_data = configuration_data() +is_win = build_machine.system() == 'win' +conf_data.set('OS_WINDOWS', is_win) + +getarch_array = [ + # Redundant, we have build_machine.system() for windows + {'checks': ['WIN32', 'WIN64', 'CYGWIN32'], 'addl': ['_WIN64', '_WIN32'], 'name': 'Windows', 'def': ['OS_WINDOWS']}, + {'checks': ['i386', 'x86_64'], 'addl': ['_M_IX86', '_M_X64'], 'name': 'Intel AMD', 'def': ['INTEL_AMD']}, + {'checks': ['powerpc', 'ppc', 'POWERPC'], 'addl': ['__powerpc', 'powerpc', 'ppc', '_POWER'], 'name': 'PowerPC', 'def': ['POWER', 'ARCH_POWER']}, + {'checks': ['zarch', 's390x'], 'name': 'zarch', 'def': ['ARCH_ZARCH', 'ZARCH']}, + {'checks': ['ia64'], 'name': 'IA64', 'def': ['ARCH_IA64']}, + {'name': 'Alpha', 'addl': ['__alpha'], 'def': ['ARCH_ALPHA']}, + {'name': 'SPARC', 'addl': ['sparc'], 'def': ['ARCH_SPARC']}, + {'checks': ['mips'], 'name': 'MIPS', 'def': ['ARCH_MIPS']}, + {'name': 'MIPS 64', 'addl': ['__mips64'], 'def': ['ARCH_MIPS64']}, + {'name': 'LOONGARCH 64', 'addl': ['__loongarch64'], 'def': ['ARCH_LOONGARCH64']}, + {'name': 'RISCV 64', 'addl': ['__riscv'], 'def': ['ARCH_RISCV64']}, + {'checks': ['arm'], 'name': 'ARM', 'def': ['ARCH_ARM']}, + {'checks': ['aarch64'], 'name': 'ARM 64', 'def': ['ARCH_ARM64']}, +] + +foreach arch : getarch_array + check_str = '' + if arch.has_key('checks') + foreach check : arch['checks'] + if check_str == '' + check_str += 'defined(__' + check + '__)' + else + check_str += ' || defined(__' + check + '__)' + endif + endforeach + endif + if arch.has_key('addl') + foreach check : arch['addl'] + if check_str == '' + check_str += 'defined(' + check + ')' + else + check_str += ' || defined(' + check + ')' + endif + endforeach + endif + + sname = arch['name'] + code = f''' + #if !(@check_str@) + #error "Not @sname@" + #endif + ''' + # message(code) + + is_arch = cc.compiles(code, name: arch['name']) + foreach def : arch['def'] + conf_data.set(def, is_arch) + endforeach +endforeach + +configure_file(output : 'getarch_conf.h', + configuration : conf_data) # run_target('generate_config_h', # command: [meson.current_build_dir() + '/getarch', '1'], @@ -79,5 +139,5 @@ config_h = custom_target('gen_config_h', # Ignoring all the hostarch checks and conflicts for arch in BSD for now _inc = include_directories('.') # subdir('lapack-netlib') -subdir('interface') +# subdir('interface') # subdir('kernel')