Tweak testing and such:
* Don't run `intrinsics` tests on thumb * Disable `compiler_builtins` attribute on `feature = "gen-tests"` * Disable mangling on `feature = "gen-tests"` instead of `cfg(test)`
This commit is contained in:
parent
76430488e6
commit
734ec3d31c
@ -18,7 +18,12 @@ compiler-builtins = []
|
|||||||
default = ["compiler-builtins"]
|
default = ["compiler-builtins"]
|
||||||
mem = []
|
mem = []
|
||||||
rustbuild = ["compiler-builtins"]
|
rustbuild = ["compiler-builtins"]
|
||||||
|
|
||||||
# generate tests
|
# generate tests
|
||||||
|
#
|
||||||
|
# Note that this is an internal-only feature used in testing, this should not
|
||||||
|
# be relied on with crates.io! Enabling this may expose you to breaking
|
||||||
|
# changes.
|
||||||
gen-tests = ["cast", "rand"]
|
gen-tests = ["cast", "rand"]
|
||||||
|
|
||||||
[target.'cfg(all(target_arch = "arm", not(any(target_env = "gnu", target_env = "musl")), target_os = "linux"))'.dev-dependencies]
|
[target.'cfg(all(target_arch = "arm", not(any(target_env = "gnu", target_env = "musl")), target_os = "linux"))'.dev-dependencies]
|
||||||
@ -26,10 +31,8 @@ test = { git = "https://github.com/japaric/utest" }
|
|||||||
utest-cortex-m-qemu = { default-features = false, git = "https://github.com/japaric/utest" }
|
utest-cortex-m-qemu = { default-features = false, git = "https://github.com/japaric/utest" }
|
||||||
utest-macros = { git = "https://github.com/japaric/utest" }
|
utest-macros = { git = "https://github.com/japaric/utest" }
|
||||||
|
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
name = "intrinsics"
|
name = "intrinsics"
|
||||||
required-features = ["c", "compiler-builtins"]
|
required-features = ["c", "compiler-builtins"]
|
||||||
|
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
|
10
appveyor.yml
10
appveyor.yml
@ -1,17 +1,25 @@
|
|||||||
environment:
|
environment:
|
||||||
DEBUG_LTO_BUILD_DOESNT_WORK: 1
|
# It's... a little unclear why the memcpy symbols clash on linux but not on
|
||||||
|
# other platforms. Would be great to not differ on this though!
|
||||||
INTRINSICS_FAILS_WITH_MEM_FEATURE: 1
|
INTRINSICS_FAILS_WITH_MEM_FEATURE: 1
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
- TARGET: i686-pc-windows-msvc
|
- TARGET: i686-pc-windows-msvc
|
||||||
- TARGET: x86_64-pc-windows-msvc
|
- TARGET: x86_64-pc-windows-msvc
|
||||||
|
|
||||||
# Ensure MinGW works, but we need to download the 32-bit MinGW compiler from a
|
# Ensure MinGW works, but we need to download the 32-bit MinGW compiler from a
|
||||||
# custom location.
|
# custom location.
|
||||||
|
#
|
||||||
|
# Note that the MinGW builds have tons of references to
|
||||||
|
# `rust_eh_unwind_resume` in the debug LTO builds that aren't optimized out,
|
||||||
|
# so we skip that test for now. Would be great to not skip it!
|
||||||
- TARGET: i686-pc-windows-gnu
|
- TARGET: i686-pc-windows-gnu
|
||||||
MINGW_URL: https://s3.amazonaws.com/rust-lang-ci
|
MINGW_URL: https://s3.amazonaws.com/rust-lang-ci
|
||||||
MINGW_ARCHIVE: i686-4.9.2-release-win32-dwarf-rt_v4-rev4.7z
|
MINGW_ARCHIVE: i686-4.9.2-release-win32-dwarf-rt_v4-rev4.7z
|
||||||
MINGW_DIR: mingw32
|
MINGW_DIR: mingw32
|
||||||
|
DEBUG_LTO_BUILD_DOESNT_WORK: 1
|
||||||
- TARGET: x86_64-pc-windows-gnu
|
- TARGET: x86_64-pc-windows-gnu
|
||||||
|
DEBUG_LTO_BUILD_DOESNT_WORK: 1
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- git submodule update --init
|
- git submodule update --init
|
||||||
|
32
ci/run.sh
32
ci/run.sh
@ -10,6 +10,10 @@ case $1 in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
INTRINSICS_FEATURES="c"
|
INTRINSICS_FEATURES="c"
|
||||||
|
|
||||||
|
# Some architectures like ARM apparently seem to require the `mem` feature
|
||||||
|
# enabled to successfully compile the `intrinsics` example, and... we're not
|
||||||
|
# sure why!
|
||||||
if [ -z "$INTRINSICS_FAILS_WITH_MEM_FEATURE" ]; then
|
if [ -z "$INTRINSICS_FAILS_WITH_MEM_FEATURE" ]; then
|
||||||
INTRINSICS_FEATURES="$INTRINSICS_FEATURES mem"
|
INTRINSICS_FEATURES="$INTRINSICS_FEATURES mem"
|
||||||
fi
|
fi
|
||||||
@ -47,16 +51,13 @@ case $1 in
|
|||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
cargo test --no-default-features --features gen-tests --target $1
|
cargo test --features gen-tests --target $1
|
||||||
cargo test --no-default-features --features 'gen-tests c' --target $1
|
cargo test --features 'gen-tests c' --target $1
|
||||||
cargo test --no-default-features --features gen-tests --target $1 --release
|
cargo test --features gen-tests --target $1 --release
|
||||||
cargo test --no-default-features --features 'gen-tests c' --target $1 --release
|
cargo test --features 'gen-tests c' --target $1 --release
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Verify that we haven't drop any intrinsic/symbol
|
|
||||||
$cargo build --features "$INTRINSICS_FEATURES" --target $1 --example intrinsics
|
|
||||||
|
|
||||||
PREFIX=$(echo $1 | sed -e 's/unknown-//')-
|
PREFIX=$(echo $1 | sed -e 's/unknown-//')-
|
||||||
case $1 in
|
case $1 in
|
||||||
armv7-*)
|
armv7-*)
|
||||||
@ -105,7 +106,22 @@ done
|
|||||||
|
|
||||||
rm -f $path
|
rm -f $path
|
||||||
|
|
||||||
# Verify that there are no undefined symbols to `panic` within our implementations
|
# Verification of the `intrinsics` program doesn't work on thumb targets right
|
||||||
|
# now.
|
||||||
|
case $1 in
|
||||||
|
thumb*)
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Verify that we haven't drop any intrinsic/symbol
|
||||||
|
$cargo build --features "$INTRINSICS_FEATURES" --target $1 --example intrinsics
|
||||||
|
|
||||||
|
# Verify that there are no undefined symbols to `panic` within our
|
||||||
|
# implementations
|
||||||
|
#
|
||||||
# TODO(#79) fix the undefined references problem for debug-assertions+lto
|
# TODO(#79) fix the undefined references problem for debug-assertions+lto
|
||||||
if [ -z "$DEBUG_LTO_BUILD_DOESNT_WORK" ]; then
|
if [ -z "$DEBUG_LTO_BUILD_DOESNT_WORK" ]; then
|
||||||
RUSTFLAGS="-C debug-assertions=no" \
|
RUSTFLAGS="-C debug-assertions=no" \
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#![cfg_attr(not(stage0), deny(warnings))]
|
#![cfg_attr(not(stage0), deny(warnings))]
|
||||||
#![cfg_attr(not(test), no_std)]
|
#![cfg_attr(not(test), no_std)]
|
||||||
#![cfg_attr(feature = "compiler-builtins", compiler_builtins)]
|
#![cfg_attr(all(feature = "compiler-builtins",
|
||||||
|
not(feature = "gen-tests")), compiler_builtins)]
|
||||||
#![crate_name = "compiler_builtins"]
|
#![crate_name = "compiler_builtins"]
|
||||||
#![crate_type = "rlib"]
|
#![crate_type = "rlib"]
|
||||||
#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
|
#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
|
||||||
|
@ -240,7 +240,7 @@ macro_rules! intrinsics {
|
|||||||
|
|
||||||
// This is the final catch-all rule. At this point we just generate an
|
// This is the final catch-all rule. At this point we just generate an
|
||||||
// intrinsic with a conditional `#[no_mangle]` directive to avoid
|
// intrinsic with a conditional `#[no_mangle]` directive to avoid
|
||||||
// interfereing with duplicate symbols and whatnot.
|
// interfereing with duplicate symbols and whatnot during testing.
|
||||||
//
|
//
|
||||||
// After the intrinsic is defined we just continue with the rest of the
|
// After the intrinsic is defined we just continue with the rest of the
|
||||||
// input we were given.
|
// input we were given.
|
||||||
@ -253,7 +253,7 @@ macro_rules! intrinsics {
|
|||||||
$($rest:tt)*
|
$($rest:tt)*
|
||||||
) => (
|
) => (
|
||||||
$(#[$($attr)*])*
|
$(#[$($attr)*])*
|
||||||
#[cfg_attr(not(test), no_mangle)]
|
#[cfg_attr(not(feature = "gen-tests"), no_mangle)]
|
||||||
pub extern $abi fn $name( $($argname: $ty),* ) -> $ret {
|
pub extern $abi fn $name( $($argname: $ty),* ) -> $ret {
|
||||||
$($body)*
|
$($body)*
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user