mirror of
https://github.com/fluencelabs/wasmer
synced 2025-03-30 22:41:03 +00:00
Merge #1044
1044: Initial commit for support of AArch64 in the llvm backend. r=syrusakbary a=nlewycky # Description Enables AArch64 in the llvm backend, and inkwell when the target_arch is aarch64. Adds relevant failing spectests to the excludes.txt. # Review - [x] Add a short description of the the change to the CHANGELOG.md file Co-authored-by: Nick Lewycky <nick@wasmer.io> Co-authored-by: Syrus Akbary <me@syrusakbary.com>
This commit is contained in:
commit
e749029a3b
@ -31,18 +31,21 @@ steps:
|
|||||||
|
|
||||||
- bash: |
|
- bash: |
|
||||||
set -ex
|
set -ex
|
||||||
curl -OL https://github.com/wasmerio/windows-llvm-build/releases/download/v8.0.0/llvm-8.0.0-install.zip
|
mkdir Win64_Release
|
||||||
7z x llvm-8.0.0-install.zip
|
cd Win64_Release
|
||||||
llvm=`pwd`/llvm-8.0.0-install
|
curl -OL https://github.com/wasmerio/llvm-build/releases/download/8.x/Win64_Release.zip
|
||||||
|
7z x Win64_Release.zip
|
||||||
|
llvm=`pwd`
|
||||||
echo "##vso[task.prependpath]$llvm/bin"
|
echo "##vso[task.prependpath]$llvm/bin"
|
||||||
echo "##vso[task.setvariable variable=LLVM_SYS_80_PREFIX;]$llvm"
|
echo "##vso[task.setvariable variable=LLVM_SYS_80_PREFIX;]$llvm"
|
||||||
|
cd ..
|
||||||
displayName: "Install LLVM (Windows)"
|
displayName: "Install LLVM (Windows)"
|
||||||
condition: eq(variables['Agent.OS'], 'Windows_NT')
|
condition: eq(variables['Agent.OS'], 'Windows_NT')
|
||||||
|
|
||||||
# Just to make sure the paths and vars are set properly
|
# Just to make sure the paths and vars are set properly
|
||||||
- powershell: |
|
- powershell: |
|
||||||
Write-Host "##vso[task.prependpath]$pwd/llvm-8.0.0-install/bin"
|
Write-Host "##vso[task.prependpath]$pwd/Win64_Release/bin"
|
||||||
Write-Host "##vso[task.setvariable variable=LLVM_SYS_80_PREFIX;]$pwd/llvm-8.0.0-install/"
|
Write-Host "##vso[task.setvariable variable=LLVM_SYS_80_PREFIX;]$pwd/Win64_Release/"
|
||||||
displayName: Install LLVM (Windows)
|
displayName: Install LLVM (Windows)
|
||||||
condition: eq(variables['Agent.OS'], 'Windows_NT')
|
condition: eq(variables['Agent.OS'], 'Windows_NT')
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
- [#1052](https://github.com/wasmerio/wasmer/pull/1052) Fix minor panic and improve Error handling in singlepass backend.
|
- [#1052](https://github.com/wasmerio/wasmer/pull/1052) Fix minor panic and improve Error handling in singlepass backend.
|
||||||
- [#1050](https://github.com/wasmerio/wasmer/pull/1050) Attach C & C++ headers to releases.
|
- [#1050](https://github.com/wasmerio/wasmer/pull/1050) Attach C & C++ headers to releases.
|
||||||
- [#1033](https://github.com/wasmerio/wasmer/pull/1033) Set cranelift backend as default compiler backend again, require at least one backend to be enabled for Wasmer CLI
|
- [#1033](https://github.com/wasmerio/wasmer/pull/1033) Set cranelift backend as default compiler backend again, require at least one backend to be enabled for Wasmer CLI
|
||||||
|
- [#1044](https://github.com/wasmerio/wasmer/pull/1044) Enable AArch64 support in the LLVM backend.
|
||||||
- [#1030](https://github.com/wasmerio/wasmer/pull/1030) Ability to generate `ImportObject` for a specific version WASI version with the C API.
|
- [#1030](https://github.com/wasmerio/wasmer/pull/1030) Ability to generate `ImportObject` for a specific version WASI version with the C API.
|
||||||
- [#1028](https://github.com/wasmerio/wasmer/pull/1028) Introduce strict/non-strict modes for `get_wasi_version`
|
- [#1028](https://github.com/wasmerio/wasmer/pull/1028) Introduce strict/non-strict modes for `get_wasi_version`
|
||||||
- [#1029](https://github.com/wasmerio/wasmer/pull/1029) Add the “floating” `WasiVersion::Latest` version.
|
- [#1029](https://github.com/wasmerio/wasmer/pull/1029) Add the “floating” `WasiVersion::Latest` version.
|
||||||
|
4
Makefile
4
Makefile
@ -89,7 +89,7 @@ wasitests: wasitests-unit wasitests-singlepass wasitests-cranelift wasitests-llv
|
|||||||
# Backends
|
# Backends
|
||||||
singlepass: spectests-singlepass emtests-singlepass middleware-singlepass wasitests-singlepass
|
singlepass: spectests-singlepass emtests-singlepass middleware-singlepass wasitests-singlepass
|
||||||
cargo test -p wasmer-singlepass-backend --release
|
cargo test -p wasmer-singlepass-backend --release
|
||||||
cargo test -p wasmer-runtime-core-tests --release --no-default-features --features backend-singlepass
|
cargo test --manifest-path lib/runtime-core-tests/Cargo.toml --release --no-default-features --features backend-singlepass
|
||||||
|
|
||||||
cranelift: spectests-cranelift emtests-cranelift middleware-cranelift wasitests-cranelift
|
cranelift: spectests-cranelift emtests-cranelift middleware-cranelift wasitests-cranelift
|
||||||
cargo test -p wasmer-clif-backend --release
|
cargo test -p wasmer-clif-backend --release
|
||||||
@ -98,7 +98,7 @@ cranelift: spectests-cranelift emtests-cranelift middleware-cranelift wasitests-
|
|||||||
llvm: spectests-llvm emtests-llvm wasitests-llvm
|
llvm: spectests-llvm emtests-llvm wasitests-llvm
|
||||||
cargo test -p wasmer-llvm-backend --release
|
cargo test -p wasmer-llvm-backend --release
|
||||||
cargo test -p wasmer-llvm-backend-tests --release
|
cargo test -p wasmer-llvm-backend-tests --release
|
||||||
cargo test -p wasmer-runtime-core-tests --release --no-default-features --features backend-llvm
|
cargo test --manifest-path lib/runtime-core-tests/Cargo.toml --release --no-default-features --features backend-llvm
|
||||||
|
|
||||||
|
|
||||||
# All tests
|
# All tests
|
||||||
|
@ -17,12 +17,18 @@ goblin = "0.0.24"
|
|||||||
libc = "0.2.60"
|
libc = "0.2.60"
|
||||||
byteorder = "1"
|
byteorder = "1"
|
||||||
|
|
||||||
[dependencies.inkwell]
|
[target.'cfg(target_arch = "x86_64")'.dependencies.inkwell]
|
||||||
git = "https://github.com/TheDan64/inkwell"
|
git = "https://github.com/TheDan64/inkwell"
|
||||||
rev = "781620e9fa30e51a6e03bd0d49b5f5bb7a782520"
|
rev = "781620e9fa30e51a6e03bd0d49b5f5bb7a782520"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["llvm8-0", "target-x86"]
|
features = ["llvm8-0", "target-x86"]
|
||||||
|
|
||||||
|
[target.'cfg(target_arch = "aarch64")'.dependencies.inkwell]
|
||||||
|
git = "https://github.com/TheDan64/inkwell"
|
||||||
|
rev = "781620e9fa30e51a6e03bd0d49b5f5bb7a782520"
|
||||||
|
default-features = false
|
||||||
|
features = ["llvm8-0", "target-aarch64"]
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
nix = "0.15"
|
nix = "0.15"
|
||||||
|
|
||||||
|
@ -8465,6 +8465,7 @@ impl<'ctx> ModuleCodeGenerator<LLVMFunctionCodeGenerator<'ctx>, LLVMBackend, Cod
|
|||||||
let triple = triple.unwrap_or(TargetMachine::get_default_triple().to_string());
|
let triple = triple.unwrap_or(TargetMachine::get_default_triple().to_string());
|
||||||
|
|
||||||
match triple {
|
match triple {
|
||||||
|
#[cfg(target_arch = "x86_64")]
|
||||||
_ if triple.starts_with("x86") => Target::initialize_x86(&InitializationConfig {
|
_ if triple.starts_with("x86") => Target::initialize_x86(&InitializationConfig {
|
||||||
asm_parser: true,
|
asm_parser: true,
|
||||||
asm_printer: true,
|
asm_printer: true,
|
||||||
@ -8473,7 +8474,18 @@ impl<'ctx> ModuleCodeGenerator<LLVMFunctionCodeGenerator<'ctx>, LLVMBackend, Cod
|
|||||||
info: true,
|
info: true,
|
||||||
machine_code: true,
|
machine_code: true,
|
||||||
}),
|
}),
|
||||||
_ => unimplemented!("compile to target other than x86-64 is not supported"),
|
#[cfg(target_arch = "aarch64")]
|
||||||
|
_ if triple.starts_with("aarch64") => {
|
||||||
|
Target::initialize_aarch64(&InitializationConfig {
|
||||||
|
asm_parser: true,
|
||||||
|
asm_printer: true,
|
||||||
|
base: true,
|
||||||
|
disassembler: true,
|
||||||
|
info: true,
|
||||||
|
machine_code: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
_ => unimplemented!("target {} not supported", triple),
|
||||||
}
|
}
|
||||||
|
|
||||||
let target = Target::from_triple(&triple).unwrap();
|
let target = Target::from_triple(&triple).unwrap();
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
unused_unsafe,
|
unused_unsafe,
|
||||||
unreachable_patterns
|
unreachable_patterns
|
||||||
)]
|
)]
|
||||||
#![cfg_attr(not(target_os = "windows"), deny(dead_code))]
|
#![cfg_attr(
|
||||||
|
all(not(target_os = "windows"), not(target_arch = "aarch64")),
|
||||||
|
deny(dead_code)
|
||||||
|
)]
|
||||||
#![cfg_attr(nightly, feature(unwind_attributes))]
|
#![cfg_attr(nightly, feature(unwind_attributes))]
|
||||||
#![doc(html_favicon_url = "https://wasmer.io/static/icons/favicon.ico")]
|
#![doc(html_favicon_url = "https://wasmer.io/static/icons/favicon.ico")]
|
||||||
#![doc(html_logo_url = "https://avatars3.githubusercontent.com/u/44205449?s=200&v=4")]
|
#![doc(html_logo_url = "https://avatars3.githubusercontent.com/u/44205449?s=200&v=4")]
|
||||||
|
@ -273,6 +273,11 @@ llvm:fail:f64.wast:1621 # AssertReturn - result F64(0) ("0x0") does not match ex
|
|||||||
llvm:fail:f64.wast:2020 # AssertReturn - result F64(9223372036854775808) ("0x8000000000000000") does not match expected F64(0) ("0x0")
|
llvm:fail:f64.wast:2020 # AssertReturn - result F64(9223372036854775808) ("0x8000000000000000") does not match expected F64(0) ("0x0")
|
||||||
llvm:fail:linking.wast:388 # AssertReturn - Call failed RuntimeError: WebAssembly trap occurred during runtime: incorrect `call_indirect` signature
|
llvm:fail:linking.wast:388 # AssertReturn - Call failed RuntimeError: WebAssembly trap occurred during runtime: incorrect `call_indirect` signature
|
||||||
|
|
||||||
|
# LLVM AArch64
|
||||||
|
llvm:skip:atomic.wast:*:*:aarch64 # Out of range relocations.
|
||||||
|
llvm:skip:skip-stack-guard-page.wast:2275:*:aarch64 # Uncaught SIGSEGV only in release builds
|
||||||
|
llvm:skip:skip-stack-guard-page.wast:2282:*:aarch64 # Uncaught SIGSEGV only in release builds
|
||||||
|
|
||||||
# LLVM Windows
|
# LLVM Windows
|
||||||
llvm:skip:address.wast:*:windows
|
llvm:skip:address.wast:*:windows
|
||||||
llvm:skip:align.wast:*:windows
|
llvm:skip:align.wast:*:windows
|
||||||
|
Loading…
x
Reference in New Issue
Block a user