module( name = "hello_cross", version = "0.0.0", ) # https://github.com/bazelbuild/rules_rust/releases bazel_dep(name = "rules_rust", version = "0.46.0") local_path_override( module_name = "rules_rust", path = "../../..", ) # Rules for cross compilation bazel_dep(name = "toolchains_musl", version = "0.1.16", dev_dependency = True) # https://github.com/bazelbuild/platforms/releases bazel_dep(name = "platforms", version = "0.0.10") # https://github.com/bazel-contrib/toolchains_llvm bazel_dep(name = "toolchains_llvm", version = "1.0.0") # https://github.com/bazelbuild/bazel/blob/master/tools/build_defs/repo/http.bzl http_archive = use_repo_rule("@bazel_tools//:http.bzl", "http_archive") # Both, cross compilation and MUSL still need a C/C++ toolchain with sysroot. _BUILD_FILE_CONTENT = """ filegroup( name = "{name}", srcs = glob(["*/**"]), visibility = ["//visibility:public"], ) """ # Download sysroot # https://commondatastorage.googleapis.com/chrome-linux-sysroot/ http_archive( name = "org_chromium_sysroot_linux_x64", build_file_content = _BUILD_FILE_CONTENT.format(name = "sysroot"), sha256 = "f6b758d880a6df264e2581788741623320d548508f07ffc2ae6a29d0c13d647d", urls = ["https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/2e7ada854015a4cc60fc812112d261af44213ed0/debian_bullseye_amd64_sysroot.tar.xz"], ) http_archive( name = "org_chromium_sysroot_linux_aarch64", build_file_content = _BUILD_FILE_CONTENT.format(name = "sysroot"), sha256 = "902d1a40a5fd8c3764a36c8d377af5945a92e3d264c6252855bda4d7ef81d3df", urls = ["https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/41a6c8dec4c4304d6509e30cbaf9218dffb4438e/debian_bullseye_arm64_sysroot.tar.xz"], ) # LLVM setup # https://github.com/bazel-contrib/toolchains_llvm/tree/0d302de75f6ace071ac616fb274481eedcc20e5a?tab=readme-ov-file#sysroots llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm") # LLVM Versions and platforms # https://github.com/bazel-contrib/toolchains_llvm/blob/master/toolchain/internal/llvm_distributions.bzl LLVM_VERSIONS = { "": "16.0.0", "darwin-aarch64": "16.0.3", "darwin-x86_64": "15.0.7", } # Host LLVM toolchain. llvm.toolchain( name = "llvm_toolchain", llvm_versions = LLVM_VERSIONS, ) use_repo(llvm, "llvm_toolchain", "llvm_toolchain_llvm") # X86 LLVM Toolchain with sysroot. # https://github.com/bazel-contrib/toolchains_llvm/blob/master/tests/WORKSPACE.bzlmod llvm.toolchain( name = "llvm_toolchain_x86_with_sysroot", llvm_versions = LLVM_VERSIONS, ) llvm.sysroot( name = "llvm_toolchain_x86_with_sysroot", label = "@org_chromium_sysroot_linux_x64//:sysroot", targets = ["linux-x86_64"], ) use_repo(llvm, "llvm_toolchain_x86_with_sysroot") # # ARM (aarch64) LLVM Toolchain with sysroot. # https://github.com/bazelbuild/rules_rust/blob/main/examples/bzlmod/cross_compile/WORKSPACE.bzlmod llvm.toolchain( name = "llvm_toolchain_aarch64_with_sysroot", llvm_versions = LLVM_VERSIONS, ) llvm.sysroot( name = "llvm_toolchain_aarch64_with_sysroot", label = "@org_chromium_sysroot_linux_aarch64//:sysroot", targets = ["linux-aarch64"], ) use_repo(llvm, "llvm_toolchain_aarch64_with_sysroot") # Register all LLVM toolchains register_toolchains("@llvm_toolchain//:all") # Rust toolchain RUST_EDITION = "2021" RUST_VERSION = "1.79.0" rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") rust.toolchain( edition = RUST_EDITION, extra_target_triples = [ "aarch64-unknown-linux-gnu", "x86_64-unknown-linux-gnu", ], versions = [RUST_VERSION], ) use_repo(rust, "rust_toolchains") register_toolchains("@rust_toolchains//:all")