rules_cc issue while using for cross compilation.
dommatib opened this issue · 1 comments
Description of the problem:
I'm using rules_cc
to cross compile the c++ code. while i configure the bazel workspace with rules_cc
repo, it fails to download.
Below is the Example:
Workspace file:
load("@bazel_tools//tools/build_defs/repo:http.bzl"
, "http_archive")
http_archive(
name = "rules_cc",
urls = ["https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz
"],
sha256 = "2037875b9a4456dce4a79d112a8ae885bbc4aad968e6587dca6e64f3a0900cdf
",
strip_prefix = "rules_cc-0.0.9
",
)
load("@rules_cc//cc:configs.bzl
", "cc_autoconf
")
cc_autoconf(name = "local_config_cc
")
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("@rules_cc//cc:cc_toolchain_config.bzl", "cc_toolchain_config")
#exports_files(["cc_toolchain_config.bzl"])
cc_library(
name = "hello_greet",
srcs = ["hello_greet.cc"],
hdrs = ["hello_greet.h"],
)
cc_shared_library(
name = "hello_greet_shared",
deps = [":hello_greet"],
)
cc_binary(
name = "hello_world_linux",
srcs = ["hello_world.cc"],
deps = [":hello_greet", ":hello_greet_shared"],
toolchains = ["@linux_toolchain"],
)
cc_binary(
name = "hello_world_windows",
srcs = ["hello_world.cc"],
deps = [":hello_greet", ":hello_greet_shared"],
toolchains = ["@windows_toolchain"],
)
cc_toolchain_config(
name = "linux_toolchain",
toolchain_identifier = "linux",
compiler = "gcc",
target_libc = "glibc",
target_cpu = "k8",
)
cc_toolchain_config(
name = "windows_toolchain",
toolchain_identifier = "windows",
compiler = "cl.exe",
target_libc = "msvcrt",
target_cpu = "x64_windows",
)
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;
}
Configured the WORKSPACE file with rules_cc this should fetch the code from git and the build file is configured for cross compiled translation units (Linux & Windows) by loading rules_cc and set for cross compilation for windows and linux
ERROR: Error computing the main repository mapping: Every .bzl file must have a corresponding package, but '@@rules_cc//cc:configs.bzl' does not have one. Please create a BUILD file in the same or any parent directory. Note that this BUILD file does not need to do anything except exist.
The above error indicates ruless_cc//cc:configs.bzl
is missing since the git download didn't happen because the same rules_cc is not downloaded .
As per the above error the downloaded rules_cc should be under external/rules_cc/cc/empty build file (to be created )
Manually downloaded the repo and kept under same path external/rules_cc/cc/build
Already build file exists but its still asking to create one BUILD file and add below package and export _files for configs.bzl
as its missing from the repo
package(default_visibility = ["//visibility:public"])
exports_files(["configs.bzl"])
Bazel version used: bazel version 7.0.0
Debain version used: Debian GNU/Linux rodete
Let me know if you need any more information
Bazel 7.0.0 has by default enabled bzlmod and from your example it seems you're using WORKSPACE file, which is not read. You can disable bzlmod with --nobzlmod
or even better, write a MODULE.bazel
with dependency to rules_cc.