Browse Source
Currently our Linux binaries aren't quite as portable as they otherwise could be. There's two primary reasons for this, and one of them is that the binary is produced in a relatively recent Linux distribution (Ubuntu 16.04) which means it has a relatively recent requirement in terms of glibc versions. On OSX/Windows we can set some flags to rely on older libc implementations, but on Linux we have to actually build against an older version. This commit switches the container for the build to CentOS 6 instead of the default Ubuntu 16.04. The main trick here is also finding a C++11-capable compiler to compile wabt. Turns out though there's a helpful tutorial for this at https://edwards.sdsu.edu/research/c11-on-centos-6/ and it was as easy as installing a few packages. The second portability concern of our Linux binaries is that they link dynamically to `libstdc++.so` which isn't always installed on target systems, or even if it is it may be too old or have a different ABI. This is solved by statically linking to `libstdc++.a` in the build on Azure by doing a bit of trickery with libraries and what's available. After these results the glibc requirements drops from 2.18 (released in 2013) to 2.6 (released in 2007) and avoids the need for users to have libstdc++.so installed. We may eventually want to investigate fully-static musl binaries, but finding a musl compiler for C++ is something I'm not that good at, so I figure this is probably good enough for now.pull/274/head
Alex Crichton
5 years ago
committed by
Till Schneidereit
2 changed files with 139 additions and 109 deletions
@ -0,0 +1,103 @@ |
|||||
|
steps: |
||||
|
- checkout: self |
||||
|
submodules: true |
||||
|
|
||||
|
- template: azure-install-rust.yml |
||||
|
|
||||
|
- bash: echo "##vso[task.setvariable variable=RUSTC_VERSION;]`rustc --version`" |
||||
|
displayName: Set rustc version string for caching |
||||
|
|
||||
|
# - 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 |
||||
|
|
||||
|
- bash: | |
||||
|
set -e |
||||
|
export WT_VERSION=`cat Cargo.toml | sed -n 's/^version = "\([^"]*\)".*/\1/p'` |
||||
|
"$WIX/bin/candle" -arch x64 -out target/wasmtime.wixobj installer/msi/wasmtime.wxs |
||||
|
"$WIX/bin/light" -out $BUILD_ARTIFACTSTAGINGDIRECTORY/$(basename).msi target/wasmtime.wixobj -ext WixUtilExtension |
||||
|
rm $BUILD_ARTIFACTSTAGINGDIRECTORY/$(basename).wixpdb |
||||
|
displayName: Create installer (Windows) |
||||
|
condition: eq(variables['Agent.OS'], 'Windows_NT') |
||||
|
|
||||
|
- 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)' |
||||
|
|
Loading…
Reference in new issue