unable to cross-compile for 32 bit Windows: "ffi-x86.h: No such file or directory"
I hope I'm not overlooking something really trivial but I'm unable to cross-compile libffi for 32 bit Windows (using Fedora 33, mingw32 10.2.1):
$ meson build.win --cross-file=meson.cross-file
The Meson build system
Version: 0.55.3
Source dir: …/libffi
Build dir: …/libffi/build.win
Build type: cross build
Project name: libffi
Project version: 3.2.1
C compiler for the build machine: cc (gcc 10.2.1 "cc (GCC) 10.2.1 20201125 (Red Hat 10.2.1-9)")
C linker for the build machine: cc ld.bfd 2.35-15
C compiler for the host machine: /usr/bin/i686-w64-mingw32-gcc (gcc 10.2.1 "i686-w64-mingw32-gcc (GCC) 10.2.1 20200723 (Fedora MinGW 10.2.1-2.fc33)")
C linker for the host machine: /usr/bin/i686-w64-mingw32-gcc ld.bfd 2.34-3
Build machine cpu family: x86_64
Build machine cpu: x86_64
Host machine cpu family: x86_64
Host machine cpu: i686
Target machine cpu family: x86_64
Target machine cpu: i686
Message: host cpu: i686
Message: host cpu_family: x86_64
Message: host system: windows
Found ninja-1.10.1 at /usr/bin/ninja
…
$ ninja -C build.win
ninja: Entering directory `build.win'
[1/8] Compiling C object src/libffi-7.dll.p/types.c.obj
FAILED: src/libffi-7.dll.p/types.c.obj
/usr/bin/i686-w64-mingw32-gcc -Isrc/libffi-7.dll.p -Isrc -I../src -I. -I.. -Iinclude -I../include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O2 -g -DFFI_BUILDING -DTARGET=X86_WIN32 -MD -MQ src/libffi-7.dll.p/types.c.obj -MF src/libffi-7.dll.p/types.c.obj.d -o src/libffi-7.dll.p/types.c.obj -c ../src/types.c
In file included from ../src/types.c:31:
include/ffi.h:8:10: fatal error: ffi-x86.h: No such file or directory
8 | #include "ffi-x86.h"
| ^~~~~~~~~~~
compilation terminated.
…
and indeed ffi-x86.h
is nowhere to be found:
$ find build.win -name "ffi*.h"
build.win/fficonfig.h
build.win/include/ffitarget-x86_64.h
build.win/include/ffi-x86_64.h
build.win/include/ffi.h
build.win/include/ffitarget.h
To me it looks like meson does not tell libffi correctly about the target cpu
meson.cross-file:
[binaries]
c = '/usr/bin/i686-w64-mingw32-gcc'
cpp = '/usr/bin/i686-w64-mingw32-g++'
ar = '/usr/bin/i686-w64-mingw32-ar'
strip = '/usr/bin/i686-w64-mingw32-strip'
exe_wrapper = 'wine'
# needed for glib
windres = '/usr/bin/i686-w64-mingw32-windres'
# "host machine is the machine on which the compiled binary will run."
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'i686'
endian = 'little'