Closed Bug 1680495 Opened 5 years ago Closed 4 years ago

Broken build on arm in qcms because of nightly-only functions (vaddq_f32)

Categories

(Core :: Graphics: Color Management, defect)

Firefox 83
ARM
Linux
defect

Tracking

()

RESOLVED WORKSFORME
Tracking Status
firefox-esr78 --- unaffected
firefox83 --- wontfix
firefox84 --- wontfix
firefox85 --- wontfix
firefox86 --- wontfix
firefox87 --- fix-optional

People

(Reporter: msirringhaus, Unassigned)

References

(Regression)

Details

(Keywords: regression)

We are seeing a broken build on arm:

[ 1072s] 13:15.88 error[E0432]: unresolved imports `core::arch::arm::float32x4_t`, `core::arch::arm::int32x4_t`, `core::arch::arm::vaddq_f32`
[ 1072s] 13:15.89  --> gfx/qcms/src/transform_neon.rs:6:23
[ 1072s] 13:15.89   |
[ 1072s] 13:15.89 6 | use core::arch::arm::{float32x4_t, int32x4_t, vaddq_f32};
[ 1072s] 13:15.89   |                       ^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^ no `vaddq_f32` in `arch::arm`
[ 1072s] 13:15.89   |                       |            |
[ 1072s] 13:15.89   |                       |            no `int32x4_t` in `arch::arm`
[ 1072s] 13:15.89   |                       |            help: a similar name exists in the module: `int8x4_t`
[ 1072s] 13:15.89   |                       no `float32x4_t` in `arch::arm`

All of those functions seem to be nightly-only, thus not available with stable rust compiler (https://doc.rust-lang.org/core/arch/arm/fn.vaddq_f32.html)

Regressed by: 1666057
Has Regression Range: --- → yes

Looking at the code, aarch64 should be affected by the same thing.

We're able to build for ARM: https://treeherder.mozilla.org/jobs?repo=autoland&selectedTaskRun=E1uNbHvLRtmBuklDEKT0TA.0

qcms sets RUSTC_BOOTSTRAP=1 to get access to nightly only things: https://searchfox.org/mozilla-central/source/gfx/qcms/build.rs#2

Is there something different about your builds that causes this not to work?

Hm, we are currently building with rustc 1.46. Maybe that is too old? Couldn't find in the docs since when these functions are available.

1.46.0 should be new enough. Can you try compiling qcms standalone with your toolchain? i.e. cargo build in the qcms directory.

Set release status flags based on info from the regressing bug 1666057

Severity: -- → S4

(In reply to msirringhaus from comment #1)

Looking at the code, aarch64 should be affected by the same thing.

aarch64 is not affected. Tested with version 84.0.0 and 84.0.1.

(In reply to Jeff Muizelaar [:jrmuizel] from comment #2)

We're able to build for ARM: https://treeherder.mozilla.org/jobs?repo=autoland&selectedTaskRun=E1uNbHvLRtmBuklDEKT0TA.0

qcms sets RUSTC_BOOTSTRAP=1 to get access to nightly only things: https://searchfox.org/mozilla-central/source/gfx/qcms/build.rs#2

Is there something different about your builds that causes this not to work?

RUSTC_BOOTSTRAP=1 is set.
Build log:

[ 1224s] 15:56.02      Running `CARGO=/usr/bin/cargo CARGO_CRATE_NAME=qcms CARGO_MANIFEST_DIR=/home/abuild/rpmbuild/BUILD/firefox-84.0.1/gfx/qcms CARGO_PKG_AUTHORS='Jeff Muizelaar:Benoit Girard:Andrew Osmond' CARGO_PKG_DESCRIPTION='lightweight color management' CARGO_PKG_HOMEPAGE= CARGO_PKG_LICENSE=MIT CARGO_PKG_LICENSE_FILE= CARGO_PKG_NAME=qcms CARGO_PKG_REPOSITORY= CARGO_PKG_VERSION=0.1.0 CARGO_PKG_VERSION_MAJOR=0 CARGO_PKG_VERSION_MINOR=1 CARGO_PKG_VERSION_PATCH=0 CARGO_PKG_VERSION_PRE= LD_LIBRARY_PATH='/home/abuild/rpmbuild/BUILD/obj/release/deps:/usr/lib' OUT_DIR=/home/abuild/rpmbuild/BUILD/obj/armv7-unknown-linux-gnueabihf/release/build/qcms-9a3ba5ee86f2d7de/out RUSTC_BOOTSTRAP=1 /usr/bin/rustc --crate-name qcms --edition=2018 gfx/qcms/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=2 -C panic=abort -Cembed-bitcode=no -C metadata=252e7b0a200b450d -C extra-filename=-252e7b0a200b450d --out-dir /home/abuild/rpmbuild/BUILD/obj/armv7-unknown-linux-gnueabihf/release/deps --target armv7-unknown-linux-gnueabihf -C linker=/home/abuild/rpmbuild/BUILD/firefox-84.0.1/build/cargo-linker -L dependency=/home/abuild/rpmbuild/BUILD/obj/armv7-unknown-linux-gnueabihf/release/deps -L dependency=/home/abuild/rpmbuild/BUILD/obj/release/deps --extern libc=/home/abuild/rpmbuild/BUILD/obj/armv7-unknown-linux-gnueabihf/release/deps/liblibc-67c9d94d6ae701d2.rmeta -C opt-level=2 --cap-lints warn -Cembed-bitcode=yes -C codegen-units=1`
[ 1225s] 15:56.69 error[E0432]: unresolved imports `core::arch::arm::float32x4_t`, `core::arch::arm::int32x4_t`, `core::arch::arm::vaddq_f32`
[ 1225s] 15:56.69  --> gfx/qcms/src/transform_neon.rs:6:23
[ 1225s] 15:56.69   |
[ 1225s] 15:56.69 6 | use core::arch::arm::{float32x4_t, int32x4_t, vaddq_f32};
[ 1225s] 15:56.69   |                       ^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^ no `vaddq_f32` in `arch::arm`
[ 1225s] 15:56.69   |                       |            |
[ 1225s] 15:56.69   |                       |            no `int32x4_t` in `arch::arm`
[ 1225s] 15:56.69   |                       |            help: a similar name exists in the module: `int8x4_t`
[ 1225s] 15:56.69   |                       no `float32x4_t` in `arch::arm`

If I run cargo build --features c_bindings --target armv7-unknown-linux-gnueabihf in gfx/qcms it correctly builds for me. Does it build for you?

Flags: needinfo?(guillaume.gardet)

(In reply to Jeff Muizelaar [:jrmuizel] from comment #8)

If I run cargo build --features c_bindings --target armv7-unknown-linux-gnueabihf in gfx/qcms it correctly builds for me. Does it build for you?

I get:

error: Package `qcms v0.1.0 (/mnt/firefox-84.0.1/gfx/qcms)` does not have these features: `c_bindings`

I I drop the c_bindings part (and add --verbose), I get:

     Running `rustc --crate-name qcms --edition=2018 gfx/qcms/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type lib --emit=dep-info,metadata,link -C opt-level=1 -C panic=abort -Cembed-bitcode=no -C debuginfo=2 -C debug-assertions=on -C metadata=41c65a762eba3519 -C extra-filename=-41c65a762eba3519 --out-dir /mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/deps --target armv7-unknown-linux-gnueabihf -C incremental=/mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/incremental -L dependency=/mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/deps -L dependency=/mnt/firefox-84.0.1/target/debug/deps --extern libc=/mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/deps/liblibc-a4c6e2d0c1645a32.rmeta`
error[E0432]: unresolved imports `core::arch::arm::float32x4_t`, `core::arch::arm::int32x4_t`, `core::arch::arm::vaddq_f32`
 --> gfx/qcms/src/transform_neon.rs:6:23
  |
6 | use core::arch::arm::{float32x4_t, int32x4_t, vaddq_f32};
  |                       ^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^ no `vaddq_f32` in `arch::arm`
  |                       |            |
  |                       |            no `int32x4_t` in `arch::arm`
  |                       |            help: a similar name exists in the module: `int8x4_t`
  |                       no `float32x4_t` in `arch::arm`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
error: could not compile `qcms`.

Caused by:
  process didn't exit successfully: `rustc --crate-name qcms --edition=2018 gfx/qcms/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type lib --emit=dep-info,metadata,link -C opt-level=1 -C panic=abort -Cembed-bitcode=no -C debuginfo=2 -C debug-assertions=on -C metadata=41c65a762eba3519 -C extra-filename=-41c65a762eba3519 --out-dir /mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/deps --target armv7-unknown-linux-gnueabihf -C incremental=/mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/incremental -L dependency=/mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/deps -L dependency=/mnt/firefox-84.0.1/target/debug/deps --extern libc=/mnt/firefox-84.0.1/target/armv7-unknown-linux-gnueabihf/debug/deps/liblibc-a4c6e2d0c1645a32.rmeta` (exit code: 1)
Flags: needinfo?(guillaume.gardet)

Ok, it looks like rust 1.48.0 is needed for building on armv7-unknown-linux-gnueabihf. 1.46.0 works with thumbv7neon-linux-androideabi which is what we use in CI.

If you want this to build with 1.46.0 you could disable the neon code.

(In reply to Jeff Muizelaar [:jrmuizel] from comment #10)

Ok, it looks like rust 1.48.0 is needed for building on armv7-unknown-linux-gnueabihf. 1.46.0 works with thumbv7neon-linux-androideabi which is what we use in CI.

If you want this to build with 1.46.0 you could disable the neon code.

How could I disable it? Neon support is autodetected and I did not find the option to force disable.

(In reply to Guillaume GARDET from comment #11)

(In reply to Jeff Muizelaar [:jrmuizel] from comment #10)

Ok, it looks like rust 1.48.0 is needed for building on armv7-unknown-linux-gnueabihf. 1.46.0 works with thumbv7neon-linux-androideabi which is what we use in CI.

If you want this to build with 1.46.0 you could disable the neon code.

How could I disable it? Neon support is autodetected and I did not find the option to force disable.

Is target_feature=neon false in your configuration?

Flags: needinfo?(guillaume.gardet)

I am now able to use rust 1.50 and the build succeeds with rust 1.50.

Flags: needinfo?(guillaume.gardet)
Status: UNCONFIRMED → RESOLVED
Closed: 4 years ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.