[dpdk-dev,1/2] build: fix kernel compile on cross-build

Message ID 20180418210521.277384-2-bruce.richardson@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Bruce Richardson
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Bruce Richardson April 18, 2018, 9:05 p.m. UTC
  When cross-compiling, if no kernel_dir was specified, then the kernel
modules were still being compiled for the build machine. Fix this by
only building modules on cross-compile when we have a kernel_dir value
set.

Fixes: a52f4574f798 ("igb_uio: build with meson")

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 meson.build | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
  

Comments

Hemant Agrawal April 19, 2018, 3:46 p.m. UTC | #1
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bruce Richardson
> 
> When cross-compiling, if no kernel_dir was specified, then the kernel modules
> were still being compiled for the build machine. Fix this by only building modules
> on cross-compile when we have a kernel_dir value set.
> 
> Fixes: a52f4574f798 ("igb_uio: build with meson")
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>  meson.build | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/meson.build b/meson.build
> index cc16595cb..9e3b44931 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -26,10 +26,14 @@ subdir('config')
> 
>  # build libs and drivers
>  subdir('lib')
> -subdir('kernel')
>  subdir('buildtools')
>  subdir('drivers')
> 
> +# build kernel modules if we have a kernel path, or we are not cross
> +compiling if get_option('kernel_dir') != '' or not meson.is_cross_build()
> +	subdir('kernel')
> +endif

[Hemant] actually kernel_dir may not be always available on host.
 So unless kernel_dir is available - irrespective of host/cross - it 
 shall not try kernel compilation. 

> +
>  # build binaries and installable tools
>  subdir('usertools')
>  subdir('app')
> --
> 2.14.3
  
Bruce Richardson April 19, 2018, 4:12 p.m. UTC | #2
On Thu, Apr 19, 2018 at 03:46:14PM +0000, Hemant Agrawal wrote:
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bruce Richardson
> > 
> > When cross-compiling, if no kernel_dir was specified, then the kernel modules
> > were still being compiled for the build machine. Fix this by only building modules
> > on cross-compile when we have a kernel_dir value set.
> > 
> > Fixes: a52f4574f798 ("igb_uio: build with meson")
> > 
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > ---
> >  meson.build | 6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> > 
> > diff --git a/meson.build b/meson.build
> > index cc16595cb..9e3b44931 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -26,10 +26,14 @@ subdir('config')
> > 
> >  # build libs and drivers
> >  subdir('lib')
> > -subdir('kernel')
> >  subdir('buildtools')
> >  subdir('drivers')
> > 
> > +# build kernel modules if we have a kernel path, or we are not cross
> > +compiling if get_option('kernel_dir') != '' or not meson.is_cross_build()
> > +	subdir('kernel')
> > +endif
> 
> [Hemant] actually kernel_dir may not be always available on host.
>  So unless kernel_dir is available - irrespective of host/cross - it 
>  shall not try kernel compilation. 
> 

Well, for many native builds the kernel directory can be computed by
looking at `uname -r`, but which won't work for cross-compilation. Given
that there is already an option to disable kernel module compilation
completely, I think that the default for native builds should be try and
build modules for the running kernel.

However, we could certainly add in a check to see if the kernel sources are
available, and optionally not build them in that case - i.e. convert the
error due to non-existant kernel headers into a warning message. Do you
think that might be a good compromise?

/Bruce
  
Hemant Agrawal April 19, 2018, 5:06 p.m. UTC | #3
> > > -----Original Message-----
> > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bruce
> > > Richardson
> > >
> > > When cross-compiling, if no kernel_dir was specified, then the
> > > kernel modules were still being compiled for the build machine. Fix
> > > this by only building modules on cross-compile when we have a kernel_dir
> value set.
> > >
> > > Fixes: a52f4574f798 ("igb_uio: build with meson")
> > >
> > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > > ---
> > >  meson.build | 6 +++++-
> > >  1 file changed, 5 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/meson.build b/meson.build index cc16595cb..9e3b44931
> > > 100644
> > > --- a/meson.build
> > > +++ b/meson.build
> > > @@ -26,10 +26,14 @@ subdir('config')
> > >
> > >  # build libs and drivers
> > >  subdir('lib')
> > > -subdir('kernel')
> > >  subdir('buildtools')
> > >  subdir('drivers')
> > >
> > > +# build kernel modules if we have a kernel path, or we are not
> > > +cross compiling if get_option('kernel_dir') != '' or not meson.is_cross_build()
> > > +	subdir('kernel')
> > > +endif
> >
> > [Hemant] actually kernel_dir may not be always available on host.
> >  So unless kernel_dir is available - irrespective of host/cross - it
> > shall not try kernel compilation.
> >
> 
> Well, for many native builds the kernel directory can be computed by
> looking at `uname -r`, but which won't work for cross-compilation. Given
> that there is already an option to disable kernel module compilation
> completely, I think that the default for native builds should be try and
> build modules for the running kernel.
> 
> However, we could certainly add in a check to see if the kernel sources are
> available, and optionally not build them in that case - i.e. convert the
> error due to non-existant kernel headers into a warning message. Do you
> think that might be a good compromise?

[Hemant] Yes. A warning instead of error is good in this case.
> 
> /Bruce
  

Patch

diff --git a/meson.build b/meson.build
index cc16595cb..9e3b44931 100644
--- a/meson.build
+++ b/meson.build
@@ -26,10 +26,14 @@  subdir('config')
 
 # build libs and drivers
 subdir('lib')
-subdir('kernel')
 subdir('buildtools')
 subdir('drivers')
 
+# build kernel modules if we have a kernel path, or we are not cross compiling
+if get_option('kernel_dir') != '' or not meson.is_cross_build()
+	subdir('kernel')
+endif
+
 # build binaries and installable tools
 subdir('usertools')
 subdir('app')