DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [RFC PATCH v1] build: kni gcc cross-compilation support
@ 2021-01-29 10:29 Juraj Linkeš
  2021-01-29 11:43 ` Bruce Richardson
  2021-02-04  9:51 ` [dpdk-dev] [RFC PATCH v2] build: kni " Juraj Linkeš
  0 siblings, 2 replies; 37+ messages in thread
From: Juraj Linkeš @ 2021-01-29 10:29 UTC (permalink / raw)
  To: bruce.richardson, thomas, Ruifeng.Wang, jerinjacobk,
	hemant.agrawal, ferruh.yigit, aboyer
  Cc: dev, Juraj Linkeš

The kni linux module is using a custom target for building, which
doesn't take into account any cross compilation arguments. The arguments
in question are ARCH and CROSS_COMPILE. Get those from the cross file
and pass them to the custom target.

The user supplied path may not contain the 'build' directory, such as
when using cross-compiled headers, so only append that in the default
case (when no path is supplied in native builds) and use the unmodified
path from the user otherwise.

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
 kernel/linux/kni/meson.build |  4 ++--
 kernel/linux/meson.build     | 33 +++++++++++++++++++++++++++++----
 2 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
index 07e0c9dae..0fbf52c93 100644
--- a/kernel/linux/kni/meson.build
+++ b/kernel/linux/kni/meson.build
@@ -13,7 +13,7 @@ kni_sources = files(
 custom_target('rte_kni',
 	input: kni_sources,
 	output: 'rte_kni.ko',
-	command: ['make', '-j4', '-C', kernel_dir + '/build',
+	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' +
@@ -21,7 +21,7 @@ custom_target('rte_kni',
 		' -I' + meson.source_root() + '/lib/librte_kni' +
 		' -I' + meson.build_root() +
 		' -I' + meson.current_source_dir(),
-		'modules'],
+		'modules'] + cross_args,
 	depends: kni_mkfile,
 	install: true,
 	install_dir: kernel_dir + '/extra/dpdk',
diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build
index 5c864a465..57ed9bc48 100644
--- a/kernel/linux/meson.build
+++ b/kernel/linux/meson.build
@@ -3,20 +3,45 @@
 
 subdirs = ['kni']
 
+cross_args = []
 # if we are cross-compiling we need kernel_dir specified
-if get_option('kernel_dir') == '' and meson.is_cross_build()
-	error('Need "kernel_dir" option for kmod compilation when cross-compiling')
+if meson.is_cross_build()
+	if get_option('kernel_dir') == ''
+		error('Need "kernel_dir" option for kmod compilation when cross-compiling')
+	else
+		cross_compiler = find_program('c').path()
+		if cross_compiler.endswith('gcc')
+			cross_prefix = ''
+			# remove the 'gcc' suffix
+			# meson doesn't support removing elements from an array
+			# nor does it support slicing, so do it on our own
+			foreach element : cross_compiler.split('-')
+				if element != 'gcc'
+					cross_prefix += '@0@-'.format(element)
+				endif
+			endforeach
+		else
+			error('Unsupported cross compiler: @0@'.format(cross_compiler))
+		endif
+		if host_machine.cpu_family() == 'aarch64'
+			cross_arch = 'arm64'
+		else
+			cross_arch = build_machine.cpu_family()
+		endif
+		cross_args = ['ARCH=@0@'.format(cross_arch),
+			'CROSS_COMPILE=@0@'.format(cross_prefix)]
+	endif
 endif
 
 kernel_dir = get_option('kernel_dir')
 if kernel_dir == ''
 	# use default path for native builds
 	kernel_version = run_command('uname', '-r').stdout().strip()
-	kernel_dir = '/lib/modules/' + kernel_version
+	kernel_dir = '/lib/modules/' + kernel_version + '/build'
 endif
 
 # test running make in kernel directory, using "make kernelversion"
-make_returncode = run_command('make', '-sC', kernel_dir + '/build',
+make_returncode = run_command('make', '-sC', kernel_dir,
 		'kernelversion').returncode()
 if make_returncode != 0
 	error('Cannot compile kernel modules as requested - are kernel headers installed?')
-- 
2.20.1


^ permalink raw reply	[flat|nested] 37+ messages in thread

end of thread, other threads:[~2021-03-15 22:45 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-29 10:29 [dpdk-dev] [RFC PATCH v1] build: kni gcc cross-compilation support Juraj Linkeš
2021-01-29 11:43 ` Bruce Richardson
2021-01-29 12:33   ` Juraj Linkeš
2021-01-29 13:51     ` Bruce Richardson
2021-01-29 14:36       ` Juraj Linkeš
2021-01-29 14:42         ` Bruce Richardson
2021-01-29 14:47           ` Juraj Linkeš
2021-01-29 15:01             ` Bruce Richardson
2021-01-29 15:17               ` Juraj Linkeš
2021-01-29 15:39                 ` Bruce Richardson
2021-02-01  7:48                   ` Juraj Linkeš
2021-02-04  9:51 ` [dpdk-dev] [RFC PATCH v2] build: kni " Juraj Linkeš
2021-02-04 17:33   ` Bruce Richardson
2021-02-05  9:26     ` Juraj Linkeš
2021-02-05  9:38       ` Bruce Richardson
2021-02-05  9:44         ` Thomas Monjalon
2021-02-05  9:42       ` Bruce Richardson
2021-02-05 14:46   ` [dpdk-dev] [RFC PATCH v3] " Juraj Linkeš
2021-02-05 14:52     ` Bruce Richardson
2021-02-05 15:02       ` Juraj Linkeš
2021-02-05 15:04     ` [dpdk-dev] [RFC PATCH v4] " Juraj Linkeš
2021-02-05 15:27       ` Bruce Richardson
2021-02-08 10:17         ` Juraj Linkeš
2021-02-08 10:26           ` Bruce Richardson
2021-02-08 10:56             ` Thomas Monjalon
2021-02-08 11:05               ` Bruce Richardson
2021-02-08 11:21                 ` Thomas Monjalon
2021-02-08 11:45                   ` Bruce Richardson
2021-02-08 17:23                     ` Thomas Monjalon
2021-02-09  8:47       ` [dpdk-dev] [PATCH v5] " Juraj Linkeš
2021-02-09 11:50         ` Bruce Richardson
2021-02-09 12:07           ` Juraj Linkeš
2021-02-09 12:39             ` Bruce Richardson
2021-02-11 12:59         ` [dpdk-dev] [PATCH v6] " Juraj Linkeš
2021-03-09  8:47           ` Juraj Linkeš
2021-03-09 16:26             ` Andrew Boyer
2021-03-15 22:45           ` Thomas Monjalon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).