Describe the bug
Compilation using bazel in a clang13Stdenv environment fails.
Something similar shows up in Darwin, which as clang as default environment, but this is to demonstrate with a self-contained example that this is a general problem with an isClang environment.
Steps To Reproduce
I've created a self-contained example repository with a small project that uses C and C++ files
https://github.com/hzeller/nix-bazel-with-clang
git clone https://github.com/hzeller/nix-bazel-with-clang
cd nix-bazel-with-clang
nix-shell --command 'bazel clean ; bazel build //... && bazel-bin/main'
This example provides a shell.nix that enables clang13Stdenv
{ pkgs ? import <nixpkgs> {} }:
let
#used_stdenv = pkgs.stdenv; # this works, using gcc
used_stdenv = pkgs.clang13Stdenv; # this is broken, using clang
in
used_stdenv.mkDerivation {
name = "Testing c and c++ compilation";
buildInputs = with pkgs;
[
bazel_4
];
}
Expected behavior
This should compile and run the small main program in bazel-bin/main, outputting
in C function foo() -> 42
in C++ function bar() -> 42
== SUCCESS ==
got values 42 and 42
... this happens instead
... but what actually happens is that the compilation fails:
INFO: Analyzed 2 targets (15 packages loaded, 63 targets configured).
INFO: Found 2 targets...
ERROR: /home/testuser/src/my/bazel-with-clang/BUILD:13:10: Compiling main.cc failed: (Exit 1): clang failed: error executing command /nix/store/i973rwv7n9pq74iac8jlly9s3xlrr0bc-clang-wrapper-13.0.1/bin/clang -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -Wunused-but-set-parameter -Wno-free-nonheap-object ... (remaining 25 argument(s) skipped)
Use --sandbox_debug to see verbose messages from the sandbox
main.cc:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
INFO: Elapsed time: 0.216s, Critical Path: 0.03s
INFO: 12 processes: 11 internal, 1 linux-sandbox.
FAILED: Build did NOT complete successfully
Additional context
Symptoms of this issue have been described in other bugs, but often in the Darwin context #150655
Also seen in unsuccessful pull request attempting to add Darwin support #214797
People have sometimes applied various workarounds successfully, but this of course need to work 'out of the box'.
Darwin is not the main culprit though, it is just surfacing the issue because there, the stdenv is based on clang.
The problem is more the way bazel and the compiler environment is wired up, setting flags and possibly providing compiler-wrappers needed, so I hope with the self-contained example in the git repo mentioned above it is possible for the nix-bazel maintainers to get to the root of the problem.
Notify maintainers
CC @NixOS/bazel @aherrmann @ylecornec
Also FYI @uri-canva
Metadata
Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.
- system: `"x86_64-linux"`
- host os: `Linux 5.15.90, NixOS, 22.11 (Raccoon), 22.11.2203.285b3ff0660`
- multi-user?: `yes`
- sandbox: `yes`
- version: `nix-env (Nix) 2.11.1`
- channels(root): `"nixos-22.11"`
- nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`
Describe the bug
Compilation using
bazelin aclang13Stdenvenvironment fails.Something similar shows up in Darwin, which as clang as default environment, but this is to demonstrate with a self-contained example that this is a general problem with an
isClangenvironment.Steps To Reproduce
I've created a self-contained example repository with a small project that uses C and C++ files
https://github.com/hzeller/nix-bazel-with-clang
This example provides a
shell.nixthat enables clang13StdenvExpected behavior
This should compile and run the small main program in
bazel-bin/main, outputting... this happens instead
... but what actually happens is that the compilation fails:
Additional context
Symptoms of this issue have been described in other bugs, but often in the Darwin context #150655
Also seen in unsuccessful pull request attempting to add Darwin support #214797
People have sometimes applied various workarounds successfully, but this of course need to work 'out of the box'.
Darwin is not the main culprit though, it is just surfacing the issue because there, the stdenv is based on clang.
The problem is more the way bazel and the compiler environment is wired up, setting flags and possibly providing compiler-wrappers needed, so I hope with the self-contained example in the git repo mentioned above it is possible for the nix-
bazelmaintainers to get to the root of the problem.Notify maintainers
CC @NixOS/bazel @aherrmann @ylecornec
Also FYI @uri-canva
Metadata
Please run
nix-shell -p nix-info --run "nix-info -m"and paste the result.