Windows: Use godot-mono-builds scripts, remove Wine dependency

Streamlines the build process as done for Linux and macOS in previous commits,
and as was done for mobile and web platforms from the start. We're now fully
in sync with `godot-mono-builds`.

This also removes the need to hack around cross-compilation issues using Wine,
which also seemed no longer to work on Fedora 34 anyway.
This commit is contained in:
Rémi Verschelde
2021-07-12 14:49:24 +02:00
parent c55dffec9a
commit 428340a423
3 changed files with 9 additions and 101 deletions

View File

@@ -5,29 +5,16 @@ ARG mono_version
RUN if [ -z "${mono_version}" ]; then echo -e "\n\nargument mono-version is mandatory!\n\n"; exit 1; fi && \
dnf -y install --setopt=install_weak_deps=False \
mingw32-gcc mingw32-gcc-c++ mingw32-winpthreads-static mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static wine && \
mingw32-gcc mingw32-gcc-c++ mingw32-winpthreads-static mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static && \
cp -a /root/files/${mono_version} /root && \
cd /root/${mono_version} && \
patch -p1 < /root/files/patches/wine-mono.patch && \
export WINE_BITS=64 && \
bash /root/files/mono-build-win32.sh --prefix=/root/dependencies/mono-64 --host=x86_64-w64-mingw32 \
--with-profile4_x=yes --with-runtime-preset=net_4_x && \
git clean -fdx && \
cp /root/dependencies/mono-64/bin/libMonoPosixHelper.dll /root/dependencies/mono-64/bin/MonoPosixHelper.dll && \
rm -f /root/dependencies/mono-64/bin/mono /root/dependencies/mono-64/bin/mono-sgen && \
ln -s /usr/bin/mono /root/dependencies/mono-64/bin/mono && \
ln -s /usr/bin/mono-sgen /root/dependencies/mono-64/bin/mono-sgen && \
cp -rvp /etc/mono /root/dependencies/mono-64/etc && \
export WINE_BITS=32 && \
bash /root/files/mono-build-win32.sh --prefix=/root/dependencies/mono-32 --host=i686-w64-mingw32 \
--with-profile4_x=yes --with-runtime-preset=net_4_x && \
export MONO_SOURCE_ROOT=/root/${mono_version} && \
cd /root/${mono_version}/godot-mono-builds && \
python3 windows.py configure -j --target=x86_64 --target=x86 --mxe-prefix=/usr && \
python3 windows.py make -j --target=x86_64 --target=x86 --mxe-prefix=/usr && \
python3 bcl.py make -j --product=desktop && \
python3 bcl.py make -j --product=desktop-win32 && \
python3 windows.py copy-bcl --target=x86_64 --target=x86 && \
cd /root && \
rm -rf /root/${mono_version} && \
cp /root/dependencies/mono-32/bin/libMonoPosixHelper.dll /root/dependencies/mono-32/bin/MonoPosixHelper.dll && \
rm -f /root/dependencies/mono-32/bin/mono /root/dependencies/mono-32/bin/mono-sgen && \
ln -s /usr/bin/mono /root/dependencies/mono-32/bin/mono && \
ln -s /usr/bin/mono-sgen /root/dependencies/mono-32/bin/mono-sgen && \
cp -rvp /etc/mono /root/dependencies/mono-32/etc && \
dnf -y remove wine
rm -rf /root/${mono_version}
CMD /bin/bash

View File

@@ -1,29 +0,0 @@
#!/bin/bash
if [ "${WINE_BITS}" == "64" ]; then
export WINEPATH="/usr/x86_64-w64-mingw32/sys-root/mingw/bin/"
else
export WINEPATH="/usr/i686-w64-mingw32/sys-root/mingw/bin/"
fi
echo -e '#!/bin/bash\n'"wine${WINE_BITS}"' $(dirname $0)/mono-sgen.exe "$@"' > mono/mini/mono
chmod +x mono/mini/mono
mkdir -p .bin
echo -e '#!/bin/bash\necho $@ | awk "{print \$NF}"' > .bin/cygpath
chmod +x .bin/cygpath
export PATH="$(pwd)/.bin/:$PATH"
./autogen.sh $@ --disable-boehm --with-mcs-docs=no HOST_PROFILE=win32
echo '#define HAVE_STRUCT_SOCKADDR_IN6 1' >> config.h
pushd mcs/jay
make -j CC=gcc
popd
for dir in external/roslyn-binaries/Microsoft.Net.Compilers/[0-9]*; do
MONO_PATH="$(winepath -w $(pwd)/${dir});${MONO_PATH}"
done
export MONO_PATH
make -j
make install

View File

@@ -1,50 +0,0 @@
commit c2e1ed54e1a3f613bdda3f085fee5b21c9fa174d
Author: Hein-Pieter van Braam-Stewart <hp@tmm.cx>
Date: Sat Dec 14 23:16:19 2019 +0100
Workaround
diff --git a/mcs/build/platforms/win32.make b/mcs/build/platforms/win32.make
index dd969b51..bb15aba2 100644
--- a/mcs/build/platforms/win32.make
+++ b/mcs/build/platforms/win32.make
@@ -9,10 +9,11 @@ PLATFORM_TEST_HARNESS_EXCLUDES = NotOnWindows
EXTERNAL_RUNTIME = mono
-PLATFORM_CHANGE_SEPARATOR_CMD=tr '/' '\\\\'
+#PLATFORM_CHANGE_SEPARATOR_CMD=tr '\\' '/'
+PLATFORM_CHANGE_SEPARATOR_CMD=cat
PLATFORM_PATH_SEPARATOR = ;
-override CURDIR:=$(shell cygpath -m $(CURDIR))
+#override CURDIR:=$(shell cygpath -m $(CURDIR))
hidden_prefix =
hidden_suffix = .tmp
diff --git a/mcs/build/profiles/build.make b/mcs/build/profiles/build.make
index b1c9a410..004f9f33 100644
--- a/mcs/build/profiles/build.make
+++ b/mcs/build/profiles/build.make
@@ -32,7 +32,7 @@ endif
#
ILASM = $(PROFILE_RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/tmp/ilasm.exe
STRING_REPLACER = $(PROFILE_RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/tmp/cil-stringreplacer.exe
-GENSOURCES =$(PROFILE_RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/tmp/gensources.exe
+GENSOURCES = mono $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/tmp/gensources.exe
MCS = $(BOOTSTRAP_MCS)
diff --git a/mcs/build/rules.make b/mcs/build/rules.make
index e57a636e..16f6cdc7 100644
--- a/mcs/build/rules.make
+++ b/mcs/build/rules.make
@@ -60,7 +60,7 @@ INTERNAL_CSC = CSC_SDK_PATH_DISABLED= $(RUNTIME) $(RUNTIME_FLAGS) $(CSC_RUNTIME_
RESGEN = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/resgen.exe
STRING_REPLACER = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/cil-stringreplacer.exe
ILASM = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/ilasm.exe
-GENSOURCES = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/gensources.exe
+GENSOURCES = MONO_PATH="$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" mono $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/gensources.exe
depsdir = $(topdir)/build/deps