Add Windows MSVC and MSYS2 builds

This adds 3 new jobs that build against msys2 x86_64, msvc 2017 x86
and msvc 2017 x86_64. For the msvc build, some subprojects (like libnice)
don't satisfy all their deps, and are getting automatically disabled.

This doesn't add jobs that run the test suite also. Will hopefully
get implemented later on.
This commit is contained in:
Xavier Claessens 2018-11-25 13:38:06 -05:00 committed by Xavier Claessens
parent fd89f33d88
commit 31cec0a245
4 changed files with 114 additions and 2 deletions

View file

@ -0,0 +1,9 @@
# escape=`
FROM 'mcr.microsoft.com/windows/servercore:1607'
# Make sure any failure in PowerShell scripts is fatal
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
COPY prepare.ps1 cleanup.ps1 C:\
RUN C:\prepare.ps1 ; C:\cleanup.ps1

View file

View file

@ -0,0 +1,46 @@
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
Write-Host "Installing VisualStudio"
Invoke-WebRequest -Uri 'https://aka.ms/vs/15/release/vs_buildtools.exe' -OutFile C:\vs_buildtools.exe
Start-Process C:\vs_buildtools.exe -ArgumentList '--quiet --wait --norestart --nocache --installPath C:\BuildTools --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended' -Wait
Remove-Item C:\vs_buildtools.exe -Force
Write-Host "Installing Python"
Invoke-WebRequest -Uri 'https://www.python.org/ftp/python/3.7.0/python-3.7.0.exe' -OutFile C:\python-3.7.0.exe
Start-Process C:\python-3.7.0.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait
Remove-Item C:\python-3.7.0.exe -Force
Write-Host "Installing Git"
Invoke-WebRequest -Uri 'https://github.com/git-for-windows/git/releases/download/v2.19.1.windows.1/MinGit-2.19.1-64-bit.zip' -OutFile C:\mingit.zip
Expand-Archive C:\mingit.zip -DestinationPath c:\mingit
Remove-Item C:\mingit.zip -Force
$env:PATH = [System.Environment]::GetEnvironmentVariable('PATH', 'Machine') + ';' + 'c:\mingit\cmd'
[Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine)
Write-Host "Installing 7zip"
Invoke-WebRequest -Uri 'https://www.7-zip.org/a/7z1805-x64.exe' -OutFile C:\7z-x64.exe
Start-Process C:\7z-x64.exe -ArgumentList '/S /D=C:\7zip\' -Wait
Remove-Item C:\7z-x64.exe -Force
Write-Host "Installing MSYS2"
Invoke-WebRequest -Uri 'https://ayera.dl.sourceforge.net/project/msys2/Base/x86_64/msys2-base-x86_64-20180531.tar.xz' -OutFile C:\msys2-x86_64.tar.xz
C:\7zip\7z e C:\msys2-x86_64.tar.xz -Wait
C:\7zip\7z x C:\msys2-x86_64.tar -o"C:\\"
Remove-Item C:\msys2-x86_64.tar.xz -Force
Remove-Item C:\msys2-x86_64.tar -Force
Remove-Item C:\7zip -Recurse -Force
# FIXME: This works but then docker fails to save the image. Needs to investigate why.
#$env:PATH += ";C:\msys64\usr\bin;C:\msys64\mingw64/bin;C:\msys64\mingw32/bin"
#C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys"
#C:\msys64\usr\bin\bash -c "pacman -Syuu --noconfirm"
#C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja"
pip install meson
git config --global user.email "gst-build@gstreamer.net"
git config --global user.name "Gstbuild Runner"
# Download gst-build and all its subprojects
git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git C:\gst-build
meson subprojects download --sourcedir C:\gst-build

View file

@ -20,7 +20,6 @@ variables:
GIT_STRATEGY: none GIT_STRATEGY: none
MESON_BUILDTYPE_ARGS: --default-library=both MESON_BUILDTYPE_ARGS: --default-library=both
DEFAULT_MESON_ARGS: > DEFAULT_MESON_ARGS: >
--werror
-Dpython=enabled -Dpython=enabled
-Dlibav=enabled -Dlibav=enabled
-Dugly=enabled -Dugly=enabled
@ -82,7 +81,7 @@ gst indent:
variables: variables:
CCACHE_BASEDIR: "${CI_PROJECT_DIR}" CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
CCACHE_DIR: "${CI_PROJECT_DIR}/ccache" CCACHE_DIR: "${CI_PROJECT_DIR}/ccache"
MESON_ARGS: "${DEFAULT_MESON_ARGS} ${MESON_BUILDTYPE_ARGS}" MESON_ARGS: "${DEFAULT_MESON_ARGS} ${MESON_BUILDTYPE_ARGS} --werror"
script: script:
- ccache -z - ccache -z
@ -346,6 +345,64 @@ valgrind ges:
- "${CERBERO_HOME}/logs" - "${CERBERO_HOME}/logs"
- "*.tar.bz2" - "*.tar.bz2"
.build windows:
image: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:v4'
stage: 'build'
dependencies:
- 'manifest'
tags:
- 'docker'
- 'windows'
- '1607'
variables:
MESON_ARGS: >
${DEFAULT_MESON_ARGS}
-Dpython=disabled
-Dlibav=disabled
-Dvaapi=disabled
-Ddevtools=disabled
script:
# For some reason, options are separated by newline instead of space, so we
# have to replace them first.
- $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
# Gitlab executes PowerShell in docker, but VsDevCmd.bat is a batch script.
# Environment variables substitutions is done by PowerShell before calling
# cmd.exe, that's why we use $env:FOO instead of %FOO%
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
cd C:\gst-build &&
python git-update --no-interaction --manifest=$env:CI_PROJECT_DIR/manifest.xml &&
meson build $env:MESON_ARGS &&
ninja -C build"
after_script:
# FIXME: cleanup build dir for artifacts.
build vs2017 amd64:
extends: '.build windows'
variables:
ARCH: 'amd64'
build vs2017 x86:
extends: '.build windows'
variables:
ARCH: 'x86'
build msys2 :
extends: '.build windows'
script:
- $env:PATH += ";C:\msys64\usr\bin;C:\msys64\mingw64/bin;C:\msys64\mingw32/bin"
# FIXME: This should be done in Dockerfile, but doesn't work there. Needs to investigate why.
- C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys || true"
- C:\msys64\usr\bin\bash -c "pacman -Syu --noconfirm"
- C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja"
# For some reason, options are separated by newline instead of space, so we
# have to replace them first.
- $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
- C:\msys64\usr\bin\bash -c "cd /c/gst-build &&
python git-update --no-interaction --manifest=$env:CI_PROJECT_DIR/manifest.xml &&
meson build $env:MESON_ARGS &&
ninja -C build"
# Template for Cerbero GStreamer Deps # Template for Cerbero GStreamer Deps
# #
# This template is used by cerbero/ project to pre-built the GStreamer # This template is used by cerbero/ project to pre-built the GStreamer