File tree Expand file tree Collapse file tree 9 files changed +99
-3
lines changed Expand file tree Collapse file tree 9 files changed +99
-3
lines changed Original file line number Diff line number Diff line change 25
25
strategy :
26
26
matrix :
27
27
target :
28
- # TODO: Currently, valuable cannot build with targets that do not have atomic CAS.
29
- # We should port https://github.com/rust-lang/futures-rs/pull/2400.
30
- # - thumbv6m-none-eabi
28
+ - thumbv6m-none-eabi
31
29
- thumbv7m-none-eabi
32
30
runs-on : ubuntu-latest
33
31
steps :
58
56
# run: cargo install cargo-hack
59
57
# - run: cargo hack build --workspace --feature-powerset --no-dev-deps
60
58
59
+ # When this job failed, run ci/no_atomic_cas.sh and commit result changes.
60
+ # TODO(taiki-e): Ideally, this should be automated using a bot that creates
61
+ # PR when failed, but there is no bandwidth to implement it
62
+ # right now...
63
+ codegen :
64
+ runs-on : ubuntu-latest
65
+ steps :
66
+ - uses : actions/checkout@v2
67
+ - name : Install Rust
68
+ run : rustup update nightly && rustup default nightly
69
+ - run : ci/no_atomic_cas.sh
70
+ - run : git diff --exit-code
71
+
61
72
fmt :
62
73
runs-on : ubuntu-latest
63
74
steps :
Original file line number Diff line number Diff line change
1
+ #! /bin/bash
2
+
3
+ # Update the list of targets that do not have atomic CAS (compare-and-swap).
4
+ #
5
+ # Usage:
6
+ # ./ci/no_atomic_cas.sh
7
+
8
+ set -euo pipefail
9
+ IFS=$' \n\t '
10
+
11
+ cd " $( cd " $( dirname " $0 " ) " && pwd) " /..
12
+
13
+ file=" valuable/no_atomic_cas.rs"
14
+
15
+ {
16
+ echo " // This file is @generated by $( basename " $0 " ) ."
17
+ echo " // It is not intended for manual editing."
18
+ echo " "
19
+ echo " const NO_ATOMIC_CAS_TARGETS: &[&str] = &["
20
+ } > " $file "
21
+
22
+ for target in $( rustc --print target-list) ; do
23
+ res=$( rustc --print target-spec-json -Z unstable-options --target " $target " \
24
+ | jq -r " select(.\" atomic-cas\" == false)" )
25
+ [[ -z " $res " ]] || echo " \" $target \" ," >> " $file "
26
+ done
27
+
28
+ echo " ];" >> " $file "
Original file line number Diff line number Diff line change
1
+ #![ warn( rust_2018_idioms, single_use_lifetimes) ]
2
+
3
+ use std:: env;
4
+
5
+ include ! ( "no_atomic_cas.rs" ) ;
6
+
7
+ // The rustc-cfg listed below are considered public API, but it is *unstable*
8
+ // and outside of the normal semver guarantees:
9
+ //
10
+ // - `valuable_no_atomic_cas`
11
+ // Assume the target does not have atomic CAS (compare-and-swap).
12
+ // This is usually detected automatically by the build script, but you may
13
+ // need to enable it manually when building for custom targets or using
14
+ // non-cargo build systems that don't run the build script.
15
+ //
16
+ // With the exceptions mentioned above, the rustc-cfg strings below are
17
+ // *not* public API. Please let us know by opening a GitHub issue if your build
18
+ // environment requires some way to enable these cfgs other than by executing
19
+ // our build script.
20
+ fn main ( ) {
21
+ let target = match env:: var ( "TARGET" ) {
22
+ Ok ( target) => target,
23
+ Err ( e) => {
24
+ println ! (
25
+ "cargo:warning=valuable: unable to get TARGET environment variable: {}" ,
26
+ e
27
+ ) ;
28
+ return ;
29
+ }
30
+ } ;
31
+
32
+ // Note that this is `no_*`, not `has_*`. This allows treating
33
+ // `cfg(target_has_atomic = "ptr")` as true when the build script doesn't
34
+ // run. This is needed for compatibility with non-cargo build systems that
35
+ // don't run the build script.
36
+ if NO_ATOMIC_CAS_TARGETS . contains ( & & * target) {
37
+ println ! ( "cargo:rustc-cfg=valuable_no_atomic_cas" ) ;
38
+ }
39
+
40
+ println ! ( "cargo:rerun-if-changed=no_atomic_cas.rs" ) ;
41
+ }
Original file line number Diff line number Diff line change
1
+ // This file is @generated by no_atomic_cas.sh.
2
+ // It is not intended for manual editing.
3
+
4
+ const NO_ATOMIC_CAS_TARGETS : & [ & str ] = & [
5
+ "avr-unknown-gnu-atmega328" ,
6
+ "msp430-none-elf" ,
7
+ "riscv32i-unknown-none-elf" ,
8
+ "riscv32imc-unknown-none-elf" ,
9
+ "thumbv4t-none-eabi" ,
10
+ "thumbv6m-none-eabi" ,
11
+ ] ;
Original file line number Diff line number Diff line change @@ -164,6 +164,7 @@ impl<E: ?Sized + Enumerable> Enumerable for alloc::rc::Rc<E> {
164
164
}
165
165
}
166
166
167
+ #[ cfg( not( valuable_no_atomic_cas) ) ]
167
168
#[ cfg( feature = "alloc" ) ]
168
169
impl < E : ?Sized + Enumerable > Enumerable for alloc:: sync:: Arc < E > {
169
170
fn definition ( & self ) -> EnumDef < ' _ > {
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ impl<L: ?Sized + Listable> Listable for alloc::rc::Rc<L> {
26
26
}
27
27
}
28
28
29
+ #[ cfg( not( valuable_no_atomic_cas) ) ]
29
30
#[ cfg( feature = "alloc" ) ]
30
31
impl < L : ?Sized + Listable > Listable for alloc:: sync:: Arc < L > {
31
32
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ impl<M: ?Sized + Mappable> Mappable for alloc::rc::Rc<M> {
26
26
}
27
27
}
28
28
29
+ #[ cfg( not( valuable_no_atomic_cas) ) ]
29
30
#[ cfg( feature = "alloc" ) ]
30
31
impl < M : ?Sized + Mappable > Mappable for alloc:: sync:: Arc < M > {
31
32
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
Original file line number Diff line number Diff line change @@ -108,6 +108,7 @@ impl<S: ?Sized + Structable> Structable for alloc::rc::Rc<S> {
108
108
}
109
109
}
110
110
111
+ #[ cfg( not( valuable_no_atomic_cas) ) ]
111
112
#[ cfg( feature = "alloc" ) ]
112
113
impl < S : ?Sized + Structable > Structable for alloc:: sync:: Arc < S > {
113
114
fn definition ( & self ) -> StructDef < ' _ > {
Original file line number Diff line number Diff line change @@ -69,6 +69,7 @@ impl<V: ?Sized + Valuable> Valuable for alloc::rc::Rc<V> {
69
69
}
70
70
}
71
71
72
+ #[ cfg( not( valuable_no_atomic_cas) ) ]
72
73
#[ cfg( feature = "alloc" ) ]
73
74
impl < V : ?Sized + Valuable > Valuable for alloc:: sync:: Arc < V > {
74
75
fn as_value ( & self ) -> Value < ' _ > {
You can’t perform that action at this time.
0 commit comments