kernel/linux: fix kernel dir for meson
Checks
Commit Message
kernel_dir option in meson build is equivalent to RTE_KERNELDIR in make
system, for cross-compilation case, users would specify it as local
kernel src dir like
/<user local dir>/target-arm_glibc/linux-arm/linux-4.19.81/
Current meson build would fail to compile kernel module if user specify
kernel_dir as above, this patch fixes this issue.
Fixes: 317832f97c16 ("kernel/linux: fix modules install path")
Cc: stable@dpdk.org
Cc: iryzhov@nfware.com
Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
---
kernel/linux/igb_uio/meson.build | 2 +-
kernel/linux/kni/meson.build | 2 +-
kernel/linux/meson.build | 4 ++--
meson_options.txt | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
Comments
Hi Xiaolong,
Nack from me. It's just an incorrect revert of my fix.
Kernel modules will be installed in wrong directory, just check install_dir
parameter in kni/meson.build and igb_uio/meson.build.
Igor
On Mon, Dec 2, 2019 at 9:18 AM Xiaolong Ye <xiaolong.ye@intel.com> wrote:
> kernel_dir option in meson build is equivalent to RTE_KERNELDIR in make
> system, for cross-compilation case, users would specify it as local
> kernel src dir like
>
> /<user local dir>/target-arm_glibc/linux-arm/linux-4.19.81/
>
> Current meson build would fail to compile kernel module if user specify
> kernel_dir as above, this patch fixes this issue.
>
> Fixes: 317832f97c16 ("kernel/linux: fix modules install path")
> Cc: stable@dpdk.org
> Cc: iryzhov@nfware.com
>
> Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
> ---
> kernel/linux/igb_uio/meson.build | 2 +-
> kernel/linux/kni/meson.build | 2 +-
> kernel/linux/meson.build | 4 ++--
> meson_options.txt | 2 +-
> 4 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/linux/igb_uio/meson.build
> b/kernel/linux/igb_uio/meson.build
> index fac404f07..e66218dae 100644
> --- a/kernel/linux/igb_uio/meson.build
> +++ b/kernel/linux/igb_uio/meson.build
> @@ -8,7 +8,7 @@ mkfile = custom_target('igb_uio_makefile',
> custom_target('igb_uio',
> input: ['igb_uio.c', 'Kbuild'],
> output: 'igb_uio.ko',
> - command: ['make', '-C', kernel_dir + '/build',
> + command: ['make', '-C', kernel_dir,
> 'M=' + meson.current_build_dir(),
> 'src=' + meson.current_source_dir(),
> 'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
> diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
> index 955eec949..9fce0c16e 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' +
> diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build
> index 1796cc686..a37c95752 100644
> --- a/kernel/linux/meson.build
> +++ b/kernel/linux/meson.build
> @@ -13,11 +13,11 @@ 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
> warning('Cannot compile kernel modules as requested - are kernel
> headers installed?')
> diff --git a/meson_options.txt b/meson_options.txt
> index bc369d06c..7eba3b720 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -17,7 +17,7 @@ option('ibverbs_link', type: 'combo', choices :
> ['shared', 'dlopen'], value: 'sh
> option('include_subdir_arch', type: 'string', value: '',
> description: 'subdirectory where to install arch-dependent
> headers')
> option('kernel_dir', type: 'string', value: '',
> - description: 'Path to the kernel for building kernel modules.
> Headers must be in $kernel_dir/build. Modules will be installed in
> $DEST_DIR/$kernel_dir/extra/dpdk.')
> + description: 'Path to the kernel for building kernel modules.
> Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
> option('lib_musdk_dir', type: 'string', value: '',
> description: 'path to the MUSDK library installation directory')
> option('machine', type: 'string', value: 'native',
> --
> 2.17.1
>
>
Hi, Igor
Thanks for the feedback.
On 12/02, Igor Ryzhov wrote:
>Hi Xiaolong,
>
>Nack from me. It's just an incorrect revert of my fix.
>Kernel modules will be installed in wrong directory, just check install_dir
Is there any convention that we must install kernel modules to which directory?
And what about for cross compilation case?
Current issue is that if I specify kernel_dir as one local linux src dir in meson_options.txt,
meson build would fail to compile kernel modules while setting RTE_KERNELDIR='/<xxx>/build_dir/target-x86_64_glibc/linux-x86_64/linux-4.19.81/'
before make works fine. Is there any subtlety I have missed?
Thanks,
Xiaolong
>parameter in kni/meson.build and igb_uio/meson.build.
>
>Igor
>
>On Mon, Dec 2, 2019 at 9:18 AM Xiaolong Ye <xiaolong.ye@intel.com> wrote:
>
>> kernel_dir option in meson build is equivalent to RTE_KERNELDIR in make
>> system, for cross-compilation case, users would specify it as local
>> kernel src dir like
>>
>> /<user local dir>/target-arm_glibc/linux-arm/linux-4.19.81/
>>
>> Current meson build would fail to compile kernel module if user specify
>> kernel_dir as above, this patch fixes this issue.
>>
>> Fixes: 317832f97c16 ("kernel/linux: fix modules install path")
>> Cc: stable@dpdk.org
>> Cc: iryzhov@nfware.com
>>
>> Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
>> ---
>> kernel/linux/igb_uio/meson.build | 2 +-
>> kernel/linux/kni/meson.build | 2 +-
>> kernel/linux/meson.build | 4 ++--
>> meson_options.txt | 2 +-
>> 4 files changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/kernel/linux/igb_uio/meson.build
>> b/kernel/linux/igb_uio/meson.build
>> index fac404f07..e66218dae 100644
>> --- a/kernel/linux/igb_uio/meson.build
>> +++ b/kernel/linux/igb_uio/meson.build
>> @@ -8,7 +8,7 @@ mkfile = custom_target('igb_uio_makefile',
>> custom_target('igb_uio',
>> input: ['igb_uio.c', 'Kbuild'],
>> output: 'igb_uio.ko',
>> - command: ['make', '-C', kernel_dir + '/build',
>> + command: ['make', '-C', kernel_dir,
>> 'M=' + meson.current_build_dir(),
>> 'src=' + meson.current_source_dir(),
>> 'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
>> diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
>> index 955eec949..9fce0c16e 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' +
>> diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build
>> index 1796cc686..a37c95752 100644
>> --- a/kernel/linux/meson.build
>> +++ b/kernel/linux/meson.build
>> @@ -13,11 +13,11 @@ 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
>> warning('Cannot compile kernel modules as requested - are kernel
>> headers installed?')
>> diff --git a/meson_options.txt b/meson_options.txt
>> index bc369d06c..7eba3b720 100644
>> --- a/meson_options.txt
>> +++ b/meson_options.txt
>> @@ -17,7 +17,7 @@ option('ibverbs_link', type: 'combo', choices :
>> ['shared', 'dlopen'], value: 'sh
>> option('include_subdir_arch', type: 'string', value: '',
>> description: 'subdirectory where to install arch-dependent
>> headers')
>> option('kernel_dir', type: 'string', value: '',
>> - description: 'Path to the kernel for building kernel modules.
>> Headers must be in $kernel_dir/build. Modules will be installed in
>> $DEST_DIR/$kernel_dir/extra/dpdk.')
>> + description: 'Path to the kernel for building kernel modules.
>> Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
>> option('lib_musdk_dir', type: 'string', value: '',
>> description: 'path to the MUSDK library installation directory')
>> option('machine', type: 'string', value: 'native',
>> --
>> 2.17.1
>>
>>
We should at least install it into /lib/modules/kernel-version. For
convenience, dpdk modules are installed into
/lib/modules/kernel-version/extra/dpdk.
In the cross-compilation case, you can use DEST_DIR to set some prefix.
I don't really see the issue here. The description clearly says that
headers must be in $kernel_dir/build which is usually a symlink
to /usr/src/linux-headers-kernel-version.
Just set kernel_dir correctly and there won't be compilation failure.
Igor
On Mon, Dec 2, 2019 at 11:43 AM Ye Xiaolong <xiaolong.ye@intel.com> wrote:
> Hi, Igor
>
> Thanks for the feedback.
>
> On 12/02, Igor Ryzhov wrote:
> >Hi Xiaolong,
> >
> >Nack from me. It's just an incorrect revert of my fix.
> >Kernel modules will be installed in wrong directory, just check
> install_dir
>
> Is there any convention that we must install kernel modules to which
> directory?
> And what about for cross compilation case?
>
> Current issue is that if I specify kernel_dir as one local linux src dir
> in meson_options.txt,
> meson build would fail to compile kernel modules while setting
> RTE_KERNELDIR='/<xxx>/build_dir/target-x86_64_glibc/linux-x86_64/linux-4.19.81/'
> before make works fine. Is there any subtlety I have missed?
>
> Thanks,
> Xiaolong
>
> >parameter in kni/meson.build and igb_uio/meson.build.
> >
> >Igor
> >
> >On Mon, Dec 2, 2019 at 9:18 AM Xiaolong Ye <xiaolong.ye@intel.com> wrote:
> >
> >> kernel_dir option in meson build is equivalent to RTE_KERNELDIR in make
> >> system, for cross-compilation case, users would specify it as local
> >> kernel src dir like
> >>
> >> /<user local dir>/target-arm_glibc/linux-arm/linux-4.19.81/
> >>
> >> Current meson build would fail to compile kernel module if user specify
> >> kernel_dir as above, this patch fixes this issue.
> >>
> >> Fixes: 317832f97c16 ("kernel/linux: fix modules install path")
> >> Cc: stable@dpdk.org
> >> Cc: iryzhov@nfware.com
> >>
> >> Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
> >> ---
> >> kernel/linux/igb_uio/meson.build | 2 +-
> >> kernel/linux/kni/meson.build | 2 +-
> >> kernel/linux/meson.build | 4 ++--
> >> meson_options.txt | 2 +-
> >> 4 files changed, 5 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/kernel/linux/igb_uio/meson.build
> >> b/kernel/linux/igb_uio/meson.build
> >> index fac404f07..e66218dae 100644
> >> --- a/kernel/linux/igb_uio/meson.build
> >> +++ b/kernel/linux/igb_uio/meson.build
> >> @@ -8,7 +8,7 @@ mkfile = custom_target('igb_uio_makefile',
> >> custom_target('igb_uio',
> >> input: ['igb_uio.c', 'Kbuild'],
> >> output: 'igb_uio.ko',
> >> - command: ['make', '-C', kernel_dir + '/build',
> >> + command: ['make', '-C', kernel_dir,
> >> 'M=' + meson.current_build_dir(),
> >> 'src=' + meson.current_source_dir(),
> >> 'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
> >> diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
> >> index 955eec949..9fce0c16e 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' +
> >> diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build
> >> index 1796cc686..a37c95752 100644
> >> --- a/kernel/linux/meson.build
> >> +++ b/kernel/linux/meson.build
> >> @@ -13,11 +13,11 @@ 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
> >> warning('Cannot compile kernel modules as requested - are kernel
> >> headers installed?')
> >> diff --git a/meson_options.txt b/meson_options.txt
> >> index bc369d06c..7eba3b720 100644
> >> --- a/meson_options.txt
> >> +++ b/meson_options.txt
> >> @@ -17,7 +17,7 @@ option('ibverbs_link', type: 'combo', choices :
> >> ['shared', 'dlopen'], value: 'sh
> >> option('include_subdir_arch', type: 'string', value: '',
> >> description: 'subdirectory where to install arch-dependent
> >> headers')
> >> option('kernel_dir', type: 'string', value: '',
> >> - description: 'Path to the kernel for building kernel modules.
> >> Headers must be in $kernel_dir/build. Modules will be installed in
> >> $DEST_DIR/$kernel_dir/extra/dpdk.')
> >> + description: 'Path to the kernel for building kernel modules.
> >> Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
> >> option('lib_musdk_dir', type: 'string', value: '',
> >> description: 'path to the MUSDK library installation directory')
> >> option('machine', type: 'string', value: 'native',
> >> --
> >> 2.17.1
> >>
> >>
>
On 12/02, Igor Ryzhov wrote:
>We should at least install it into /lib/modules/kernel-version. For
>convenience, dpdk modules are installed into
>/lib/modules/kernel-version/extra/dpdk.
>In the cross-compilation case, you can use DEST_DIR to set some prefix.
>
>I don't really see the issue here. The description clearly says that
>headers must be in $kernel_dir/build which is usually a symlink
>to /usr/src/linux-headers-kernel-version.
>Just set kernel_dir correctly and there won't be compilation failure.
I think for cross-compilation case, user should be allowed to specify any kernel
src dir (it doesn't have to be /lib/modules/kernel-version) in his local system
as kernel_dir that doesn't contain the build dir, in this case, current meson
build will skip kernel module compilation.
Thanks,
Xiaolong
>
>Igor
>
>On Mon, Dec 2, 2019 at 11:43 AM Ye Xiaolong <xiaolong.ye@intel.com> wrote:
>
>> Hi, Igor
>>
>> Thanks for the feedback.
>>
>> On 12/02, Igor Ryzhov wrote:
>> >Hi Xiaolong,
>> >
>> >Nack from me. It's just an incorrect revert of my fix.
>> >Kernel modules will be installed in wrong directory, just check
>> install_dir
>>
>> Is there any convention that we must install kernel modules to which
>> directory?
>> And what about for cross compilation case?
>>
>> Current issue is that if I specify kernel_dir as one local linux src dir
>> in meson_options.txt,
>> meson build would fail to compile kernel modules while setting
>> RTE_KERNELDIR='/<xxx>/build_dir/target-x86_64_glibc/linux-x86_64/linux-4.19.81/'
>> before make works fine. Is there any subtlety I have missed?
>>
>> Thanks,
>> Xiaolong
>>
>> >parameter in kni/meson.build and igb_uio/meson.build.
>> >
>> >Igor
>> >
>> >On Mon, Dec 2, 2019 at 9:18 AM Xiaolong Ye <xiaolong.ye@intel.com> wrote:
>> >
>> >> kernel_dir option in meson build is equivalent to RTE_KERNELDIR in make
>> >> system, for cross-compilation case, users would specify it as local
>> >> kernel src dir like
>> >>
>> >> /<user local dir>/target-arm_glibc/linux-arm/linux-4.19.81/
>> >>
>> >> Current meson build would fail to compile kernel module if user specify
>> >> kernel_dir as above, this patch fixes this issue.
>> >>
>> >> Fixes: 317832f97c16 ("kernel/linux: fix modules install path")
>> >> Cc: stable@dpdk.org
>> >> Cc: iryzhov@nfware.com
>> >>
>> >> Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
>> >> ---
>> >> kernel/linux/igb_uio/meson.build | 2 +-
>> >> kernel/linux/kni/meson.build | 2 +-
>> >> kernel/linux/meson.build | 4 ++--
>> >> meson_options.txt | 2 +-
>> >> 4 files changed, 5 insertions(+), 5 deletions(-)
>> >>
>> >> diff --git a/kernel/linux/igb_uio/meson.build
>> >> b/kernel/linux/igb_uio/meson.build
>> >> index fac404f07..e66218dae 100644
>> >> --- a/kernel/linux/igb_uio/meson.build
>> >> +++ b/kernel/linux/igb_uio/meson.build
>> >> @@ -8,7 +8,7 @@ mkfile = custom_target('igb_uio_makefile',
>> >> custom_target('igb_uio',
>> >> input: ['igb_uio.c', 'Kbuild'],
>> >> output: 'igb_uio.ko',
>> >> - command: ['make', '-C', kernel_dir + '/build',
>> >> + command: ['make', '-C', kernel_dir,
>> >> 'M=' + meson.current_build_dir(),
>> >> 'src=' + meson.current_source_dir(),
>> >> 'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
>> >> diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
>> >> index 955eec949..9fce0c16e 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' +
>> >> diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build
>> >> index 1796cc686..a37c95752 100644
>> >> --- a/kernel/linux/meson.build
>> >> +++ b/kernel/linux/meson.build
>> >> @@ -13,11 +13,11 @@ 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
>> >> warning('Cannot compile kernel modules as requested - are kernel
>> >> headers installed?')
>> >> diff --git a/meson_options.txt b/meson_options.txt
>> >> index bc369d06c..7eba3b720 100644
>> >> --- a/meson_options.txt
>> >> +++ b/meson_options.txt
>> >> @@ -17,7 +17,7 @@ option('ibverbs_link', type: 'combo', choices :
>> >> ['shared', 'dlopen'], value: 'sh
>> >> option('include_subdir_arch', type: 'string', value: '',
>> >> description: 'subdirectory where to install arch-dependent
>> >> headers')
>> >> option('kernel_dir', type: 'string', value: '',
>> >> - description: 'Path to the kernel for building kernel modules.
>> >> Headers must be in $kernel_dir/build. Modules will be installed in
>> >> $DEST_DIR/$kernel_dir/extra/dpdk.')
>> >> + description: 'Path to the kernel for building kernel modules.
>> >> Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
>> >> option('lib_musdk_dir', type: 'string', value: '',
>> >> description: 'path to the MUSDK library installation directory')
>> >> option('machine', type: 'string', value: 'native',
>> >> --
>> >> 2.17.1
>> >>
>> >>
>>
On Mon, Dec 02, 2019 at 07:34:54PM +0800, Ye Xiaolong wrote:
> On 12/02, Igor Ryzhov wrote:
> >We should at least install it into /lib/modules/kernel-version. For
> >convenience, dpdk modules are installed into
> >/lib/modules/kernel-version/extra/dpdk.
> >In the cross-compilation case, you can use DEST_DIR to set some prefix.
> >
> >I don't really see the issue here. The description clearly says that
> >headers must be in $kernel_dir/build which is usually a symlink
> >to /usr/src/linux-headers-kernel-version.
> >Just set kernel_dir correctly and there won't be compilation failure.
>
> I think for cross-compilation case, user should be allowed to specify any kernel
> src dir (it doesn't have to be /lib/modules/kernel-version) in his local system
> as kernel_dir that doesn't contain the build dir, in this case, current meson
> build will skip kernel module compilation.
>
I don't think we can take this change as the default, since the previous
fix was put in for good reason.
However, perhaps we can attempt to support both, using the checks below for
"make kernelversion" in kernel/linux/meson.build. We can attempt using the
directory with /build (as now) and then if that fails attempt without it (or
vice versa).
/Bruce
>
> >
> >Igor
> >
> >On Mon, Dec 2, 2019 at 11:43 AM Ye Xiaolong <xiaolong.ye@intel.com> wrote:
> >
> >> Hi, Igor
> >>
> >> Thanks for the feedback.
> >>
> >> On 12/02, Igor Ryzhov wrote:
> >> >Hi Xiaolong,
> >> >
> >> >Nack from me. It's just an incorrect revert of my fix.
> >> >Kernel modules will be installed in wrong directory, just check
> >> install_dir
> >>
> >> Is there any convention that we must install kernel modules to which
> >> directory?
> >> And what about for cross compilation case?
> >>
> >> Current issue is that if I specify kernel_dir as one local linux src dir
> >> in meson_options.txt,
> >> meson build would fail to compile kernel modules while setting
> >> RTE_KERNELDIR='/<xxx>/build_dir/target-x86_64_glibc/linux-x86_64/linux-4.19.81/'
> >> before make works fine. Is there any subtlety I have missed?
> >>
> >> Thanks,
> >> Xiaolong
> >>
> >> >parameter in kni/meson.build and igb_uio/meson.build.
> >> >
> >> >Igor
> >> >
> >> >On Mon, Dec 2, 2019 at 9:18 AM Xiaolong Ye <xiaolong.ye@intel.com> wrote:
> >> >
> >> >> kernel_dir option in meson build is equivalent to RTE_KERNELDIR in make
> >> >> system, for cross-compilation case, users would specify it as local
> >> >> kernel src dir like
> >> >>
> >> >> /<user local dir>/target-arm_glibc/linux-arm/linux-4.19.81/
> >> >>
> >> >> Current meson build would fail to compile kernel module if user specify
> >> >> kernel_dir as above, this patch fixes this issue.
> >> >>
> >> >> Fixes: 317832f97c16 ("kernel/linux: fix modules install path")
> >> >> Cc: stable@dpdk.org
> >> >> Cc: iryzhov@nfware.com
> >> >>
> >> >> Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
> >> >> ---
> >> >> kernel/linux/igb_uio/meson.build | 2 +-
> >> >> kernel/linux/kni/meson.build | 2 +-
> >> >> kernel/linux/meson.build | 4 ++--
> >> >> meson_options.txt | 2 +-
> >> >> 4 files changed, 5 insertions(+), 5 deletions(-)
> >> >>
> >> >> diff --git a/kernel/linux/igb_uio/meson.build
> >> >> b/kernel/linux/igb_uio/meson.build
> >> >> index fac404f07..e66218dae 100644
> >> >> --- a/kernel/linux/igb_uio/meson.build
> >> >> +++ b/kernel/linux/igb_uio/meson.build
> >> >> @@ -8,7 +8,7 @@ mkfile = custom_target('igb_uio_makefile',
> >> >> custom_target('igb_uio',
> >> >> input: ['igb_uio.c', 'Kbuild'],
> >> >> output: 'igb_uio.ko',
> >> >> - command: ['make', '-C', kernel_dir + '/build',
> >> >> + command: ['make', '-C', kernel_dir,
> >> >> 'M=' + meson.current_build_dir(),
> >> >> 'src=' + meson.current_source_dir(),
> >> >> 'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
> >> >> diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
> >> >> index 955eec949..9fce0c16e 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' +
> >> >> diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build
> >> >> index 1796cc686..a37c95752 100644
> >> >> --- a/kernel/linux/meson.build
> >> >> +++ b/kernel/linux/meson.build
> >> >> @@ -13,11 +13,11 @@ 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
> >> >> warning('Cannot compile kernel modules as requested - are kernel
> >> >> headers installed?')
> >> >> diff --git a/meson_options.txt b/meson_options.txt
> >> >> index bc369d06c..7eba3b720 100644
> >> >> --- a/meson_options.txt
> >> >> +++ b/meson_options.txt
> >> >> @@ -17,7 +17,7 @@ option('ibverbs_link', type: 'combo', choices :
> >> >> ['shared', 'dlopen'], value: 'sh
> >> >> option('include_subdir_arch', type: 'string', value: '',
> >> >> description: 'subdirectory where to install arch-dependent
> >> >> headers')
> >> >> option('kernel_dir', type: 'string', value: '',
> >> >> - description: 'Path to the kernel for building kernel modules.
> >> >> Headers must be in $kernel_dir/build. Modules will be installed in
> >> >> $DEST_DIR/$kernel_dir/extra/dpdk.')
> >> >> + description: 'Path to the kernel for building kernel modules.
> >> >> Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
> >> >> option('lib_musdk_dir', type: 'string', value: '',
> >> >> description: 'path to the MUSDK library installation directory')
> >> >> option('machine', type: 'string', value: 'native',
> >> >> --
> >> >> 2.17.1
> >> >>
> >> >>
> >>
On 12/02, Bruce Richardson wrote:
>On Mon, Dec 02, 2019 at 07:34:54PM +0800, Ye Xiaolong wrote:
>> On 12/02, Igor Ryzhov wrote:
>> >We should at least install it into /lib/modules/kernel-version. For
>> >convenience, dpdk modules are installed into
>> >/lib/modules/kernel-version/extra/dpdk.
>> >In the cross-compilation case, you can use DEST_DIR to set some prefix.
>> >
>> >I don't really see the issue here. The description clearly says that
>> >headers must be in $kernel_dir/build which is usually a symlink
>> >to /usr/src/linux-headers-kernel-version.
>> >Just set kernel_dir correctly and there won't be compilation failure.
>>
>> I think for cross-compilation case, user should be allowed to specify any kernel
>> src dir (it doesn't have to be /lib/modules/kernel-version) in his local system
>> as kernel_dir that doesn't contain the build dir, in this case, current meson
>> build will skip kernel module compilation.
>>
>
>I don't think we can take this change as the default, since the previous
>fix was put in for good reason.
>
>However, perhaps we can attempt to support both, using the checks below for
>"make kernelversion" in kernel/linux/meson.build. We can attempt using the
>directory with /build (as now) and then if that fails attempt without it (or
>vice versa).
Thanks for the suggestion, I think it works for checking phase, and we still
some tricks for "make -C <kernel_dir>" to let it works for both cases, I'll try
to figure out.
Thanks,
Xiaolong
>
>/Bruce
>
>>
>> >
>> >Igor
>> >
>> >On Mon, Dec 2, 2019 at 11:43 AM Ye Xiaolong <xiaolong.ye@intel.com> wrote:
>> >
>> >> Hi, Igor
>> >>
>> >> Thanks for the feedback.
>> >>
>> >> On 12/02, Igor Ryzhov wrote:
>> >> >Hi Xiaolong,
>> >> >
>> >> >Nack from me. It's just an incorrect revert of my fix.
>> >> >Kernel modules will be installed in wrong directory, just check
>> >> install_dir
>> >>
>> >> Is there any convention that we must install kernel modules to which
>> >> directory?
>> >> And what about for cross compilation case?
>> >>
>> >> Current issue is that if I specify kernel_dir as one local linux src dir
>> >> in meson_options.txt,
>> >> meson build would fail to compile kernel modules while setting
>> >> RTE_KERNELDIR='/<xxx>/build_dir/target-x86_64_glibc/linux-x86_64/linux-4.19.81/'
>> >> before make works fine. Is there any subtlety I have missed?
>> >>
>> >> Thanks,
>> >> Xiaolong
>> >>
>> >> >parameter in kni/meson.build and igb_uio/meson.build.
>> >> >
>> >> >Igor
>> >> >
>> >> >On Mon, Dec 2, 2019 at 9:18 AM Xiaolong Ye <xiaolong.ye@intel.com> wrote:
>> >> >
>> >> >> kernel_dir option in meson build is equivalent to RTE_KERNELDIR in make
>> >> >> system, for cross-compilation case, users would specify it as local
>> >> >> kernel src dir like
>> >> >>
>> >> >> /<user local dir>/target-arm_glibc/linux-arm/linux-4.19.81/
>> >> >>
>> >> >> Current meson build would fail to compile kernel module if user specify
>> >> >> kernel_dir as above, this patch fixes this issue.
>> >> >>
>> >> >> Fixes: 317832f97c16 ("kernel/linux: fix modules install path")
>> >> >> Cc: stable@dpdk.org
>> >> >> Cc: iryzhov@nfware.com
>> >> >>
>> >> >> Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
>> >> >> ---
>> >> >> kernel/linux/igb_uio/meson.build | 2 +-
>> >> >> kernel/linux/kni/meson.build | 2 +-
>> >> >> kernel/linux/meson.build | 4 ++--
>> >> >> meson_options.txt | 2 +-
>> >> >> 4 files changed, 5 insertions(+), 5 deletions(-)
>> >> >>
>> >> >> diff --git a/kernel/linux/igb_uio/meson.build
>> >> >> b/kernel/linux/igb_uio/meson.build
>> >> >> index fac404f07..e66218dae 100644
>> >> >> --- a/kernel/linux/igb_uio/meson.build
>> >> >> +++ b/kernel/linux/igb_uio/meson.build
>> >> >> @@ -8,7 +8,7 @@ mkfile = custom_target('igb_uio_makefile',
>> >> >> custom_target('igb_uio',
>> >> >> input: ['igb_uio.c', 'Kbuild'],
>> >> >> output: 'igb_uio.ko',
>> >> >> - command: ['make', '-C', kernel_dir + '/build',
>> >> >> + command: ['make', '-C', kernel_dir,
>> >> >> 'M=' + meson.current_build_dir(),
>> >> >> 'src=' + meson.current_source_dir(),
>> >> >> 'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
>> >> >> diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
>> >> >> index 955eec949..9fce0c16e 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' +
>> >> >> diff --git a/kernel/linux/meson.build b/kernel/linux/meson.build
>> >> >> index 1796cc686..a37c95752 100644
>> >> >> --- a/kernel/linux/meson.build
>> >> >> +++ b/kernel/linux/meson.build
>> >> >> @@ -13,11 +13,11 @@ 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
>> >> >> warning('Cannot compile kernel modules as requested - are kernel
>> >> >> headers installed?')
>> >> >> diff --git a/meson_options.txt b/meson_options.txt
>> >> >> index bc369d06c..7eba3b720 100644
>> >> >> --- a/meson_options.txt
>> >> >> +++ b/meson_options.txt
>> >> >> @@ -17,7 +17,7 @@ option('ibverbs_link', type: 'combo', choices :
>> >> >> ['shared', 'dlopen'], value: 'sh
>> >> >> option('include_subdir_arch', type: 'string', value: '',
>> >> >> description: 'subdirectory where to install arch-dependent
>> >> >> headers')
>> >> >> option('kernel_dir', type: 'string', value: '',
>> >> >> - description: 'Path to the kernel for building kernel modules.
>> >> >> Headers must be in $kernel_dir/build. Modules will be installed in
>> >> >> $DEST_DIR/$kernel_dir/extra/dpdk.')
>> >> >> + description: 'Path to the kernel for building kernel modules.
>> >> >> Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
>> >> >> option('lib_musdk_dir', type: 'string', value: '',
>> >> >> description: 'path to the MUSDK library installation directory')
>> >> >> option('machine', type: 'string', value: 'native',
>> >> >> --
>> >> >> 2.17.1
>> >> >>
>> >> >>
>> >>
On 12/02, Bruce Richardson wrote:
>On Mon, Dec 02, 2019 at 07:34:54PM +0800, Ye Xiaolong wrote:
>> On 12/02, Igor Ryzhov wrote:
>> >We should at least install it into /lib/modules/kernel-version. For
>> >convenience, dpdk modules are installed into
>> >/lib/modules/kernel-version/extra/dpdk.
>> >In the cross-compilation case, you can use DEST_DIR to set some prefix.
>> >
>> >I don't really see the issue here. The description clearly says that
>> >headers must be in $kernel_dir/build which is usually a symlink
>> >to /usr/src/linux-headers-kernel-version.
>> >Just set kernel_dir correctly and there won't be compilation failure.
>>
>> I think for cross-compilation case, user should be allowed to specify any kernel
>> src dir (it doesn't have to be /lib/modules/kernel-version) in his local system
>> as kernel_dir that doesn't contain the build dir, in this case, current meson
>> build will skip kernel module compilation.
>>
>
>I don't think we can take this change as the default, since the previous
>fix was put in for good reason.
>
>However, perhaps we can attempt to support both, using the checks below for
>"make kernelversion" in kernel/linux/meson.build. We can attempt using the
>directory with /build (as now) and then if that fails attempt without it (or
>vice versa).
After a second thought, I think it'd be better that we unify the meaning of
kernel_dir for both cases, it should be aligned with make's RTE_KERNELDIR
variable that specify the directory contains kernel src code (or header), then
we don't need to distinguish these 2 cases in check (make kernelversion) phase,
we just need to assign different install dirs,
For normal case:
kernel_dir=/lib/modules/<kernel_version>/build
install_dir=/lib/modules/<kernel_version>/extra/dpdk
For cross compilation case:
kernel_dir=<Any kernel src dir specified by user>
install_dir=<Any kernel src dir specified by user>/extra/dpdk
What do you think (I've sent v2 according to above description)?
Thanks,
Xiaolong
>
>/Bruce
On Tue, Dec 03, 2019 at 01:33:19PM +0800, Ye Xiaolong wrote:
> On 12/02, Bruce Richardson wrote:
> >On Mon, Dec 02, 2019 at 07:34:54PM +0800, Ye Xiaolong wrote:
> >> On 12/02, Igor Ryzhov wrote:
> >> >We should at least install it into /lib/modules/kernel-version. For
> >> >convenience, dpdk modules are installed into
> >> >/lib/modules/kernel-version/extra/dpdk.
> >> >In the cross-compilation case, you can use DEST_DIR to set some prefix.
> >> >
> >> >I don't really see the issue here. The description clearly says that
> >> >headers must be in $kernel_dir/build which is usually a symlink
> >> >to /usr/src/linux-headers-kernel-version.
> >> >Just set kernel_dir correctly and there won't be compilation failure.
> >>
> >> I think for cross-compilation case, user should be allowed to specify any kernel
> >> src dir (it doesn't have to be /lib/modules/kernel-version) in his local system
> >> as kernel_dir that doesn't contain the build dir, in this case, current meson
> >> build will skip kernel module compilation.
> >>
> >
> >I don't think we can take this change as the default, since the previous
> >fix was put in for good reason.
> >
> >However, perhaps we can attempt to support both, using the checks below for
> >"make kernelversion" in kernel/linux/meson.build. We can attempt using the
> >directory with /build (as now) and then if that fails attempt without it (or
> >vice versa).
>
> After a second thought, I think it'd be better that we unify the meaning of
> kernel_dir for both cases, it should be aligned with make's RTE_KERNELDIR
> variable that specify the directory contains kernel src code (or header), then
> we don't need to distinguish these 2 cases in check (make kernelversion) phase,
> we just need to assign different install dirs,
>
> For normal case:
>
> kernel_dir=/lib/modules/<kernel_version>/build
> install_dir=/lib/modules/<kernel_version>/extra/dpdk
>
> For cross compilation case:
>
> kernel_dir=<Any kernel src dir specified by user>
> install_dir=<Any kernel src dir specified by user>/extra/dpdk
>
> What do you think (I've sent v2 according to above description)?
>
The downside of what you propose is that it will break any builds which are
already working by passing in the base kerneldir folder as parameter. That
case needs to be kept working, so you cannot force the user to pass in the
path with /build on the end.
/Bruce
@@ -8,7 +8,7 @@ mkfile = custom_target('igb_uio_makefile',
custom_target('igb_uio',
input: ['igb_uio.c', 'Kbuild'],
output: 'igb_uio.ko',
- command: ['make', '-C', kernel_dir + '/build',
+ command: ['make', '-C', kernel_dir,
'M=' + meson.current_build_dir(),
'src=' + meson.current_source_dir(),
'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
@@ -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' +
@@ -13,11 +13,11 @@ 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
warning('Cannot compile kernel modules as requested - are kernel headers installed?')
@@ -17,7 +17,7 @@ option('ibverbs_link', type: 'combo', choices : ['shared', 'dlopen'], value: 'sh
option('include_subdir_arch', type: 'string', value: '',
description: 'subdirectory where to install arch-dependent headers')
option('kernel_dir', type: 'string', value: '',
- description: 'Path to the kernel for building kernel modules. Headers must be in $kernel_dir/build. Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
+ description: 'Path to the kernel for building kernel modules. Modules will be installed in $DEST_DIR/$kernel_dir/extra/dpdk.')
option('lib_musdk_dir', type: 'string', value: '',
description: 'path to the MUSDK library installation directory')
option('machine', type: 'string', value: 'native',