This commit compiles all Rust code for the Windows release with `-Ctarget-feature=+crt-static`. This is targeted at increasing the binary compatibility of the binaries built to not rely on DLLs that aren't always installed on Windows. Notably this statically links the C runtime (notably used by the C++ code) and means that the final binary relies on fewer dlls. This in theory means that the binaries are only limited by the number of APIs they use from Windows. Note that this also matches how we build releases of Rust for MSVC.
255 lines
8.8 KiB
YAML
255 lines
8.8 KiB
YAML
name: $(Build.SourceBranch)-$(date:yyyyMMdd)$(rev:.r)
|
|
trigger:
|
|
branches:
|
|
include:
|
|
- 'master'
|
|
tags:
|
|
include:
|
|
- '*'
|
|
|
|
jobs:
|
|
- job: rustfmt
|
|
pool:
|
|
vmImage: 'macos-10.14'
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
- script: rustup component add rustfmt
|
|
displayName: Add rustfmt
|
|
- script: cargo fmt --all -- --check
|
|
displayName: Check formatting
|
|
variables:
|
|
toolchain: stable
|
|
|
|
# Smoke test to build docs on one builder, using OSX for now since it's the
|
|
# fastest
|
|
- job: docs
|
|
pool:
|
|
vmImage: 'macos-10.14'
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
- script: cargo doc
|
|
displayName: Build documentation
|
|
variables:
|
|
toolchain: stable
|
|
|
|
- job: Test
|
|
strategy:
|
|
matrix:
|
|
windows-stable:
|
|
imageName: 'vs2017-win2016'
|
|
toolchain: stable
|
|
linux-stable:
|
|
imageName: 'ubuntu-16.04'
|
|
toolchain: stable
|
|
mac-stable:
|
|
imageName: 'macos-10.14'
|
|
toolchain: stable
|
|
mac-beta:
|
|
imageName: 'macos-10.14'
|
|
toolchain: beta
|
|
mac-nightly:
|
|
imageName: 'macos-10.14'
|
|
toolchain: nightly
|
|
|
|
pool:
|
|
vmImage: $(imageName)
|
|
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
|
|
- script: |
|
|
powershell -Command "$ProgressPreference = 'SilentlyContinue'; iwr -outf %TEMP%\LLVM-8.0.0-win64.exe https://rust-lang-ci2.s3.amazonaws.com/rust-ci-mirror/LLVM-8.0.0-win64.exe"
|
|
%TEMP%\LLVM-8.0.0-win64.exe /S /NCRC
|
|
condition: eq(variables['Agent.OS'], 'Windows_NT')
|
|
displayName: Install clang (Windows)
|
|
|
|
- script: cargo fetch
|
|
displayName: Fetch cargo dependencies
|
|
|
|
# Build and test all features except for lightbeam
|
|
- bash: cargo test --all --exclude lightbeam --exclude wasmtime-wasi-c
|
|
displayName: Cargo test
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
|
|
# Build and test lightbeam if we're using the nightly toolchain
|
|
- bash: cargo build --package lightbeam
|
|
displayName: Cargo build lightbeam
|
|
condition: and(succeeded(), eq(variables['toolchain'], 'nightly'))
|
|
- bash: cargo test --package lightbeam
|
|
displayName: Cargo test lightbeam
|
|
# Lightbeam tests fail right now, but we don't want to block on that.
|
|
continueOnError: true
|
|
condition: and(succeeded(), eq(variables['toolchain'], 'nightly'))
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
|
|
- job: Build
|
|
strategy:
|
|
matrix:
|
|
windows:
|
|
imageName: 'vs2017-win2016'
|
|
# Statically link against msvcrt to produce slightly more portable
|
|
# binaries on Windows by reducing our binary compatibility requirements.
|
|
RUSTFLAGS: -Ctarget-feature=+crt-static
|
|
linux:
|
|
imageName: 'ubuntu-16.04'
|
|
mac:
|
|
imageName: 'macos-10.14'
|
|
# Lower the deployment target from our build image in an attempt to
|
|
# build more portable binaries that run on older releases. Note that
|
|
# 10.9 here is arbitrarily chosen and just happens to be the lowest that
|
|
# works at this time. Raising this is probably fine.
|
|
MACOSX_DEPLOYMENT_TARGET: 10.9
|
|
|
|
variables:
|
|
toolchain: stable
|
|
|
|
pool:
|
|
vmImage: $(imageName)
|
|
|
|
# variables:
|
|
# SCCACHE_DIR: $(Pipeline.Workspace)/.sccache
|
|
# RUSTC_WRAPPER: sccache
|
|
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
|
|
- bash: echo "##vso[task.setvariable variable=RUSTC_VERSION;]`rustc --version`"
|
|
displayName: Set rustc version string for caching
|
|
|
|
- script: |
|
|
powershell -Command "$ProgressPreference = 'SilentlyContinue'; iwr -outf %TEMP%\LLVM-8.0.0-win64.exe https://rust-lang-ci2.s3.amazonaws.com/rust-ci-mirror/LLVM-8.0.0-win64.exe"
|
|
%TEMP%\LLVM-8.0.0-win64.exe /S /NCRC
|
|
condition: eq(variables['Agent.OS'], 'Windows_NT')
|
|
displayName: Install clang (Windows)
|
|
|
|
# - bash: |
|
|
# set -e
|
|
# curl -Lfo sccache.tar.gz https://github.com/mozilla/sccache/releases/download/0.2.9/sccache-0.2.9-x86_64-apple-darwin.tar.gz
|
|
# tar -xzf sccache.tar.gz
|
|
# cp sccache-*/sccache /usr/local/bin/
|
|
# displayName: Install sccache (OSX)
|
|
# condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin'))
|
|
|
|
# - bash: |
|
|
# set -e
|
|
# curl -Lfo sccache.tar.gz https://github.com/mozilla/sccache/releases/download/0.2.9/sccache-0.2.9-x86_64-unknown-linux-musl.tar.gz
|
|
# tar -xzf sccache.tar.gz
|
|
# sudo cp sccache-*/sccache /usr/local/bin/
|
|
# displayName: Install sccache (Linux)
|
|
# condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
|
|
|
|
# - script: |
|
|
# curl -Lfo sccache.tar.gz https://github.com/mozilla/sccache/releases/download/0.2.9/sccache-0.2.9-x86_64-pc-windows-msvc.tar.gz
|
|
# tar -xzf sccache.tar.gz
|
|
# move sccache-* sccache
|
|
# echo "##vso[task.prependpath]%CD%\sccache"
|
|
# displayName: Install sccache (Windows)
|
|
# condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
|
|
|
|
- bash: cargo build --release
|
|
displayName: Cargo build
|
|
|
|
# Test what we're about to release in release mode itself. This tests
|
|
# everything except lightbeam which requires nightly which happens above.
|
|
- bash: cargo test --release --all --exclude lightbeam --exclude wasmtime-wasi-c
|
|
displayName: Cargo test
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
|
|
# - script: sccache --show-stats
|
|
# displayName: post-compile sccache stats
|
|
|
|
- bash: |
|
|
echo "##vso[task.setvariable variable=tagName;]`echo $BUILD_SOURCEBRANCH | sed -e 's|refs/tags/||'`"
|
|
displayName: Set tag name
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
|
- bash: |
|
|
echo "##vso[task.setvariable variable=tagName;]dev"
|
|
displayName: Set tag name to "dev"
|
|
condition: not(startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
|
|
|
- bash: echo "##vso[task.setvariable variable=basename;]wasmtime-$(tagName)-x86_64-windows"
|
|
displayName: Configure basename var
|
|
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
|
|
- bash: echo "##vso[task.setvariable variable=basename;]wasmtime-$(tagName)-x86_64-apple"
|
|
displayName: Configure basename var
|
|
condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin'))
|
|
- bash: echo "##vso[task.setvariable variable=basename;]wasmtime-$(tagName)-x86_64-linux"
|
|
displayName: Configure basename var
|
|
condition: and(succeeded(), eq( variables['Agent.OS'], 'Linux' ))
|
|
|
|
- bash: |
|
|
set -e
|
|
mkdir -p $BUILD_BINARIESDIRECTORY/$BASENAME
|
|
if [ "$AGENT_OS" = "Windows_NT" ]; then
|
|
ext=.exe
|
|
fi
|
|
cp LICENSE README.md target/release/{wasmtime,wasm2obj}$ext $BUILD_BINARIESDIRECTORY/$BASENAME
|
|
displayName: Copy binaries
|
|
- task: ArchiveFiles@2
|
|
inputs:
|
|
rootFolderOrFile: $(Build.BinariesDirectory)/$(basename)
|
|
archiveType: 'zip'
|
|
archiveFile: '$(Build.ArtifactStagingDirectory)/$(basename).zip'
|
|
displayName: Archive files (Win)
|
|
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
|
|
- task: ArchiveFiles@2
|
|
inputs:
|
|
rootFolderOrFile: $(Build.BinariesDirectory)/$(basename)
|
|
archiveType: 'tar'
|
|
tarCompression: 'xz'
|
|
archiveFile: '$(Build.ArtifactStagingDirectory)/$(basename).tar.xz'
|
|
displayName: Archive files (Unix)
|
|
condition: and(succeeded(), ne(variables['Agent.OS'], 'Windows_NT'))
|
|
- task: PublishPipelineArtifact@1
|
|
inputs:
|
|
path: $(Build.ArtifactStagingDirectory)/
|
|
artifactName: 'bundle-$(Agent.OS)'
|
|
|
|
- job: Publish
|
|
dependsOn: Build
|
|
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'))
|
|
steps:
|
|
- checkout: none
|
|
- task: DownloadPipelineArtifact@1
|
|
inputs:
|
|
targetPath: $(Build.ArtifactStagingDirectory)
|
|
- script: |
|
|
echo "##vso[task.setvariable variable=tagName;]`echo $BUILD_SOURCEBRANCH | sed -e 's|refs/tags/||'`"
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
|
- task: GitHubRelease@0
|
|
inputs:
|
|
gitHubConnection: 'tschneidereit-releases'
|
|
repositoryName: 'cranestation/wasmtime'
|
|
action: 'edit'
|
|
target: '$(Build.SourceVersion)'
|
|
tagSource: 'manual'
|
|
tag: '$(tagName)'
|
|
title: 'Wasmtime $(tagName)'
|
|
assets: '$(Build.ArtifactStagingDirectory)/**'
|
|
isDraft: false
|
|
isPreRelease: true
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
|
- task: GitHubRelease@0
|
|
inputs:
|
|
gitHubConnection: 'tschneidereit-releases'
|
|
repositoryName: 'cranestation/wasmtime'
|
|
action: 'edit'
|
|
target: '$(Build.SourceVersion)'
|
|
tag: 'dev'
|
|
title: 'Latest CI build'
|
|
assets: '$(Build.ArtifactStagingDirectory)/**'
|
|
isDraft: false
|
|
isPreRelease: true
|
|
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|