appveyor: Add support for meson as well as scons on windows
authorDylan Baker <dylan@pnwbakers.com>
Wed, 23 Jan 2019 22:21:26 +0000 (14:21 -0800)
committerDylan Baker <dylan@pnwbakers.com>
Thu, 10 Oct 2019 23:33:05 +0000 (16:33 -0700)
This job uses the vs2017 backend of meson (msbuild) as opposed to the
ninja backend used on MacOS and Linux.

v7: - rebase on master
    - remove llvm (we'll add that back later)
    - remove cygwin (we'll add that back later too)
v6: - rebase on master, including the addition of cygwin
    - consolidate 3 appveyor patches into this one patch
v5  - use the new b_vscrt option instead of manually specifying the crt
v4: - rebase on python3 generators
    - cache meson wraps
    - Build x86 instead of x86_64, since that's what the pre-built LLVM
      is
    - update to vs2017 from vs2015
    - set the default-library to static
    - use the new vscrt override
    - add the /m switch to msbuild to make the build somewhat faster

Acked-by: Kristian H. Kristensen <hoegsberg@google.com>
appveyor.yml
scripts/appveyor_msvc.bat [new file with mode: 0644]

index ccb84fd..6c1bd37 100644 (file)
@@ -49,41 +49,21 @@ init:
 environment:
   WINFLEXBISON_VERSION: 2.5.15
   LLVM_ARCHIVE: llvm-5.0.1-msvc2017-mtd.7z
+  matrix:
+  - compiler: msvc
+    buildsystem: scons
+  - compiler: msvc
+    buildsystem: meson
+    path: C:\Python37-x64;C:\Python37-x64\Scripts;%path%
 
 install:
-# Check git config
-- git config core.autocrlf
-# Check pip
-- python --version
-- python -m pip --version
-# Install Mako
-- python -m pip install Mako==1.0.7
-# Install pywin32 extensions, needed by SCons
-- python -m pip install pypiwin32
-# Install python wheels, necessary to install SCons via pip
-- python -m pip install wheel
-# Install SCons
-- python -m pip install scons==3.0.1
-- scons --version
-# Install flex/bison
-- set WINFLEXBISON_ARCHIVE=win_flex_bison-%WINFLEXBISON_VERSION%.zip
-- if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://github.com/lexxmark/winflexbison/releases/download/v%WINFLEXBISON_VERSION%/%WINFLEXBISON_ARCHIVE%"
-- 7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul
-- set Path=%CD%\winflexbison;%Path%
-- win_flex --version
-- win_bison --version
-# Download and extract LLVM
-- if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%"
-- 7z x -y "%LLVM_ARCHIVE%" > nul
-- mkdir llvm\bin
-- set LLVM=%CD%\llvm
+- cmd: scripts\appveyor_msvc.bat install
 
 build_script:
-- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1
-
-after_build:
-- scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 check
+- cmd: scripts\appveyor_msvc.bat build_script
 
+test_script:
+- cmd: scripts\appveyor_msvc.bat test_script
 
 # It's possible to setup notification here, as described in
 # http://www.appveyor.com/docs/notifications#appveyor-yml-configuration , but
diff --git a/scripts/appveyor_msvc.bat b/scripts/appveyor_msvc.bat
new file mode 100644 (file)
index 0000000..5e8bd45
--- /dev/null
@@ -0,0 +1,63 @@
+goto %1
+
+:install
+rem Check pip
+call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
+if "%buildsystem%" == "scons" (
+    python --version
+    python -m pip --version
+    rem Install Mako
+    python -m pip install Mako==1.0.7
+    rem Install pywin32 extensions, needed by SCons
+    python -m pip install pypiwin32
+    rem Install python wheels, necessary to install SCons via pip
+    python -m pip install wheel
+    rem Install SCons
+    python -m pip install scons==3.0.1
+    call scons --version
+) else (
+    python --version
+    python -m pip install Mako==1.0.7 meson
+    meson --version
+
+    rem Install pkg-config, which meson requires even on windows
+    cinst -y pkgconfiglite
+)
+
+rem Install flex/bison
+set WINFLEXBISON_ARCHIVE=win_flex_bison-%WINFLEXBISON_VERSION%.zip
+if not exist "%WINFLEXBISON_ARCHIVE%" appveyor DownloadFile "https://github.com/lexxmark/winflexbison/releases/download/v%WINFLEXBISON_VERSION%/%WINFLEXBISON_ARCHIVE%"
+7z x -y -owinflexbison\ "%WINFLEXBISON_ARCHIVE%" > nul
+set Path=%CD%\winflexbison;%Path%
+win_flex --version
+win_bison --version
+rem Download and extract LLVM
+if not exist "%LLVM_ARCHIVE%" appveyor DownloadFile "https://people.freedesktop.org/~jrfonseca/llvm/%LLVM_ARCHIVE%"
+7z x -y "%LLVM_ARCHIVE%" > nul
+if "%buildsystem%" == "scons" (
+    mkdir llvm\bin
+    set LLVM=%CD%\llvm
+)
+goto :eof
+
+:build_script
+if "%buildsystem%" == "scons" (
+    call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1
+) else (
+    rem We use default-library as static to affect any wraps (such as expat and zlib)
+    rem it would be better if we could set subprojects buildtype independently,
+    rem but I haven't written that patch yet :)
+    call meson builddir --backend=vs2017 --default-library=static -Dbuild-tests=true -Db_vscrt=mtd --buildtype=release -Dllvm=false
+    pushd builddir
+    call msbuild mesa.sln /m
+    popd
+)
+goto :eof
+
+:test_script
+if "%buildsystem%" == "scons" (
+    call scons -j%NUMBER_OF_PROCESSORS% MSVC_VERSION=14.1 llvm=1 check
+) else (
+    call meson test -C builddir
+)
+goto :eof