01/03/2019 08:18, Anand Rawat:
> Added initial stub source files for windows support and meson
> changes to build them.
Thanks for sending some new patches based on meson.
Let's start review with some simple considerations.
> Signed-off-by: Anand Rawat <anand.rawat@intel.com>
> Signed-off-by: Kadam, Pallavi <pallavi.kadam@intel.com>
Please avoid comma in names.
I think the right name is Pallavi Kadam?
> Reviewed-by: Jeffrey B Shaw <jeffrey.b.shaw@intel.com>
> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>
Please make sure everybody involved here is in Cc of the emails.
Git should add them automatically.
Please add me as Cc of next versions. I'm interested in the start
of the Windows port. Thanks
[...]
> -# Copyright(c) 2017 Intel Corporation
> +# Copyright(c) 2019 Intel Corporation
I'm not sure you need to update the dates.
In case you need to, you should probably keep the original date.
> -# use pthreads
> -add_project_link_arguments('-pthread', language: 'c')
> -dpdk_extra_ldflags += '-pthread'
> +if host_machine.system() != 'windows'
> + # use pthreads
> + add_project_link_arguments('-pthread', language: 'c')
> + dpdk_extra_ldflags += '-pthread'
Why pthreads is not used in Windows?
> -# some libs depend on maths lib
> -add_project_link_arguments('-lm', language: 'c')
> -dpdk_extra_ldflags += '-lm'
> + # some libs depend on maths lib
> + add_project_link_arguments('-lm', language: 'c')
> + dpdk_extra_ldflags += '-lm'
> +endif
Why libmath is not used?
> # get binutils version for the workaround of Bug 97
> -ldver = run_command('ld', '-v').stdout().strip()
> -if ldver.contains('2.30')
> - if cc.has_argument('-mno-avx512f')
> - march_opt += '-mno-avx512f'
> - message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
> +if host_machine.system() != 'windows'
The real fix should be to check which linker is selected by meson.
> + ldver = run_command('ld', '-v').stdout().strip()
> + if ldver.contains('2.30')
> + if cc.has_argument('-mno-avx512f')
> + march_opt += '-mno-avx512f'
> + message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
> + endif
[...]
> --- a/lib/librte_eal/common/include/arch/x86/meson.build
> +++ b/lib/librte_eal/common/include/arch/x86/meson.build
> -install_headers(
> - 'rte_atomic_32.h',
> - 'rte_atomic_64.h',
> - 'rte_atomic.h',
> - 'rte_byteorder_32.h',
> - 'rte_byteorder_64.h',
> - 'rte_byteorder.h',
> - 'rte_cpuflags.h',
> - 'rte_cycles.h',
> - 'rte_io.h',
> - 'rte_memcpy.h',
> - 'rte_prefetch.h',
> - 'rte_pause.h',
> - 'rte_rtm.h',
> - 'rte_rwlock.h',
> - 'rte_spinlock.h',
> - 'rte_vect.h',
> - subdir: get_option('include_subdir_arch'))
> +if host_machine.system() != 'windows'
> + install_headers(
> + 'rte_atomic_32.h',
> + 'rte_atomic_64.h',
> + 'rte_atomic.h',
> + 'rte_byteorder_32.h',
> + 'rte_byteorder_64.h',
> + 'rte_byteorder.h',
> + 'rte_cpuflags.h',
> + 'rte_cycles.h',
> + 'rte_io.h',
> + 'rte_memcpy.h',
> + 'rte_prefetch.h',
> + 'rte_pause.h',
> + 'rte_rtm.h',
> + 'rte_rwlock.h',
> + 'rte_spinlock.h',
> + 'rte_vect.h',
> + subdir: get_option('include_subdir_arch')
> + )
> +endif
The headers should not be different for Windows.
NACK for this part.
[...]
> @@ -17,13 +17,19 @@ elif host_machine.system() == 'freebsd'
> dpdk_conf.set('RTE_EXEC_ENV_BSDAPP', 1)
> subdir('bsdapp/eal')
>
> +elif host_machine.system() == 'windows'
> + dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)
For consistency, it should RTE_EXEC_ENV_WINAPP.
> + subdir('winapp/eal')
> +
On Fri, Mar 01, 2019 at 03:03:02PM +0100, Thomas Monjalon wrote:
> 01/03/2019 08:18, Anand Rawat:
> > Added initial stub source files for windows support and meson changes
> > to build them.
>
> Thanks for sending some new patches based on meson.
>
> Let's start review with some simple considerations.
>
> > Signed-off-by: Anand Rawat <anand.rawat@intel.com> Signed-off-by:
> > Kadam, Pallavi <pallavi.kadam@intel.com>
>
> Please avoid comma in names. I think the right name is Pallavi Kadam?
>
> > Reviewed-by: Jeffrey B Shaw <jeffrey.b.shaw@intel.com> Reviewed-by:
> > Ranjit Menon <ranjit.menon@intel.com>
>
> Please make sure everybody involved here is in Cc of the emails. Git
> should add them automatically. Please add me as Cc of next versions. I'm
> interested in the start of the Windows port. Thanks
>
> [...]
> > -# Copyright(c) 2017 Intel Corporation +# Copyright(c) 2019 Intel
> > Corporation
>
> I'm not sure you need to update the dates. In case you need to, you
> should probably keep the original date.
>
> > -# use pthreads -add_project_link_arguments('-pthread', language: 'c')
> > -dpdk_extra_ldflags += '-pthread' +if host_machine.system() !=
> > 'windows' + # use pthreads + add_project_link_arguments('-pthread',
> > language: 'c') + dpdk_extra_ldflags += '-pthread'
>
> Why pthreads is not used in Windows?
>
> > -# some libs depend on maths lib -add_project_link_arguments('-lm',
> > language: 'c') -dpdk_extra_ldflags += '-lm' + # some libs depend
> > on maths lib + add_project_link_arguments('-lm', language: 'c') +
> > dpdk_extra_ldflags += '-lm' +endif
>
> Why libmath is not used?
>
> > # get binutils version for the workaround of Bug 97 -ldver =
> > run_command('ld', '-v').stdout().strip() -if ldver.contains('2.30') -
> > if cc.has_argument('-mno-avx512f') - march_opt +=
> > '-mno-avx512f' - message('Binutils 2.30 detected, disabling
> > AVX512 support as workaround for bug #97') +if host_machine.system()
> > != 'windows'
>
> The real fix should be to check which linker is selected by meson.
>
> > + ldver = run_command('ld', '-v').stdout().strip() + if
> > ldver.contains('2.30') + if cc.has_argument('-mno-avx512f')
> > + march_opt += '-mno-avx512f' + message('Binutils
> > 2.30 detected, disabling AVX512 support as workaround for bug #97') +
> > endif
>
> [...]
> > --- a/lib/librte_eal/common/include/arch/x86/meson.build +++
> > b/lib/librte_eal/common/include/arch/x86/meson.build -install_headers(
> > - 'rte_atomic_32.h', - 'rte_atomic_64.h', - 'rte_atomic.h', -
> > 'rte_byteorder_32.h', - 'rte_byteorder_64.h', - 'rte_byteorder.h',
> > - 'rte_cpuflags.h', - 'rte_cycles.h', - 'rte_io.h', -
> > 'rte_memcpy.h', - 'rte_prefetch.h', - 'rte_pause.h', -
> > 'rte_rtm.h', - 'rte_rwlock.h', - 'rte_spinlock.h', -
> > 'rte_vect.h', - subdir: get_option('include_subdir_arch')) +if
> > host_machine.system() != 'windows' + install_headers( +
> > 'rte_atomic_32.h', + 'rte_atomic_64.h', +
> > 'rte_atomic.h', + 'rte_byteorder_32.h', +
> > 'rte_byteorder_64.h', + 'rte_byteorder.h', +
> > 'rte_cpuflags.h', + 'rte_cycles.h', + 'rte_io.h',
> > + 'rte_memcpy.h', + 'rte_prefetch.h', +
> > 'rte_pause.h', + 'rte_rtm.h', + 'rte_rwlock.h', +
> > 'rte_spinlock.h', + 'rte_vect.h', + subdir:
> > get_option('include_subdir_arch') + ) +endif
>
> The headers should not be different for Windows. NACK for this part.
>
> [...]
> > @@ -17,13 +17,19 @@ elif host_machine.system() == 'freebsd'
> > dpdk_conf.set('RTE_EXEC_ENV_BSDAPP', 1) subdir('bsdapp/eal')
> >
> > +elif host_machine.system() == 'windows' +
> > dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)
>
> For consistency, it should RTE_EXEC_ENV_WINAPP.
>
For this one you can partially blame me - early internal review suggested
changing to winapp, but I suggested holding off on the change for community
consensus. Personally, I would prefer a little inconsistency and keep it
as windows for clarity. In future, I also think we should just rename
linxuapp to linux, and bsdapp to freebsd!
However, for now, if the majority prefer winapp, I'm ok with it. [Though I
can't help reading it as winamp half the time! No llamas involved here
though!]
/Bruce
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
# set the machine type and cflags for it
if meson.is_cross_build()
@@ -48,22 +48,30 @@ dpdk_conf.set('RTE_ARCH_64', cc.sizeof('void *') == 8)
add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
dpdk_extra_ldflags += '-Wl,--no-as-needed'
-# use pthreads
-add_project_link_arguments('-pthread', language: 'c')
-dpdk_extra_ldflags += '-pthread'
+if host_machine.system() != 'windows'
+ # use pthreads
+ add_project_link_arguments('-pthread', language: 'c')
+ dpdk_extra_ldflags += '-pthread'
-# some libs depend on maths lib
-add_project_link_arguments('-lm', language: 'c')
-dpdk_extra_ldflags += '-lm'
+ # some libs depend on maths lib
+ add_project_link_arguments('-lm', language: 'c')
+ dpdk_extra_ldflags += '-lm'
+endif
# for linux link against dl, for bsd execinfo
if host_machine.system() == 'linux'
link_lib = 'dl'
-else
+elif host_machine.system() == 'freebsd'
link_lib = 'execinfo'
+else
+ link_lib = ''
+endif
+
+# if link_lib is empty, do not add it to project properties
+if link_lib != ''
+ add_project_link_arguments('-l' + link_lib, language: 'c')
+ dpdk_extra_ldflags += '-l' + link_lib
endif
-add_project_link_arguments('-l' + link_lib, language: 'c')
-dpdk_extra_ldflags += '-l' + link_lib
# check for libraries used in multiple places in DPDK
has_libnuma = 0
@@ -1,15 +1,17 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
# for checking defines we need to use the correct compiler flags
march_opt = ['-march=@0@'.format(machine)]
# get binutils version for the workaround of Bug 97
-ldver = run_command('ld', '-v').stdout().strip()
-if ldver.contains('2.30')
- if cc.has_argument('-mno-avx512f')
- march_opt += '-mno-avx512f'
- message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
+if host_machine.system() != 'windows'
+ ldver = run_command('ld', '-v').stdout().strip()
+ if ldver.contains('2.30')
+ if cc.has_argument('-mno-avx512f')
+ march_opt += '-mno-avx512f'
+ message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
+ endif
endif
endif
@@ -1,21 +1,24 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
-install_headers(
- 'rte_atomic_32.h',
- 'rte_atomic_64.h',
- 'rte_atomic.h',
- 'rte_byteorder_32.h',
- 'rte_byteorder_64.h',
- 'rte_byteorder.h',
- 'rte_cpuflags.h',
- 'rte_cycles.h',
- 'rte_io.h',
- 'rte_memcpy.h',
- 'rte_prefetch.h',
- 'rte_pause.h',
- 'rte_rtm.h',
- 'rte_rwlock.h',
- 'rte_spinlock.h',
- 'rte_vect.h',
- subdir: get_option('include_subdir_arch'))
+if host_machine.system() != 'windows'
+ install_headers(
+ 'rte_atomic_32.h',
+ 'rte_atomic_64.h',
+ 'rte_atomic.h',
+ 'rte_byteorder_32.h',
+ 'rte_byteorder_64.h',
+ 'rte_byteorder.h',
+ 'rte_cpuflags.h',
+ 'rte_cycles.h',
+ 'rte_io.h',
+ 'rte_memcpy.h',
+ 'rte_prefetch.h',
+ 'rte_pause.h',
+ 'rte_rtm.h',
+ 'rte_rwlock.h',
+ 'rte_spinlock.h',
+ 'rte_vect.h',
+ subdir: get_option('include_subdir_arch')
+ )
+endif
@@ -1,91 +1,99 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
eal_inc += include_directories('.', 'include',
join_paths('include/arch', arch_subdir))
common_objs = []
-common_sources = files(
- 'eal_common_bus.c',
- 'eal_common_cpuflags.c',
- 'eal_common_class.c',
- 'eal_common_devargs.c',
- 'eal_common_dev.c',
- 'eal_common_errno.c',
- 'eal_common_fbarray.c',
- 'eal_common_hexdump.c',
- 'eal_common_hypervisor.c',
- 'eal_common_launch.c',
- 'eal_common_lcore.c',
- 'eal_common_log.c',
- 'eal_common_memalloc.c',
- 'eal_common_memory.c',
- 'eal_common_memzone.c',
- 'eal_common_options.c',
- 'eal_common_proc.c',
- 'eal_common_string_fns.c',
- 'eal_common_tailqs.c',
- 'eal_common_thread.c',
- 'eal_common_timer.c',
- 'eal_common_uuid.c',
- 'hotplug_mp.c',
- 'malloc_elem.c',
- 'malloc_heap.c',
- 'malloc_mp.c',
- 'rte_keepalive.c',
- 'rte_malloc.c',
- 'rte_option.c',
- 'rte_reciprocal.c',
- 'rte_service.c'
-)
+common_sources = []
+common_headers = []
+if host_machine.system() != 'windows'
+ common_sources = files(
+ 'eal_common_bus.c',
+ 'eal_common_cpuflags.c',
+ 'eal_common_class.c',
+ 'eal_common_devargs.c',
+ 'eal_common_dev.c',
+ 'eal_common_errno.c',
+ 'eal_common_fbarray.c',
+ 'eal_common_hexdump.c',
+ 'eal_common_hypervisor.c',
+ 'eal_common_launch.c',
+ 'eal_common_lcore.c',
+ 'eal_common_log.c',
+ 'eal_common_memalloc.c',
+ 'eal_common_memory.c',
+ 'eal_common_memzone.c',
+ 'eal_common_options.c',
+ 'eal_common_proc.c',
+ 'eal_common_string_fns.c',
+ 'eal_common_tailqs.c',
+ 'eal_common_thread.c',
+ 'eal_common_timer.c',
+ 'eal_common_uuid.c',
+ 'hotplug_mp.c',
+ 'malloc_elem.c',
+ 'malloc_heap.c',
+ 'malloc_mp.c',
+ 'rte_keepalive.c',
+ 'rte_malloc.c',
+ 'rte_option.c',
+ 'rte_reciprocal.c',
+ 'rte_service.c'
+ )
+endif
# get architecture specific sources and objs
eal_common_arch_sources = []
eal_common_arch_objs = []
-subdir(join_paths('arch', arch_subdir))
-common_sources += eal_common_arch_sources
-common_objs += eal_common_arch_objs
-common_headers = files(
- 'include/rte_alarm.h',
- 'include/rte_branch_prediction.h',
- 'include/rte_bus.h',
- 'include/rte_bitmap.h',
- 'include/rte_class.h',
- 'include/rte_common.h',
- 'include/rte_compat.h',
- 'include/rte_debug.h',
- 'include/rte_devargs.h',
- 'include/rte_dev.h',
- 'include/rte_eal.h',
- 'include/rte_eal_memconfig.h',
- 'include/rte_eal_interrupts.h',
- 'include/rte_errno.h',
- 'include/rte_fbarray.h',
- 'include/rte_hexdump.h',
- 'include/rte_hypervisor.h',
- 'include/rte_interrupts.h',
- 'include/rte_keepalive.h',
- 'include/rte_launch.h',
- 'include/rte_lcore.h',
- 'include/rte_log.h',
- 'include/rte_malloc.h',
- 'include/rte_malloc_heap.h',
- 'include/rte_memory.h',
- 'include/rte_memzone.h',
- 'include/rte_option.h',
- 'include/rte_pci_dev_feature_defs.h',
- 'include/rte_pci_dev_features.h',
- 'include/rte_per_lcore.h',
- 'include/rte_random.h',
- 'include/rte_reciprocal.h',
- 'include/rte_service.h',
- 'include/rte_service_component.h',
- 'include/rte_string_fns.h',
- 'include/rte_tailq.h',
- 'include/rte_time.h',
- 'include/rte_uuid.h',
- 'include/rte_version.h')
+common_headers += files('include/rte_common.h')
+if host_machine.system() != 'windows'
+ subdir(join_paths('arch', arch_subdir))
+ common_sources += eal_common_arch_sources
+ common_objs += eal_common_arch_objs
+
+ common_headers += files(
+ 'include/rte_alarm.h',
+ 'include/rte_branch_prediction.h',
+ 'include/rte_bus.h',
+ 'include/rte_bitmap.h',
+ 'include/rte_class.h',
+ 'include/rte_compat.h',
+ 'include/rte_debug.h',
+ 'include/rte_devargs.h',
+ 'include/rte_dev.h',
+ 'include/rte_eal.h',
+ 'include/rte_eal_memconfig.h',
+ 'include/rte_eal_interrupts.h',
+ 'include/rte_errno.h',
+ 'include/rte_fbarray.h',
+ 'include/rte_hexdump.h',
+ 'include/rte_hypervisor.h',
+ 'include/rte_interrupts.h',
+ 'include/rte_keepalive.h',
+ 'include/rte_launch.h',
+ 'include/rte_lcore.h',
+ 'include/rte_log.h',
+ 'include/rte_malloc.h',
+ 'include/rte_malloc_heap.h',
+ 'include/rte_memory.h',
+ 'include/rte_memzone.h',
+ 'include/rte_option.h',
+ 'include/rte_pci_dev_feature_defs.h',
+ 'include/rte_pci_dev_features.h',
+ 'include/rte_per_lcore.h',
+ 'include/rte_random.h',
+ 'include/rte_reciprocal.h',
+ 'include/rte_service.h',
+ 'include/rte_service_component.h',
+ 'include/rte_string_fns.h',
+ 'include/rte_tailq.h',
+ 'include/rte_time.h',
+ 'include/rte_uuid.h',
+ 'include/rte_version.h'
+ )
+endif
# special case install the generic headers, since they go in a subdir
generic_headers = files(
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
# Custom EAL processing. EAL is complicated enough that it can't just
# have a straight list of headers and source files.
@@ -17,13 +17,19 @@ elif host_machine.system() == 'freebsd'
dpdk_conf.set('RTE_EXEC_ENV_BSDAPP', 1)
subdir('bsdapp/eal')
+elif host_machine.system() == 'windows'
+ dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)
+ subdir('winapp/eal')
+
else
error('unsupported system type "@0@"'.format(host_machine.system()))
endif
version = 9 # the version of the EAL API
allow_experimental_apis = true
-deps += 'kvargs'
+if host_machine.system() != 'windows'
+ deps += 'kvargs'
+endif
if dpdk_conf.has('RTE_USE_LIBBSD')
ext_deps += libbsd
endif
new file mode 100644
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#include "rte_common.h"
+
+int
+rte_eal_init(int argc __rte_unused, char **argv __rte_unused)
+{
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#include "rte_common.h"
+
+void
+__rte_panic(const char *funcname __rte_unused,
+ const char *format __rte_unused, ...)
+{
+}
new file mode 100644
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#include "rte_common.h"
+
+ /* Get the cpu core id value */
+unsigned
+eal_cpu_core_id(unsigned lcore_id)
+{
+ return lcore_id;
+}
+
+/* Check if a cpu is present by the presence of the cpu information for it */
+int
+eal_cpu_detected(unsigned lcore_id __rte_unused)
+{
+ return 1;
+}
+
+/* Get CPU socket id (NUMA node) for a logical core */
+unsigned
+eal_cpu_socket_id(unsigned cpu_id __rte_unused)
+{
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include <windows.h>
+
+#include "rte_common.h"
+
+typedef uintptr_t eal_thread_t;
+
+int
+eal_thread_create(eal_thread_t *thread __rte_unused)
+{
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+
+env_objs = []
+env_headers = []
+env_sources = files('eal.c',
+ 'eal_debug.c',
+ 'eal_lcore.c',
+ 'eal_thread.c',
+)
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
# process all libraries equally, as far as possible
@@ -30,6 +30,10 @@ libraries = [
# flow_classify lib depends on pkt framework table lib
'flow_classify', 'bpf', 'telemetry']
+if host_machine.system() == 'windows'
+ libraries = ['eal'] # override libraries for windows
+endif
+
default_cflags = machine_args
if cc.has_argument('-Wno-format-truncation')
default_cflags += '-Wno-format-truncation'
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
project('DPDK', 'C',
version: '19.05.0-rc0',
@@ -16,6 +16,7 @@ dpdk_static_libraries = []
dpdk_drivers = []
dpdk_extra_ldflags = []
dpdk_app_link_libraries = []
+driver_classes = []
# set the major version, which might be used by drivers and libraries
# depending on the configuration options
@@ -35,28 +36,33 @@ eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
global_inc = include_directories('.', 'config', 'lib/librte_eal/common/include')
subdir('config')
-# build libs and drivers
+# build libs
subdir('lib')
-subdir('buildtools')
-subdir('drivers')
-# build binaries and installable tools
-subdir('usertools')
-subdir('app')
+if host_machine.system() != 'windows'
+ # build buildtools and drivers
+ subdir('buildtools')
+ subdir('drivers')
-# build docs
-subdir('doc')
+ # build binaries and installable tools
+ subdir('usertools')
+ subdir('app')
+ subdir('test')
+
+ # build kernel modules if enabled
+ if get_option('enable_kmods')
+ subdir('kernel')
+ endif
+
+ # build docs
+ subdir('doc')
+endif
# build any examples explicitly requested - useful for developers
if get_option('examples') != ''
subdir('examples')
endif
-# build kernel modules if enabled
-if get_option('enable_kmods')
- subdir('kernel')
-endif
-
# write the build config
build_cfg = 'rte_build_config.h'
configure_file(output: build_cfg,