bazelbuild / bazel-toolchains

Repository that hosts Bazel toolchain configs for remote execution and related support tools.
Apache License 2.0
185 stars 96 forks source link

Bazel_Toolchain issue while using for crosscompilation #1004

Open dommatib opened 10 months ago

dommatib commented 10 months ago

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_GREETH

define LIB_HELLO_GREETH

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.bzlno 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.bzlis 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