Skip to contentSkip to conversation

build: add meson.build for kni kernel module

PATCH Superseded Luca Boccassi 4 participants 11 messages Oct 11, 2018 – Oct 31, 2018 Arm/Amlogic Meson SoC support

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 build: add meson.build for kni kernel module

A Kbuild is also included to allow users to use DKMS natively without additional code.

---
build-tested on debian sid am64

 kernel/linux/kni/Kbuild      |  8 ++++++
 kernel/linux/kni/meson.build | 51 ++++++++++++++++++++++++++++++++++++
 kernel/linux/meson.build     |  2 +-
 3 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100644 kernel/linux/kni/Kbuild
 create mode 100644 kernel/linux/kni/meson.build
kernel/linux/kni/Kbuild new file +8 -0
new file mode 100644
index 0000000000..de5c27f328
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+ccflags-y := $(MODULE_CFLAGS)
+obj-m := rte_kni.o
+rte_kni-y := $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/*.c)) \
+ $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/ethtool/ixgbe/*.c)) \
+ $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/ethtool/igb/*.c))
kernel/linux/kni/meson.build new file +51 -0

51 lines not on this page · raw message

kernel/linux/meson.build +1 -1
index a924c7b6fb..5b7ec06e1d 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-subdirs = ['igb_uio']
+subdirs = ['igb_uio', 'kni']
 
 WARN_CROSS_COMPILE='Need "kernel_dir" option for kmod compilation when cross-compiling'
 WARN_NO_HEADERS='Cannot compile kernel modules as requested - are kernel headers installed?'
Signature · 1 line
2.19.1
#1 lore raw
Quoted 7 lines · Luca Boccassi

A Kbuild is also included to allow users to use DKMS natively without additional code.

---
build-tested on debian sid am64

Quoted 7 lines
 kernel/linux/kni/Kbuild      |  8 ++++++
 kernel/linux/kni/meson.build | 51 ++++++++++++++++++++++++++++++++++++
 kernel/linux/meson.build     |  2 +-
 3 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100644 kernel/linux/kni/Kbuild
 create mode 100644 kernel/linux/kni/meson.build

I get a couple of errors building this on Fedora 28. First problem is that I get a compilation error for a missing rte_fifo.h. The fix for that error is to ensure the current dir is on the include list:

                ' -I' + meson.build_root() +
+               ' -I' + meson.current_source_dir() +
                ' -I' + meson.current_source_dir() + '/ethtool/ixgbe' +

Then I hit a second error, where the compile fails because the output directory for the ethdev files does not exist.

Fatal error: can't create /home/bruce/dpdk-clean/build-gcc-static/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.o: No such file or directory make[1]: *** [scripts/Makefile.build:318: /home/bruce/dpdk-clean/build-gcc-static/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.o] Error 2

I haven't fixed this, but I think the easiest fix is probably to split the file lists so that each file is listed in a meson.build in its own subdirectory. Then using subdir to build up the file list rather than having it all at one gom should cause meson to create the subdirectory structure in the build directory.
There may be other, better solutions, though.

/Bruce

#2 lore raw
Quoted 48 lines · Bruce Richardson
Quoted 8 lines · Luca Boccassi

A Kbuild is also included to allow users to use DKMS natively without
additional code.

---
build-tested on debian sid am64

Quoted 8 lines

 kernel/linux/kni/Kbuild      |  8 ++++++
 kernel/linux/kni/meson.build | 51
++++++++++++++++++++++++++++++++++++
 kernel/linux/meson.build     |  2 +-

 3 files changed, 60 insertions(+), 1 deletion(-)

 create mode 100644 kernel/linux/kni/Kbuild
 create mode 100644 kernel/linux/kni/meson.build

I get a couple of errors building this on Fedora 28. First problem is that
I get a compilation error for a missing rte_fifo.h. The fix for that error
is to ensure the current dir is on the include list:

                ' -I' + meson.build_root() +
+               ' -I' + meson.current_source_dir() +
                ' -I' + meson.current_source_dir() + '/ethtool/ixgbe' +

Then I hit a second error, where the compile fails because the output directory for the ethdev files does not exist.

Fatal error: can't create /home/bruce/dpdk-clean/build-gcc- static/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.o: No such file or directory
make[1]: *** [scripts/Makefile.build:318: /home/bruce/dpdk- clean/build-gcc- static/kernel/linux/kni/ethtool/ixgbe/ixgbe_ethtool.o] Error 2

I haven't fixed this, but I think the easiest fix is probably to split the
file lists so that each file is listed in a meson.build in its own subdirectory. Then using subdir to build up the file list rather than having it all at one gom should cause meson to create the subdirectory
structure in the build directory.
There may be other, better solutions, though.

Quoted 1 line

/Bruce

Hi,

Interesting, I guess it's down to differences between the kernel makefiles in Debian and Fedora? Although the include one is strange.

I've sent a v2 with your suggestions, please give it a run when you've got a sec.

Signature · 2 lines
Kind regards,
Luca Boccassi
#3 lore raw

PATCH v2 1/1 build: add meson.build for kni kernel module

In reply to Luca Boccassi

A Kbuild is also included to allow users to use DKMS natively without additional code.

---
v2: add local directory to -I and build sources list recursively to
fix build on Fedora

 kernel/linux/kni/Kbuild                    |  8 ++++++
 kernel/linux/kni/ethtool/igb/meson.build   | 16 +++++++++++
 kernel/linux/kni/ethtool/ixgbe/meson.build | 13 +++++++++
 kernel/linux/kni/ethtool/meson.build       |  5 ++++
 kernel/linux/kni/meson.build               | 33 ++++++++++++++++++++++
 kernel/linux/meson.build                   |  2 +-
 6 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 kernel/linux/kni/Kbuild
 create mode 100644 kernel/linux/kni/ethtool/igb/meson.build
 create mode 100644 kernel/linux/kni/ethtool/ixgbe/meson.build
 create mode 100644 kernel/linux/kni/ethtool/meson.build
 create mode 100644 kernel/linux/kni/meson.build
kernel/linux/kni/Kbuild new file +8 -0
new file mode 100644
index 0000000000..de5c27f328
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+ccflags-y := $(MODULE_CFLAGS)
+obj-m := rte_kni.o
+rte_kni-y := $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/*.c)) \
+ $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/ethtool/ixgbe/*.c)) \
+ $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/ethtool/igb/*.c))
kernel/linux/kni/ethtool/igb/meson.build new file +16 -0
new file mode 100644
index 0000000000..2f796ac0b2
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+kni_igb_sources = files(
+	'e1000_82575.c',
+	'e1000_api.c',
+	'e1000_i210.c',
+	'e1000_mac.c',
+	'e1000_manage.c',
+	'e1000_mbx.c',
+	'e1000_nvm.c',
+	'e1000_phy.c',
+	'igb_ethtool.c',
+	'igb_main.c',
+	'igb_param.c',
+	'igb_vmdq.c')
kernel/linux/kni/ethtool/ixgbe/meson.build new file +13 -0
new file mode 100644
index 0000000000..73248b13e4
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+kni_ixgbe_sources = files(
+	'ixgbe_82598.c',
+	'ixgbe_82599.c',
+	'ixgbe_api.c',
+	'ixgbe_common.c',
+	'ixgbe_ethtool.c',
+	'ixgbe_main.c',
+	'ixgbe_phy.c',
+	'ixgbe_x540.c',
+	'kcompat.c')
kernel/linux/kni/ethtool/meson.build new file +5 -0
new file mode 100644
index 0000000000..7a8458ddcd
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+subdir('igb')
+subdir('ixgbe')
kernel/linux/kni/meson.build new file +33 -0
new file mode 100644
index 0000000000..87469c6ca3
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+subdir('ethtool')
+
+kni_mkfile = custom_target('rte_kni_makefile',
+	output: 'Makefile',
+	command: ['touch', '@OUTPUT@'])
+
+kni_sources = files(
+	'kni_ethtool.c',
+	'kni_misc.c',
+	'kni_net.c',
+	'Kbuild')
+
+custom_target('rte_kni',
+	input: kni_sources + kni_igb_sources + kni_ixgbe_sources,
+	output: 'rte_kni.ko',
+	command: ['make', '-C', kernel_dir,
+		'M=' + meson.current_build_dir(),
+		'src=' + meson.current_source_dir(),
+		'MODULE_CFLAGS=-include ' + meson.source_root() + '/config/rte_config.h' +
+		' -I' + meson.source_root() + '/lib/librte_eal/common/include' +
+		' -I' + meson.source_root() + '/lib/librte_eal/linuxapp/eal/include' +
+		' -I' + meson.build_root() +
+		' -I' + meson.current_source_dir() +
+		' -I' + meson.current_source_dir() + '/ethtool/ixgbe' +
+		' -I' + meson.current_source_dir() + '/ethtool/igb',
+		'modules'],
+	depends: kni_mkfile,
+	install: true,
+	install_dir: kernel_dir + '/../extra/dpdk',
+	build_by_default: get_option('enable_kmods'))
kernel/linux/meson.build +1 -1
index a924c7b6fb..5b7ec06e1d 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-subdirs = ['igb_uio']
+subdirs = ['igb_uio', 'kni']
 
 WARN_CROSS_COMPILE='Need "kernel_dir" option for kmod compilation when cross-compiling'
 WARN_NO_HEADERS='Cannot compile kernel modules as requested - are kernel headers installed?'
Signature · 1 line
2.19.1
Tested-by Acked-by on v2 1/1
#4 lore raw
Quoted 8 lines · Luca Boccassi

A Kbuild is also included to allow users to use DKMS natively without additional code.

---
v2: add local directory to -I and build sources list recursively to
fix build on Fedora

Yep, now seems to build for me on Fedora. One minor suggestion is to look to use the "console" keyword on the custom_target if possible. It should help prevent noticable stalls as make runs in the background. [Unfortunately, it's meson 0.48 onward only, so if conditionals are needed, just ignore this suggestion]

Also, do we want to use "make -j" for this, given the number of files? [Maybe -j4 just?]

#5 lore raw
Quoted 11 lines · Bruce Richardson
Quoted 9 lines · Luca Boccassi

A Kbuild is also included to allow users to use DKMS natively without
additional code.

---
v2: add local directory to -I and build sources list recursively to fix build on Fedora

Quoted 8 lines

Yep, now seems to build for me on Fedora. One minor suggestion is to look
to use the "console" keyword on the custom_target if possible. It should
help prevent noticable stalls as make runs in the background. [Unfortunately, it's meson 0.48 onward only, so if conditionals are needed,
just ignore this suggestion]

Good idea, I just with 0.48, 0.47 and 0.41 and in all cases there are no complaints or errors, it's simply ignored in the older versions.

Quoted 3 lines

Also, do we want to use "make -j" for this, given the number of files?
[Maybe -j4 just?]

Yeah makes sense, added j4.

Sent v3 with both changes and the ack, thanks.

Signature · 2 lines
Kind regards,
Luca Boccassi
#6 lore raw
Quoted 21 lines · Bruce Richardson
Quoted 11 lines · Luca Boccassi
Quoted 9 lines

A Kbuild is also included to allow users to use DKMS natively without
additional code.

Signed-off-by Luca Boccassi <bluca at debian.org>

---
v2: add local directory to -I and build sources list recursively to
fix build on Fedora

Quoted 8 lines

Yep, now seems to build for me on Fedora. One minor suggestion is to look
to use the "console" keyword on the custom_target if possible. It should
help prevent noticable stalls as make runs in the background. [Unfortunately, it's meson 0.48 onward only, so if conditionals are needed,
just ignore this suggestion]

Quoted 2 lines

Good idea, I just with 0.48, 0.47 and 0.41 and in all cases there are no complaints or errors, it's simply ignored in the older versions.

Hmm.
I have following on my Ubuntu 18.04 with dpdk v18.11-rc1:

$ meson --version
0.45.1
$ meson build
<...>
kernel/linux/kni/meson.build:16: WARNING: Passed invalid keyword argument "console".
WARNING: This will become a hard error in the future.
WARNING: Unknown keyword arguments in target rte_kni: console
<...>

It builds, but prints above warning.

Best regards, Ilya Maximets.

Quoted 12 lines
Quoted 4 lines

Also, do we want to use "make -j" for this, given the number of files?
[Maybe -j4 just?]

Yeah makes sense, added j4.

Sent v3 with both changes and the ack, thanks.

Signature · 2 lines
Kind regards,
Luca Boccassi
#7 lore raw
Quoted 42 lines · Ilya Maximets
Quoted 24 lines · Bruce Richardson
Quoted 12 lines · Luca Boccassi
Quoted 10 lines

A Kbuild is also included to allow users to use DKMS natively without
additional code.

Signed-off-by Luca Boccassi <bluca at debian.org>

---
v2: add local directory to -I and build sources list recursively to
    fix build on Fedora

Quoted 10 lines

Yep, now seems to build for me on Fedora. One minor suggestion is to
look
to use the "console" keyword on the custom_target if possible. It should
help prevent noticable stalls as make runs in the background. [Unfortunately, it's meson 0.48 onward only, so if conditionals are
needed,
just ignore this suggestion]

Quoted 3 lines

Good idea, I just with 0.48, 0.47 and 0.41 and in all cases there are
no complaints or errors, it's simply ignored in the older versions.

Hmm.
I have following on my Ubuntu 18.04 with dpdk v18.11-rc1:

$ meson --version
0.45.1
$ meson build
<...>
kernel/linux/kni/meson.build:16: WARNING: Passed invalid keyword
argument "console".
WARNING: This will become a hard error in the future.
WARNING: Unknown keyword arguments in target rte_kni: console
<...>
Quoted 3 lines

It builds, but prints above warning.

Best regards, Ilya Maximets.

Interesting, wonder why I didn't see that on 0.41! Anyway those warnings are fine to ignore, especially in this case.

Signature · 2 lines
Kind regards,
Luca Boccassi
#8 lore raw
Quoted 43 lines · Luca Boccassi
Quoted 42 lines · Ilya Maximets
Quoted 24 lines · Bruce Richardson
Quoted 12 lines · Luca Boccassi
Quoted 10 lines

A Kbuild is also included to allow users to use DKMS natively without
additional code.

Signed-off-by Luca Boccassi <bluca at debian.org>

---
v2: add local directory to -I and build sources list recursively to
    fix build on Fedora

Quoted 10 lines

Yep, now seems to build for me on Fedora. One minor suggestion is to
look
to use the "console" keyword on the custom_target if possible. It should
help prevent noticable stalls as make runs in the background. [Unfortunately, it's meson 0.48 onward only, so if conditionals are
needed,
just ignore this suggestion]

Quoted 3 lines

Good idea, I just with 0.48, 0.47 and 0.41 and in all cases there are
no complaints or errors, it's simply ignored in the older versions.

Hmm.
I have following on my Ubuntu 18.04 with dpdk v18.11-rc1:

$ meson --version
0.45.1
$ meson build
<...>
kernel/linux/kni/meson.build:16: WARNING: Passed invalid keyword
argument "console".
WARNING: This will become a hard error in the future.
WARNING: Unknown keyword arguments in target rte_kni: console
<...>
Quoted 7 lines
Quoted 3 lines

It builds, but prints above warning.

Best regards, Ilya Maximets.

Interesting, wonder why I didn't see that on 0.41! Anyway those warnings are fine to ignore, especially in this case.

Probably because the warnings about unknown parameters only came in a later version of meson. Earlier versions just ignored them without warning.

/Bruce

#9 lore raw

PATCH v3 1/1 build: add meson.build for kni kernel module

In reply to Luca Boccassi

A Kbuild is also included to allow users to use DKMS natively without additional code.

---
v2: add local directory to -I and build sources list recursively to
fix build on Fedora
v3: add console: true so that output is not buffered, given it takes a
few seconds to build, and -j4 to the make call, given there are more than a few source files.

 kernel/linux/kni/Kbuild                    |  8 +++++
 kernel/linux/kni/ethtool/igb/meson.build   | 16 ++++++++++
 kernel/linux/kni/ethtool/ixgbe/meson.build | 13 +++++++++
 kernel/linux/kni/ethtool/meson.build       |  5 ++++
 kernel/linux/kni/meson.build               | 34 ++++++++++++++++++++++
 kernel/linux/meson.build                   |  2 +-
 6 files changed, 77 insertions(+), 1 deletion(-)
 create mode 100644 kernel/linux/kni/Kbuild
 create mode 100644 kernel/linux/kni/ethtool/igb/meson.build
 create mode 100644 kernel/linux/kni/ethtool/ixgbe/meson.build
 create mode 100644 kernel/linux/kni/ethtool/meson.build
 create mode 100644 kernel/linux/kni/meson.build
kernel/linux/kni/Kbuild new file +8 -0
new file mode 100644
index 0000000000..de5c27f328
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+ccflags-y := $(MODULE_CFLAGS)
+obj-m := rte_kni.o
+rte_kni-y := $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/*.c)) \
+ $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/ethtool/ixgbe/*.c)) \
+ $(patsubst $(src)/%.c,%.o,$(wildcard $(src)/ethtool/igb/*.c))
kernel/linux/kni/ethtool/igb/meson.build new file +16 -0
new file mode 100644
index 0000000000..2f796ac0b2
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+kni_igb_sources = files(
+	'e1000_82575.c',
+	'e1000_api.c',
+	'e1000_i210.c',
+	'e1000_mac.c',
+	'e1000_manage.c',
+	'e1000_mbx.c',
+	'e1000_nvm.c',
+	'e1000_phy.c',
+	'igb_ethtool.c',
+	'igb_main.c',
+	'igb_param.c',
+	'igb_vmdq.c')
kernel/linux/kni/ethtool/ixgbe/meson.build new file +13 -0
new file mode 100644
index 0000000000..73248b13e4
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+kni_ixgbe_sources = files(
+	'ixgbe_82598.c',
+	'ixgbe_82599.c',
+	'ixgbe_api.c',
+	'ixgbe_common.c',
+	'ixgbe_ethtool.c',
+	'ixgbe_main.c',
+	'ixgbe_phy.c',
+	'ixgbe_x540.c',
+	'kcompat.c')
kernel/linux/kni/ethtool/meson.build new file +5 -0
new file mode 100644
index 0000000000..7a8458ddcd
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+subdir('igb')
+subdir('ixgbe')
kernel/linux/kni/meson.build new file +34 -0
new file mode 100644
index 0000000000..a09af5aa5f
@@ -0,0 +1,34 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <[email protected]>
+
+subdir('ethtool')
+
+kni_mkfile = custom_target('rte_kni_makefile',
+	output: 'Makefile',
+	command: ['touch', '@OUTPUT@'])
+
+kni_sources = files(
+	'kni_ethtool.c',
+	'kni_misc.c',
+	'kni_net.c',
+	'Kbuild')
+
+custom_target('rte_kni',
+	input: kni_sources + kni_igb_sources + kni_ixgbe_sources,
+	output: 'rte_kni.ko',
+	command: ['make', '-j4', '-C', kernel_dir,
+		'M=' + meson.current_build_dir(),
+		'src=' + meson.current_source_dir(),
+		'MODULE_CFLAGS=-include ' + meson.source_root() + '/config/rte_config.h' +
+		' -I' + meson.source_root() + '/lib/librte_eal/common/include' +
+		' -I' + meson.source_root() + '/lib/librte_eal/linuxapp/eal/include' +
+		' -I' + meson.build_root() +
+		' -I' + meson.current_source_dir() +
+		' -I' + meson.current_source_dir() + '/ethtool/ixgbe' +
+		' -I' + meson.current_source_dir() + '/ethtool/igb',
+		'modules'],
+	depends: kni_mkfile,
+	console: true,
+	install: true,
+	install_dir: kernel_dir + '/../extra/dpdk',
+	build_by_default: get_option('enable_kmods'))
kernel/linux/meson.build +1 -1
index a924c7b6fb..5b7ec06e1d 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-subdirs = ['igb_uio']
+subdirs = ['igb_uio', 'kni']
 
 WARN_CROSS_COMPILE='Need "kernel_dir" option for kmod compilation when cross-compiling'
 WARN_NO_HEADERS='Cannot compile kernel modules as requested - are kernel headers installed?'
Signature · 1 line
2.19.1