[dpdk-dev,2/2] net/sfc: add support for meson build
Checks
Commit Message
From: Ivan Malov <ivan.malov@oktetlabs.ru>
Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
drivers/net/meson.build | 2 +-
drivers/net/sfc/base/meson.build | 69 ++++++++++++++++++++++++++++++++++++++++
drivers/net/sfc/meson.build | 61 +++++++++++++++++++++++++++++++++++
3 files changed, 131 insertions(+), 1 deletion(-)
create mode 100644 drivers/net/sfc/base/meson.build
create mode 100644 drivers/net/sfc/meson.build
Comments
On Fri, Feb 02, 2018 at 12:43:58PM +0000, Andrew Rybchenko wrote:
> From: Ivan Malov <ivan.malov@oktetlabs.ru>
>
> Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
> ---
> drivers/net/meson.build | 2 +-
> drivers/net/sfc/base/meson.build | 69 ++++++++++++++++++++++++++++++++++++++++
> drivers/net/sfc/meson.build | 61 +++++++++++++++++++++++++++++++++++
> 3 files changed, 131 insertions(+), 1 deletion(-)
> create mode 100644 drivers/net/sfc/base/meson.build
> create mode 100644 drivers/net/sfc/meson.build
Hi,
looks pretty good in general. I have a few comments below to improve
things.
Unfortunately, this will break the ARM builds in it's current form too
(or at least it broke the builds using the cross-files that I tested).
I think you need to add a check at the top of the driver meson.build
file for unsupported architectures, and set "build = false" for those
platforms.
/Bruce
<snip>
> diff --git a/drivers/net/sfc/meson.build b/drivers/net/sfc/meson.build
> new file mode 100644
> index 0000000..b603579
> --- /dev/null
> +++ b/drivers/net/sfc/meson.build
> @@ -0,0 +1,61 @@
> +# SPDX-License-Identifier: BSD-3-Clause
> +#
> +# Copyright (c) 2016-2018 Solarflare Communications Inc.
> +# All rights reserved.
> +#
> +# This software was jointly developed between OKTET Labs (under contract
> +# for Solarflare) and Solarflare Communications, Inc.
> +
> +allow_experimental_apis = true
> +
> +extra_flags = []
> +extra_flags += '-I' + meson.current_source_dir() + '/base'
> +extra_flags += '-I' + meson.current_source_dir()
The driver's own directory is already set in the include path, so it
should not necessary to add it as a cflag. For the base folder, the
"includes" variable should be used rather than the cflags one. These
two lines should just be replaced by:
includes += include_directories('base')
You may also need to put "include_directories: includes," into the
static_library call in the base folder if you have things being included
by base files from the root folder too.
> +extra_flags += '-O3'
The optimisation level is set for the project as a whole, and should not
be overridden in the driver. Otherwise a debug build will not be a debug
build for your driver.
On 02/02/2018 07:18 PM, Bruce Richardson wrote:
> On Fri, Feb 02, 2018 at 12:43:58PM +0000, Andrew Rybchenko wrote:
>> From: Ivan Malov <ivan.malov@oktetlabs.ru>
>>
>> Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
>> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
>> ---
>> drivers/net/meson.build | 2 +-
>> drivers/net/sfc/base/meson.build | 69 ++++++++++++++++++++++++++++++++++++++++
>> drivers/net/sfc/meson.build | 61 +++++++++++++++++++++++++++++++++++
>> 3 files changed, 131 insertions(+), 1 deletion(-)
>> create mode 100644 drivers/net/sfc/base/meson.build
>> create mode 100644 drivers/net/sfc/meson.build
> Hi,
>
> looks pretty good in general. I have a few comments below to improve
> things.
>
> Unfortunately, this will break the ARM builds in it's current form too
> (or at least it broke the builds using the cross-files that I tested).
> I think you need to add a check at the top of the driver meson.build
> file for unsupported architectures, and set "build = false" for those
> platforms.
Many thanks for review notes. Hopefully we have processed everything.
It looks like x86 is the common for 64-bit and 32-bit.
In theory we do not supported 32-bit x86 with make.
I've tried to build on 32-bit host with meson/ninja and the build fails
but earlier than our driver:
../dpdk-next-net/lib/librte_kni/rte_kni.c: In function ‘kni_allocate_mbufs’:
../dpdk-next-net/lib/librte_kni/rte_kni.c:669:2: error: size of unnamed
array is negative
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_off) !=
^~~~~~~~~~~~~~~~
../dpdk-next-net/lib/librte_kni/rte_kni.c:671:2: error: size of unnamed
array is negative
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_len) !=
^~~~~~~~~~~~~~~~
../dpdk-next-net/lib/librte_kni/rte_kni.c:673:2: error: size of unnamed
array is negative
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, pkt_len) !=
^~~~~~~~~~~~~~~~
../dpdk-next-net/lib/librte_kni/rte_kni.c:675:2: error: size of unnamed
array is negative
RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, ol_flags) !=
^~~~~~~~~~~~~~~~
../dpdk-next-net/lib/librte_kni/rte_kni.c: At top level:
cc1: warning: unrecognized command line option ‘-Wno-format-truncation’
cc1: warning: unrecognized command line option
‘-Wno-address-of-packed-member’
[26/498] Compiling C object 'lib/rte_port@sta/rte_port_kni.c.o'.
ninja: build stopped: subcommand failed.
It is Debian stretch. gcc (Debian 6.3.0-18) 6.3.0 20170516
Does the build on 32-bit x86 work for you?
bash$ meson --version
0.42.1
bash$ ninja --version
1.7.2
Build using make works fine.
Andrew.
On Sat, Feb 03, 2018 at 06:33:51PM +0300, Andrew Rybchenko wrote:
> On 02/02/2018 07:18 PM, Bruce Richardson wrote:
> > On Fri, Feb 02, 2018 at 12:43:58PM +0000, Andrew Rybchenko wrote:
> > > From: Ivan Malov <ivan.malov@oktetlabs.ru>
> > >
> > > Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
> > > Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
> > > ---
> > > drivers/net/meson.build | 2 +-
> > > drivers/net/sfc/base/meson.build | 69 ++++++++++++++++++++++++++++++++++++++++
> > > drivers/net/sfc/meson.build | 61 +++++++++++++++++++++++++++++++++++
> > > 3 files changed, 131 insertions(+), 1 deletion(-)
> > > create mode 100644 drivers/net/sfc/base/meson.build
> > > create mode 100644 drivers/net/sfc/meson.build
> > Hi,
> >
> > looks pretty good in general. I have a few comments below to improve
> > things.
> >
> > Unfortunately, this will break the ARM builds in it's current form too
> > (or at least it broke the builds using the cross-files that I tested).
> > I think you need to add a check at the top of the driver meson.build
> > file for unsupported architectures, and set "build = false" for those
> > platforms.
>
> Many thanks for review notes. Hopefully we have processed everything.
> It looks like x86 is the common for 64-bit and 32-bit.
> In theory we do not supported 32-bit x86 with make.
> I've tried to build on 32-bit host with meson/ninja and the build fails
> but earlier than our driver:
>
> ../dpdk-next-net/lib/librte_kni/rte_kni.c: In function ‘kni_allocate_mbufs’:
> ../dpdk-next-net/lib/librte_kni/rte_kni.c:669:2: error: size of unnamed
> array is negative
> RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_off) !=
> ^~~~~~~~~~~~~~~~
> ../dpdk-next-net/lib/librte_kni/rte_kni.c:671:2: error: size of unnamed
> array is negative
> RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_len) !=
> ^~~~~~~~~~~~~~~~
> ../dpdk-next-net/lib/librte_kni/rte_kni.c:673:2: error: size of unnamed
> array is negative
> RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, pkt_len) !=
> ^~~~~~~~~~~~~~~~
> ../dpdk-next-net/lib/librte_kni/rte_kni.c:675:2: error: size of unnamed
> array is negative
> RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, ol_flags) !=
> ^~~~~~~~~~~~~~~~
> ../dpdk-next-net/lib/librte_kni/rte_kni.c: At top level:
> cc1: warning: unrecognized command line option ‘-Wno-format-truncation’
> cc1: warning: unrecognized command line option
> ‘-Wno-address-of-packed-member’
> [26/498] Compiling C object 'lib/rte_port@sta/rte_port_kni.c.o'.
> ninja: build stopped: subcommand failed.
>
> It is Debian stretch. gcc (Debian 6.3.0-18) 6.3.0 20170516
> Does the build on 32-bit x86 work for you?
>
> bash$ meson --version
> 0.42.1
> bash$ ninja --version
> 1.7.2
>
> Build using make works fine.
>
Yes, I haven't investigated getting 32-bit builds working yet on meson,
due to time constraints. It should be fixed soon in the 18.05 release, I
hope.
At this point for meson patches, the main requirement is to not break
anything that is already confirmed as working. Beyond that, additional
support is always welcome, but not required. :-)
/Bruce
@@ -4,7 +4,7 @@
drivers = ['af_packet', 'bonding',
'e1000', 'fm10k', 'i40e', 'ixgbe',
'null', 'octeontx', 'pcap', 'ring',
- 'thunderx']
+ 'sfc', 'thunderx']
std_deps = ['ethdev', 'kvargs'] # 'ethdev' also pulls in mbuf, net, eal etc
std_deps += ['bus_pci'] # very many PMDs depend on PCI, so make std
std_deps += ['bus_vdev'] # same with vdev bus
new file mode 100644
@@ -0,0 +1,69 @@
+# Copyright (c) 2016-2018 Solarflare Communications Inc.
+# All rights reserved.
+#
+# This software was jointly developed between OKTET Labs (under contract
+# for Solarflare) and Solarflare Communications, Inc.
+
+sources = [
+ 'efx_bootcfg.c',
+ 'efx_crc32.c',
+ 'efx_ev.c',
+ 'efx_filter.c',
+ 'efx_hash.c',
+ 'efx_intr.c',
+ 'efx_lic.c',
+ 'efx_mac.c',
+ 'efx_mcdi.c',
+ 'efx_mon.c',
+ 'efx_nic.c',
+ 'efx_nvram.c',
+ 'efx_phy.c',
+ 'efx_port.c',
+ 'efx_rx.c',
+ 'efx_sram.c',
+ 'efx_tunnel.c',
+ 'efx_tx.c',
+ 'efx_vpd.c',
+ 'mcdi_mon.c',
+ 'siena_mac.c',
+ 'siena_mcdi.c',
+ 'siena_nic.c',
+ 'siena_nvram.c',
+ 'siena_phy.c',
+ 'siena_sram.c',
+ 'siena_vpd.c',
+ 'ef10_ev.c',
+ 'ef10_filter.c',
+ 'ef10_intr.c',
+ 'ef10_mac.c',
+ 'ef10_mcdi.c',
+ 'ef10_nic.c',
+ 'ef10_nvram.c',
+ 'ef10_phy.c',
+ 'ef10_rx.c',
+ 'ef10_tx.c',
+ 'ef10_vpd.c',
+ 'hunt_nic.c',
+ 'medford_nic.c'
+]
+
+extra_flags = [
+ '-Wno-sign-compare',
+ '-Wno-unused-parameter',
+ '-Wno-unused-variable',
+ '-Wno-empty-body',
+ '-Wno-unused-but-set-variable'
+]
+
+c_args = cflags
+foreach flag: extra_flags
+ if cc.has_argument(flag)
+ c_args += flag
+ endif
+endforeach
+
+base_lib = static_library('sfc_base', sources,
+ dependencies: static_rte_eal,
+ c_args: c_args)
+
+base_objs = base_lib.extract_all_objects()
new file mode 100644
@@ -0,0 +1,61 @@
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Copyright (c) 2016-2018 Solarflare Communications Inc.
+# All rights reserved.
+#
+# This software was jointly developed between OKTET Labs (under contract
+# for Solarflare) and Solarflare Communications, Inc.
+
+allow_experimental_apis = true
+
+extra_flags = []
+extra_flags += '-I' + meson.current_source_dir() + '/base'
+extra_flags += '-I' + meson.current_source_dir()
+extra_flags += '-O3'
+
+# Strict-aliasing rules are violated by rte_eth_link to uint64_t casts
+extra_flags += '-Wno-strict-aliasing'
+
+# Enable more warnings
+extra_flags += [
+ '-Wextra',
+ '-Wdisabled-optimization'
+]
+
+# Compiler and version dependent flags
+extra_flags += [
+ '-Waggregate-return',
+ '-Wnested-externs',
+ '-Wbad-function-cast'
+]
+
+# Suppress ICC false positive warning on 'bulk' may be used before its
+# value is set
+extra_flags += '-wd3656'
+
+foreach flag: extra_flags
+ if cc.has_argument(flag)
+ cflags += flag
+ endif
+endforeach
+
+subdir('base')
+objs = [base_objs]
+
+sources = files(
+ 'sfc_ethdev.c',
+ 'sfc_kvargs.c',
+ 'sfc.c',
+ 'sfc_mcdi.c',
+ 'sfc_intr.c',
+ 'sfc_ev.c',
+ 'sfc_port.c',
+ 'sfc_rx.c',
+ 'sfc_tx.c',
+ 'sfc_tso.c',
+ 'sfc_filter.c',
+ 'sfc_flow.c',
+ 'sfc_dp.c',
+ 'sfc_ef10_rx.c',
+ 'sfc_ef10_tx.c'
+)