@@ -167,40 +167,33 @@ jobs:
167167 RUSTFLAGS : ${{ matrix.rustflags }}
168168
169169 cross-tests :
170- name : " ${{ matrix.target }} (via cross)"
170+ name : " ${{ matrix.target_feature }} on ${{ matrix. target }} (via cross)"
171171 runs-on : ubuntu-latest
172172 strategy :
173173 fail-fast : false
174- # TODO: Sadly, we cant configure target-feature in a meaningful way
175- # because `cross` doesn't tell qemu to enable any non-default cpu
176- # features, nor does it give us a way to do so.
177- #
178- # Ultimately, we'd like to do something like [rust-lang/stdarch][stdarch].
179- # This is a lot more complex... but in practice it's likely that we can just
180- # snarf the docker config from around [here][1000-dockerfiles].
181- #
182- # [stdarch]: https://github.com/rust-lang/stdarch/blob/a5db4eaf/.github/workflows/main.yml#L67
183- # [1000-dockerfiles]: https://github.com/rust-lang/stdarch/tree/a5db4eaf/ci/docker
184174
185175 matrix :
186176 target :
187- - i586-unknown-linux-gnu
188- # 32-bit arm has a few idiosyncracies like having subnormal flushing
189- # to zero on by default. Ideally we'd set
190177 - armv7-unknown-linux-gnueabihf
191- - aarch64-unknown-linux-gnu
192- # Note: The issue above means neither of these mips targets will use
193- # MSA (mips simd) but MIPS uses a nonstandard binary representation
194- # for NaNs which makes it worth testing on despite that.
178+ - thumbv7neon-unknown-linux-gnueabihf # includes neon by default
179+ - aarch64-unknown-linux-gnu # includes neon by default
180+ - powerpc-unknown-linux-gnu
181+ - powerpc64le-unknown-linux-gnu # includes altivec by default
182+ - riscv64gc-unknown-linux-gnu
183+ # MIPS uses a nonstandard binary representation for NaNs which makes it worth testing
184+ # non-nightly since https://github.com/rust-lang/rust/pull/113274
195185 # - mips-unknown-linux-gnu
196186 # - mips64-unknown-linux-gnuabi64
197- - riscv64gc-unknown-linux-gnu
198- # TODO this test works, but it appears to time out
199- # - powerpc-unknown-linux-gnu
200- # TODO this test is broken, but it appears to be a problem with QEMU, not us.
201- # - powerpc64le-unknown-linux-gnu
202- # TODO enable this once a new version of cross is released
187+ # Lots of errors in QEMU and no real hardware to test on. Not clear if it's QEMU or bad codegen.
203188 # - powerpc64-unknown-linux-gnu
189+ target_feature : [default]
190+ include :
191+ - { target: powerpc64le-unknown-linux-gnu, target_feature: "+vsx" }
192+ # Fails due to QEMU floating point errors, probably handling subnormals incorrectly.
193+ # This target is somewhat redundant, since ppc64le has altivec as well.
194+ # - { target: powerpc-unknown-linux-gnu, target_feature: "+altivec" }
195+ # We should test this, but cross currently can't run it
196+ # - { target: riscv64gc-unknown-linux-gnu, target_feature: "+v,+zvl128b" }
204197
205198 steps :
206199 - uses : actions/checkout@v2
@@ -217,19 +210,35 @@ jobs:
217210 # being part of the tarball means we can't just use the download/latest
218211 # URL :(
219212 run : |
220- CROSS_URL=https://github.com/rust-embedded /cross/releases/download/v0.2.1 /cross-v0.2.1 -x86_64-unknown-linux-gnu.tar.gz
213+ CROSS_URL=https://github.com/cross-rs /cross/releases/download/v0.2.5 /cross-x86_64-unknown-linux-gnu.tar.gz
221214 mkdir -p "$HOME/.bin"
222215 curl -sfSL --retry-delay 10 --retry 5 "${CROSS_URL}" | tar zxf - -C "$HOME/.bin"
223216 echo "$HOME/.bin" >> $GITHUB_PATH
224217
218+ - name : Configure Emulated CPUs
219+ run : |
220+ echo "CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER=qemu-ppc -cpu e600" >> $GITHUB_ENV
221+ # echo "CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_RUNNER=qemu-riscv64 -cpu rv64,zba=true,zbb=true,v=true,vlen=256,vext_spec=v1.0" >> $GITHUB_ENV
222+
223+ - name : Configure RUSTFLAGS
224+ shell : bash
225+ run : |
226+ case "${{ matrix.target_feature }}" in
227+ default)
228+ echo "RUSTFLAGS=" >> $GITHUB_ENV;;
229+ *)
230+ echo "RUSTFLAGS=-Ctarget-feature=${{ matrix.target_feature }}" >> $GITHUB_ENV
231+ ;;
232+ esac
233+
225234 - name : Test (debug)
226235 run : cross test --verbose --target=${{ matrix.target }}
227236
228237 - name : Test (release)
229238 run : cross test --verbose --target=${{ matrix.target }} --release
230239
231240 features :
232- name : " Check cargo features (${{ matrix.simd }} × ${{ matrix.features }})"
241+ name : " Test cargo features (${{ matrix.simd }} × ${{ matrix.features }})"
233242 runs-on : ubuntu-latest
234243 strategy :
235244 fail-fast : false
@@ -240,12 +249,8 @@ jobs:
240249 features :
241250 - " "
242251 - " --features std"
243- - " --features generic_const_exprs"
244- - " --features std --features generic_const_exprs"
245252 - " --features all_lane_counts"
246- - " --features all_lane_counts --features std"
247- - " --features all_lane_counts --features generic_const_exprs"
248- - " --features all_lane_counts --features std --features generic_const_exprs"
253+ - " --all-features"
249254
250255 steps :
251256 - uses : actions/checkout@v2
@@ -257,9 +262,9 @@ jobs:
257262 run : echo "CPU_FEATURE=$(lscpu | grep -o avx512[a-z]* | sed s/avx/+avx/ | tr '\n' ',' )" >> $GITHUB_ENV
258263 - name : Check build
259264 if : ${{ matrix.simd == '' }}
260- run : RUSTFLAGS="-Dwarnings" cargo check --all-targets --no-default-features ${{ matrix.features }}
265+ run : RUSTFLAGS="-Dwarnings" cargo test --all-targets --no-default-features ${{ matrix.features }}
261266 - name : Check AVX
262267 if : ${{ matrix.simd == 'avx512' && contains(env.CPU_FEATURE, 'avx512') }}
263268 run : |
264269 echo "Found AVX features: $CPU_FEATURE"
265- RUSTFLAGS="-Dwarnings -Ctarget-feature=$CPU_FEATURE" cargo check --all-targets --no-default-features ${{ matrix.features }}
270+ RUSTFLAGS="-Dwarnings -Ctarget-feature=$CPU_FEATURE" cargo test --all-targets --no-default-features ${{ matrix.features }}
0 commit comments