ci: Add MSVC builds
This adds MSVC builds built on Linux using wine. This requires some settings of tools and flags because the autotools support for MSVC is naturally somewhat limited. The advantage of this approach is that it is compatible with our existing CI scripts, so there's no need to write a Windows CI script (in PowerShell or similar). If we want to test building and running on Windows native (e.g., as supported by Cirrus CI) we could still do this in the future. Another advantage of this approach is that contributors can simply use the docker image if they need a MSVC installation in a non-Windows environment. This commit also improves the Dockerfile by grouping RUN commands according to Docker docs: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
This commit is contained in:
parent
2be6ba0fed
commit
9efc2e5221
36
.cirrus.yml
36
.cirrus.yml
@ -263,6 +263,42 @@ task:
|
|||||||
- ./ci/cirrus.sh
|
- ./ci/cirrus.sh
|
||||||
<< : *CAT_LOGS
|
<< : *CAT_LOGS
|
||||||
|
|
||||||
|
task:
|
||||||
|
<< : *LINUX_CONTAINER
|
||||||
|
env:
|
||||||
|
WRAPPER_CMD: wine
|
||||||
|
WERROR_CFLAGS: -WX
|
||||||
|
WITH_VALGRIND: no
|
||||||
|
ECDH: yes
|
||||||
|
RECOVERY: yes
|
||||||
|
EXPERIMENTAL: yes
|
||||||
|
SCHNORRSIG: yes
|
||||||
|
CTIMETEST: no
|
||||||
|
# Set non-essential options that affect the CLI messages here.
|
||||||
|
# (They depend on the user's taste, so we don't want to set them automatically in configure.ac.)
|
||||||
|
CFLAGS: -nologo -diagnostics:caret
|
||||||
|
LDFLAGS: -XCClinker -nologo -XCClinker -diagnostics:caret
|
||||||
|
# Use a MinGW-w64 host to tell ./configure we're building for Windows.
|
||||||
|
# This will detect some MinGW-w64 tools but then make will need only
|
||||||
|
# the MSVC tools CC, AR and NM as specified below.
|
||||||
|
matrix:
|
||||||
|
- name: "x86_64 (MSVC): Windows (Debian stable, Wine)"
|
||||||
|
env:
|
||||||
|
HOST: x86_64-w64-mingw32
|
||||||
|
CC: /opt/msvc/bin/x64/cl
|
||||||
|
AR: /opt/msvc/bin/x64/lib
|
||||||
|
NM: /opt/msvc/bin/x64/dumpbin -symbols -headers
|
||||||
|
- name: "i686 (MSVC): Windows (Debian stable, Wine)"
|
||||||
|
env:
|
||||||
|
HOST: i686-w64-mingw32
|
||||||
|
CC: /opt/msvc/bin/x86/cl
|
||||||
|
AR: /opt/msvc/bin/x86/lib
|
||||||
|
NM: /opt/msvc/bin/x86/dumpbin -symbols -headers
|
||||||
|
<< : *MERGE_BASE
|
||||||
|
test_script:
|
||||||
|
- ./ci/cirrus.sh
|
||||||
|
<< : *CAT_LOGS
|
||||||
|
|
||||||
# Sanitizers
|
# Sanitizers
|
||||||
task:
|
task:
|
||||||
<< : *LINUX_CONTAINER
|
<< : *LINUX_CONTAINER
|
||||||
|
@ -9,6 +9,7 @@ env >> test_env.log
|
|||||||
|
|
||||||
$CC -v || true
|
$CC -v || true
|
||||||
valgrind --version || true
|
valgrind --version || true
|
||||||
|
$WRAPPER_CMD --version || true
|
||||||
|
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
|
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
FROM debian:stable
|
FROM debian:stable
|
||||||
|
|
||||||
RUN dpkg --add-architecture i386
|
RUN dpkg --add-architecture i386 && \
|
||||||
RUN dpkg --add-architecture s390x
|
dpkg --add-architecture s390x && \
|
||||||
RUN dpkg --add-architecture armhf
|
dpkg --add-architecture armhf && \
|
||||||
RUN dpkg --add-architecture arm64
|
dpkg --add-architecture arm64 && \
|
||||||
RUN dpkg --add-architecture ppc64el
|
dpkg --add-architecture ppc64el
|
||||||
RUN apt-get update
|
|
||||||
|
|
||||||
# dkpg-dev: to make pkg-config work in cross-builds
|
# dkpg-dev: to make pkg-config work in cross-builds
|
||||||
# llvm: for llvm-symbolizer, which is used by clang's UBSan for symbolized stack traces
|
# llvm: for llvm-symbolizer, which is used by clang's UBSan for symbolized stack traces
|
||||||
RUN apt-get install --no-install-recommends --no-upgrade -y \
|
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
git ca-certificates \
|
git ca-certificates \
|
||||||
make automake libtool pkg-config dpkg-dev valgrind qemu-user \
|
make automake libtool pkg-config dpkg-dev valgrind qemu-user \
|
||||||
gcc clang llvm libc6-dbg \
|
gcc clang llvm libc6-dbg \
|
||||||
@ -19,8 +18,20 @@ RUN apt-get install --no-install-recommends --no-upgrade -y \
|
|||||||
gcc-arm-linux-gnueabihf libc6-dev-armhf-cross libc6-dbg:armhf \
|
gcc-arm-linux-gnueabihf libc6-dev-armhf-cross libc6-dbg:armhf \
|
||||||
gcc-aarch64-linux-gnu libc6-dev-arm64-cross libc6-dbg:arm64 \
|
gcc-aarch64-linux-gnu libc6-dev-arm64-cross libc6-dbg:arm64 \
|
||||||
gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross libc6-dbg:ppc64el \
|
gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross libc6-dbg:ppc64el \
|
||||||
wine gcc-mingw-w64-x86-64 \
|
gcc-mingw-w64-x86-64-win32 wine64 wine \
|
||||||
|
gcc-mingw-w64-i686-win32 wine32 \
|
||||||
sagemath
|
sagemath
|
||||||
|
|
||||||
# Run a dummy command in wine to make it set up configuration
|
WORKDIR /root
|
||||||
RUN wine64-stable xcopy || true
|
# The "wine" package provides a convience wrapper that we need
|
||||||
|
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
|
git ca-certificates wine64 wine python3-simplejson python3-six msitools winbind procps && \
|
||||||
|
git clone https://github.com/mstorsjo/msvc-wine && \
|
||||||
|
mkdir /opt/msvc && \
|
||||||
|
python3 msvc-wine/vsdownload.py --accept-license --dest /opt/msvc Microsoft.VisualStudio.Workload.VCTools && \
|
||||||
|
msvc-wine/install.sh /opt/msvc
|
||||||
|
|
||||||
|
# Initialize the wine environment. Wait until the wineserver process has
|
||||||
|
# exited before closing the session, to avoid corrupting the wine prefix.
|
||||||
|
RUN wine64 wineboot --init && \
|
||||||
|
while (ps -A | grep wineserver) > /dev/null; do sleep 1; done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user