summaryrefslogtreecommitdiffstats
path: root/appveyor.yml
blob: d475816ab7c0a4e2008bdbf5e6ff9d826d393e92 (plain) (blame)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# shallow clone
clone_depth: 10

cache:
  - C:\ProgramData\chocolatey\bin -> appveyor.yml
  - C:\ProgramData\chocolatey\lib -> appveyor.yml

os: Visual Studio 2017

environment:
  # Tell msys2 to add mingw64 to the path
  MSYSTEM: MINGW64
  # Tell msys2 to inherit the current directory when starting the shell
  CHERE_INVOKING: 1
  matrix:
    - BUILD_TYPE: msvc
    - BUILD_TYPE: mingw

platform:
  - x64

configuration:
  - Release

install:
  - git submodule update --init --recursive
  - ps: |
        if ($env:BUILD_TYPE -eq 'mingw') {
          $dependencies = "mingw64/mingw-w64-x86_64-cmake",
                          "mingw64/mingw-w64-x86_64-qt5",
                          "mingw64/mingw-w64-x86_64-SDL2"
          # redirect err to null to prevent warnings from becoming errors
          # workaround to prevent pacman from failing due to cyclical dependencies
          C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw64/mingw-w64-x86_64-freetype mingw64/mingw-w64-x86_64-fontconfig" 2> $null
          C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S $dependencies" 2> $null
        }

before_build:
  - mkdir %BUILD_TYPE%_build
  - cd %BUILD_TYPE%_build
  - ps: |
        if ($env:BUILD_TYPE -eq 'msvc') {
          # redirect stderr and change the exit code to prevent powershell from cancelling the build if cmake prints a warning
          cmd /C 'cmake -G "Visual Studio 15 2017 Win64" -DYUZU_USE_BUNDLED_QT=1 -DYUZU_USE_BUNDLED_SDL2=1 -DYUZU_USE_BUNDLED_UNICORN=1 -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON .. 2>&1 && exit 0'
        } else {
          C:\msys64\usr\bin\bash.exe -lc "cmake -G 'MSYS Makefiles' -DYUZU_BUILD_UNICORN=1 -DCMAKE_BUILD_TYPE=Release -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON .. 2>&1"
        }
  - cd ..

build_script:
  - ps: |
        if ($env:BUILD_TYPE -eq 'msvc') {
          # https://www.appveyor.com/docs/build-phase
          msbuild msvc_build/yuzu.sln /maxcpucount /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
        } else {
          C:\msys64\usr\bin\bash.exe -lc 'mingw32-make -C mingw_build/ 2>&1'
        }

after_build:
  - ps: |
        $GITDATE = $(git show -s --date=short --format='%ad') -replace "-",""
        $GITREV = $(git show -s --format='%h')

        # Find out which kind of release we are producing by tag name
        if ($env:APPVEYOR_REPO_TAG_NAME) {
          $RELEASE_DIST, $RELEASE_VERSION = $env:APPVEYOR_REPO_TAG_NAME.split('-')
        } else {
          # There is no repo tag - make assumptions
          $RELEASE_DIST = "head"
        }

        if ($env:BUILD_TYPE -eq 'msvc') {
          # Where are these spaces coming from? Regardless, let's remove them
          $MSVC_BUILD_ZIP = "yuzu-windows-msvc-$GITDATE-$GITREV.zip" -replace " ", ""
          $MSVC_BUILD_PDB = "yuzu-windows-msvc-$GITDATE-$GITREV-debugsymbols.zip" -replace " ", ""
          $MSVC_SEVENZIP = "yuzu-windows-msvc-$GITDATE-$GITREV.7z" -replace " ", ""

          # set the build names as env vars so the artifacts can upload them
          $env:BUILD_ZIP = $MSVC_BUILD_ZIP
          $env:BUILD_SYMBOLS = $MSVC_BUILD_PDB
          $env:BUILD_UPDATE = $MSVC_SEVENZIP

          $BUILD_DIR = ".\msvc_build\bin\Release"

          # Make a debug symbol upload
          mkdir pdb
          Get-ChildItem "$BUILD_DIR\" -Recurse -Filter "*.pdb" | Copy-Item -destination .\pdb
          7z a -tzip $MSVC_BUILD_PDB .\pdb\*.pdb
          rm "$BUILD_DIR\*.pdb"

          mkdir $RELEASE_DIST
          # get rid of extra exes by copying everything over, then deleting all the exes, then copying just the exes we want
          Copy-Item "$BUILD_DIR\*" -Destination $RELEASE_DIST -Recurse
          rm "$RELEASE_DIST\*.exe"
          Get-ChildItem "$BUILD_DIR" -Recurse -Filter "yuzu*.exe" | Copy-Item -destination $RELEASE_DIST
          Copy-Item .\license.txt -Destination $RELEASE_DIST
          Copy-Item .\README.md -Destination $RELEASE_DIST
          7z a -tzip $MSVC_BUILD_ZIP $RELEASE_DIST\*
          7z a $MSVC_SEVENZIP $RELEASE_DIST
        } else {
          $MINGW_BUILD_ZIP = "yuzu-windows-mingw-$GITDATE-$GITREV.zip" -replace " ", ""
          $MINGW_SEVENZIP = "yuzu-windows-mingw-$GITDATE-$GITREV.7z" -replace " ", ""
          # not going to bother adding separate debug symbols for mingw, so just upload a README for it
          # if someone wants to add them, change mingw to compile with -g and use objdump and strip to separate the symbols from the binary
          $MINGW_NO_DEBUG_SYMBOLS = "README_No_Debug_Symbols.txt"
          Set-Content -Path $MINGW_NO_DEBUG_SYMBOLS -Value "This is a workaround for Appveyor since msvc has debug symbols but mingw doesnt" -Force

          # store the build information in env vars so we can use them as artifacts
          $env:BUILD_ZIP = $MINGW_BUILD_ZIP
          $env:BUILD_SYMBOLS = $MINGW_NO_DEBUG_SYMBOLS
          $env:BUILD_UPDATE = $MINGW_SEVENZIP

          $CMAKE_SOURCE_DIR = "$env:APPVEYOR_BUILD_FOLDER"
          $CMAKE_BINARY_DIR = "$CMAKE_SOURCE_DIR/mingw_build/bin"
          $RELEASE_DIST = $RELEASE_DIST + "-mingw"

          mkdir $RELEASE_DIST
          mkdir $RELEASE_DIST/platforms
          mkdir $RELEASE_DIST/styles
          mkdir $RELEASE_DIST/imageformats

          # copy the compiled binaries and other release files to the release folder
          Get-ChildItem "$CMAKE_BINARY_DIR" -Filter "yuzu*.exe" | Copy-Item -destination $RELEASE_DIST
          Copy-Item -path "$CMAKE_SOURCE_DIR/license.txt" -destination $RELEASE_DIST
          Copy-Item -path "$CMAKE_SOURCE_DIR/README.md" -destination $RELEASE_DIST

          # copy all the dll dependencies to the release folder
          . "./.appveyor/UtilityFunctions.ps1"
          $DLLSearchPath = "C:\msys64\mingw64\bin;$env:PATH"
          $MingwDLLs = RecursivelyGetDeps $DLLSearchPath "$RELEASE_DIST\yuzu.exe"
          $MingwDLLs += RecursivelyGetDeps $DLLSearchPath  "$RELEASE_DIST\yuzu_cmd.exe"
          Write-Host "Detected the following dependencies:"
          Write-Host $MingwDLLs
          foreach ($file in $MingwDLLs) {
            Copy-Item -path "$file" -force -destination "$RELEASE_DIST"
          }

          # copy the qt windows plugin dll to platforms
          Copy-Item -path "C:/msys64/mingw64/share/qt5/plugins/platforms/qwindows.dll" -force -destination "$RELEASE_DIST/platforms"

          # copy the qt windows vista style dll to platforms
          Copy-Item -path "C:/msys64/mingw64/share/qt5/plugins/styles/qwindowsvistastyle.dll" -force -destination "$RELEASE_DIST/styles"

          # copy the qt jpeg imageformat dll to platforms
          Copy-Item -path "C:/msys64/mingw64/share/qt5/plugins/imageformats/qjpeg.dll" -force -destination "$RELEASE_DIST/imageformats"

          7z a -tzip $MINGW_BUILD_ZIP $RELEASE_DIST\*
          7z a $MINGW_SEVENZIP $RELEASE_DIST
        }

test_script:
  - cd %BUILD_TYPE%_build
  - ps: |
        if ($env:BUILD_TYPE -eq 'msvc') {
          ctest -VV -C Release
        } else {
          C:\msys64\usr\bin\bash.exe -lc "ctest -VV -C Release"
        }
  - cd ..

artifacts:
  - path: $(BUILD_ZIP)
    name: build
    type: zip

deploy:
  provider: GitHub
  release: $(appveyor_repo_tag_name)
  auth_token:
    secure: QqePPnXbkzmXct5c8hZ2X5AbsthbI6cS1Sr+VBzcD8oUOIjfWJJKXVAQGUbQAbb0
  artifact: update,build
  draft: false
  prerelease: false
  on:
    appveyor_repo_tag: true