On Tue, Apr 25, 2023 at 10:08 PM Tyler Retzlaff <roret...@linux.microsoft.com> wrote: > > Detect when MSVC toolset is available and tweak toolchain arguments > where the meson build system offers no abstraction. > > Signed-off-by: Tyler Retzlaff <roret...@linux.microsoft.com> > Acked-by: Bruce Richardson <bruce.richard...@intel.com> > --- > buildtools/meson.build | 10 +++++++--- > config/meson.build | 21 ++++++++++++++------- > config/x86/meson.build | 8 +++++--- > lib/meson.build | 13 ++++++++++--- > 4 files changed, 36 insertions(+), 16 deletions(-) > > diff --git a/buildtools/meson.build b/buildtools/meson.build > index e1c600e..838c39f 100644 > --- a/buildtools/meson.build > +++ b/buildtools/meson.build > @@ -4,7 +4,9 @@ > pkgconf = find_program('pkg-config', 'pkgconf', required: false) > check_symbols = find_program('check-symbols.sh')
I don't expect check-symbols.sh to work if objdump is not available. > ldflags_ibverbs_static = find_program('options-ibverbs-static.sh') > -objdump = find_program('objdump', 'llvm-objdump') > +if cc.get_id() != 'msvc' > + objdump = find_program('objdump', 'llvm-objdump') > +endif Looking at objdump users in meson, I only see the avx512 stuff. The avx512 check is only called under a gcc check in config/x86/meson.build, so I would move both definitions (and potentially the script itself) under config/x86. Something like: https://patchwork.dpdk.org/project/dpdk/patch/20230811131024.2285366-1-david.march...@redhat.com/ > > python3 = import('python').find_installation(required: false) > if python3.found() > @@ -18,8 +20,10 @@ map_to_win_cmd = py3 + files('map_to_win.py') > sphinx_wrapper = py3 + files('call-sphinx-build.py') > get_cpu_count_cmd = py3 + files('get-cpu-count.py') > get_numa_count_cmd = py3 + files('get-numa-count.py') > -binutils_avx512_check = (py3 + files('binutils-avx512-check.py') + > - [objdump] + cc.cmd_array()) > +if cc.get_id() != 'msvc' > + binutils_avx512_check = (py3 + files('binutils-avx512-check.py') + > + [objdump] + cc.cmd_array()) > +endif > > # select library and object file format > pmdinfo = py3 + files('gen-pmdinfo-cfile.py') + [meson.current_build_dir()] > diff --git a/config/meson.build b/config/meson.build > index fa730a1..9a3f499 100644 > --- a/config/meson.build > +++ b/config/meson.build > @@ -16,7 +16,8 @@ endforeach > > # MS linker requires special treatment. > # TODO: use cc.get_linker_id() with Meson >= 0.54 > -is_ms_linker = is_windows and (cc.get_id() == 'clang') > +is_ms_compiler = is_windows and (cc.get_id() == 'msvc') > +is_ms_linker = is_windows and (cc.get_id() == 'clang' or is_ms_compiler) > > # set the major version, which might be used by drivers and libraries > # depending on the configuration options > @@ -130,11 +131,13 @@ dpdk_conf.set('RTE_MACHINE', cpu_instruction_set) > machine_args = [] > > # ppc64 does not support -march= at all, use -mcpu and -mtune for that This comment can be moved in the block too. > -if host_machine.cpu_family().startswith('ppc') > - machine_args += '-mcpu=' + cpu_instruction_set > - machine_args += '-mtune=' + cpu_instruction_set > -else > - machine_args += '-march=' + cpu_instruction_set > +if not is_ms_compiler > + if host_machine.cpu_family().startswith('ppc') > + machine_args += '-mcpu=' + cpu_instruction_set > + machine_args += '-mtune=' + cpu_instruction_set > + else > + machine_args += '-march=' + cpu_instruction_set > + endif > endif > > toolchain = cc.get_id() > @@ -253,7 +256,11 @@ if cc.get_id() == 'clang' and > dpdk_conf.get('RTE_ARCH_64') == false > endif > > # add -include rte_config to cflags > -add_project_arguments('-include', 'rte_config.h', language: 'c') > +if is_ms_compiler > + add_project_arguments('/FI', 'rte_config.h', language: 'c') > +else > + add_project_arguments('-include', 'rte_config.h', language: 'c') > +endif > > # enable extra warnings and disable any unwanted warnings > # -Wall is added by default at warning level 1, and -Wextra > diff --git a/config/x86/meson.build b/config/x86/meson.build > index 54345c4..11f0bcc 100644 > --- a/config/x86/meson.build > +++ b/config/x86/meson.build > @@ -25,9 +25,11 @@ if cc.has_argument('-mavx512f') > endif > > # we require SSE4.2 for DPDK Are there requirements we announce for MSVC builds? In any case, please move this comment in the block. > -if cc.get_define('__SSE4_2__', args: machine_args) == '' > - message('SSE 4.2 not enabled by default, explicitly enabling') > - machine_args += '-msse4' > +if not is_ms_compiler > + if cc.get_define('__SSE4_2__', args: machine_args) == '' > + message('SSE 4.2 not enabled by default, explicitly enabling') > + machine_args += '-msse4' > + endif > endif > > base_flags = ['SSE', 'SSE2', 'SSE3','SSSE3', 'SSE4_1', 'SSE4_2'] > diff --git a/lib/meson.build b/lib/meson.build > index dc8aa4a..40c632a 100644 > --- a/lib/meson.build > +++ b/lib/meson.build > @@ -241,9 +241,16 @@ foreach l:libraries > output: '@0@_exports.def'.format(libname)) > lk_deps += [def_file] > > - lk_args = ['-Wl,/def:' + def_file.full_path()] > - if meson.version().version_compare('<0.54.0') > - lk_args += ['-Wl,/implib:lib\\librte_' + l + '.dll.a'] > + if is_ms_compiler > + lk_args = ['/def:' + def_file.full_path()] > + if meson.version().version_compare('<0.54.0') > + lk_args += ['/implib:lib\\librte_' + l + '.dll.a'] > + endif > + else > + lk_args = ['-Wl,/def:' + def_file.full_path()] > + if meson.version().version_compare('<0.54.0') > + lk_args += ['-Wl,/implib:lib\\librte_' + l + '.dll.a'] > + endif > endif > else > if is_windows > -- > 1.8.3.1 > -- David Marchand