[dpdk-dev,1/2] build: fix kernel compile on cross-build
Checks
Commit Message
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
> -----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
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
> > > -----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
@@ -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')