uber / hermetic_cc_toolchain

Bazel C/C++ toolchain for cross-compiling C/C++ programs
MIT License
299 stars 45 forks source link

ld.lld seems unavailable when linking with libtool #198

Open chouquette opened 1 month ago

chouquette commented 1 month ago

Hello :wave:

First of all, I'm very new to bazel, so please forgive any incorrect wording and stupid questions :sweat_smile:

I'm trying to switch to bazel with a bunch of native dependencies, most of which get built using autotools. The autotools part is wrapped using rules_foreign_cc. In fairness, I'm not sure if the issue lies more in foreign_cc or here, but please feel free to redirect me there.

Our main issue comes down to libtool not detecting ld.lld as a GNU linker, but I believe that's because the linker is simply not there. Here's a minimal repro: minimal_repro.zip

Libtool gets confused by what the linker is and fails to generate the .so, which causes the main visible error:

$> bazel build :libxcrypt --sandbox_debug
...
/usr/bin/install: cannot stat '.libs/libcrypt.so.2.0.0': No such file or directory
make[1]: *** [Makefile:1418: install-libLTLIBRARIES] Error 1
make[1]: Leaving directory '/home/hugo.beauzee/.cache/bazel/_bazel_hugo.beauzee/d935f933fb7b3a399ddc63c1fd0c0e1d/sandbox/processwrapper-sandbox/4/execroot/_main/bazel-out/k8-fastbuild/bin/libxcrypt.build_tmpdir'
make: *** [Makefile:3246: install-am] Error 2
_____ END BUILD LOGS _____

Looking at bazel-out/k8-fastbuild/bin/libxcrypt_foreign_cc/Configure.log we can see the compiler and linker being provided to xcrypt's build system:

+ CC=/home/hugo.beauzee/.cache/bazel/_bazel_hugo.beauzee/d935f933fb7b3a399ddc63c1fd0c0e1d/sandbox/processwrapper-sandbox/5/execroot/_main/external/hermetic_cc_toolchain~~toolchains~zig_sdk/tools/x86_64-linux-gnu.2.28/c++
+ CXX=/home/hugo.beauzee/.cache/bazel/_bazel_hugo.beauzee/d935f933fb7b3a399ddc63c1fd0c0e1d/sandbox/processwrapper-sandbox/5/execroot/_main/external/hermetic_cc_toolchain~~toolchains~zig_sdk/tools/x86_64-linux-gnu.2.28/c++
+ LD=/home/hugo.beauzee/.cache/bazel/_bazel_hugo.beauzee/d935f933fb7b3a399ddc63c1fd0c0e1d/sandbox/processwrapper-sandbox/5/execroot/_main/external/hermetic_cc_toolchain~~toolchains~zig_sdk/tools/ld.lld

While C compiler is there:

$> /home/hugo.beauzee/.cache/bazel/_bazel_hugo.beauzee/d935f933fb7b3a399ddc63c1fd0c0e1d/sandbox/processwrapper-sandbox/5/execroot/_main/external/hermetic_cc_toolchain~~toolchains~zig_sdk/tools/x86_64-linux-gnu.2.28/c++ -v 
clang version 17.0.6 (https://github.com/ziglang/zig-bootstrap 4c78aa1bba84dbd324e178932cd52221417f63da)
Target: x86_64-unknown-linux-gnu.2.28

The linker doesn't appear to be:

$> /home/hugo.beauzee/.cache/bazel/_bazel_hugo.beauzee/d935f933fb7b3a399ddc63c1fd0c0e1d/sandbox/processwrapper-sandbox/5/execroot/_main/external/hermetic_cc_toolchain~~toolchains~zig_sdk/tools/ld.lld -v
zsh: no such file or directory: /home/hugo.beauzee/.cache/bazel/_bazel_hugo.beauzee/d935f933fb7b3a399ddc63c1fd0c0e1d/sandbox/processwrapper-sandbox/5/execroot/_main/external/hermetic_cc_toolchain~~toolchains~zig_sdk/tools/ld.lld

while I'd expect it to be, since the build is ran with --sandbox_debug

Thanks a lot in advance for taking a look!

chouquette commented 1 month ago

Oh I forgot to mention that running the build with --spawn_strategy=local makes the issue disappear, which makes me think about a problem with the linker's availability in the sandbox even more