Skip to content

Bazel_Toolchain issue while using for crosscompilation #1004

@dommatib

Description

@dommatib

Description of the problem:
I'm using bazel_toolchain to cross compile the c++ code. while i configure the bazel workspace with bazel_toolchain repo, it fails to download.
Below is the Example:
Worspace file:
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(

name = "bazel_toolchains",

commit = "6146252bda912a77a25c3b0ebe55ed0d00a1fa4d",

remote = "https://github.com/bazelbuild/bazel-toolchains.git",

)

load("@bazel_toolchains//:rbe_autoconfig.bzl", "rbe_autoconfig")

load("@bazel_toolchains//rules:envs.bzl", "bazel_toolchain")

bazel_toolchain(
name = "x86_64-linux",
exec_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
target_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
toolchain = ":cc-compiler-x86_64-linux",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)

bazel_toolchain(
name = "x86_64-windows",
exec_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
target_compatible_with = [
"@platforms//os:windows",
"@platforms//cpu:x86_64",
],
toolchain = ":cc-compiler-x86_64-windows",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)

cc_toolchain_config(
name = "cc-compiler-x86_64-linux",
cpu = "k8",
compiler = "gcc",
host_system_name = "x86_64-unknown-linux-gnu",
target_system_name = "x86_64-unknown-linux-gnu",
target_libc = "glibc_2.24",
)

cc_toolchain_config(
name = "cc-compiler-x86_64-windows",
cpu= "k8",
compiler = "msvc-cl",
host_system_name = "x86_64-unknown-linux-gnu",
target_system_name = "x86_64-unknown-windows",
target_libc = "msvcrt",
)

BUILD FILE:
load("@bazel_toolchains//rules:environments.bzl", "clang_env")

clang_env(
name = "linux-x86_64",
base_cc_toolchain_config = ":cc-compiler-x86_64-linux",
extra_toolchains = ["@bazel_toolchains//configs/ubuntu16_04_clang/x86_64_gcc:cc-toolchain-clang-x86_64-default"],
visibility = ["//visibility:public"],
)

clang_env(
name = "windows-x86_64",
base_cc_toolchain_config = ":cc-compiler-x86_64-windows",
extra_toolchains = ["@bazel_toolchains//configs/windows_clang:x86_64"],
visibility = ["//visibility:public"],
)

cc_library(
name = "hello_greet",
srcs = ["hello_greet.cc"],
hdrs = ["hello_greet.h"],
copts = ["-D__STDC_FORMAT_MACROS"],
)

cc_shared_library(
name = "hello_greet_shared",
deps = [":hello_greet"],
copts = ["-D__STDC_FORMAT_MACROS"],
)

cc_binary(
name = "hello_world_linux",
srcs = ["hello_world.cc"],
deps = [":hello_greet"],
dynamic_deps = [":hello_greet_shared"],
copts = ["-D__STDC_FORMAT_MACROS"],
toolchain = ":linux-x86_64",
)

cc_binary(
name = "hello_world_windows",
srcs = ["hello_world.cc"],
deps = [":hello_greet"],
dynamic_deps = [":hello_greet_shared"],
copts = ["-D__STDC_FORMAT_MACROS"],
toolchain = ":windows-x86_64",
)

bazel.rc file
build:windows --copt=-DWIN32
build:windows --cxxopt=-std=c++14

build:linux --copt=-DLINUX
build:linux --cxxopt=-std=c++14

build:windows --cpu=x64_windows
build:linux --cpu=x64_linux

build:windows --compilation_mode=dbg
build:windows --compilation_mode=opt

build:linux --compilation_mode=dbg
build:linux --compilation_mode=opt

build:dbg --copt=-g
build:dbg -c dbg
build:opt --copt=-O3
build:opt --copt=-DNDEBUG
build:opt -c opt

Translation units to Build:

hello_greet.h
#ifndef LIB_HELLO_GREET_H_
#define LIB_HELLO_GREET_H_

#include

std::string get_greet(const std::string &thing);

#endif

hello_greet.cc
#include "hello_greet.h"
#include

std::string get_greet(const std::string& world) {
return "Hello " + world;
}

hello_world.cc

#include "hello_greet.h"
#include
#include

int main(int argc, char** argv) {
std::cout << get_greet("world") << std::endl;
return 0;
}

I configured the WORKSPACE file with "bazel_toolchain" this should fetch the code from git repo and the build file is configured for cross compiled translation units (Linux & Windows) by loading bazel_toochains and clangenv is used to set for cross compilation for windows and linux.
However, the following error throws when building:

bazel build //main:hello_world_linux

ERROR: Error computing the main repository mapping: cannot load '@@bazel_toolchains//:rbe_autoconfig.bzl': no such file
The above error indicates that reb_autoconfig.bzl no such file exists since the git download didnt happen for the same though proper commit id is given.

Manually downloaded bazel_Toolchain but with this toolchain there is no reb_autoconfig.bzl is present and looks deprecated or removed.

Bazel version used: bazel version 7.0.0
Debain version used: Debian GNU/Linux rodete

Let me know if you need any more information

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions