Browse Source

Auto merge of #232 - paoloteti:fix-thumb-ci, r=alexcrichton

Fix CI for thumb* targets

Main fix is inside `utest` (implement Termination to avoid ICE) all the rest are minor fixes due to the new `testcrate`.

Thumb6m needs some extra fixes: some undefined reference and a panic raised removing assembly implementation not in the list.

Still allow failures on TravisCI and keep my `utest` fork for a while. Let's see if is stable.
bors 7 years ago
parent
commit
cfecfa2918

+ 0 - 5
build.rs

@@ -423,13 +423,8 @@ mod c {
         if llvm_target[0] == "thumbv6m" {
             sources.remove(
                 &[
-                    "aeabi_cdcmp",
-                    "aeabi_cfcmp",
-                    "aeabi_dcmp",
-                    "aeabi_fcmp",
                     "clzdi2",
                     "clzsi2",
-                    "comparesf2",
                     "divmodsi4",
                     "modsi3",
                     "switch16",

+ 11 - 10
ci/run.sh

@@ -24,20 +24,21 @@ fi
 # Test our implementation
 case $1 in
     thumb*)
-        for t in $(ls tests); do
+        run="xargo test --manifest-path testcrate/Cargo.toml --target $1"
+        for t in $(ls testcrate/tests); do
             t=${t%.rs}
 
-            # TODO(#154) enable these tests when aeabi_*mul are implemented
-            case $t in
-                powi*f2)
-                    continue
-                    ;;
-            esac
-
-            xargo test --test $t --target $1 --features 'mem gen-tests' --no-run
+            RUSTFLAGS="-C debug-assertions=no -C lto" \
+            CARGO_INCREMENTAL=0 \
+              $run --test $t --no-default-features --features 'mem c' --no-run
             qemu-arm-static target/${1}/debug/$t-*
+	done
 
-            xargo test --test $t --target $1 --features 'mem gen-tests' --no-run --release
+	for t in $(ls testcrate/tests); do
+            t=${t%.rs}
+            RUSTFLAGS="-C lto" \
+            CARGO_INCREMENTAL=0 \
+              $run --test $t --no-default-features --features 'mem c' --no-run --release
             qemu-arm-static target/${1}/release/$t-*
         done
         ;;

+ 5 - 2
src/int/sdiv.rs

@@ -72,7 +72,9 @@ intrinsics! {
         a.div(b)
     }
 
-    #[use_c_shim_if(all(target_arch = "arm", not(target_os = "ios")))]
+    #[use_c_shim_if(all(target_arch = "arm",
+                    not(target_os = "ios")),
+                    not(thumbv6m))]
     pub extern "C" fn __modsi3(a: i32, b: i32) -> i32 {
         a.mod_(b)
     }
@@ -87,7 +89,8 @@ intrinsics! {
         a.mod_(b)
     }
 
-    #[use_c_shim_if(all(target_arch = "arm", not(target_os = "ios")))]
+    #[use_c_shim_if(all(target_arch = "arm",
+                    not(target_os = "ios"), not(thumbv6m)))]
     pub extern "C" fn __divmodsi4(a: i32, b: i32, rem: &mut i32) -> i32 {
         a.divmod(b, rem, |a, b| __divsi3(a, b))
     }

+ 3 - 1
src/int/udiv.rs

@@ -209,7 +209,9 @@ intrinsics! {
         (q << 1) | carry
     }
 
-    #[use_c_shim_if(all(target_arch = "arm", not(target_os = "ios")))]
+    #[use_c_shim_if(all(target_arch = "arm",
+                        not(target_os = "ios"),
+                        not(thumbv6m)))]
     /// Returns `n % d`
     pub extern "C" fn __umodsi3(n: u32, d: u32) -> u32 {
         let q = __udivsi3(n, d);

+ 4 - 1
testcrate/Cargo.toml

@@ -14,7 +14,7 @@ rand = { version = "0.4", features = ["i128_support"] }
 [dependencies.compiler_builtins]
 path = ".."
 default-features = false
-features = ["mangled-names", "no-lang-items"]
+features = ["no-lang-items"]
 
 [target.'cfg(all(target_arch = "arm", not(any(target_env = "gnu", target_env = "musl")), target_os = "linux"))'.dev-dependencies]
 test = { git = "https://github.com/japaric/utest" }
@@ -23,3 +23,6 @@ utest-macros = { git = "https://github.com/japaric/utest" }
 
 [features]
 c = ["compiler_builtins/c"]
+mem = ["compiler_builtins/mem"]
+mangled-names = ["compiler_builtins/mangled-names"]
+default = ["mangled-names"]

+ 1 - 7
testcrate/src/lib.rs

@@ -1,7 +1 @@
-#[cfg(test)]
-mod tests {
-    #[test]
-    fn it_works() {
-        assert_eq!(2 + 2, 4);
-    }
-}
+#![no_std]

+ 1 - 0
testcrate/tests/aeabi_memclr.rs

@@ -3,6 +3,7 @@
            target_os = "linux",
            feature = "mem"))]
 #![feature(compiler_builtins_lib)]
+#![feature(lang_items)]
 #![no_std]
 
 extern crate compiler_builtins;

+ 1 - 0
testcrate/tests/aeabi_memcpy.rs

@@ -3,6 +3,7 @@
            target_os = "linux",
            feature = "mem"))]
 #![feature(compiler_builtins_lib)]
+#![feature(lang_items)]
 #![no_std]
 
 extern crate compiler_builtins;

+ 1 - 0
testcrate/tests/aeabi_memset.rs

@@ -3,6 +3,7 @@
            target_os = "linux",
            feature = "mem"))]
 #![feature(compiler_builtins_lib)]
+#![feature(lang_items)]
 #![no_std]
 
 extern crate compiler_builtins;

+ 29 - 0
testcrate/tests/generated.rs

@@ -1,6 +1,35 @@
+#![feature(compiler_builtins_lib)]
 #![feature(i128_type)]
+#![feature(lang_items, core_float, core_float_bits)]
 #![allow(bad_style)]
+#![allow(unused_imports)]
+#![no_std]
+
+use core::num::Float;
 
 extern crate compiler_builtins;
 
+#[cfg(all(target_arch = "arm",
+          not(any(target_env = "gnu", target_env = "musl")),
+          target_os = "linux",
+          test))]
+extern crate utest_cortex_m_qemu;
+
+#[cfg(all(target_arch = "arm",
+          not(any(target_env = "gnu", target_env = "musl")),
+          target_os = "linux",
+          test))]
+#[macro_use]
+extern crate utest_macros;
+
+#[cfg(all(target_arch = "arm",
+          not(any(target_env = "gnu", target_env = "musl")),
+          target_os = "linux",
+          test))]
+macro_rules! panic { // overrides `panic!`
+    ($($tt:tt)*) => {
+        upanic!($($tt)*);
+    };
+}
+
 include!(concat!(env!("OUT_DIR"), "/generated.rs"));