Make cross-compilation scripts work from MSYS2

This is weird and runs very slowly.

Meson can also find libraries outside the subroot,
in particular the fast float plugin.
This commit is contained in:
Přemysl Eric Janouch 2023-06-22 01:48:02 +02:00
parent a4772ce319
commit 86622e0c31
Signed by: p
GPG Key ID: A0420B94F92B9493
4 changed files with 22 additions and 5 deletions

View File

@ -64,7 +64,7 @@ from a context menu.
Windows Windows
~~~~~~~ ~~~~~~~
'fiv' can be cross-compiled for Windows, provided that you install a bunch of 'fiv' can be cross-compiled for Windows, provided that you install a bunch of
dependencies listed at the beginning of 'msys2-cross-configure.sh', dependencies listed at the beginning of 'msys2-configure.sh',
plus rsvg-convert from librsvg2, and icotool from icoutils. plus rsvg-convert from librsvg2, and icotool from icoutils.
Beware that the build will take up about a gigabyte of disk space. Beware that the build will take up about a gigabyte of disk space.

View File

@ -326,10 +326,11 @@ if not win32
meson.add_install_script(updater, skip_if_destdir : dynamic_desktops) meson.add_install_script(updater, skip_if_destdir : dynamic_desktops)
endif endif
elif meson.is_cross_build() elif meson.is_cross_build()
# Note that even compiling /from within MSYS2/ can still be a cross-build.
msys2_root = meson.get_external_property('msys2_root') msys2_root = meson.get_external_property('msys2_root')
meson.add_install_script('msys2-cross-install.sh', msys2_root) meson.add_install_script('msys2-install.sh', msys2_root)
# This is the minimum to run targets from msys2-cross-configure.sh builds. # This is the minimum to run targets from msys2-configure.sh builds.
meson.add_devenv({ meson.add_devenv({
'WINEPATH' : msys2_root / 'bin', 'WINEPATH' : msys2_root / 'bin',
'XDG_DATA_DIRS' : msys2_root / 'share', 'XDG_DATA_DIRS' : msys2_root / 'share',

View File

@ -1,9 +1,16 @@
#!/bin/sh -e #!/bin/sh -e
# msys2-cross-configure.sh: set up an MSYS2-based cross-compiled Meson build. # msys2-configure.sh: set up an MSYS2-based Meson build targeting x86-64.
# Dependencies: AWK, sed, sha256sum, cURL, bsdtar, # Dependencies: AWK, sed, sha256sum, cURL, bsdtar,
# wine64, Meson, mingw-w64-binutils, mingw-w64-gcc, pkg-config # wine64, Meson, mingw-w64-binutils, mingw-w64-gcc, pkg-config
repository=https://repo.msys2.org/mingw/mingw64/ repository=https://repo.msys2.org/mingw/mingw64/
# Support running directly from within MSYS2 on Windows.
if [ -n "$MSYSTEM" ]
then
wine64() { "$@"; }
awk() { command awk -v RS='\r?\n' "$@"; }
fi
status() { status() {
echo "$(tput bold)-- $*$(tput sgr0)" echo "$(tput bold)-- $*$(tput sgr0)"
} }
@ -74,6 +81,8 @@ configure() {
setup() { setup() {
status Setting up Meson status Setting up Meson
[ -n "$MSYSTEM" ] && wrap=false || wrap=true
cat >"$toolchain" <<-EOF cat >"$toolchain" <<-EOF
[binaries] [binaries]
c = 'x86_64-w64-mingw32-gcc' c = 'x86_64-w64-mingw32-gcc'
@ -88,7 +97,7 @@ setup() {
sys_root = '$builddir' sys_root = '$builddir'
msys2_root = '$msys2_root' msys2_root = '$msys2_root'
pkg_config_libdir = '$msys2_root/share/pkgconfig:$msys2_root/lib/pkgconfig' pkg_config_libdir = '$msys2_root/share/pkgconfig:$msys2_root/lib/pkgconfig'
needs_exe_wrapper = true needs_exe_wrapper = $wrap
[host_machine] [host_machine]
system = 'windows' system = 'windows'

View File

@ -3,6 +3,13 @@ export LC_ALL=C
cd "$MESON_INSTALL_DESTDIR_PREFIX" cd "$MESON_INSTALL_DESTDIR_PREFIX"
msys2_root=$1 msys2_root=$1
# Support running directly from within MSYS2 on Windows.
if [ -n "$MSYSTEM" ]
then
wine64() { "$@"; }
awk() { command awk -v RS='\r?\n' "$@"; }
fi
# Copy binaries we directly or indirectly depend on. # Copy binaries we directly or indirectly depend on.
cp -p "$msys2_root"/bin/*.dll . cp -p "$msys2_root"/bin/*.dll .
cp -p "$msys2_root"/bin/wperl.exe . cp -p "$msys2_root"/bin/wperl.exe .