mbox series

[v4,0/4] net/ixgbe: build on Windows

Message ID 20211005170252.7-1-u9012063@gmail.com (mailing list archive)
Headers
Series net/ixgbe: build on Windows |

Message

William Tu Oct. 5, 2021, 5:02 p.m. UTC
  This patch enables building the ixgbe driver for Windows.
It also enables its dependencies on security and cryptodev.
I tested on AWS using ixgbe VF device, using dpdk-testpmd.

Tal Shnaiderman (3):
  security: use the net library for IP structs
  security: build on Windows
  cryptodev: build on Windows

William Tu (1):
  net/ixgbe: build on Windows
---
v4:
* fix mingw build by defining the IPPROTO_SCTP if needed
* simplify the meson file
* change patch title, rebase to main

v3:
* I include Tal's patch series due to some fixes.
* apply on master, after commit f1f6ebc0eaf6
  ("eal: remove sys/queue.h from public headers")
  ixgbe needs to add "include <sys/queue.h>"
* For "cryptodev: build on Windows",
  need to add "include <sys/queue.h>"
* For "security: build on Windows",
  remove unresolved external symbols, reported
  by Pallavi at:
  http://inbox.dpdk.org/dev/CALDO+SZ-iL4jhcSZPZZKkbY+dTa1OP+dGKZs86iRE6b2pUsvBw@mail.gmail.com/T/#m0160fb800fe8e8d83624f3bdb39a01b7ef9b5f35 

v2:
* add dependencies on cryptodev and security
* add #include <rte_ip.h>, instead of doing
    #ifndef RTE_EXEC_ENV_WINDOWS
    #include <netinet/in.h>
    #else
    #include <Ws2tcpip.h>
    #endif
  however, including rte_ip.h requires including another
  set of dependent headers, see the
    drivers/net/ixgbe/base/meson.build

 drivers/net/ixgbe/base/ixgbe_hv_vf.c | 1 +
 drivers/net/ixgbe/base/ixgbe_osdep.h | 9 +++++++++
 drivers/net/ixgbe/base/meson.build   | 2 +-
 drivers/net/ixgbe/ixgbe_ethdev.c     | 2 +-
 drivers/net/ixgbe/ixgbe_ethdev.h     | 1 +
 drivers/net/ixgbe/ixgbe_flow.c       | 2 +-
 drivers/net/ixgbe/ixgbe_tm.c         | 2 +-
 drivers/net/ixgbe/meson.build        | 6 ------
 lib/cryptodev/cryptodev_pmd.c        | 2 ++
 lib/cryptodev/rte_cryptodev.c        | 1 -
 lib/cryptodev/version.map            | 2 --
 lib/meson.build                      | 2 ++
 lib/net/rte_ip.h                     | 1 +
 lib/security/meson.build             | 2 +-
 lib/security/rte_security.h          | 5 +----
 lib/security/version.map             | 3 ---
 16 files changed, 22 insertions(+), 21 deletions(-)
  

Comments

David Marchand Oct. 6, 2021, 12:09 p.m. UTC | #1
Hello William,

On Tue, Oct 5, 2021 at 7:03 PM William Tu <u9012063@gmail.com> wrote:
>
> This patch enables building the ixgbe driver for Windows.
> It also enables its dependencies on security and cryptodev.
> I tested on AWS using ixgbe VF device, using dpdk-testpmd.
>
> Tal Shnaiderman (3):
>   security: use the net library for IP structs
>   security: build on Windows
>   cryptodev: build on Windows
>
> William Tu (1):
>   net/ixgbe: build on Windows
> ---
> v4:
> * fix mingw build by defining the IPPROTO_SCTP if needed
> * simplify the meson file
> * change patch title, rebase to main
>

In case you did not notice, mingw build is broken with this series.
https://lab.dpdk.org/results/dashboard/patchsets/19183/

[412/464] Compiling C object
drivers/libtmp_rte_net_ixgbe.a.p/net_ixgbe_ixgbe_82599_bypass.c.obj
[413/464] Compiling C object
drivers/libtmp_rte_net_ixgbe.a.p/net_ixgbe_ixgbe_ethdev.c.obj
FAILED: drivers/libtmp_rte_net_ixgbe.a.p/net_ixgbe_ixgbe_ethdev.c.obj
"gcc" "-Idrivers\libtmp_rte_net_ixgbe.a.p" "-Idrivers" "-I..\drivers"
"-Idrivers\net\ixgbe" "-I..\drivers\net\ixgbe"
"-Idrivers\net\ixgbe\base" "-I..\drivers\net\ixgbe\base"
"-Ilib\ethdev" "-I..\lib\ethdev" "-I." "-I.." "-Iconfig" "-I..\config"
"-Ilib\eal\include" "-I..\lib\eal\include" "-Ilib\eal\windows\include"
"-I..\lib\eal\windows\include" "-Ilib\eal\x86\include"
"-I..\lib\eal\x86\include" "-Ilib\eal\common" "-I..\lib\eal\common"
"-Ilib\eal" "-I..\lib\eal" "-Ilib\kvargs" "-I..\lib\kvargs"
"-Ilib\net" "-I..\lib\net" "-Ilib\mbuf" "-I..\lib\mbuf"
"-Ilib\mempool" "-I..\lib\mempool" "-Ilib\ring" "-I..\lib\ring"
"-Ilib\meter" "-I..\lib\meter" "-Ilib\metrics" "-I..\lib\metrics"
"-Ilib\telemetry" "-I..\lib\telemetry" "-Idrivers\bus\pci"
"-I..\drivers\bus\pci" "-I..\drivers\bus\pci\windows" "-Ilib\pci"
"-I..\lib\pci" "-Idrivers\bus\vdev" "-I..\drivers\bus\vdev"
"-Ilib\hash" "-I..\lib\hash" "-Ilib\rcu" "-I..\lib\rcu"
"-Ilib\security" "-I..\lib\security" "-Ilib\cryptodev"
"-I..\lib\cryptodev" "-fdiagnostics-color=always" "-pipe"
"-D_FILE_OFFSET_BITS=64" "-Wall" "-Winvalid-pch" "-Werror" "-O3"
"-include" "rte_config.h" "-Wextra" "-Wcast-qual" "-Wdeprecated"
"-Wformat" "-Wformat-nonliteral" "-Wformat-security"
"-Wmissing-declarations" "-Wmissing-prototypes" "-Wnested-externs"
"-Wold-style-definition" "-Wpointer-arith" "-Wsign-compare"
"-Wstrict-prototypes" "-Wundef" "-Wwrite-strings"
"-Wno-packed-not-aligned" "-Wno-missing-field-initializers"
"-D_GNU_SOURCE" "-D_WIN32_WINNT=0x0A00" "-D__USE_MINGW_ANSI_STDIO"
"-march=native" "-DALLOW_EXPERIMENTAL_API" "-DALLOW_INTERNAL_API"
"-Wno-format-truncation" "-DRTE_LIBRTE_IXGBE_BYPASS"
"-DRTE_LOG_DEFAULT_LOGTYPE=pmd.net.ixgbe" -MD -MQ
drivers/libtmp_rte_net_ixgbe.a.p/net_ixgbe_ixgbe_ethdev.c.obj -MF
"drivers\libtmp_rte_net_ixgbe.a.p\net_ixgbe_ixgbe_ethdev.c.obj.d" -o
drivers/libtmp_rte_net_ixgbe.a.p/net_ixgbe_ixgbe_ethdev.c.obj "-c"
../drivers/net/ixgbe/ixgbe_ethdev.c
{standard input}: Assembler messages:
{standard input}:7067: Error: invalid register for .seh_savexmm
{standard input}:7069: Error: invalid register for .seh_savexmm
{standard input}:7071: Error: invalid register for .seh_savexmm
{standard input}:7073: Error: invalid register for .seh_savexmm
[414/464] Compiling C object
drivers/libtmp_rte_net_ixgbe.a.p/net_ixgbe_ixgbe_bypass.c.obj

You may want to look at:
https://git.dpdk.org/dpdk/commit/?id=419c6e9af69e
  
William Tu Oct. 6, 2021, 9:48 p.m. UTC | #2
Hi David,
Thank you for pointing this out.

On Wed, Oct 6, 2021 at 5:10 AM David Marchand <david.marchand@redhat.com> wrote:
>
> Hello William,
>
> {standard input}: Assembler messages:
> {standard input}:7067: Error: invalid register for .seh_savexmm
> {standard input}:7069: Error: invalid register for .seh_savexmm
> {standard input}:7071: Error: invalid register for .seh_savexmm
> {standard input}:7073: Error: invalid register for .seh_savexmm
> [414/464] Compiling C object
> drivers/libtmp_rte_net_ixgbe.a.p/net_ixgbe_ixgbe_bypass.c.obj
I should add
"cflags += ['-fno-asynchronous-unwind-tables']"
I will send a newer version.
William
  
William Tu Oct. 6, 2021, 10:35 p.m. UTC | #3
This patch enables building the ixgbe driver for Windows.
It also enables its dependencies on security and cryptodev.
I tested on AWS using ixgbe VF device, using dpdk-testpmd.

Tal Shnaiderman (3):
  security: use the net library for IP structs
  security: build on Windows
  cryptodev: build on Windows

William Tu (1):
  net/ixgbe: build on Windows
---
v5:
* fix error due to "invalid register for .seh_savexmm"
  However, I'm not able to reproduce the error on my mingw.
  I will check the DPDK CI...
* add release notes and documentation suggested by Pallavi

v4:
* fix mingw build by defining the IPPROTO_SCTP if needed
* simplify the meson file
* change patch title, rebase to main

v3:
* I include Tal's patch series due to some fixes.
* apply on master, after commit f1f6ebc0eaf6
  ("eal: remove sys/queue.h from public headers")
  ixgbe needs to add "include <sys/queue.h>"
* For "cryptodev: build on Windows",
  need to add "include <sys/queue.h>"
* For "security: build on Windows",
  remove unresolved external symbols, reported
  by Pallavi at:
  http://inbox.dpdk.org/dev/CALDO+SZ-iL4jhcSZPZZKkbY+dTa1OP+dGKZs86iRE6b2pUsvBw@mail.gmail.com/T/#m0160fb800fe8e8d83624f3bdb39a01b7ef9b5f35 

v2:
* add dependencies on cryptodev and security
* add #include <rte_ip.h>, instead of doing
    #ifndef RTE_EXEC_ENV_WINDOWS
    #include <netinet/in.h>
    #else
    #include <Ws2tcpip.h>
    #endif
  however, including rte_ip.h requires including another
  set of dependent headers, see the
    drivers/net/ixgbe/base/meson.build

 doc/guides/nics/features/ixgbe.ini     |  1 +
 doc/guides/nics/features/ixgbe_vf.ini  |  1 +
 doc/guides/nics/ixgbe.rst              | 19 +++++++++++++++++--
 doc/guides/rel_notes/release_21_11.rst |  4 ++++
 drivers/net/ixgbe/base/ixgbe_hv_vf.c   |  1 +
 drivers/net/ixgbe/base/ixgbe_osdep.h   |  9 +++++++++
 drivers/net/ixgbe/base/meson.build     |  2 +-
 drivers/net/ixgbe/ixgbe_ethdev.c       |  2 +-
 drivers/net/ixgbe/ixgbe_ethdev.h       |  1 +
 drivers/net/ixgbe/ixgbe_flow.c         |  2 +-
 drivers/net/ixgbe/ixgbe_tm.c           |  2 +-
 drivers/net/ixgbe/meson.build          |  9 +++------
 lib/cryptodev/cryptodev_pmd.c          |  2 ++
 lib/cryptodev/rte_cryptodev.c          |  1 -
 lib/cryptodev/version.map              |  2 --
 lib/meson.build                        |  2 ++
 lib/net/rte_ip.h                       |  1 +
 lib/security/meson.build               |  2 +-
 lib/security/rte_security.h            |  5 +----
 lib/security/version.map               |  3 ---
 20 files changed, 48 insertions(+), 23 deletions(-)
  
Thomas Monjalon Oct. 7, 2021, 11:53 a.m. UTC | #4
07/10/2021 00:35, William Tu:
> This patch enables building the ixgbe driver for Windows.
> It also enables its dependencies on security and cryptodev.
> I tested on AWS using ixgbe VF device, using dpdk-testpmd.
> 
> Tal Shnaiderman (3):
>   security: use the net library for IP structs
>   security: build on Windows
>   cryptodev: build on Windows
> 
> William Tu (1):
>   net/ixgbe: build on Windows

Building security lib depends on cryptodev lib,
so I had to swap the commits.
Fixed other small stuff as commented in the thread,
and applied, thanks.