rules_fuzzing icon indicating copy to clipboard operation
rules_fuzzing copied to clipboard

Fail to build in MacOS

Open lgalfaso opened this issue 1 year ago • 3 comments

Expected Behavior

Fail to compile in MacOS

Actual Behavior

% bazel build --sandbox_debug //...
WARNING: For repository 'rules_java', the root module requires module version [email protected], but got [email protected] in the resolved dependency graph.
INFO: Analyzed 81 targets (127 packages loaded, 5768 targets configured).
ERROR: /private/var/tmp/_bazel_lmirelmann/cb69affe826809a241c0977900dc1520/external/_main~non_module_dependencies~honggfuzz/BUILD.bazel:131:11: Compiling libhfuzz/performance.c failed: (Exit 1): sandbox-exec failed: error executing CppCompile command 
  (cd /private/var/tmp/_bazel_lmirelmann/cb69affe826809a241c0977900dc1520/sandbox/darwin-sandbox/142/execroot/_main && \
  exec env - \
    PATH=/Users/lmirelmann/Library/Caches/bazelisk/downloads/sha256/0a9bfb9581a37049b7dcf204cc569b0458bedba20e84c55c0952161e036525ba/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/Library/TeX/texbin \
    PWD=/proc/self/cwd \
    TMPDIR=/var/folders/yy/tq88v3x96m7_03ct6y81plqh0000gn/T/ \
  /usr/bin/sandbox-exec -f /private/var/tmp/_bazel_lmirelmann/cb69affe826809a241c0977900dc1520/sandbox/darwin-sandbox/142/sandbox.sb /var/tmp/_bazel_lmirelmann/install/92a4dbac19ba995301329efc59d9b07c/process-wrapper '--timeout=0' '--kill_delay=15' '--stats=/private/var/tmp/_bazel_lmirelmann/cb69affe826809a241c0977900dc1520/sandbox/darwin-sandbox/142/stats.out' external/bazel_tools~cc_configure_extension~local_config_cc/cc_wrapper.sh -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -Wunused-but-set-parameter -Wno-free-nonheap-object -fcolor-diagnostics -fno-omit-frame-pointer -MD -MF bazel-out/darwin_x86_64-fastbuild/bin/external/_main~non_module_dependencies~honggfuzz/_objs/honggfuzz_engine/performance.d '-frandom-seed=bazel-out/darwin_x86_64-fastbuild/bin/external/_main~non_module_dependencies~honggfuzz/_objs/honggfuzz_engine/performance.o' -iquote external/_main~non_module_dependencies~honggfuzz -iquote bazel-out/darwin_x86_64-fastbuild/bin/external/_main~non_module_dependencies~honggfuzz '-mmacos-version-min=15.0' -D_GNU_SOURCE -D_HF_ARCH_LINUX -fPIC -Wall -Wextra -Werror -Wno-override-init -Wno-initializer-overrides -Wno-gnu-empty-initializer -Wno-format-pedantic -Wno-gnu-statement-expression -mllvm '-inline-threshold=2000' -fblocks '-fsanitize-coverage=0' '-fno-sanitize=all' -fno-stack-protector -U_FORTIFY_SOURCE '-D_FORTIFY_SOURCE=0' -no-canonical-prefixes -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c external/_main~non_module_dependencies~honggfuzz/libhfuzz/performance.c -o bazel-out/darwin_x86_64-fastbuild/bin/external/_main~non_module_dependencies~honggfuzz/_objs/honggfuzz_engine/performance.o)
In file included from external/_main~non_module_dependencies~honggfuzz/libhfuzz/performance.c:10:
external/_main~non_module_dependencies~honggfuzz/honggfuzz.h:374:5: error: unknown type name 'timer_t'; did you mean 'time_t'?
  374 |     timer_t timerId;
      |     ^~~~~~~
      |     time_t
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_time_t.h:31:33: note: 'time_t' declared here
   31 | typedef __darwin_time_t         time_t;
      |                                 ^
1 error generated.
INFO: Elapsed time: 5.920s, Critical Path: 0.15s
INFO: 39 processes: 38 internal, 1 darwin-sandbox.
ERROR: Build did NOT complete successfully
% bazel query --output=build @local_config_platform//:host
# /private/var/tmp/_bazel_lmirelmann/cb69affe826809a241c0977900dc1520/external/local_config_platform/BUILD.bazel:4:9
platform(
  name = "host",
  constraint_values = ["@platforms//cpu:x86_64", "@platforms//os:osx"],
)
# Rule host instantiated at (most recent call last):
#   /private/var/tmp/_bazel_lmirelmann/cb69affe826809a241c0977900dc1520/external/local_config_platform/BUILD.bazel:4:9 in <toplevel>

For reasons that are not clear to me, the compilation of honggfuzz has the flag -D_HF_ARCH_LINUX that should not be there (as there is a select in honggfuzz.BUILD). Not sure why this is happening.

Steps to Reproduce the Problem

  1. From a Mac, run bazel build //...

Specifications

  • Version: Git at commit 1b9ddac66217c77f4eea0d3a8b765953ab5080b5
  • Platform: MacOS 15.0.1, x86

lgalfaso avatar Oct 23 '24 18:10 lgalfaso

I'm leaning to think that there is an issue with Bazel.

If I change to use bazel 6.5.0, then

% git diff
diff --git a/.bazelversion b/.bazelversion
index a8907c0..f22d756 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-7.0.2
+6.5.0
% bazel build fuzzing/engines:honggfuzz
INFO: Analyzed target //fuzzing/engines:honggfuzz (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //fuzzing/engines:honggfuzz up-to-date:
  bazel-bin/external/honggfuzz/libhonggfuzz_engine.lo
INFO: Elapsed time: 0.160s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action

Forcing to use bazel 7.0.0, then the same error shows up.

lgalfaso avatar Oct 23 '24 19:10 lgalfaso

Bazelisk has a --bisect flag that automatically finds the breaking Bazel commit. Could you run that?

fmeum avatar Oct 23 '24 19:10 fmeum

OMG this was painful. Executed

BAZELISK_SHUTDOWN=True BAZELISK_CLEAN=True bazel --bisect=ba3e0cc691fc758ff9510271b962685fcaf14691..7.0.0 build "@honggfuzz//:honggfuzz_engine"

(yes, started with ba3e0cc691fc758ff9510271b962685fcaf14691 as bazel was somehow broken in many releases in between and had to do a scripted bisect using some other script to find a good build).

It shows that

first bad commit is https://github.com/bazelbuild/bazel/commit/30d033cd7e2153e8b8d7eb034a5323053192ecaa

This is, looks like this is related to bzlmod :(

To double check this, executed

bazel build --noenable_bzlmod "@honggfuzz//:honggfuzz_engine"

and it build without errors.

Not sure how to move forward, as I ended in this rabbit hole when trying to use rules_fuzzing as a dependency from Bazel Repository Central.

Side note, bazelisk is a good tool, but a little more flexibility, it would be amazing. eg

  • Do something when a version from bazel is not available (ie, do not fail with the error "could not run Bazel: could not download Bazel: failed to download bazel: failed to download bazel: HTTP GET https://storage.googleapis.com/bazel-builds/artifacts/macos/1da8a825c0fba882f33ea6998a76ff8265fcd32c/bazel failed with error 404", just pick a few version up or down and keep on trying to reduce the range)
  • Ask whether the result is good

lgalfaso avatar Oct 23 '24 21:10 lgalfaso