aboutsummaryrefslogtreecommitdiff
path: root/.gitlab-ci.d/windows.yml
blob: 94834269ec7f6efa7ff92671fc0b44bf581bab31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
msys2-64bit:
  extends: .base_job_template
  tags:
  - shared-windows
  - windows
  - windows-1809
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - msys64/var/cache
      - ccache
    when: always
  needs: []
  stage: build
  timeout: 100m
  variables:
    # Select the "64 bit, gcc and MSVCRT" MSYS2 environment
    MSYSTEM: MINGW64
    # This feature doesn't (currently) work with PowerShell, it stops
    # the echo'ing of commands being run and doesn't show any timing
    FF_SCRIPT_SECTIONS: 0
    # do not remove "--without-default-devices"!
    # commit 9f8e6cad65a6 ("gitlab-ci: Speed up the msys2-64bit job by using --without-default-devices"
    # changed to compile QEMU with the --without-default-devices switch
    # for this job, because otherwise the build could not complete within
    # the project timeout.
    CONFIGURE_ARGS:  --target-list=x86_64-softmmu --without-default-devices -Ddebug=false -Doptimization=0
    # qTests don't run successfully with "--without-default-devices",
    # so let's exclude the qtests from CI for now.
    TEST_ARGS: --no-suite qtest
    # The Windows git is a bit older so override the default
    GIT_FETCH_EXTRA_FLAGS: --no-tags --prune --quiet
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
    expire_in: 7 days
    paths:
      - build/meson-logs/testlog.txt
    reports:
      junit: "build/meson-logs/testlog.junit.xml"
  before_script:
  - Write-Output "Acquiring msys2.exe installer at $(Get-Date -Format u)"
  - If ( !(Test-Path -Path msys64\var\cache ) ) {
      mkdir msys64\var\cache
    }
  - Invoke-WebRequest
    "https://repo.msys2.org/distrib/msys2-x86_64-latest.sfx.exe.sig"
    -outfile "msys2.exe.sig"
  - if ( Test-Path -Path msys64\var\cache\msys2.exe.sig ) {
      Write-Output "Cached installer sig" ;
      if ( ((Get-FileHash msys2.exe.sig).Hash -ne (Get-FileHash msys64\var\cache\msys2.exe.sig).Hash) ) {
        Write-Output "Mis-matched installer sig, new installer download required" ;
        Remove-Item -Path msys64\var\cache\msys2.exe.sig ;
        if ( Test-Path -Path msys64\var\cache\msys2.exe ) {
          Remove-Item -Path msys64\var\cache\msys2.exe
        }
      } else {
        Write-Output "Matched installer sig, cached installer still valid"
      }
    } else {
      Write-Output "No cached installer sig, new installer download required" ;
      if ( Test-Path -Path msys64\var\cache\msys2.exe ) {
        Remove-Item -Path msys64\var\cache\msys2.exe
      }
    }
  - if ( !(Test-Path -Path msys64\var\cache\msys2.exe ) ) {
      Write-Output "Fetching latest installer" ;
      Invoke-WebRequest
      "https://repo.msys2.org/distrib/msys2-x86_64-latest.sfx.exe"
      -outfile "msys64\var\cache\msys2.exe" ;
      Copy-Item -Path msys2.exe.sig -Destination msys64\var\cache\msys2.exe.sig
    } else {
      Write-Output "Using cached installer"
    }
  - Write-Output "Invoking msys2.exe installer at $(Get-Date -Format u)"
  - msys64\var\cache\msys2.exe -y
  - ((Get-Content -path .\msys64\etc\\post-install\\07-pacman-key.post -Raw)
      -replace '--refresh-keys', '--version') |
     Set-Content -Path ${CI_PROJECT_DIR}\msys64\etc\\post-install\\07-pacman-key.post
  - .\msys64\usr\bin\bash -lc "sed -i 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf"
  - .\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'  # Core update
  - .\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'  # Normal update
  - taskkill /F /FI "MODULES eq msys-2.0.dll"
  script:
  - Write-Output "Installing mingw packages at $(Get-Date -Format u)"
  - .\msys64\usr\bin\bash -lc "pacman -Sy --noconfirm --needed
      bison diffutils flex
      git grep make sed
      mingw-w64-x86_64-binutils
      mingw-w64-x86_64-capstone
      mingw-w64-x86_64-ccache
      mingw-w64-x86_64-curl
      mingw-w64-x86_64-cyrus-sasl
      mingw-w64-x86_64-dtc
      mingw-w64-x86_64-gcc
      mingw-w64-x86_64-glib2
      mingw-w64-x86_64-gnutls
      mingw-w64-x86_64-gtk3
      mingw-w64-x86_64-libgcrypt
      mingw-w64-x86_64-libjpeg-turbo
      mingw-w64-x86_64-libnfs
      mingw-w64-x86_64-libpng
      mingw-w64-x86_64-libssh
      mingw-w64-x86_64-libtasn1
      mingw-w64-x86_64-libusb
      mingw-w64-x86_64-lzo2
      mingw-w64-x86_64-nettle
      mingw-w64-x86_64-ninja
      mingw-w64-x86_64-pixman
      mingw-w64-x86_64-pkgconf
      mingw-w64-x86_64-python
      mingw-w64-x86_64-SDL2
      mingw-w64-x86_64-SDL2_image
      mingw-w64-x86_64-snappy
      mingw-w64-x86_64-spice
      mingw-w64-x86_64-usbredir
      mingw-w64-x86_64-zstd"
  - Write-Output "Running build at $(Get-Date -Format u)"
  - $env:CHERE_INVOKING = 'yes'  # Preserve the current working directory
  - $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
  - $env:CCACHE_BASEDIR = "$env:CI_PROJECT_DIR"
  - $env:CCACHE_DIR = "$env:CCACHE_BASEDIR/ccache"
  - $env:CCACHE_MAXSIZE = "500M"
  - $env:CCACHE_DEPEND = 1 # cache misses are too expensive with preprocessor mode
  - $env:CC = "ccache gcc"
  - mkdir build
  - cd build
  - ..\msys64\usr\bin\bash -lc "ccache --zero-stats"
  - ..\msys64\usr\bin\bash -lc "../configure --enable-fdt=system $CONFIGURE_ARGS"
  - ..\msys64\usr\bin\bash -lc "make"
  - ..\msys64\usr\bin\bash -lc "make check MTESTARGS='$TEST_ARGS' || { cat meson-logs/testlog.txt; exit 1; } ;"
  - ..\msys64\usr\bin\bash -lc "ccache --show-stats"
  - Write-Output "Finished build at $(Get-Date -Format u)"