Cross-compiling for Windows

You can get help here if Freeciv doesn't start on your computer, or if you keep getting fatal errors while playing etc.
Post Reply
User avatar
Alien Valkyrie
Elite
Posts: 513
Joined: Sun Feb 10, 2013 10:21 pm
Location: Stuttgart, Germany

Cross-compiling for Windows

Post by Alien Valkyrie »

In an effort to make use of WSL, I've been looking into cross-compilation for Windows from Ubuntu. To that end, I'm using the 'mingw-w64' apt package. I've gotten configure to run through with --host=x86_64-w64-mingw32 (and a corresponding --prefix, which doesn't seem to make a difference), but run into a problem when making the project: It's including the wrong headers. In this case, the issue occurs in utility/astring.c after a chain of includes:

Code: Select all

  CC       astring.lo
In file included from /usr/share/mingw-w64/include/time.h:293:0,
                 from shared.h:24,
                 from fcintl.h:26,
                 from astring.c:68:
/usr/include/x86_64-linux-gnu/sys/timeb.h:21:10: fatal error: features.h: No such file or directory
 #include <features.h>
          ^~~~~~~~~~~~
compilation terminated.
Makefile:740: recipe for target 'astring.lo' failed
The included time.h appears to be the correct one. However, for some reason, it can't find the right sys/timeb.h, but instead uses the linux one, which then needs other linux headers (that don't exist in the mingw-w64 environment). One thing to note here is that the regular include directory is /usr/x86_64-w64-mingw32/include, not /usr/share/mingw-w64/include. This may be (from my unprofessional assessment) why it's then looking into the wrong directories.

When I tried replicating the issue by making my own tiny script including time.h, the correct headers are being included (at least according to the preprocessor output). I've previously experienced a similar error in the luasql files with string.h (which I've circumvented by disabling fcdb); that one also went away when using a dedicated script and running it through x86_64-w64-mingw32-gcc.

For reference, this is my configure setup:

Code: Select all

./configure --host=x86_64-w64-mingw32 --prefix=/usr/x86_64-w64-mingw32 --disable-nls --enable-client=gtk3.22 --enable-fcmp=no --enable-fcdb=no
When adding --[old]includedir=/usr/x86_64-w64-mingw32/include, the issue persists.

Anyone got any ideas on how to fix this issue?
~ AVL
cazfi
Elite
Posts: 3077
Joined: Tue Jan 29, 2013 6:54 pm

Re: Cross-compiling for Windows

Post by cazfi »

In S3_0 or master, see windows/installer_cross/winbuild.sh. I should have scripts for older branches still available if you need them.
cazfi
Elite
Posts: 3077
Joined: Tue Jan 29, 2013 6:54 pm

Re: Cross-compiling for Windows

Post by cazfi »

My guess would be that the wrong include path gets added by pkg-config finding build system version of some package. (I don't know where you are expecting to get windows versions of all the freeciv dependencies)
Post Reply