mbox series

[v2,0/7] MinGW-w64 support

Message ID 20200206064426.45697-1-dmitry.kozliuk@gmail.com (mailing list archive)
Headers
Series MinGW-w64 support |

Message

Dmitry Kozlyuk Feb. 6, 2020, 6:44 a.m. UTC
  This patch series add support for building DPDK using MinGW-w64.

MinGW-w64 provides GNU toolchain and independent platform SDK on
Windows. It also supports cross-compilation to Windows from POSIX
systems by providing cross tollchains and libraries [0]. It does NOT
emulate a full POSIX environment, like Cygwin or MSYS do.

There are advantages in using MinGW-w64 in addition to Clang:

1. Cross-compilation out-of-the-box. MinGW-w64 is provides a pthread
   implementation, GNU getopt, and Windows platform SDK.

2. Easier porting of POSIX applications using DPDK to Windows, because
   application code can use the same benefits as mentioned above.

3. Having both primary compilers enabled on Windows provides more
   diagnostics and generally prevents non-portable code.

[0]: http://mingw-w64.org

v2 Changes:

    Add patch to use lowercase system header filenames.
    Move Meson cross-file for x86 to arch directory.
    Change wording in comments.
    Add Meson version warning in documentation.

Dmitry Kozlyuk (7):
  eal: introduce portable format attribute
  eal: use portable format attribute
  cmdline: use portable format attribute
  eal/windows: use lowercase filenames for system headers
  build: MinGW-w64 support for Meson
  build: add cross-file for MinGW-w64
  doc: guide for Windows build using MinGW-w64

 config/meson.build                          | 14 +++++
 config/x86/meson_mingw.txt                  | 14 +++++
 doc/guides/windows_gsg/build_dpdk.rst       | 65 ++++++++++++++++++---
 lib/librte_cmdline/cmdline.h                |  4 +-
 lib/librte_eal/common/include/rte_common.h  | 17 +++++-
 lib/librte_eal/common/include/rte_debug.h   |  2 +-
 lib/librte_eal/common/include/rte_devargs.h |  2 +-
 lib/librte_eal/common/include/rte_log.h     |  4 +-
 lib/librte_eal/meson.build                  |  3 +
 lib/librte_eal/windows/eal/include/rte_os.h |  4 +-
 lib/meson.build                             |  8 ++-
 11 files changed, 118 insertions(+), 19 deletions(-)
 create mode 100644 config/x86/meson_mingw.txt
  

Comments

William Tu Feb. 6, 2020, 8:22 p.m. UTC | #1
On Wed, Feb 5, 2020 at 10:44 PM Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> wrote:
>
> This patch series add support for building DPDK using MinGW-w64.
>
> MinGW-w64 provides GNU toolchain and independent platform SDK on
> Windows. It also supports cross-compilation to Windows from POSIX
> systems by providing cross tollchains and libraries [0]. It does NOT
> emulate a full POSIX environment, like Cygwin or MSYS do.
>
> There are advantages in using MinGW-w64 in addition to Clang:
>
> 1. Cross-compilation out-of-the-box. MinGW-w64 is provides a pthread
>    implementation, GNU getopt, and Windows platform SDK.
>
> 2. Easier porting of POSIX applications using DPDK to Windows, because
>    application code can use the same benefits as mentioned above.
>
> 3. Having both primary compilers enabled on Windows provides more
>    diagnostics and generally prevents non-portable code.
>
> [0]: http://mingw-w64.org
>
> v2 Changes:
>
>     Add patch to use lowercase system header filenames.
>     Move Meson cross-file for x86 to arch directory.
>     Change wording in comments.
>     Add Meson version warning in documentation.
>
> Dmitry Kozlyuk (7):
>   eal: introduce portable format attribute
>   eal: use portable format attribute
>   cmdline: use portable format attribute
>   eal/windows: use lowercase filenames for system headers
>   build: MinGW-w64 support for Meson
>   build: add cross-file for MinGW-w64
>   doc: guide for Windows build using MinGW-w64
>
>  config/meson.build                          | 14 +++++
>  config/x86/meson_mingw.txt                  | 14 +++++
>  doc/guides/windows_gsg/build_dpdk.rst       | 65 ++++++++++++++++++---
>  lib/librte_cmdline/cmdline.h                |  4 +-
>  lib/librte_eal/common/include/rte_common.h  | 17 +++++-
>  lib/librte_eal/common/include/rte_debug.h   |  2 +-
>  lib/librte_eal/common/include/rte_devargs.h |  2 +-
>  lib/librte_eal/common/include/rte_log.h     |  4 +-
>  lib/librte_eal/meson.build                  |  3 +
>  lib/librte_eal/windows/eal/include/rte_os.h |  4 +-
>  lib/meson.build                             |  8 ++-
>  11 files changed, 118 insertions(+), 19 deletions(-)
>  create mode 100644 config/x86/meson_mingw.txt
>
> --
> 2.25.0
>
Hi Dmitry,

I applied your v2 patch and I did a native build on windows 10.
Hit an error showing
../lib/librte_eal/windows/eal/eal_lcore.c:54:2: error: 'for' loop
initial declarations are only allowed in C99 mode
  for (unsigned int socket = 0; socket <
  ^
../lib/librte_eal/windows/eal/eal_lcore.c:54:2: note: use option
-std=c99 or -std=gnu99 to compile your code

Then I fixed them by having separate declaration out side for loop.
then
$ ninja -C build
works

However the output looks weird:
C:\dpdk\build\examples>dpdk-helloworld.exe
EAL: Detected 2 lcore(s)
EAL: Detected 1 NUMA nodes
hehello fllo frorom cm core 1
ore 0

Regards,
William

--- more detailed ---
C:\dpdk>meson -v
0.53.999

C:\dpdk>gcc -v
Reading specs from c:/mingw-w64/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/specs
COLLECT_GCC=gcc


C:\dpdk>meson --reconfigure -Dexamples=helloworld build
The Meson build system
Version: 0.53.999
Source dir: C:\dpdk
Build dir: C:\dpdk\build
Build type: native build
Program cat found: NO
Program more found: YES (C:\WINDOWS\system32\more.COM)
Project name: DPDK
Project version: 20.02.0-rc2
C compiler for the host machine: cc (gcc 4.8.3 "cc (GCC) 4.8.3")
C linker for the host machine: cc GNU ld.bfd 2.24
Host machine cpu family: x86_64
Host machine cpu: x86_64
Program cat found: NO
Program more found: YES (C:\WINDOWS\system32\more.COM)
Program ../buildtools/symlink-drivers-solibs.sh found: YES (sh
C:\dpdk\config\../buildtools/symlink-drivers-so
libs.sh)
Checking for size of "void *" : 8
Library m found: YES
Library numa found: NO
Found pkg-config: C:\mingw-w64\bin\pkg-config.EXE (0.25)
  
Dmitry Kozlyuk Feb. 7, 2020, 10:24 a.m. UTC | #2
Hi William,

I applied your v2 patch and I did a native build on windows 10.
> Hit an error showing
> ../lib/librte_eal/windows/eal/eal_lcore.c:54:2: error: 'for' loop
> initial declarations are only allowed in C99 mode
>

Thanks, will fix in v3.

However the output looks weird:
> C:\dpdk\build\examples>dpdk-helloworld.exe
> EAL: Detected 2 lcore(s)
> EAL: Detected 1 NUMA nodes
> hehello fllo frorom cm core 1
> ore 0
>

It looks like your stdout is unbuffered (default is line-buffered). What
terminal are you using (cmd, Power Shell, Terminal App, conemu, etc)?

C compiler for the host machine: cc (gcc 4.8.3 "cc (GCC) 4.8.3")
>

GCC 4.8.3 is quite outdated, MinGW-w64 ships GCC 8 nowadays. Do we need to
support it for Windows (I doubt MinGW-w64 does)?

--
Dmitry Kozlyuk

>
  
William Tu Feb. 7, 2020, 5:47 p.m. UTC | #3
Hi Dmitry,

Thanks for your reply.

On Fri, Feb 7, 2020 at 2:24 AM Dmitry Kozliuk <dmitry.kozliuk@gmail.com> wrote:
>
> Hi William,
>
>> I applied your v2 patch and I did a native build on windows 10.
>> Hit an error showing
>> ../lib/librte_eal/windows/eal/eal_lcore.c:54:2: error: 'for' loop
>> initial declarations are only allowed in C99 mode
>
>
> Thanks, will fix in v3.
>
>> However the output looks weird:
>> C:\dpdk\build\examples>dpdk-helloworld.exe
>> EAL: Detected 2 lcore(s)
>> EAL: Detected 1 NUMA nodes
>> hehello fllo frorom cm core 1
>> ore 0
>
>
> It looks like your stdout is unbuffered (default is line-buffered). What terminal are you using (cmd, Power Shell, Terminal App, conemu, etc)?
>
I'm using the "Command Prompt" from windows 10

>> C compiler for the host machine: cc (gcc 4.8.3 "cc (GCC) 4.8.3")
>
>
> GCC 4.8.3 is quite outdated, MinGW-w64 ships GCC 8 nowadays. Do we need to support it for Windows (I doubt MinGW-w64 does)?
>
Oh, I download a pretty old version (mingw-w64 3.3.0).
Let me update.

BTW, I also tested cross-compile using my Ubuntu Box and everything works!
William