ci: Add a Windows native cross-arm64 job with a new image

Needed an update to the windows Dockerfile to:

1. Install the 'UniversalBuildTools' workload for Cerbero
2. Install ARM and ARM64 workloads for cross-uwp-universal in Cerbero
3. Install VS 2019 since we need that for ARM64 NEON support in Opus

We can't test UWP in gstreamer.git because glib needs custom patches
for that. It will be tested in Cerbero.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1570>
This commit is contained in:
Nirbheek Chauhan 2022-01-27 11:25:53 +05:30
parent 72bd408c39
commit 673b742751
5 changed files with 99 additions and 10 deletions

View file

@ -27,7 +27,7 @@ variables:
### ###
FEDORA_TAG: '2021-12-03.1' FEDORA_TAG: '2021-12-03.1'
INDENT_TAG: '2021-10-04.0' INDENT_TAG: '2021-10-04.0'
WINDOWS_TAG: "2021-10-12.0" WINDOWS_TAG: "2022-01-26.3"
GST_UPSTREAM_REPO: 'gstreamer/gstreamer' GST_UPSTREAM_REPO: 'gstreamer/gstreamer'
FDO_UPSTREAM_REPO: 'gstreamer/gstreamer' FDO_UPSTREAM_REPO: 'gstreamer/gstreamer'
@ -388,6 +388,9 @@ build clang fedora x86_64:
-Dvaapi=disabled -Dvaapi=disabled
-Dgst-plugins-base:pango=enabled -Dgst-plugins-base:pango=enabled
-Dgst-plugins-good:cairo=enabled -Dgst-plugins-good:cairo=enabled
# Needs to not be empty otherwise the newline -> space replace command in
# `script:` will fail
MESON_CROSS_ARGS: ' '
rules: rules:
# If this matches, it means the pipeline is running against either the main # If this matches, it means the pipeline is running against either the main
# or a stable branch, so make it manual # or a stable branch, so make it manual
@ -400,8 +403,9 @@ build clang fedora x86_64:
# For some reason, options are separated by newline instead of space, so we # For some reason, options are separated by newline instead of space, so we
# have to replace them first. # have to replace them first.
- $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ") - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
- $env:MESON_CROSS_ARGS = $env:MESON_CROSS_ARGS.replace("`n"," ")
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
meson build $env:MESON_ARGS && meson build $env:MESON_ARGS $env:MESON_CROSS_ARGS &&
ninja -C build" ninja -C build"
# XXX: Re-enable when uploading stops timing out # XXX: Re-enable when uploading stops timing out
#artifacts: #artifacts:
@ -409,17 +413,31 @@ build clang fedora x86_64:
# when: "always" # when: "always"
# paths: # paths:
# - 'build/meson-logs/' # - 'build/meson-logs/'
# - 'vslogs.zip'
build vs2017 amd64: build vs2019 amd64:
extends: '.build windows' extends: '.build windows'
variables: variables:
ARCH: 'amd64' ARCH: 'amd64'
build vs2017 x86: build vs2019 x86:
extends: '.build windows' extends: '.build windows'
variables: variables:
ARCH: 'x86' ARCH: 'x86'
build vs2019 arm64 uwp:
extends: '.build windows'
variables:
ARCH: 'arm64'
# pango pulls in cairo which pulls in pixman which doesn't build because of
# https://github.com/mesonbuild/meson/issues/9889
MESON_CROSS_ARGS: >
-Dgst-plugins-base:pango=disabled
-Dgst-plugins-good:cairo=disabled
-Dgst-devtools:cairo=disabled
--cross-file ci/meson/vs2019-arm64-cross-file.txt
--native-file ci/meson/vs2019-x64-native-file.txt
build msys2 : build msys2 :
extends: '.build windows' extends: '.build windows'
timeout: '60min' timeout: '60min'

View file

@ -25,17 +25,24 @@ RUN c:\msys64\usr\bin\bash -lc 'pacman -S --noconfirm mingw-w64-ucrt-x86_64-tool
COPY Install.cmd C:\TEMP\ COPY Install.cmd C:\TEMP\
ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe
# Download channel for fixed install. # Download channel for fixed install.
ARG CHANNEL_URL=https://aka.ms/vs/15/release/channel ARG CHANNEL_URL=https://aka.ms/vs/16/release/channel
ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman
# Download and install Build Tools for Visual Studio 2017 for native desktop workload. # Download and install Build Tools for Visual Studio 2017 for native desktop workload.
ADD https://aka.ms/vs/15/release/vs_buildtools.exe C:\TEMP\vs_buildtools.exe ADD https://aka.ms/vs/16/release/vs_buildtools.exe C:\TEMP\vs_buildtools.exe
RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ` RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache `
--channelUri C:\TEMP\VisualStudio.chman ` --channelUri C:\TEMP\VisualStudio.chman `
--installChannelUri C:\TEMP\VisualStudio.chman ` --installChannelUri C:\TEMP\VisualStudio.chman `
--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended` --add Microsoft.VisualStudio.Workload.VCTools `
--add Microsoft.VisualStudio.Workload.UniversalBuildTools `
--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 `
--add Microsoft.VisualStudio.Component.VC.Tools.ARM `
--add Microsoft.VisualStudio.Component.UWP.VC.ARM64 `
--includeRecommended `
--installPath C:\BuildTools --installPath C:\BuildTools
RUN Get-ChildItem C:\BuildTools RUN Get-ChildItem C:\BuildTools
RUN Get-ChildItem C:\BuildTools\VC\Tools\MSVC
RUN Get-ChildItem 'C:\Program Files (x86)\Windows Kits\10\lib'
RUN pip3 install meson RUN pip3 install meson
@ -50,4 +57,4 @@ COPY prepare_gst_env.ps1 C:\
RUN C:\prepare_gst_env.ps1 RUN C:\prepare_gst_env.ps1
COPY prepare_cerbero_env.sh C:\ COPY prepare_cerbero_env.sh C:\
RUN C:\MinGW\msys\1.0\bin\bash.exe --login -c "C:/prepare_cerbero_env.sh" RUN C:\MinGW\msys\1.0\bin\bash.exe --login -c "C:/prepare_cerbero_env.sh"

View file

@ -25,8 +25,11 @@ if "%ERRORLEVEL%"=="3010" (
) else ( ) else (
if not "%ERRORLEVEL%"=="0" ( if not "%ERRORLEVEL%"=="0" (
set ERR=%ERRORLEVEL% set ERR=%ERRORLEVEL%
call C:\TEMP\collect.exe -zip:C:\vslogs.zip if "%CI_PROJECT_PATH%"=="" (
call C:\TEMP\collect.exe -zip:C:\vslogs.zip
) else (
call C:\TEMP\collect.exe -zip:%CI_PROJECT_PATH%\vslogs.zip
)
exit /b !ERR! exit /b !ERR!
) )
) )

View file

@ -0,0 +1,23 @@
[constants]
vs_path = 'C:\BuildTools'
msvc_version = '14.29.30133'
msvc_version_dir = vs_path / 'VC\Tools\MSVC' / msvc_version
msvc_arm64_bindir = msvc_version_dir / 'bin\Hostx64\arm64'
msvc_arm64_libdir = msvc_version_dir / 'lib\arm64'
[host_machine]
system = 'windows'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
[properties]
needs_exe_wrapper = true
[binaries]
lib = msvc_arm64_bindir / 'lib.exe'
c = msvc_arm64_bindir / 'cl.exe'
c_ld = msvc_arm64_bindir / 'link.exe'
cpp = msvc_arm64_bindir / 'cl.exe'
cpp_ld = msvc_arm64_bindir / 'link.exe'
pkgconfig = 'false'

View file

@ -0,0 +1,38 @@
[constants]
vs_path = 'C:\BuildTools'
msvc_version = '14.29.30133'
msvc_version_dir = vs_path / 'VC\Tools\MSVC' / msvc_version
msvc_x64_bindir = msvc_version_dir / 'bin\Hostx64\x64'
msvc_x64_libdir = msvc_version_dir / 'lib\x64'
wk_path = 'C:\Program Files (x86)\Windows Kits'
wk_version = '10.0.19041.0'
wk_x64_libdir = wk_path / '10\lib' / wk_version / 'um\x64'
wk_x64_crt_libdir = wk_path / '10\lib' / wk_version / 'ucrt\x64'
# Forcibly link to x64 libs when using native linker, otherwise the LIB
# variable in the env will cause link.exe to pick up libs from the cross
# msvc libdir. A better fix might be to use a wrapper script that calls
# link.exe inside the correct VS environment for x64.
msvc_x64_libs = [msvc_x64_libdir / 'msvcrt.lib', msvc_x64_libdir / 'msvcrtd.lib', msvc_x64_libdir / 'vcruntime.lib', msvc_x64_libdir / 'oldnames.lib', wk_x64_crt_libdir / 'ucrt.lib']
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
[properties]
needs_exe_wrapper = true
[built-in options]
# Ensure that x64 libs are used for linking even when we're inside, say, an
# arm64 VS environment
c_link_args = ['/LIBPATH:' + wk_x64_libdir] + msvc_x64_libs
cpp_link_args = ['/LIBPATH:' + wk_x64_libdir] + msvc_x64_libs
[binaries]
lib = msvc_x64_bindir / 'lib.exe'
c = msvc_x64_bindir / 'cl.exe'
c_ld = msvc_x64_bindir / 'link.exe'
cpp = msvc_x64_bindir / 'cl.exe'
cpp_ld = msvc_x64_bindir / 'link.exe'
pkgconfig = 'false'