float-cmp icon indicating copy to clipboard operation
float-cmp copied to clipboard

Need help compiling this crate

Open dayfine opened this issue 3 years ago • 1 comments

I cannot compile this crate. I am depending on it through https://crates.io/crates/mockall and building using https://bazel.build/ with https://github.com/google/cargo-raze. The commit is https://github.com/dayfine/xlab/commit/9f9bf1ea4145c1264fb8207f62c829c420f67a41.

The error I see is:

NFO: Found 1 target...
ERROR: /private/var/tmp/_bazel_difan/f78d9d7b4392e86afba7ecb9acf5e2e3/external/raze__float_cmp__0_9_0/BUILD.bazel:34:13: Compiling Rust rlib float_cmp v0.9.0 (6 files) failed: (Exit 1): sandbox-exec failed: error executing command
  (cd /private/var/tmp/_bazel_difan/f78d9d7b4392e86afba7ecb9acf5e2e3/sandbox/darwin-sandbox/1694/execroot/xlab && \
  exec env - \
    CARGO_CFG_TARGET_ARCH=x86_64 \
    CARGO_CFG_TARGET_OS=darwin \
    CARGO_CRATE_NAME=float_cmp \
    CARGO_MANIFEST_DIR='${pwd}/external/raze__float_cmp__0_9_0' \
    CARGO_PKG_AUTHORS='' \
    CARGO_PKG_DESCRIPTION='' \
    CARGO_PKG_HOMEPAGE='' \
    CARGO_PKG_NAME=float_cmp \
    CARGO_PKG_VERSION=0.9.0 \
    CARGO_PKG_VERSION_MAJOR=0 \
    CARGO_PKG_VERSION_MINOR=9 \
    CARGO_PKG_VERSION_PATCH=0 \
    CARGO_PKG_VERSION_PRE='' \
    SYSROOT=bazel-out/darwin-fastbuild/bin/external/rust_darwin_x86_64/toolchain_for_x86_64-apple-darwin_impl \
    TMPDIR=/var/folders/yn/sjqdt0f50hbfg723kw354ng00000gn/T/ \
  /usr/bin/sandbox-exec -f /private/var/tmp/_bazel_difan/f78d9d7b4392e86afba7ecb9acf5e2e3/sandbox/darwin-sandbox/1694/sandbox.sb /var/tmp/_bazel_difan/install/ebbb2540c6000feeb8873385c487a79c/process-wrapper '--timeout=0' '--kill_delay=15' bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/rules_rust/util/process_wrapper/process_wrapper --arg-file bazel-out/darwin-fastbuild/bin/external/raze__num_traits__0_2_15/num_traits_build_script.linksearchpaths --subst 'pwd=${pwd}' -- bazel-out/darwin-fastbuild/bin/external/rust_darwin_x86_64/toolchain_for_x86_64-apple-darwin_impl/bin/rustc external/raze__float_cmp__0_9_0/src/lib.rs '--crate-name=float_cmp' '--crate-type=rlib' '--error-format=human' '--codegen=metadata=-2829191614' '--codegen=extra-filename=-2829191614' '--out-dir=bazel-out/darwin-fastbuild/bin/external/raze__float_cmp__0_9_0' '--codegen=opt-level=0' '--codegen=debuginfo=0' '--remap-path-prefix=${pwd}=.' '--emit=dep-info,link' '--color=always' '--target=x86_64-apple-darwin' -L bazel-out/darwin-fastbuild/bin/external/rust_darwin_x86_64/toolchain_for_x86_64-apple-darwin_impl/lib/rustlib/x86_64-apple-darwin/lib '--cap-lints=allow' '--edition=2018' '--extern=num_traits=bazel-out/darwin-fastbuild/bin/external/raze__num_traits__0_2_15/libnum_traits-784186115.rlib' '-Ldependency=bazel-out/darwin-fastbuild/bin/external/raze__num_traits__0_2_15')
error[E0599]: no method named `abs` found for type `f32` in the current scope
   --> external/raze__float_cmp__0_9_0/src/eq.rs:100:29
    |
100 |             ((self - other).abs() <= margin.epsilon) ||
    |                             ^^^ method not found in `f32`

error[E0599]: no method named `abs` found for type `f64` in the current scope
   --> external/raze__float_cmp__0_9_0/src/eq.rs:226:29
    |
226 |             ((self - other).abs() <= margin.epsilon) ||
    |                             ^^^ method not found in `f64`

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0599`.

I know this is https://github.com/rust-lang/rust/issues/50145, and I also saw https://github.com/mikedilger/float-cmp/issues/25. I am not familiar with no_std so I am not sure what's the right thing to do, e.g.:

  • It seems I am compiling using num_traits. Do I want num_traits or not?
  • Could this be fixed if I force enable std feature? I don't think I've actually been able to do that

Currently I might need to not using mockall and this crate, but I suppose there might be an easy fix that I cannot find.

dayfine avatar Jul 02 '22 17:07 dayfine

If you enable the 'ratio' feature it will pull in num_traits which defines .abs() in the FloatCore trait which will get pulled in.

If you were using the standard library (vast majority of cases), then std::f32 would have already defined .abs()

I suppose since this issue has come up yet again I suppose I could include abs() functions in the crate (copied from somewhere else so I don't muck it up). But don't expect that I'm pretty busy right now. If using ratio feature doesn't work, let me know.

mikedilger avatar Jul 05 '22 05:07 mikedilger