facebook / buck2

Build system, successor to Buck

Home Page:https://buck2.build/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Why can not Buck trigger Buildbarn's g++ using system_cxx_toolchain?

yaoddao opened this issue · comments

Buck can not trigger Buildbarn`s g++ using system_cxx_toolchain

Problem description

  • Prerequisite: Buck can already trigger the Buildbarn action: eg. various shell commands.
  • Buck cannot trigger Buildbarn worker to g++ build using configuration below in system_cxx_toolchain(), reporting errors.
    (PS. In Buildbarn worker's container, PATH is correct and includes /usr/bin/g++;/bin/g++)
system_cxx_toolchain(
     ¦ name = "cxx",
     ¦ visibility = ["PUBLIC"],
     ¦ compiler = "gcc",
     ¦ compiler_type = "gcc",
     ¦ cxx_compiler = "g++", **# Pay attention here!**
     ¦ linker = "g++",
   )

Error info:

user@***/codes (feature-buck2-base)>buck2 build -v 4 //buildbarn_helloworld/cpp/hello_world:
File changed: shim//4913
File changed: shim//BUCK
File changed: shim//BUCK
Running action: root//buildbarn_helloworld/cpp/hello_world:main (prelude//platforms:default#524f8da68ea2a374) (cxx_compile main.cpp (pic)) (build), re(OSFamily=linux,container-image=docke
r://ghcr.io/catthehacker/ubuntu:act-22.04@sha256:5f9c35c25db1d51a8ddaae5c0ba8d3c163c5e9a4a6cc97acd409ac7eae239448) executor: d1bab98dd5b618541d3f29e93f46f96aeeae064925e90eeade10cebc062f41
99:142
Running action: root//buildbarn_helloworld/cpp/hello_world:main (prelude//platforms:default#524f8da68ea2a374) (cxx_link libbuildbarn_helloworld_cpp_hello_world_main.so) (build), re(OSFami
ly=linux,container-image=docker://ghcr.io/catthehacker/ubuntu:act-22.04@sha256:5f9c35c25db1d51a8ddaae5c0ba8d3c163c5e9a4a6cc97acd409ac7eae239448) executor: febb48c18de54cceced33acb8397b679
7f204c81518aabb7c05b6713309b5ba2:142
Action failed: root//buildbarn_helloworld/cpp/hello_world:main (cxx_link libbuildbarn_helloworld_cpp_hello_world_main.so)
Internal error (stage: remote_call_error): Remote Execution Error (GRPC-SESSION-ID): RE: execution with digest febb48c18de54cceced33acb8397b6797f204c81518aabb7c05b6713309b5ba2:142: Error
was returned on the stream by RE: Failed to run command: **Cannot find executable "g++" in search paths ""**
stdout:
stderr:
Build ID: a884fe82-a227-4031-9252-e66e01a3dd29
Network: (GRPC-SESSION-ID)
Jobs completed: 11. Time elapsed: 0.4s.
Cache hits: 0%. Commands: 1 (cached: 0, remote: 1, local: 0)
BUILD FAILED

PS. Pay attention error above: Failed to run command: Cannot find executable "g++" in search paths "".
Buildbarn searches g++ in paths "", which is an empty directory, and it should not be done.
I have tested that Bazel does not have this issue.

  • But if you use configuration below, Buck can trigger the g++ build in Buildbarn and get main.o from Buildbarn.
  system_cxx_toolchain(
    ¦ name = "cxx",
    ¦ visibility = ["PUBLIC"],
    ¦ compiler = "gcc",
    ¦ compiler_type = "gcc",
    ¦ cxx_compiler = "/usr/bin/g++",  *Pay attention here!!*
    ¦ linker = "/usr/bin/g++",
  )

The result is as follows:

user@/codes (feature-buck2-base)>tree ./buck-out/
./buck-out/
└── v2
    ├── forkserver
    ├── gen
    │   └── root
    │       └── 524f8da68ea2a374
    │           └── buildbarn_helloworld
    │               └── cpp
    │                   └── hello_world
    │                       └── __main__
    │                           ├── __objects__
    │                           │   └── **main.cpp.pic.o  *** Here pay attention, and got main.o from Buildbarn*****
    │                           ├── buck-private-headers
    │                           │   └── buildbarn_helloworld
    │                           │       └── cpp
    │                           │           └── hello_world
    │                           │               └── main.hpp -> ../../../../../../../../../../../../../buildbarn_helloworld/cpp/hello_world/main.hpp
    │                           └── libbuildbarn_helloworld_cpp_hello_world_main.so.linker.argsfile
    └── log
        ├── 20240124-081657_build_a18af8ba-d8cd-4764-a565-3e31c74bba6e_events.pb.zst
  • I entered the Buildbarn worker's container and check PATH environment. PATH is correct and includes /usr/bin;/bin.
    /usr/bin/g++ and /bin/g++ can be found.
    So, the reason of this issue is not Buildbarn PATH environment.

Question

  • When I use system_cxx_toolchain(){cxx_compiler = "g++"}, why does Buildbarn searchs g++ in path "", which is empty directory?
    I think Buck2 somehow sent special information to buildbarn in gRPC calls when using system_cxx_toolchain(){cxx_compiler = "g++"}.

  • Does anyone have any insights on this issue?
    Thanks!