2017-12-18 15:56:25 +00:00
|
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
2020-10-09 13:50:45 +00:00
|
|
|
# Copyright(c) 2017-2020 Intel Corporation
|
build: add infrastructure for meson and ninja builds
To build with meson and ninja, we need some initial infrastructure in
place. The build files for meson always need to be called "meson.build",
and options get placed in meson_options.txt
This commit adds a top-level meson.build file, which sets up the global
variables for tracking drivers, libraries, etc., and then includes other
build files, before finishing by writing the global build configuration
header file and a DPDK pkgconfig file at the end, using some of those same
globals.
From the top level build file, the only include file thus far is for the
config folder, which does some other setup of global configuration
parameters, including pulling in architecture specific parameters from an
architectural subdirectory. A number of configuration build options are
provided for the project to tune a number of global variables which will be
used later e.g. max numa nodes, max cores, etc. These settings all make
their way to the global build config header "rte_build_config.h". There is
also a file "rte_config.h", which includes "rte_build_config.h", and this
file is meant to hold other build-time values which are present in our
current static build configuration but are not normally meant for
user-configuration. Ideally, over time, the values placed here should be
moved to the individual libraries or drivers which want those values.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Luca Boccassi <luca.boccassi@gmail.com>
2017-08-28 10:57:12 +00:00
|
|
|
|
2019-01-17 17:17:44 +00:00
|
|
|
# get binutils version for the workaround of Bug 97
|
2021-11-12 21:48:24 +00:00
|
|
|
binutils_ok = true
|
|
|
|
if not is_windows and (is_linux or cc.get_id() == 'gcc')
|
|
|
|
binutils_ok = run_command(binutils_avx512_check).returncode() == 0
|
|
|
|
if not binutils_ok and cc.has_argument('-mno-avx512f')
|
2021-04-20 10:22:23 +00:00
|
|
|
machine_args += '-mno-avx512f'
|
|
|
|
warning('Binutils error with AVX512 assembly, disabling AVX512 support')
|
|
|
|
endif
|
2019-01-17 17:17:44 +00:00
|
|
|
endif
|
build: add infrastructure for meson and ninja builds
To build with meson and ninja, we need some initial infrastructure in
place. The build files for meson always need to be called "meson.build",
and options get placed in meson_options.txt
This commit adds a top-level meson.build file, which sets up the global
variables for tracking drivers, libraries, etc., and then includes other
build files, before finishing by writing the global build configuration
header file and a DPDK pkgconfig file at the end, using some of those same
globals.
From the top level build file, the only include file thus far is for the
config folder, which does some other setup of global configuration
parameters, including pulling in architecture specific parameters from an
architectural subdirectory. A number of configuration build options are
provided for the project to tune a number of global variables which will be
used later e.g. max numa nodes, max cores, etc. These settings all make
their way to the global build config header "rte_build_config.h". There is
also a file "rte_config.h", which includes "rte_build_config.h", and this
file is meant to hold other build-time values which are present in our
current static build configuration but are not normally meant for
user-configuration. Ideally, over time, the values placed here should be
moved to the individual libraries or drivers which want those values.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Luca Boccassi <luca.boccassi@gmail.com>
2017-08-28 10:57:12 +00:00
|
|
|
|
2021-07-20 13:36:45 +00:00
|
|
|
# check if compiler is working with _mm512_extracti64x4_epi64
|
|
|
|
# Ref: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82887
|
|
|
|
if cc.has_argument('-mavx512f')
|
|
|
|
code = '''#include <immintrin.h>
|
|
|
|
void test(__m512i zmm){
|
|
|
|
__m256i ymm = _mm512_extracti64x4_epi64(zmm, 0);}'''
|
|
|
|
result = cc.compiles(code, args : '-mavx512f', name : 'AVX512 checking')
|
|
|
|
if result == false
|
|
|
|
machine_args += '-mno-avx512f'
|
|
|
|
warning('Broken _mm512_extracti64x4_epi64, disabling AVX512 support')
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
build: add infrastructure for meson and ninja builds
To build with meson and ninja, we need some initial infrastructure in
place. The build files for meson always need to be called "meson.build",
and options get placed in meson_options.txt
This commit adds a top-level meson.build file, which sets up the global
variables for tracking drivers, libraries, etc., and then includes other
build files, before finishing by writing the global build configuration
header file and a DPDK pkgconfig file at the end, using some of those same
globals.
From the top level build file, the only include file thus far is for the
config folder, which does some other setup of global configuration
parameters, including pulling in architecture specific parameters from an
architectural subdirectory. A number of configuration build options are
provided for the project to tune a number of global variables which will be
used later e.g. max numa nodes, max cores, etc. These settings all make
their way to the global build config header "rte_build_config.h". There is
also a file "rte_config.h", which includes "rte_build_config.h", and this
file is meant to hold other build-time values which are present in our
current static build configuration but are not normally meant for
user-configuration. Ideally, over time, the values placed here should be
moved to the individual libraries or drivers which want those values.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Luca Boccassi <luca.boccassi@gmail.com>
2017-08-28 10:57:12 +00:00
|
|
|
# we require SSE4.2 for DPDK
|
2019-05-02 13:35:25 +00:00
|
|
|
if cc.get_define('__SSE4_2__', args: machine_args) == ''
|
2021-04-20 10:22:23 +00:00
|
|
|
message('SSE 4.2 not enabled by default, explicitly enabling')
|
|
|
|
machine_args += '-msse4'
|
build: add infrastructure for meson and ninja builds
To build with meson and ninja, we need some initial infrastructure in
place. The build files for meson always need to be called "meson.build",
and options get placed in meson_options.txt
This commit adds a top-level meson.build file, which sets up the global
variables for tracking drivers, libraries, etc., and then includes other
build files, before finishing by writing the global build configuration
header file and a DPDK pkgconfig file at the end, using some of those same
globals.
From the top level build file, the only include file thus far is for the
config folder, which does some other setup of global configuration
parameters, including pulling in architecture specific parameters from an
architectural subdirectory. A number of configuration build options are
provided for the project to tune a number of global variables which will be
used later e.g. max numa nodes, max cores, etc. These settings all make
their way to the global build config header "rte_build_config.h". There is
also a file "rte_config.h", which includes "rte_build_config.h", and this
file is meant to hold other build-time values which are present in our
current static build configuration but are not normally meant for
user-configuration. Ideally, over time, the values placed here should be
moved to the individual libraries or drivers which want those values.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Luca Boccassi <luca.boccassi@gmail.com>
2017-08-28 10:57:12 +00:00
|
|
|
endif
|
|
|
|
|
2017-09-14 11:11:20 +00:00
|
|
|
base_flags = ['SSE', 'SSE2', 'SSE3','SSSE3', 'SSE4_1', 'SSE4_2']
|
|
|
|
foreach f:base_flags
|
2021-04-20 10:22:23 +00:00
|
|
|
compile_time_cpuflags += ['RTE_CPUFLAG_' + f]
|
2017-09-14 11:11:20 +00:00
|
|
|
endforeach
|
|
|
|
|
2020-10-06 15:03:09 +00:00
|
|
|
optional_flags = [
|
2021-04-26 10:54:03 +00:00
|
|
|
'AES',
|
|
|
|
'AVX',
|
|
|
|
'AVX2',
|
|
|
|
'AVX512BW',
|
|
|
|
'AVX512CD',
|
|
|
|
'AVX512DQ',
|
|
|
|
'AVX512F',
|
|
|
|
'AVX512VL',
|
|
|
|
'PCLMUL',
|
|
|
|
'RDRND',
|
|
|
|
'RDSEED',
|
|
|
|
'VPCLMULQDQ',
|
2020-10-06 15:03:09 +00:00
|
|
|
]
|
2019-05-14 13:37:01 +00:00
|
|
|
foreach f:optional_flags
|
2021-04-20 10:22:23 +00:00
|
|
|
if cc.get_define('__@0@__'.format(f), args: machine_args) == '1'
|
|
|
|
if f == 'PCLMUL' # special case flags with different defines
|
|
|
|
f = 'PCLMULQDQ'
|
|
|
|
elif f == 'RDRND'
|
|
|
|
f = 'RDRAND'
|
|
|
|
endif
|
|
|
|
compile_time_cpuflags += ['RTE_CPUFLAG_' + f]
|
|
|
|
endif
|
2019-05-14 13:37:01 +00:00
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
build: add infrastructure for meson and ninja builds
To build with meson and ninja, we need some initial infrastructure in
place. The build files for meson always need to be called "meson.build",
and options get placed in meson_options.txt
This commit adds a top-level meson.build file, which sets up the global
variables for tracking drivers, libraries, etc., and then includes other
build files, before finishing by writing the global build configuration
header file and a DPDK pkgconfig file at the end, using some of those same
globals.
From the top level build file, the only include file thus far is for the
config folder, which does some other setup of global configuration
parameters, including pulling in architecture specific parameters from an
architectural subdirectory. A number of configuration build options are
provided for the project to tune a number of global variables which will be
used later e.g. max numa nodes, max cores, etc. These settings all make
their way to the global build config header "rte_build_config.h". There is
also a file "rte_config.h", which includes "rte_build_config.h", and this
file is meant to hold other build-time values which are present in our
current static build configuration but are not normally meant for
user-configuration. Ideally, over time, the values placed here should be
moved to the individual libraries or drivers which want those values.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Luca Boccassi <luca.boccassi@gmail.com>
2017-08-28 10:57:12 +00:00
|
|
|
dpdk_conf.set('RTE_ARCH_X86', 1)
|
2018-09-26 09:15:36 +00:00
|
|
|
if dpdk_conf.get('RTE_ARCH_64')
|
2021-04-20 10:22:23 +00:00
|
|
|
dpdk_conf.set('RTE_ARCH_X86_64', 1)
|
|
|
|
dpdk_conf.set('RTE_ARCH', 'x86_64')
|
build: add infrastructure for meson and ninja builds
To build with meson and ninja, we need some initial infrastructure in
place. The build files for meson always need to be called "meson.build",
and options get placed in meson_options.txt
This commit adds a top-level meson.build file, which sets up the global
variables for tracking drivers, libraries, etc., and then includes other
build files, before finishing by writing the global build configuration
header file and a DPDK pkgconfig file at the end, using some of those same
globals.
From the top level build file, the only include file thus far is for the
config folder, which does some other setup of global configuration
parameters, including pulling in architecture specific parameters from an
architectural subdirectory. A number of configuration build options are
provided for the project to tune a number of global variables which will be
used later e.g. max numa nodes, max cores, etc. These settings all make
their way to the global build config header "rte_build_config.h". There is
also a file "rte_config.h", which includes "rte_build_config.h", and this
file is meant to hold other build-time values which are present in our
current static build configuration but are not normally meant for
user-configuration. Ideally, over time, the values placed here should be
moved to the individual libraries or drivers which want those values.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Luca Boccassi <luca.boccassi@gmail.com>
2017-08-28 10:57:12 +00:00
|
|
|
else
|
2021-04-20 10:22:23 +00:00
|
|
|
dpdk_conf.set('RTE_ARCH_I686', 1)
|
|
|
|
dpdk_conf.set('RTE_ARCH', 'i686')
|
build: add infrastructure for meson and ninja builds
To build with meson and ninja, we need some initial infrastructure in
place. The build files for meson always need to be called "meson.build",
and options get placed in meson_options.txt
This commit adds a top-level meson.build file, which sets up the global
variables for tracking drivers, libraries, etc., and then includes other
build files, before finishing by writing the global build configuration
header file and a DPDK pkgconfig file at the end, using some of those same
globals.
From the top level build file, the only include file thus far is for the
config folder, which does some other setup of global configuration
parameters, including pulling in architecture specific parameters from an
architectural subdirectory. A number of configuration build options are
provided for the project to tune a number of global variables which will be
used later e.g. max numa nodes, max cores, etc. These settings all make
their way to the global build config header "rte_build_config.h". There is
also a file "rte_config.h", which includes "rte_build_config.h", and this
file is meant to hold other build-time values which are present in our
current static build configuration but are not normally meant for
user-configuration. Ideally, over time, the values placed here should be
moved to the individual libraries or drivers which want those values.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Keith Wiles <keith.wiles@intel.com>
Acked-by: Luca Boccassi <luca.boccassi@gmail.com>
2017-08-28 10:57:12 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
dpdk_conf.set('RTE_CACHE_LINE_SIZE', 64)
|
2021-08-17 10:45:56 +00:00
|
|
|
dpdk_conf.set('RTE_MAX_LCORE', 128)
|
|
|
|
dpdk_conf.set('RTE_MAX_NUMA_NODES', 32)
|