mirror of https://github.com/bazelbuild/rules_rust
fix: `rustc_compile_action` emits `CcInfo` for `wasm32` targets (#1979)
This change allows `cc_binary()`, `cc_library()`, etc. targets to depend on `rust_libary()`, `rust_static_library()`, etc. targets when targeting `wasm32`.
This commit is contained in:
parent
6874b8d51b
commit
0a4c4dfb0d
|
@ -621,6 +621,21 @@ tasks:
|
|||
# working_directory: examples/zig_cross_compiling
|
||||
# build_targets:
|
||||
# - "//..."
|
||||
nix_cross_compiling:
|
||||
name: Nix cross compiling test
|
||||
platform: ubuntu2204
|
||||
working_directory: examples/nix_cross_compiling
|
||||
setup:
|
||||
- curl -L https://nixos.org/nix/install | bash
|
||||
- sudo cp ~/.nix-profile/bin/nix* /usr/local/bin/
|
||||
- sudo mkdir /etc/nix
|
||||
- echo "experimental-features = nix-command flakes" | sudo tee --append /etc/nix/nix.conf
|
||||
build_targets:
|
||||
# Root `build_test` target is called directly to catch missing platforms
|
||||
# that would otherwise be quietly skipped due to `target_compatible_with`.
|
||||
- "//:nix_cross_compiling"
|
||||
test_targets:
|
||||
- "//..."
|
||||
|
||||
buildifier:
|
||||
version: latest
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
# `nix-direnv` to provide developer tools to terminals and VSCode when working
|
||||
# in the repo.
|
||||
#
|
||||
# See:
|
||||
# - https://github.com/nix-community/nix-direnv
|
||||
# - https://marketplace.visualstudio.com/items?itemName=mkhl.direnv
|
||||
|
||||
# Use `path:` syntax to avoid copying the entire repo to the Nix Store.
|
||||
nix_direnv_watch_file ./nix/flake.nix
|
||||
use flake path:./nix
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1700444282,
|
||||
"narHash": "sha256-s/+tgT+Iz0LZO+nBvSms+xsMqvHt2LqYniG9r+CYyJc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3f21a22b5aafefa1845dec6f4a378a8f53d8681c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
in
|
||||
{
|
||||
packages.cargo-bazel = pkgs.rustPlatform.buildRustPackage {
|
||||
pname = "cargo-bazel";
|
||||
version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.version;
|
||||
|
||||
src = ./.;
|
||||
cargoLock.lockFile = ./Cargo.lock;
|
||||
|
||||
# Tests cannot be run via Cargo due to the dependency on the
|
||||
# Bazel `runfiles` crate.
|
||||
doCheck = false;
|
||||
};
|
||||
});
|
||||
}
|
|
@ -4,4 +4,5 @@ crate_universe
|
|||
crate_universe_unnamed
|
||||
ios
|
||||
ios_build
|
||||
nix_cross_compiling
|
||||
zig_cross_compiling
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# Sensible Defaults
|
||||
build --sandbox_default_allow_network=false
|
||||
build --incompatible_strict_action_env
|
||||
build --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
|
||||
build --incompatible_enable_cc_toolchain_resolution=true
|
||||
|
||||
# Require Platform Transitions
|
||||
## This works by setting the targte platform to an invalid platform
|
||||
## and each `x_binary()` and `x_library()` rule unfortunately needs
|
||||
## to tag itself with `platform_missing` to get excluded from glob
|
||||
## builds like `build //...` but still have a way to include them
|
||||
## by removing the filter line for things like Rust Analyzer.
|
||||
build --host_platform=//bazel/platforms:host
|
||||
build --platforms=//bazel/platforms:missing
|
||||
build --build_tag_filters=-platform_missing
|
|
@ -0,0 +1 @@
|
|||
/bazel-*
|
|
@ -0,0 +1,150 @@
|
|||
load("@bazel_skylib//rules:build_test.bzl", "build_test")
|
||||
load("//bazel:transitions.bzl", "platform_transition_binary")
|
||||
|
||||
# Disabled targets need the user to supply a sysroot in `flake.nix` first.
|
||||
|
||||
build_test(
|
||||
name = "nix_cross_compiling",
|
||||
targets = [
|
||||
# ":cc_binary_aarch64-apple-darwin",
|
||||
# ":cc_binary_aarch64-apple-ios",
|
||||
":cc_binary_aarch64-linux-android",
|
||||
":cc_binary_aarch64-unknown-linux-gnu",
|
||||
":cc_binary_wasm32-unknown-unknown",
|
||||
":cc_binary_wasm32-wasi",
|
||||
# ":cc_binary_x86_64-apple-darwin",
|
||||
# ":cc_binary_x86_64-pc-windows-msvc",
|
||||
":cc_binary_x86_64-unknown-linux-gnu",
|
||||
":cc_binary_x86_64-unknown-nixos-gnu",
|
||||
# ":rust_binary_aarch64-apple-darwin",
|
||||
# ":rust_binary_aarch64-apple-ios",
|
||||
":rust_binary_aarch64-linux-android",
|
||||
":rust_binary_aarch64-unknown-linux-gnu",
|
||||
":rust_binary_wasm32-unknown-unknown",
|
||||
":rust_binary_wasm32-wasi",
|
||||
# ":rust_binary_x86_64-apple-darwin",
|
||||
# ":rust_binary_x86_64-pc-windows-msvc",
|
||||
":rust_binary_x86_64-unknown-linux-gnu",
|
||||
":rust_binary_x86_64-unknown-nixos-gnu",
|
||||
],
|
||||
)
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "cc_binary_aarch64-apple-darwin",
|
||||
# binary = "//cc_binary",
|
||||
# target_platform = "//bazel/platforms:aarch64-apple-darwin",
|
||||
# )
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "cc_binary_aarch64-apple-ios",
|
||||
# binary = "//cc_binary",
|
||||
# target_platform = "//bazel/platforms:aarch64-apple-ios",
|
||||
# )
|
||||
|
||||
platform_transition_binary(
|
||||
name = "cc_binary_aarch64-linux-android",
|
||||
binary = "//cc_binary",
|
||||
target_platform = "//bazel/platforms:aarch64-linux-android",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "cc_binary_aarch64-unknown-linux-gnu",
|
||||
binary = "//cc_binary",
|
||||
target_platform = "//bazel/platforms:aarch64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "cc_binary_wasm32-unknown-unknown",
|
||||
binary = "//cc_binary",
|
||||
target_platform = "//bazel/platforms:wasm32-unknown-unknown",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "cc_binary_wasm32-wasi",
|
||||
binary = "//cc_binary",
|
||||
target_platform = "//bazel/platforms:wasm32-wasi",
|
||||
)
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "cc_binary_x86_64-apple-darwin",
|
||||
# binary = "//cc_binary",
|
||||
# target_platform = "//bazel/platforms:x86_64-apple-darwin",
|
||||
# )
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "cc_binary_x86_64-pc-windows-msvc",
|
||||
# binary = "//cc_binary",
|
||||
# target_platform = "//bazel/platforms:x86_64-pc-windows-msvc",
|
||||
# )
|
||||
|
||||
platform_transition_binary(
|
||||
name = "cc_binary_x86_64-unknown-linux-gnu",
|
||||
binary = "//cc_binary",
|
||||
target_platform = "//bazel/platforms:x86_64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "cc_binary_x86_64-unknown-nixos-gnu",
|
||||
binary = "//cc_binary",
|
||||
target_platform = "//bazel/platforms:x86_64-unknown-nixos-gnu",
|
||||
)
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "rust_binary_aarch64-apple-darwin",
|
||||
# binary = "//rust_binary",
|
||||
# target_platform = "//bazel/platforms:aarch64-apple-darwin",
|
||||
# )
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "rust_binary_aarch64-apple-ios",
|
||||
# binary = "//rust_binary",
|
||||
# target_platform = "//bazel/platforms:aarch64-apple-ios",
|
||||
# )
|
||||
|
||||
platform_transition_binary(
|
||||
name = "rust_binary_aarch64-linux-android",
|
||||
binary = "//rust_binary",
|
||||
target_platform = "//bazel/platforms:aarch64-linux-android",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "rust_binary_aarch64-unknown-linux-gnu",
|
||||
binary = "//rust_binary",
|
||||
target_platform = "//bazel/platforms:aarch64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "rust_binary_wasm32-unknown-unknown",
|
||||
binary = "//rust_binary",
|
||||
target_platform = "//bazel/platforms:wasm32-unknown-unknown",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "rust_binary_wasm32-wasi",
|
||||
binary = "//rust_binary",
|
||||
target_platform = "//bazel/platforms:wasm32-wasi",
|
||||
)
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "rust_binary_x86_64-apple-darwin",
|
||||
# binary = "//rust_binary",
|
||||
# target_platform = "//bazel/platforms:x86_64-apple-darwin",
|
||||
# )
|
||||
|
||||
# platform_transition_binary(
|
||||
# name = "rust_binary_x86_64-pc-windows-msvc",
|
||||
# binary = "//rust_binary",
|
||||
# target_platform = "//bazel/platforms:x86_64-pc-windows-msvc",
|
||||
# )
|
||||
|
||||
platform_transition_binary(
|
||||
name = "rust_binary_x86_64-unknown-linux-gnu",
|
||||
binary = "//rust_binary",
|
||||
target_platform = "//bazel/platforms:x86_64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
platform_transition_binary(
|
||||
name = "rust_binary_x86_64-unknown-nixos-gnu",
|
||||
binary = "//rust_binary",
|
||||
target_platform = "//bazel/platforms:x86_64-unknown-nixos-gnu",
|
||||
)
|
|
@ -0,0 +1,3 @@
|
|||
# Nix + Bazel Cross Compiling
|
||||
|
||||
Blog Post: <https://blog.consumingchaos.com/posts/nix-bazel-cross-compiling/>
|
|
@ -0,0 +1,87 @@
|
|||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
|
||||
# Nix
|
||||
http_archive(
|
||||
name = "io_tweag_rules_nixpkgs",
|
||||
sha256 = "54946958c311f48c17c9b2e70683b621fec135258b75173f3900f901d52d8115",
|
||||
strip_prefix = "rules_nixpkgs-2b4702c8a0d1d7ea474ea0913344e8add2759f9c",
|
||||
urls = ["https://github.com/tweag/rules_nixpkgs/archive/2b4702c8a0d1d7ea474ea0913344e8add2759f9c.tar.gz"],
|
||||
)
|
||||
|
||||
load("@io_tweag_rules_nixpkgs//nixpkgs:repositories.bzl", "rules_nixpkgs_dependencies")
|
||||
|
||||
rules_nixpkgs_dependencies()
|
||||
|
||||
load("//bazel:nix_repositories.bzl", "nix_repositories")
|
||||
|
||||
nix_repositories()
|
||||
|
||||
# Rust
|
||||
local_repository(
|
||||
name = "rules_rust",
|
||||
path = "../..",
|
||||
)
|
||||
|
||||
load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies")
|
||||
|
||||
rules_rust_dependencies()
|
||||
|
||||
load("@rules_rust//crate_universe:defs.bzl", "crates_repository", "render_config", "splicing_config")
|
||||
load("//bazel/cargo:crates_repository.bzl", CARGO_ANNOTATIONS = "ANNOTATIONS", CARGO_PACKAGES = "PACKAGES")
|
||||
|
||||
crates_repository(
|
||||
name = "crate_index",
|
||||
annotations = CARGO_ANNOTATIONS,
|
||||
cargo_lockfile = "//bazel/cargo:Cargo.lock",
|
||||
generate_build_scripts = False,
|
||||
generator = "@cargo-bazel//:bin/cargo-bazel",
|
||||
lockfile = "//bazel/cargo:cargo-bazel-lock.json",
|
||||
packages = CARGO_PACKAGES,
|
||||
render_config = render_config(
|
||||
platforms_template = "@//bazel/cargo/platforms:{triple}",
|
||||
),
|
||||
rust_toolchain_cargo_template = "@nix_rust//:bin/{tool}",
|
||||
rust_toolchain_rustc_template = "@nix_rust//:bin/{tool}",
|
||||
splicing_config = splicing_config(
|
||||
resolver_version = "2",
|
||||
),
|
||||
supported_platform_triples = [
|
||||
"aarch64-apple-darwin",
|
||||
"aarch64-apple-ios",
|
||||
"aarch64-linux-android",
|
||||
"aarch64-unknown-linux-gnu",
|
||||
"wasm32-unknown-unknown",
|
||||
"wasm32-wasi",
|
||||
"x86_64-apple-darwin",
|
||||
"x86_64-pc-windows-msvc",
|
||||
"x86_64-unknown-linux-gnu",
|
||||
],
|
||||
)
|
||||
|
||||
load("@crate_index//:defs.bzl", "crate_repositories")
|
||||
|
||||
crate_repositories()
|
||||
|
||||
# Toolchains
|
||||
register_toolchains(
|
||||
"//bazel/toolchains/cc/aarch64-apple-darwin:toolchain",
|
||||
"//bazel/toolchains/cc/aarch64-apple-ios:toolchain",
|
||||
"//bazel/toolchains/cc/aarch64-linux-android:toolchain",
|
||||
"//bazel/toolchains/cc/aarch64-unknown-linux-gnu:toolchain",
|
||||
"//bazel/toolchains/cc/wasm32-unknown-unknown:toolchain",
|
||||
"//bazel/toolchains/cc/wasm32-wasi:toolchain",
|
||||
"//bazel/toolchains/cc/x86_64-apple-darwin:toolchain",
|
||||
"//bazel/toolchains/cc/x86_64-pc-windows-msvc:toolchain",
|
||||
"//bazel/toolchains/cc/x86_64-unknown-linux-gnu:toolchain",
|
||||
"//bazel/toolchains/cc/x86_64-unknown-nixos-gnu:toolchain",
|
||||
"//bazel/toolchains/rust/aarch64-apple-darwin:toolchain",
|
||||
"//bazel/toolchains/rust/aarch64-apple-ios:toolchain",
|
||||
"//bazel/toolchains/rust/aarch64-linux-android:toolchain",
|
||||
"//bazel/toolchains/rust/aarch64-unknown-linux-gnu:toolchain",
|
||||
"//bazel/toolchains/rust/wasm32-unknown-unknown:toolchain",
|
||||
"//bazel/toolchains/rust/wasm32-wasi:toolchain",
|
||||
"//bazel/toolchains/rust/x86_64-apple-darwin:toolchain",
|
||||
"//bazel/toolchains/rust/x86_64-pc-windows-msvc:toolchain",
|
||||
"//bazel/toolchains/rust/x86_64-unknown-linux-gnu:toolchain",
|
||||
"//bazel/toolchains/rust/x86_64-unknown-nixos-gnu:toolchain",
|
||||
)
|
|
@ -0,0 +1,365 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.21.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.75"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.84"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "direct-cargo-bazel-deps"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.28.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.150"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "0.8.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"wasi",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num_cpus"
|
||||
version = "1.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.32.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
"parking_lot_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.9.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"smallvec",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.11.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.5.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.34.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
"libc",
|
||||
"mio",
|
||||
"num_cpus",
|
||||
"parking_lot",
|
||||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"socket2",
|
||||
"tokio-macros",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-macros"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
"windows_i686_gnu",
|
||||
"windows_i686_msvc",
|
||||
"windows_x86_64_gnu",
|
||||
"windows_x86_64_gnullvm",
|
||||
"windows_x86_64_msvc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,22 @@
|
|||
""" Crate Annotation for libc """
|
||||
|
||||
load("@rules_rust//crate_universe:defs.bzl", "crate")
|
||||
|
||||
ANNOTATION = crate.annotation(
|
||||
rustc_flags = [
|
||||
"--cfg=freebsd11",
|
||||
"--cfg=libc_priv_mod_use",
|
||||
"--cfg=libc_union",
|
||||
"--cfg=libc_const_size_of",
|
||||
"--cfg=libc_align",
|
||||
"--cfg=libc_int128",
|
||||
"--cfg=libc_core_cvoid",
|
||||
"--cfg=libc_packedN",
|
||||
"--cfg=libc_cfg_target_vendor",
|
||||
"--cfg=libc_non_exhaustive",
|
||||
"--cfg=libc_long_array",
|
||||
"--cfg=libc_ptr_addr_of",
|
||||
"--cfg=libc_underscore_const_names",
|
||||
"--cfg=libc_const_extern_fn",
|
||||
],
|
||||
)
|
|
@ -0,0 +1,12 @@
|
|||
""" Crate Annotation for proc-macro2 """
|
||||
|
||||
load("@rules_rust//crate_universe:defs.bzl", "crate")
|
||||
|
||||
ANNOTATION = crate.annotation(
|
||||
rustc_flags = [
|
||||
"--cfg=proc_macro_span",
|
||||
"--cfg=span_locations",
|
||||
"--cfg=use_proc_macro",
|
||||
"--cfg=wrap_proc_macro",
|
||||
],
|
||||
)
|
|
@ -0,0 +1,18 @@
|
|||
""" Crate Annotation for syn """
|
||||
|
||||
load("@rules_rust//crate_universe:defs.bzl", "crate")
|
||||
|
||||
ANNOTATION = crate.annotation(
|
||||
crate_features = [
|
||||
"clone-impls",
|
||||
"derive",
|
||||
"extra-traits",
|
||||
"fold",
|
||||
"full",
|
||||
"parsing",
|
||||
"printing",
|
||||
"proc-macro",
|
||||
"visit-mut",
|
||||
"visit",
|
||||
],
|
||||
)
|
|
@ -0,0 +1,24 @@
|
|||
""" Crate Universe Packages and Annotations """
|
||||
|
||||
load("@rules_rust//crate_universe:defs.bzl", "crate")
|
||||
load("//bazel/cargo/crates:libc.bzl", libc = "ANNOTATION")
|
||||
load("//bazel/cargo/crates:proc_macro2.bzl", proc_macro2 = "ANNOTATION")
|
||||
load("//bazel/cargo/crates:syn.bzl", syn = "ANNOTATION")
|
||||
|
||||
PACKAGES = {
|
||||
"anyhow": crate.spec(
|
||||
version = "1.0.75",
|
||||
),
|
||||
"tokio": crate.spec(
|
||||
version = "1.34.0",
|
||||
features = [
|
||||
"full",
|
||||
],
|
||||
),
|
||||
}
|
||||
|
||||
ANNOTATIONS = {
|
||||
"libc": [libc],
|
||||
"proc-macro2": [proc_macro2],
|
||||
"syn": [syn],
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
load("@bazel_skylib//lib:selects.bzl", "selects")
|
||||
|
||||
config_setting(
|
||||
name = "aarch64-apple-darwin",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aarch64-apple-ios",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:ios",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aarch64-linux-android",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:android",
|
||||
],
|
||||
)
|
||||
|
||||
# This seems like the best way for the Cargo generated dependencies to be
|
||||
# aware of `aarch64-unknown-nixos-gnu`.
|
||||
selects.config_setting_group(
|
||||
name = "aarch64-unknown-linux-gnu",
|
||||
match_any = [
|
||||
":aarch64-unknown-linux-gnu_linux",
|
||||
":aarch64-unknown-linux-gnu_nixos",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aarch64-unknown-linux-gnu_linux",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aarch64-unknown-linux-gnu_nixos",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "wasm32-unknown-unknown",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:none",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "wasm32-wasi",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:wasi",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "x86_64-apple-darwin",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "x86_64-pc-windows-msvc",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:windows",
|
||||
],
|
||||
)
|
||||
|
||||
# This seems like the best way for the Cargo generated dependencies to be
|
||||
# aware of `x86_64-unknown-nixos-gnu`.
|
||||
selects.config_setting_group(
|
||||
name = "x86_64-unknown-linux-gnu",
|
||||
match_any = [
|
||||
":x86_64-unknown-linux-gnu_linux",
|
||||
":x86_64-unknown-linux-gnu_nixos",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "x86_64-unknown-linux-gnu_linux",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "x86_64-unknown-linux-gnu_nixos",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
)
|
|
@ -0,0 +1,233 @@
|
|||
""" Nix Repositories """
|
||||
|
||||
load("@io_tweag_rules_nixpkgs//nixpkgs:nixpkgs.bzl", "nixpkgs_flake_package")
|
||||
|
||||
_CONFIG_BUILD_FILE_CONTENT = """
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
exports_files(["config.bzl"])
|
||||
"""
|
||||
|
||||
_RUST_BUILD_FILE_CONTENT = """
|
||||
load("@rules_rust//rust:toolchain.bzl", "rust_stdlib_filegroup")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
# https://github.com/tweag/rules_nixpkgs/blob/master/toolchains/rust/rust.bzl#L33-L116
|
||||
filegroup(
|
||||
name = "rustc",
|
||||
srcs = ["bin/rustc"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "rustdoc",
|
||||
srcs = ["bin/rustdoc"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "rustfmt",
|
||||
srcs = ["bin/rustfmt"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "cargo",
|
||||
srcs = ["bin/cargo"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "clippy_driver",
|
||||
srcs = ["bin/clippy-driver"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "proc_macro_srv",
|
||||
srcs = ["libexec/rust-analyzer-proc-macro-srv"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "rustc_lib",
|
||||
srcs = glob(
|
||||
[
|
||||
"bin/*.so",
|
||||
"lib/*.so",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/codegen-backends/*.so",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/codegen-backends/*.dylib",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/bin/*",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/lib/*.so",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/lib/*.dylib",
|
||||
],
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "rust-src",
|
||||
srcs = glob(["lib/rustlib/src/**/*"]),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-aarch64-apple-darwin",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/aarch64-apple-darwin/lib/*.rlib",
|
||||
"lib/rustlib/aarch64-apple-darwin/lib/*.so",
|
||||
"lib/rustlib/aarch64-apple-darwin/lib/*.dylib",
|
||||
"lib/rustlib/aarch64-apple-darwin/lib/*.a",
|
||||
"lib/rustlib/aarch64-apple-darwin/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-aarch64-apple-ios",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/aarch64-apple-ios/lib/*.rlib",
|
||||
"lib/rustlib/aarch64-apple-ios/lib/*.so",
|
||||
"lib/rustlib/aarch64-apple-ios/lib/*.dylib",
|
||||
"lib/rustlib/aarch64-apple-ios/lib/*.a",
|
||||
"lib/rustlib/aarch64-apple-ios/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-aarch64-linux-android",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/aarch64-linux-android/lib/*.rlib",
|
||||
"lib/rustlib/aarch64-linux-android/lib/*.so",
|
||||
"lib/rustlib/aarch64-linux-android/lib/*.dylib",
|
||||
"lib/rustlib/aarch64-linux-android/lib/*.a",
|
||||
"lib/rustlib/aarch64-linux-android/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-aarch64-unknown-linux-gnu",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/aarch64-unknown-linux-gnu/lib/*.rlib",
|
||||
"lib/rustlib/aarch64-unknown-linux-gnu/lib/*.so",
|
||||
"lib/rustlib/aarch64-unknown-linux-gnu/lib/*.dylib",
|
||||
"lib/rustlib/aarch64-unknown-linux-gnu/lib/*.a",
|
||||
"lib/rustlib/aarch64-unknown-linux-gnu/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-wasm32-unknown-unknown",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/wasm32-unknown-unknown/lib/*.rlib",
|
||||
"lib/rustlib/wasm32-unknown-unknown/lib/*.so",
|
||||
"lib/rustlib/wasm32-unknown-unknown/lib/*.dylib",
|
||||
"lib/rustlib/wasm32-unknown-unknown/lib/*.a",
|
||||
"lib/rustlib/wasm32-unknown-unknown/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-wasm32-wasi",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/wasm32-wasi/lib/*.rlib",
|
||||
"lib/rustlib/wasm32-wasi/lib/*.so",
|
||||
"lib/rustlib/wasm32-wasi/lib/*.dylib",
|
||||
"lib/rustlib/wasm32-wasi/lib/*.a",
|
||||
"lib/rustlib/wasm32-wasi/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-x86_64-apple-darwin",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/x86_64-apple-darwin/lib/*.rlib",
|
||||
"lib/rustlib/x86_64-apple-darwin/lib/*.so",
|
||||
"lib/rustlib/x86_64-apple-darwin/lib/*.dylib",
|
||||
"lib/rustlib/x86_64-apple-darwin/lib/*.a",
|
||||
"lib/rustlib/x86_64-apple-darwin/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-x86_64-pc-windows-msvc",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/x86_64-pc-windows-msvc/lib/*.rlib",
|
||||
"lib/rustlib/x86_64-pc-windows-msvc/lib/*.so",
|
||||
"lib/rustlib/x86_64-pc-windows-msvc/lib/*.dylib",
|
||||
"lib/rustlib/x86_64-pc-windows-msvc/lib/*.a",
|
||||
"lib/rustlib/x86_64-pc-windows-msvc/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
|
||||
rust_stdlib_filegroup(
|
||||
name = "rust_std-x86_64-unknown-linux-gnu",
|
||||
srcs = glob(
|
||||
[
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/lib/*.rlib",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/lib/*.so",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/lib/*.dylib",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/lib/*.a",
|
||||
"lib/rustlib/x86_64-unknown-linux-gnu/lib/self-contained/**",
|
||||
],
|
||||
# Some patterns (e.g. `lib/*.a`) don't match anything, see https://github.com/bazelbuild/rules_rust/pull/245
|
||||
allow_empty = True,
|
||||
),
|
||||
)
|
||||
"""
|
||||
|
||||
_CARGO_BAZEL_BUILD_FILE_CONTENT = """
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
exports_files(["bin/cargo-bazel"])
|
||||
"""
|
||||
|
||||
def nix_repositories():
|
||||
nixpkgs_flake_package(
|
||||
name = "nix_config",
|
||||
nix_flake_file = "//nix:flake.nix",
|
||||
nix_flake_lock_file = "//nix:flake.lock",
|
||||
package = "bazel.config",
|
||||
build_file_content = _CONFIG_BUILD_FILE_CONTENT,
|
||||
)
|
||||
|
||||
nixpkgs_flake_package(
|
||||
name = "nix_rust",
|
||||
nix_flake_file = "//nix:flake.nix",
|
||||
nix_flake_lock_file = "//nix:flake.lock",
|
||||
package = "bazel.rust",
|
||||
build_file_content = _RUST_BUILD_FILE_CONTENT,
|
||||
)
|
||||
|
||||
nixpkgs_flake_package(
|
||||
name = "cargo-bazel",
|
||||
nix_flake_file = "@rules_rust//crate_universe:flake.nix",
|
||||
nix_flake_lock_file = "@rules_rust//crate_universe:flake.lock",
|
||||
package = "cargo-bazel",
|
||||
build_file_content = _CARGO_BAZEL_BUILD_FILE_CONTENT,
|
||||
)
|
|
@ -0,0 +1,104 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
# Host
|
||||
platform(
|
||||
name = "host",
|
||||
constraint_values = ["@platforms//os:nixos"],
|
||||
parents = ["@local_config_platform//:host"],
|
||||
)
|
||||
|
||||
# Platforms
|
||||
platform(
|
||||
name = "aarch64-apple-darwin",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "aarch64-apple-ios",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:ios",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "aarch64-linux-android",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:android",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "aarch64-unknown-linux-gnu",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "wasm32-unknown-unknown",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:none",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "wasm32-wasi",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:wasi",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "x86_64-apple-darwin",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "x86_64-pc-windows-msvc",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:windows",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "x86_64-unknown-linux-gnu",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
)
|
||||
|
||||
platform(
|
||||
name = "x86_64-unknown-nixos-gnu",
|
||||
constraint_values = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
)
|
||||
|
||||
# Sentinel to catch implicit target platform usage
|
||||
platform(
|
||||
name = "missing",
|
||||
constraint_values = [
|
||||
":missing_constraint_value",
|
||||
],
|
||||
)
|
||||
|
||||
constraint_setting(name = "missing_constraint_setting")
|
||||
|
||||
constraint_value(
|
||||
name = "missing_constraint_value",
|
||||
constraint_setting = ":missing_constraint_setting",
|
||||
)
|
|
@ -0,0 +1,210 @@
|
|||
""" CC Compile ActionConfigs for clang """
|
||||
|
||||
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"action_config",
|
||||
"flag_group",
|
||||
"flag_set",
|
||||
"tool",
|
||||
"with_feature_set",
|
||||
)
|
||||
|
||||
BAZEL_COMPILE_FLAG_SET = flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-MD", "-MF", "%{dependency_file}"],
|
||||
expand_if_available = "dependency_file",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-frandom-seed=%{output_file}"],
|
||||
expand_if_available = "output_file",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-D%{preprocessor_defines}"],
|
||||
iterate_over = "preprocessor_defines",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-include", "%{includes}"],
|
||||
iterate_over = "includes",
|
||||
expand_if_available = "includes",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-iquote", "%{quote_include_paths}"],
|
||||
iterate_over = "quote_include_paths",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-I%{include_paths}"],
|
||||
iterate_over = "include_paths",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-isystem", "%{system_include_paths}"],
|
||||
iterate_over = "system_include_paths",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-isystem", "%{external_include_paths}"],
|
||||
iterate_over = "external_include_paths",
|
||||
expand_if_available = "external_include_paths",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{user_compile_flags}"],
|
||||
iterate_over = "user_compile_flags",
|
||||
expand_if_available = "user_compile_flags",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-c", "%{source_file}"],
|
||||
expand_if_available = "source_file",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-o", "%{output_file}"],
|
||||
expand_if_available = "output_file",
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def compile_action_configs(
|
||||
clang,
|
||||
target,
|
||||
builtin_include_directories,
|
||||
builtin_framework_directories,
|
||||
compile_flags,
|
||||
dbg_compile_flags,
|
||||
fastbuild_compile_flags,
|
||||
opt_compile_flags,
|
||||
remap_path_prefix):
|
||||
"""
|
||||
Generates CC Compile ActionConfigs
|
||||
|
||||
Args:
|
||||
clang (string): Path to clang binaries.
|
||||
target (string): Target triple to pass to the compiler.
|
||||
builtin_include_directories (List): List of include directories to always be passed to the compiler as system includes.
|
||||
builtin_framework_directories (List): List of Apple framework include directories to always be passed to the compiler.
|
||||
compile_flags (List): List of flags to always be passed to the compiler.
|
||||
dbg_compile_flags (List): List of additional flags to always be passed to the compiler in dbg configuration.
|
||||
fastbuild_compile_flags (List): List of additional flags to always be passed to the compiler in fastbuild configuration.
|
||||
opt_compile_flags (List): List of additional flags to always be passed to the compiler in opt configuration.
|
||||
remap_path_prefix (string): Path to be passed to the compiler's remap path prefix flag.
|
||||
|
||||
Returns:
|
||||
List of CC Compile ActionConfigs
|
||||
"""
|
||||
|
||||
builtin_include_directory_compile_flags = []
|
||||
for builtin_include_directory in builtin_include_directories:
|
||||
builtin_include_directory_compile_flags.append("-isystem")
|
||||
builtin_include_directory_compile_flags.append(builtin_include_directory)
|
||||
|
||||
builtin_framework_directory_compile_flags = []
|
||||
for builtin_framework_directory in builtin_framework_directories:
|
||||
builtin_framework_directory_compile_flags.append("-iframework")
|
||||
builtin_framework_directory_compile_flags.append(builtin_framework_directory)
|
||||
|
||||
required_compile_flags = ([
|
||||
"--target={}".format(target),
|
||||
"-nostdinc",
|
||||
|
||||
# `unix_cc_toolchain_config`
|
||||
"-Wno-builtin-macro-redefined",
|
||||
"-D__DATE__=\"redacted\"",
|
||||
"-D__TIMESTAMP__=\"redacted\"",
|
||||
"-D__TIME__=\"redacted\"",
|
||||
"-fdebug-prefix-map=${{pwd}}={}".format(remap_path_prefix),
|
||||
] +
|
||||
builtin_include_directory_compile_flags +
|
||||
builtin_framework_directory_compile_flags)
|
||||
required_compile_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_compile_flags),
|
||||
] if required_compile_flags else []),
|
||||
)
|
||||
|
||||
compile_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = compile_flags),
|
||||
] if compile_flags else []),
|
||||
)
|
||||
|
||||
dbg_compile_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = dbg_compile_flags),
|
||||
] if dbg_compile_flags else []),
|
||||
with_features = [with_feature_set(features = ["dbg"])],
|
||||
)
|
||||
|
||||
fastbuild_compile_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = fastbuild_compile_flags),
|
||||
] if fastbuild_compile_flags else []),
|
||||
with_features = [with_feature_set(features = ["fastbuild"])],
|
||||
)
|
||||
|
||||
opt_compile_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = opt_compile_flags),
|
||||
] if opt_compile_flags else []),
|
||||
with_features = [with_feature_set(features = ["opt"])],
|
||||
)
|
||||
|
||||
return [
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.assemble,
|
||||
tools = [tool(path = "{}/bin/clang".format(clang))],
|
||||
flag_sets = [
|
||||
required_compile_flag_set,
|
||||
compile_flag_set,
|
||||
dbg_compile_flag_set,
|
||||
fastbuild_compile_flag_set,
|
||||
opt_compile_flag_set,
|
||||
BAZEL_COMPILE_FLAG_SET,
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.preprocess_assemble,
|
||||
tools = [tool(path = "{}/bin/clang".format(clang))],
|
||||
flag_sets = [
|
||||
required_compile_flag_set,
|
||||
compile_flag_set,
|
||||
dbg_compile_flag_set,
|
||||
fastbuild_compile_flag_set,
|
||||
opt_compile_flag_set,
|
||||
BAZEL_COMPILE_FLAG_SET,
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.c_compile,
|
||||
tools = [tool(path = "{}/bin/clang".format(clang))],
|
||||
flag_sets = [
|
||||
required_compile_flag_set,
|
||||
compile_flag_set,
|
||||
dbg_compile_flag_set,
|
||||
fastbuild_compile_flag_set,
|
||||
opt_compile_flag_set,
|
||||
BAZEL_COMPILE_FLAG_SET,
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_compile,
|
||||
tools = [tool(path = "{}/bin/clang".format(clang))],
|
||||
flag_sets = [
|
||||
required_compile_flag_set,
|
||||
compile_flag_set,
|
||||
dbg_compile_flag_set,
|
||||
fastbuild_compile_flag_set,
|
||||
opt_compile_flag_set,
|
||||
BAZEL_COMPILE_FLAG_SET,
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_header_parsing,
|
||||
tools = [tool(path = "{}/bin/clang".format(clang))],
|
||||
flag_sets = [
|
||||
required_compile_flag_set,
|
||||
compile_flag_set,
|
||||
dbg_compile_flag_set,
|
||||
fastbuild_compile_flag_set,
|
||||
opt_compile_flag_set,
|
||||
BAZEL_COMPILE_FLAG_SET,
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,307 @@
|
|||
""" CC Link ActionConfigs for ld.lld """
|
||||
|
||||
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"action_config",
|
||||
"flag_group",
|
||||
"flag_set",
|
||||
"tool",
|
||||
"variable_with_value",
|
||||
"with_feature_set",
|
||||
)
|
||||
|
||||
BAZEL_LINK_FLAG_SET = flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["%{linkstamp_paths}"],
|
||||
iterate_over = "linkstamp_paths",
|
||||
expand_if_available = "linkstamp_paths",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "runtime_library_search_directories",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = [
|
||||
"-Xlinker",
|
||||
"-rpath",
|
||||
"-Xlinker",
|
||||
"$ORIGIN/%{runtime_library_search_directories}",
|
||||
],
|
||||
),
|
||||
],
|
||||
expand_if_available =
|
||||
"runtime_library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-L%{library_search_directories}"],
|
||||
iterate_over = "library_search_directories",
|
||||
expand_if_available = "library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "libraries_to_link",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["--start-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-whole-archive"],
|
||||
expand_if_true =
|
||||
"libraries_to_link.is_whole_archive",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.object_files}"],
|
||||
iterate_over = "libraries_to_link.object_files",
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "interface_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "static_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-l%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-l:%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "versioned_dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-no-whole-archive"],
|
||||
expand_if_true = "libraries_to_link.is_whole_archive",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["--end-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
],
|
||||
expand_if_available = "libraries_to_link",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["@%{thinlto_param_file}"],
|
||||
expand_if_true = "thinlto_param_file",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{user_link_flags}"],
|
||||
iterate_over = "user_link_flags",
|
||||
expand_if_available = "user_link_flags",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-o", "%{output_execpath}"],
|
||||
expand_if_available = "output_execpath",
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def link_action_configs(
|
||||
llvm,
|
||||
builtin_library_directories,
|
||||
builtin_libraries,
|
||||
builtin_framework_directories,
|
||||
builtin_frameworks,
|
||||
builtin_executable_objects,
|
||||
link_flags,
|
||||
dbg_link_flags,
|
||||
fastbuild_link_flags,
|
||||
opt_link_flags):
|
||||
"""
|
||||
Generates CC Link ActionConfigs
|
||||
|
||||
Args:
|
||||
llvm (string): Path to LLVM binaries.
|
||||
builtin_library_directories (List): List of library directories to always be passed to the linker.
|
||||
builtin_libraries (List): List of libraries to always be passed to the linker.
|
||||
builtin_framework_directories (List): List of Apple framework directories to always be passed to the linker.
|
||||
builtin_frameworks (List): List of Apple frameworks to always be passed to the linker.
|
||||
builtin_executable_objects (List): List of object files to always be passed to the linker.
|
||||
link_flags (List): List of flags to always be passed to the linker.
|
||||
dbg_link_flags (List): List of additional flags to always be passed to the linker in dbg configuration.
|
||||
fastbuild_link_flags (List): List of additional flags to always be passed to the linker in fastbuild configuration.
|
||||
opt_link_flags (List): List of additional flags to always be passed to the linker in opt configuration.
|
||||
|
||||
Returns:
|
||||
List of CC Link ActionConfigs
|
||||
"""
|
||||
|
||||
builtin_library_directory_link_flags = []
|
||||
for builtin_library_directory in builtin_library_directories:
|
||||
builtin_library_directory_link_flags.append("-L")
|
||||
builtin_library_directory_link_flags.append(builtin_library_directory)
|
||||
|
||||
builtin_library_link_flags = []
|
||||
for builtin_library in builtin_libraries:
|
||||
builtin_library_link_flags.append("-l{}".format(builtin_library))
|
||||
|
||||
if builtin_framework_directories:
|
||||
fail("Frameworks not supported by `ld.lld`")
|
||||
|
||||
if builtin_frameworks:
|
||||
fail("Frameworks not supported by `ld.lld`")
|
||||
|
||||
builtin_executable_objects_link_flags = []
|
||||
for builtin_executable_object in builtin_executable_objects:
|
||||
builtin_executable_objects_link_flags.append("-l{}".format(builtin_executable_object))
|
||||
|
||||
required_link_flags = (["-nostdlib"] +
|
||||
builtin_library_directory_link_flags +
|
||||
builtin_library_link_flags)
|
||||
required_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_link_flags),
|
||||
] if required_link_flags else []),
|
||||
)
|
||||
|
||||
required_executable_link_flags = (builtin_executable_objects_link_flags)
|
||||
required_executable_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_executable_link_flags),
|
||||
] if required_executable_link_flags else []),
|
||||
)
|
||||
|
||||
link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = link_flags),
|
||||
] if link_flags else []),
|
||||
)
|
||||
|
||||
dbg_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = dbg_link_flags),
|
||||
] if dbg_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["dbg"])],
|
||||
)
|
||||
|
||||
fastbuild_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = fastbuild_link_flags),
|
||||
] if fastbuild_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["fastbuild"])],
|
||||
)
|
||||
|
||||
opt_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = opt_link_flags),
|
||||
] if opt_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["opt"])],
|
||||
)
|
||||
|
||||
return [
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/ld.lld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-shared"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/ld.lld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-shared"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_executable,
|
||||
tools = [tool(path = "{}/bin/ld.lld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
required_executable_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-pie"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,305 @@
|
|||
""" CC Link ActionConfigs for ld64.lld """
|
||||
|
||||
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"action_config",
|
||||
"flag_group",
|
||||
"flag_set",
|
||||
"tool",
|
||||
"variable_with_value",
|
||||
"with_feature_set",
|
||||
)
|
||||
|
||||
BAZEL_LINK_FLAG_SET = flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["%{linkstamp_paths}"],
|
||||
iterate_over = "linkstamp_paths",
|
||||
expand_if_available = "linkstamp_paths",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "runtime_library_search_directories",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = [
|
||||
"-Xlinker",
|
||||
"-rpath",
|
||||
"-Xlinker",
|
||||
"$ORIGIN/%{runtime_library_search_directories}",
|
||||
],
|
||||
),
|
||||
],
|
||||
expand_if_available =
|
||||
"runtime_library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-L%{library_search_directories}"],
|
||||
iterate_over = "library_search_directories",
|
||||
expand_if_available = "library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "libraries_to_link",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["--start-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-whole-archive"],
|
||||
expand_if_true =
|
||||
"libraries_to_link.is_whole_archive",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.object_files}"],
|
||||
iterate_over = "libraries_to_link.object_files",
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "interface_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "static_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-l%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-l:%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "versioned_dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-no-whole-archive"],
|
||||
expand_if_true = "libraries_to_link.is_whole_archive",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["--end-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
],
|
||||
expand_if_available = "libraries_to_link",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["@%{thinlto_param_file}"],
|
||||
expand_if_true = "thinlto_param_file",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{user_link_flags}"],
|
||||
iterate_over = "user_link_flags",
|
||||
expand_if_available = "user_link_flags",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-o", "%{output_execpath}"],
|
||||
expand_if_available = "output_execpath",
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def link_action_configs(
|
||||
llvm,
|
||||
builtin_library_directories,
|
||||
builtin_libraries,
|
||||
builtin_framework_directories,
|
||||
builtin_frameworks,
|
||||
builtin_executable_objects,
|
||||
link_flags,
|
||||
dbg_link_flags,
|
||||
fastbuild_link_flags,
|
||||
opt_link_flags):
|
||||
"""
|
||||
Generates CC Link ActionConfigs
|
||||
|
||||
Args:
|
||||
llvm (string): Path to LLVM binaries.
|
||||
builtin_library_directories (List): List of library directories to always be passed to the linker.
|
||||
builtin_libraries (List): List of libraries to always be passed to the linker.
|
||||
builtin_framework_directories (List): List of Apple framework directories to always be passed to the linker.
|
||||
builtin_frameworks (List): List of Apple frameworks to always be passed to the linker.
|
||||
builtin_executable_objects (List): List of object files to always be passed to the linker.
|
||||
link_flags (List): List of flags to always be passed to the linker.
|
||||
dbg_link_flags (List): List of additional flags to always be passed to the linker in dbg configuration.
|
||||
fastbuild_link_flags (List): List of additional flags to always be passed to the linker in fastbuild configuration.
|
||||
opt_link_flags (List): List of additional flags to always be passed to the linker in opt configuration.
|
||||
|
||||
Returns:
|
||||
List of CC Link ActionConfigs
|
||||
"""
|
||||
|
||||
builtin_library_directory_link_flags = []
|
||||
for builtin_library_directory in builtin_library_directories:
|
||||
builtin_library_directory_link_flags.append("-L")
|
||||
builtin_library_directory_link_flags.append(builtin_library_directory)
|
||||
|
||||
builtin_library_link_flags = []
|
||||
for builtin_library in builtin_libraries:
|
||||
builtin_library_link_flags.append("-l{}".format(builtin_library))
|
||||
|
||||
builtin_framework_directory_link_flags = []
|
||||
for builtin_framework_directory in builtin_framework_directories:
|
||||
builtin_framework_directory_link_flags.append("-F")
|
||||
builtin_framework_directory_link_flags.append(builtin_framework_directory)
|
||||
|
||||
builtin_framework_link_flags = []
|
||||
for builtin_framework in builtin_frameworks:
|
||||
builtin_framework_link_flags.append("-framework")
|
||||
builtin_framework_link_flags.append(builtin_framework)
|
||||
|
||||
builtin_executable_objects_link_flags = []
|
||||
for builtin_executable_object in builtin_executable_objects:
|
||||
builtin_executable_objects_link_flags.append("-l{}".format(builtin_executable_object))
|
||||
|
||||
required_link_flags = (builtin_library_directory_link_flags +
|
||||
builtin_library_link_flags +
|
||||
builtin_framework_directory_link_flags +
|
||||
builtin_framework_link_flags)
|
||||
required_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_link_flags),
|
||||
] if required_link_flags else []),
|
||||
)
|
||||
|
||||
required_executable_link_flags = (builtin_executable_objects_link_flags)
|
||||
required_executable_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_executable_link_flags),
|
||||
] if required_executable_link_flags else []),
|
||||
)
|
||||
|
||||
link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = link_flags),
|
||||
] if link_flags else []),
|
||||
)
|
||||
|
||||
dbg_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = dbg_link_flags),
|
||||
] if dbg_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["dbg"])],
|
||||
)
|
||||
|
||||
fastbuild_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = fastbuild_link_flags),
|
||||
] if fastbuild_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["fastbuild"])],
|
||||
)
|
||||
|
||||
opt_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = opt_link_flags),
|
||||
] if opt_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["opt"])],
|
||||
)
|
||||
|
||||
return [
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/ld64.lld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-dylib"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/ld64.lld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-dylib"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_executable,
|
||||
tools = [tool(path = "{}/bin/ld64.lld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
required_executable_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,299 @@
|
|||
""" CC Link ActionConfigs for lld-link """
|
||||
|
||||
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"action_config",
|
||||
"flag_group",
|
||||
"flag_set",
|
||||
"tool",
|
||||
"variable_with_value",
|
||||
"with_feature_set",
|
||||
)
|
||||
|
||||
BAZEL_LINK_FLAG_SET = flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["%{linkstamp_paths}"],
|
||||
iterate_over = "linkstamp_paths",
|
||||
expand_if_available = "linkstamp_paths",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "runtime_library_search_directories",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = [
|
||||
"-Xlinker",
|
||||
"-rpath",
|
||||
"-Xlinker",
|
||||
"$ORIGIN/%{runtime_library_search_directories}",
|
||||
],
|
||||
),
|
||||
],
|
||||
expand_if_available =
|
||||
"runtime_library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["/libpath:%{library_search_directories}"],
|
||||
iterate_over = "library_search_directories",
|
||||
expand_if_available = "library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "libraries_to_link",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["/start-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.object_files}"],
|
||||
iterate_over = "libraries_to_link.object_files",
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "interface_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_false = "libraries_to_link.is_whole_archive",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["/wholearchive:%{libraries_to_link.name}"],
|
||||
expand_if_true = "libraries_to_link.is_whole_archive",
|
||||
),
|
||||
],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "static_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "versioned_dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["/end-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
],
|
||||
expand_if_available = "libraries_to_link",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["@%{thinlto_param_file}"],
|
||||
expand_if_true = "thinlto_param_file",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{user_link_flags}"],
|
||||
iterate_over = "user_link_flags",
|
||||
expand_if_available = "user_link_flags",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["/out:%{output_execpath}"],
|
||||
expand_if_available = "output_execpath",
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def link_action_configs(
|
||||
llvm,
|
||||
builtin_executable_objects,
|
||||
builtin_library_directories,
|
||||
builtin_libraries,
|
||||
builtin_framework_directories,
|
||||
builtin_frameworks,
|
||||
link_flags,
|
||||
dbg_link_flags,
|
||||
fastbuild_link_flags,
|
||||
opt_link_flags):
|
||||
"""
|
||||
Generates CC Link ActionConfigs
|
||||
|
||||
Args:
|
||||
llvm (string): Path to LLVM binaries.
|
||||
builtin_library_directories (List): List of library directories to always be passed to the linker.
|
||||
builtin_libraries (List): List of libraries to always be passed to the linker.
|
||||
builtin_framework_directories (List): List of Apple framework directories to always be passed to the linker.
|
||||
builtin_frameworks (List): List of Apple frameworks to always be passed to the linker.
|
||||
builtin_executable_objects (List): List of object files to always be passed to the linker.
|
||||
link_flags (List): List of flags to always be passed to the linker.
|
||||
dbg_link_flags (List): List of additional flags to always be passed to the linker in dbg configuration.
|
||||
fastbuild_link_flags (List): List of additional flags to always be passed to the linker in fastbuild configuration.
|
||||
opt_link_flags (List): List of additional flags to always be passed to the linker in opt configuration.
|
||||
|
||||
Returns:
|
||||
List of CC Link ActionConfigs
|
||||
"""
|
||||
|
||||
builtin_library_directory_link_flags = []
|
||||
for builtin_library_directory in builtin_library_directories:
|
||||
builtin_library_directory_link_flags.append("/libpath:{}".format(builtin_library_directory))
|
||||
|
||||
builtin_library_link_flags = []
|
||||
for builtin_library in builtin_libraries:
|
||||
builtin_library_link_flags.append(builtin_library)
|
||||
|
||||
if builtin_framework_directories:
|
||||
fail("Frameworks not supported by `lld-link`")
|
||||
|
||||
if builtin_frameworks:
|
||||
fail("Frameworks not supported by `lld-link`")
|
||||
|
||||
builtin_executable_objects_link_flags = []
|
||||
for builtin_executable_object in builtin_executable_objects:
|
||||
builtin_executable_objects_link_flags.append(builtin_executable_object)
|
||||
|
||||
required_link_flags = (["/nodefaultlib"] +
|
||||
builtin_library_directory_link_flags +
|
||||
builtin_library_link_flags)
|
||||
required_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_link_flags),
|
||||
] if required_link_flags else []),
|
||||
)
|
||||
|
||||
required_executable_link_flags = (builtin_executable_objects_link_flags)
|
||||
required_executable_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_executable_link_flags),
|
||||
] if required_executable_link_flags else []),
|
||||
)
|
||||
|
||||
link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = link_flags),
|
||||
] if link_flags else []),
|
||||
)
|
||||
|
||||
dbg_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = dbg_link_flags),
|
||||
] if dbg_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["dbg"])],
|
||||
)
|
||||
|
||||
fastbuild_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = fastbuild_link_flags),
|
||||
] if fastbuild_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["fastbuild"])],
|
||||
)
|
||||
|
||||
opt_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = opt_link_flags),
|
||||
] if opt_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["opt"])],
|
||||
)
|
||||
|
||||
return [
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/lld-link".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["/dll"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/lld-link".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["/dll"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_executable,
|
||||
tools = [tool(path = "{}/bin/lld-link".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
required_executable_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,77 @@
|
|||
""" CC Archive ActionConfigs for llvm-ar """
|
||||
|
||||
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"action_config",
|
||||
"flag_group",
|
||||
"flag_set",
|
||||
"tool",
|
||||
"variable_with_value",
|
||||
)
|
||||
|
||||
BASE_ARCHIVER_FLAG_SET = flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-rcsD", "%{output_execpath}"],
|
||||
expand_if_available = "output_execpath",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "libraries_to_link",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.object_files}"],
|
||||
iterate_over = "libraries_to_link.object_files",
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
],
|
||||
expand_if_available = "libraries_to_link",
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def archive_action_configs(llvm, archive_flags):
|
||||
"""
|
||||
Generates CC Archive ActionConfigs
|
||||
|
||||
Args:
|
||||
llvm (string): Path to LLVM binaries.
|
||||
archive_flags (List): List of flags to always be passed to the archiver.
|
||||
|
||||
Returns:
|
||||
List of CC Archive ActionConfigs
|
||||
"""
|
||||
|
||||
archive_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = archive_flags),
|
||||
] if archive_flags else []),
|
||||
)
|
||||
|
||||
return [action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_static_library,
|
||||
tools = [tool(path = "{}/bin/llvm-ar".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
archive_flag_set,
|
||||
BASE_ARCHIVER_FLAG_SET,
|
||||
],
|
||||
)]
|
|
@ -0,0 +1,42 @@
|
|||
""" CC Strip ActionConfigs for llvm-strip """
|
||||
|
||||
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"action_config",
|
||||
"flag_group",
|
||||
"flag_set",
|
||||
"tool",
|
||||
)
|
||||
|
||||
def strip_action_configs(llvm):
|
||||
"""
|
||||
Generates CC Strip ActionConfigs
|
||||
|
||||
Args:
|
||||
llvm (string): Path to LLVM binaries.
|
||||
|
||||
Returns:
|
||||
List of CC Strip ActionConfigs
|
||||
"""
|
||||
|
||||
return [action_config(
|
||||
action_name = ACTION_NAMES.strip,
|
||||
tools = [tool(path = "{}/bin/llvm-strip".format(llvm))],
|
||||
flag_sets = [
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-S", "-p", "-o", "%{output_file}"],
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "stripopts",
|
||||
flags = ["%{stripopts}"],
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{input_file}"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
)]
|
|
@ -0,0 +1,299 @@
|
|||
""" CC Link ActionConfigs for wasm-ld """
|
||||
|
||||
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"action_config",
|
||||
"flag_group",
|
||||
"flag_set",
|
||||
"tool",
|
||||
"variable_with_value",
|
||||
"with_feature_set",
|
||||
)
|
||||
|
||||
BAZEL_LINK_FLAG_SET = flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["%{linkstamp_paths}"],
|
||||
iterate_over = "linkstamp_paths",
|
||||
expand_if_available = "linkstamp_paths",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "runtime_library_search_directories",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = [
|
||||
"-Xlinker",
|
||||
"-rpath",
|
||||
"-Xlinker",
|
||||
"$ORIGIN/%{runtime_library_search_directories}",
|
||||
],
|
||||
),
|
||||
],
|
||||
expand_if_available =
|
||||
"runtime_library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-L%{library_search_directories}"],
|
||||
iterate_over = "library_search_directories",
|
||||
expand_if_available = "library_search_directories",
|
||||
),
|
||||
flag_group(
|
||||
iterate_over = "libraries_to_link",
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["--start-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-whole-archive"],
|
||||
expand_if_true =
|
||||
"libraries_to_link.is_whole_archive",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.object_files}"],
|
||||
iterate_over = "libraries_to_link.object_files",
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "interface_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "static_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-l%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-l:%{libraries_to_link.name}"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "versioned_dynamic_library",
|
||||
),
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-no-whole-archive"],
|
||||
expand_if_true = "libraries_to_link.is_whole_archive",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["--end-lib"],
|
||||
expand_if_equal = variable_with_value(
|
||||
name = "libraries_to_link.type",
|
||||
value = "object_file_group",
|
||||
),
|
||||
),
|
||||
],
|
||||
expand_if_available = "libraries_to_link",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["@%{thinlto_param_file}"],
|
||||
expand_if_true = "thinlto_param_file",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["%{user_link_flags}"],
|
||||
iterate_over = "user_link_flags",
|
||||
expand_if_available = "user_link_flags",
|
||||
),
|
||||
flag_group(
|
||||
flags = ["-o", "%{output_execpath}"],
|
||||
expand_if_available = "output_execpath",
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def link_action_configs(
|
||||
llvm,
|
||||
builtin_library_directories,
|
||||
builtin_libraries,
|
||||
builtin_framework_directories,
|
||||
builtin_frameworks,
|
||||
builtin_executable_objects,
|
||||
link_flags,
|
||||
dbg_link_flags,
|
||||
fastbuild_link_flags,
|
||||
opt_link_flags):
|
||||
"""
|
||||
Generates CC Link ActionConfigs
|
||||
|
||||
Args:
|
||||
llvm (string): Path to LLVM binaries.
|
||||
builtin_library_directories (List): List of library directories to always be passed to the linker.
|
||||
builtin_libraries (List): List of libraries to always be passed to the linker.
|
||||
builtin_framework_directories (List): List of Apple framework directories to always be passed to the linker.
|
||||
builtin_frameworks (List): List of Apple frameworks to always be passed to the linker.
|
||||
builtin_executable_objects (List): List of object files to always be passed to the linker.
|
||||
link_flags (List): List of flags to always be passed to the linker.
|
||||
dbg_link_flags (List): List of additional flags to always be passed to the linker in dbg configuration.
|
||||
fastbuild_link_flags (List): List of additional flags to always be passed to the linker in fastbuild configuration.
|
||||
opt_link_flags (List): List of additional flags to always be passed to the linker in opt configuration.
|
||||
|
||||
Returns:
|
||||
List of CC Link ActionConfigs
|
||||
"""
|
||||
|
||||
builtin_library_directory_link_flags = []
|
||||
for builtin_library_directory in builtin_library_directories:
|
||||
builtin_library_directory_link_flags.append("-L")
|
||||
builtin_library_directory_link_flags.append(builtin_library_directory)
|
||||
|
||||
builtin_library_link_flags = []
|
||||
for builtin_library in builtin_libraries:
|
||||
builtin_library_link_flags.append("-l{}".format(builtin_library))
|
||||
|
||||
if builtin_framework_directories:
|
||||
fail("Frameworks not supported by `wasm-ld`")
|
||||
|
||||
if builtin_frameworks:
|
||||
fail("Frameworks not supported by `wasm-ld`")
|
||||
|
||||
builtin_executable_objects_link_flags = []
|
||||
for builtin_executable_object in builtin_executable_objects:
|
||||
builtin_executable_objects_link_flags.append("-l{}".format(builtin_executable_object))
|
||||
|
||||
required_link_flags = (builtin_library_directory_link_flags +
|
||||
builtin_library_link_flags)
|
||||
required_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_link_flags),
|
||||
] if required_link_flags else []),
|
||||
)
|
||||
|
||||
required_executable_link_flags = (builtin_executable_objects_link_flags)
|
||||
required_executable_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = required_executable_link_flags),
|
||||
] if required_executable_link_flags else []),
|
||||
)
|
||||
|
||||
link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = link_flags),
|
||||
] if link_flags else []),
|
||||
)
|
||||
|
||||
dbg_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = dbg_link_flags),
|
||||
] if dbg_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["dbg"])],
|
||||
)
|
||||
|
||||
fastbuild_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = fastbuild_link_flags),
|
||||
] if fastbuild_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["fastbuild"])],
|
||||
)
|
||||
|
||||
opt_link_flag_set = flag_set(
|
||||
flag_groups = ([
|
||||
flag_group(flags = opt_link_flags),
|
||||
] if opt_link_flags else []),
|
||||
with_features = [with_feature_set(features = ["opt"])],
|
||||
)
|
||||
|
||||
return [
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/wasm-ld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-shared"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library,
|
||||
tools = [tool(path = "{}/bin/wasm-ld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["-shared"],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
action_config(
|
||||
action_name = ACTION_NAMES.cpp_link_executable,
|
||||
tools = [tool(path = "{}/bin/wasm-ld".format(llvm))],
|
||||
flag_sets = [
|
||||
# Mandatory, no link flags come through on command line.
|
||||
flag_set(
|
||||
flag_groups = [
|
||||
flag_group(
|
||||
flags = ["@%{linker_param_file}"],
|
||||
expand_if_available = "linker_param_file",
|
||||
),
|
||||
],
|
||||
),
|
||||
required_link_flag_set,
|
||||
required_executable_link_flag_set,
|
||||
link_flag_set,
|
||||
dbg_link_flag_set,
|
||||
fastbuild_link_flag_set,
|
||||
opt_link_flag_set,
|
||||
BAZEL_LINK_FLAG_SET,
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,230 @@
|
|||
""" Generate CcToolchainConfigInfo for LLVM """
|
||||
|
||||
load(
|
||||
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
|
||||
"artifact_name_pattern",
|
||||
"feature",
|
||||
)
|
||||
load("//bazel/toolchain_rules/cc_tools:clang.bzl", clang_compile_action_configs = "compile_action_configs")
|
||||
load("//bazel/toolchain_rules/cc_tools:ld.lld.bzl", ld_lld_link_action_configs = "link_action_configs")
|
||||
load("//bazel/toolchain_rules/cc_tools:ld64.lld.bzl", ld64_lld_link_action_configs = "link_action_configs")
|
||||
load("//bazel/toolchain_rules/cc_tools:lld_link.bzl", lld_link_link_action_configs = "link_action_configs")
|
||||
load("//bazel/toolchain_rules/cc_tools:llvm_ar.bzl", llvm_ar_archive_action_configs = "archive_action_configs")
|
||||
load("//bazel/toolchain_rules/cc_tools:llvm_strip.bzl", llvm_strip_strip_action_configs = "strip_action_configs")
|
||||
load("//bazel/toolchain_rules/cc_tools:wasm_ld.bzl", wasm_ld_link_action_configs = "link_action_configs")
|
||||
|
||||
APPLE_ARTIFACT_NAME_PATTERNS = [
|
||||
# Artifact name patterns differ from the defaults only for dynamic libraries.
|
||||
artifact_name_pattern(
|
||||
category_name = "dynamic_library",
|
||||
prefix = "lib",
|
||||
extension = ".dylib",
|
||||
),
|
||||
]
|
||||
|
||||
LINUX_ARTIFACT_NAME_PATTERNS = [
|
||||
# Artifact name patterns are the default.
|
||||
]
|
||||
|
||||
WASM_ARTIFACT_NAME_PATTERNS = [
|
||||
# Artifact name patterns differ from the defaults only for executables.
|
||||
artifact_name_pattern(
|
||||
category_name = "executable",
|
||||
prefix = "",
|
||||
extension = ".wasm",
|
||||
),
|
||||
]
|
||||
|
||||
WINDOWS_ARTIFACT_NAME_PATTERNS = [
|
||||
artifact_name_pattern(
|
||||
category_name = "object_file",
|
||||
prefix = "",
|
||||
extension = ".obj",
|
||||
),
|
||||
artifact_name_pattern(
|
||||
category_name = "static_library",
|
||||
prefix = "",
|
||||
extension = ".lib",
|
||||
),
|
||||
artifact_name_pattern(
|
||||
category_name = "alwayslink_static_library",
|
||||
prefix = "",
|
||||
extension = ".lo.lib",
|
||||
),
|
||||
artifact_name_pattern(
|
||||
category_name = "executable",
|
||||
prefix = "",
|
||||
extension = ".exe",
|
||||
),
|
||||
artifact_name_pattern(
|
||||
category_name = "dynamic_library",
|
||||
prefix = "",
|
||||
extension = ".dll",
|
||||
),
|
||||
artifact_name_pattern(
|
||||
category_name = "interface_library",
|
||||
prefix = "",
|
||||
extension = ".if.lib",
|
||||
),
|
||||
]
|
||||
|
||||
TARGET_CONFIG = {
|
||||
"aarch64-apple-darwin": struct(
|
||||
artifact_name_patterns = APPLE_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = ld64_lld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"aarch64-apple-ios": struct(
|
||||
artifact_name_patterns = APPLE_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = ld64_lld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"aarch64-linux-android": struct(
|
||||
artifact_name_patterns = LINUX_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = ld_lld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"aarch64-unknown-linux-gnu": struct(
|
||||
artifact_name_patterns = LINUX_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = ld_lld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"wasm32-unknown-unknown": struct(
|
||||
artifact_name_patterns = WASM_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = wasm_ld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"wasm32-wasi": struct(
|
||||
artifact_name_patterns = WASM_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = wasm_ld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"x86_64-apple-darwin": struct(
|
||||
artifact_name_patterns = APPLE_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = ld64_lld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"x86_64-pc-windows-msvc": struct(
|
||||
artifact_name_patterns = WINDOWS_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = lld_link_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
"x86_64-unknown-linux-gnu": struct(
|
||||
artifact_name_patterns = LINUX_ARTIFACT_NAME_PATTERNS,
|
||||
compile_action_configs = clang_compile_action_configs,
|
||||
archive_action_configs = llvm_ar_archive_action_configs,
|
||||
link_action_configs = ld_lld_link_action_configs,
|
||||
strip_action_configs = llvm_strip_strip_action_configs,
|
||||
),
|
||||
}
|
||||
|
||||
def _llvm_cc_toolchain_config_impl(ctx):
|
||||
target_config = TARGET_CONFIG[ctx.attr.target]
|
||||
|
||||
compile_action_configs = target_config.compile_action_configs(
|
||||
clang = ctx.attr.clang,
|
||||
target = ctx.attr.target,
|
||||
builtin_include_directories = ctx.attr.builtin_include_directories,
|
||||
builtin_framework_directories = ctx.attr.builtin_framework_directories,
|
||||
compile_flags = ctx.attr.compile_flags,
|
||||
dbg_compile_flags = ctx.attr.dbg_compile_flags,
|
||||
fastbuild_compile_flags = ctx.attr.fastbuild_compile_flags,
|
||||
opt_compile_flags = ctx.attr.opt_compile_flags,
|
||||
remap_path_prefix = ctx.attr.remap_path_prefix,
|
||||
)
|
||||
|
||||
archive_action_configs = target_config.archive_action_configs(
|
||||
llvm = ctx.attr.llvm,
|
||||
archive_flags = ctx.attr.archive_flags,
|
||||
)
|
||||
|
||||
link_action_configs = target_config.link_action_configs(
|
||||
llvm = ctx.attr.llvm,
|
||||
builtin_library_directories = ctx.attr.builtin_library_directories,
|
||||
builtin_libraries = ctx.attr.builtin_libraries,
|
||||
builtin_framework_directories = ctx.attr.builtin_framework_directories,
|
||||
builtin_frameworks = ctx.attr.builtin_frameworks,
|
||||
builtin_executable_objects = ctx.attr.builtin_executable_objects,
|
||||
link_flags = ctx.attr.link_flags,
|
||||
dbg_link_flags = ctx.attr.dbg_link_flags,
|
||||
fastbuild_link_flags = ctx.attr.fastbuild_link_flags,
|
||||
opt_link_flags = ctx.attr.opt_link_flags,
|
||||
)
|
||||
|
||||
strip_action_configs = target_config.strip_action_configs(
|
||||
llvm = ctx.attr.llvm,
|
||||
)
|
||||
|
||||
return cc_common.create_cc_toolchain_config_info(
|
||||
ctx = ctx,
|
||||
features = [
|
||||
feature(name = "no_legacy_features", enabled = True),
|
||||
feature(name = "supports_start_end_lib", enabled = ctx.attr.supports_start_end_lib),
|
||||
feature(name = "supports_interface_shared_libraries", enabled = False),
|
||||
feature(name = "supports_dynamic_linker", enabled = True),
|
||||
feature(name = "has_configured_linker_path", enabled = True),
|
||||
feature(name = "static_link_cpp_runtimes", enabled = False),
|
||||
feature(name = "supports_pic", enabled = True),
|
||||
],
|
||||
action_configs = compile_action_configs +
|
||||
archive_action_configs +
|
||||
link_action_configs +
|
||||
strip_action_configs,
|
||||
artifact_name_patterns = target_config.artifact_name_patterns,
|
||||
cxx_builtin_include_directories = ctx.attr.builtin_include_directories,
|
||||
toolchain_identifier = ctx.attr.name,
|
||||
host_system_name = None,
|
||||
target_system_name = ctx.attr.target,
|
||||
target_cpu = "unused",
|
||||
target_libc = "unused",
|
||||
compiler = "unused",
|
||||
abi_version = None,
|
||||
abi_libc_version = None,
|
||||
tool_paths = [],
|
||||
make_variables = [],
|
||||
builtin_sysroot = None,
|
||||
cc_target_os = None,
|
||||
)
|
||||
|
||||
llvm_cc_toolchain_config = rule(
|
||||
implementation = _llvm_cc_toolchain_config_impl,
|
||||
attrs = {
|
||||
"archive_flags": attr.string_list(),
|
||||
"builtin_executable_objects": attr.string_list(),
|
||||
"builtin_framework_directories": attr.string_list(),
|
||||
"builtin_frameworks": attr.string_list(),
|
||||
"builtin_include_directories": attr.string_list(),
|
||||
"builtin_libraries": attr.string_list(),
|
||||
"builtin_library_directories": attr.string_list(),
|
||||
"clang": attr.string(mandatory = True),
|
||||
"compile_flags": attr.string_list(),
|
||||
"dbg_compile_flags": attr.string_list(),
|
||||
"dbg_link_flags": attr.string_list(),
|
||||
"fastbuild_compile_flags": attr.string_list(),
|
||||
"fastbuild_link_flags": attr.string_list(),
|
||||
"link_flags": attr.string_list(),
|
||||
"llvm": attr.string(mandatory = True),
|
||||
"opt_compile_flags": attr.string_list(),
|
||||
"opt_link_flags": attr.string_list(),
|
||||
"remap_path_prefix": attr.string(),
|
||||
"supports_start_end_lib": attr.bool(default = True),
|
||||
"target": attr.string(mandatory = True),
|
||||
},
|
||||
provides = [CcToolchainConfigInfo],
|
||||
)
|
|
@ -0,0 +1,101 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"SDK_UNIVERSAL_APPLE_DARWIN",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [],
|
||||
builtin_framework_directories = [
|
||||
"{}/System/Library/Frameworks".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
],
|
||||
builtin_frameworks = [],
|
||||
builtin_include_directories = [
|
||||
"{}/usr/include/c++/v1".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/usr/include".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
],
|
||||
builtin_libraries = [],
|
||||
builtin_library_directories = [
|
||||
"{}/usr/lib".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [
|
||||
"-g",
|
||||
"-fstandalone-debug",
|
||||
],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"-fatal_warnings",
|
||||
"-arch",
|
||||
"arm64",
|
||||
"-macos_version_min",
|
||||
"13.0.0",
|
||||
"-platform_version",
|
||||
"macos",
|
||||
"13.0.0",
|
||||
"13.1",
|
||||
"-headerpad_max_install_names",
|
||||
"-undefined",
|
||||
"dynamic_lookup",
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [
|
||||
"-g0",
|
||||
"-O2",
|
||||
"-D_FORTIFY_SOURCE=1",
|
||||
"-DNDEBUG",
|
||||
"-ffunction-sections",
|
||||
"-fdata-sections",
|
||||
],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "aarch64-apple-darwin",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,99 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"SDK_UNIVERSAL_APPLE_IOS",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [],
|
||||
builtin_framework_directories = [
|
||||
"{}/System/Library/Frameworks".format(SDK_UNIVERSAL_APPLE_IOS),
|
||||
],
|
||||
builtin_frameworks = [],
|
||||
builtin_include_directories = [
|
||||
"{}/usr/include/c++/v1".format(SDK_UNIVERSAL_APPLE_IOS),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/usr/include".format(SDK_UNIVERSAL_APPLE_IOS),
|
||||
],
|
||||
builtin_libraries = [],
|
||||
builtin_library_directories = [
|
||||
"{}/usr/lib".format(SDK_UNIVERSAL_APPLE_IOS),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [
|
||||
"-g",
|
||||
"-fstandalone-debug",
|
||||
],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"-fatal_warnings",
|
||||
"-arch",
|
||||
"arm64",
|
||||
"-platform_version",
|
||||
"ios",
|
||||
"16.0.0",
|
||||
"16.2",
|
||||
"-headerpad_max_install_names",
|
||||
"-undefined",
|
||||
"dynamic_lookup",
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [
|
||||
"-g0",
|
||||
"-O2",
|
||||
"-D_FORTIFY_SOURCE=1",
|
||||
"-DNDEBUG",
|
||||
"-ffunction-sections",
|
||||
"-fdata-sections",
|
||||
],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "aarch64-apple-ios",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:ios",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,114 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"ANDROID_NDK_VERSION",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"SDK_UNIVERSAL_LINUX_ANDROID",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [
|
||||
":crtbegin_dynamic.o",
|
||||
":crtend_android.o",
|
||||
],
|
||||
builtin_include_directories = [
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/aarch64-linux-android".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
],
|
||||
builtin_libraries = [
|
||||
"c",
|
||||
"dl",
|
||||
"m",
|
||||
"unwind",
|
||||
"stdc++",
|
||||
"c++",
|
||||
"c++abi",
|
||||
],
|
||||
builtin_library_directories = [
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/14.0.7".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/14.0.7/lib/linux/aarch64".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/24".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
"{}/share/android-sdk/ndk/{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib".format(SDK_UNIVERSAL_LINUX_ANDROID, ANDROID_NDK_VERSION),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-DANDROID",
|
||||
"-D_FORTIFY_SOURCE=2",
|
||||
"-fdata-sections",
|
||||
"-ffunction-sections",
|
||||
"-fno-exceptions",
|
||||
"-fstack-protector-strong",
|
||||
"-funwind-tables",
|
||||
"-no-canonical-prefixes",
|
||||
"-Wall",
|
||||
"-Werror",
|
||||
"-Werror=format-security",
|
||||
"-Wformat",
|
||||
"-Wself-assign",
|
||||
"-Wthread-safety",
|
||||
],
|
||||
dbg_compile_flags = [
|
||||
"-g",
|
||||
"-fno-limit-debug-info",
|
||||
],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"--fatal-warnings",
|
||||
"--sysroot={}/toolchains/llvm/prebuilt/linux-x86_64/sysroot".format(SDK_UNIVERSAL_LINUX_ANDROID),
|
||||
"--dynamic-linker=/system/bin/linker64",
|
||||
"--build-id=md5",
|
||||
"--hash-style=gnu",
|
||||
"-z",
|
||||
"relro",
|
||||
"-z",
|
||||
"now",
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "aarch64-linux-android",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:android",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,103 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"SDK_AARCH64_UNKNOWN_LINUX_GNU",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [
|
||||
":Scrt1.o",
|
||||
":crti.o",
|
||||
":crtbeginS.o",
|
||||
":crtendS.o",
|
||||
":crtn.o",
|
||||
],
|
||||
builtin_include_directories = [
|
||||
"{}/usr/include/c++/10".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/include/aarch64-linux-gnu/c++/10".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/include/c++/10/backward".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/usr/include/aarch64-linux-gnu".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/include".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
],
|
||||
builtin_libraries = [
|
||||
"c",
|
||||
"dl",
|
||||
"gcc_s",
|
||||
"gcc",
|
||||
"m",
|
||||
"pthread",
|
||||
"stdc++",
|
||||
],
|
||||
builtin_library_directories = [
|
||||
"{}/lib/aarch64-linux-gnu".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/lib/gcc/aarch64-linux-gnu/10".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/lib/aarch64-linux-gnu".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"--fatal-warnings",
|
||||
"--sysroot={}".format(SDK_AARCH64_UNKNOWN_LINUX_GNU),
|
||||
"--dynamic-linker=/lib64/ld-linux-aarch64.so.1",
|
||||
"--build-id=md5",
|
||||
"--hash-style=gnu",
|
||||
"-z",
|
||||
"relro",
|
||||
"-z",
|
||||
"now",
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "aarch64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,75 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LIBCLANG_RT_WASM32",
|
||||
"LLVM",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [],
|
||||
builtin_include_directories = [
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
],
|
||||
builtin_libraries = [],
|
||||
builtin_library_directories = [],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"--fatal-warnings",
|
||||
# `wasm-ld` doesn't respect the verbatim `-l:<name>` syntax.
|
||||
"{}/lib/wasi/libclang_rt.builtins-wasm32.a".format(LIBCLANG_RT_WASM32),
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
supports_start_end_lib = False,
|
||||
tags = ["manual"],
|
||||
target = "wasm32-unknown-unknown",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:none",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,86 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LIBCLANG_RT_WASM32",
|
||||
"LLVM",
|
||||
"SDK_WASM32_WASI",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [],
|
||||
builtin_include_directories = [
|
||||
"{}/wasi-sysroot/include/c++/v1".format(SDK_WASM32_WASI),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/wasi-sysroot/include".format(SDK_WASM32_WASI),
|
||||
],
|
||||
builtin_libraries = [
|
||||
"c",
|
||||
"c++",
|
||||
"c++abi",
|
||||
"m",
|
||||
],
|
||||
builtin_library_directories = [
|
||||
"{}/wasi-sysroot/lib/wasm32-wasi".format(SDK_WASM32_WASI),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"--fatal-warnings",
|
||||
# `wasm-ld` doesn't respect the verbatim `-l:<name>` syntax.
|
||||
"{}/lib/wasi/libclang_rt.builtins-wasm32.a".format(LIBCLANG_RT_WASM32),
|
||||
"{}/wasi-sysroot/lib/wasm32-wasi/crt1.o".format(SDK_WASM32_WASI),
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
supports_start_end_lib = False,
|
||||
tags = ["manual"],
|
||||
target = "wasm32-wasi",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:wasi",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,101 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"SDK_UNIVERSAL_APPLE_DARWIN",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [],
|
||||
builtin_framework_directories = [
|
||||
"{}/System/Library/Frameworks".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
],
|
||||
builtin_frameworks = [],
|
||||
builtin_include_directories = [
|
||||
"{}/usr/include/c++/v1".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/usr/include".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
],
|
||||
builtin_libraries = [],
|
||||
builtin_library_directories = [
|
||||
"{}/usr/lib".format(SDK_UNIVERSAL_APPLE_DARWIN),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [
|
||||
"-g",
|
||||
"-fstandalone-debug",
|
||||
],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"-fatal_warnings",
|
||||
"-arch",
|
||||
"x86_64",
|
||||
"-macos_version_min",
|
||||
"13.0.0",
|
||||
"-platform_version",
|
||||
"macos",
|
||||
"13.0.0",
|
||||
"13.1",
|
||||
"-headerpad_max_install_names",
|
||||
"-undefined",
|
||||
"dynamic_lookup",
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [
|
||||
"-g0",
|
||||
"-O2",
|
||||
"-D_FORTIFY_SOURCE=1",
|
||||
"-DNDEBUG",
|
||||
"-ffunction-sections",
|
||||
"-fdata-sections",
|
||||
],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "x86_64-apple-darwin",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,93 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"SDK_X86_64_PC_WINDOWS_MSVC",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [],
|
||||
builtin_include_directories = [
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/crt/include".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
"{}/sdk/include/ucrt".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
"{}/sdk/include/shared".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
"{}/sdk/include/um".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
"{}/sdk/include/winrt".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
],
|
||||
builtin_libraries = [
|
||||
"advapi32.lib",
|
||||
"bcrypt.lib",
|
||||
"kernel32.lib",
|
||||
"libcmt.lib",
|
||||
"libcpmt.lib",
|
||||
"libucrt.lib",
|
||||
"libvcruntime.lib",
|
||||
"ntdll.lib",
|
||||
"userenv.lib",
|
||||
"uuid.lib",
|
||||
"ws2_32.lib",
|
||||
],
|
||||
builtin_library_directories = [
|
||||
"{}/crt/lib/x86_64".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
"{}/sdk/lib/um/x86_64".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
"{}/sdk/lib/ucrt/x86_64".format(SDK_X86_64_PC_WINDOWS_MSVC),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"/wx", # Treat warnings as errors
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [],
|
||||
opt_link_flags = [
|
||||
"/opt:icf,ref",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "x86_64-pc-windows-msvc",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:windows",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,103 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"SDK_X86_64_UNKNOWN_LINUX_GNU",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [
|
||||
":Scrt1.o",
|
||||
":crti.o",
|
||||
":crtbeginS.o",
|
||||
":crtendS.o",
|
||||
":crtn.o",
|
||||
],
|
||||
builtin_include_directories = [
|
||||
"{}/usr/include/c++/10".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/include/x86_64-linux-gnu/c++/10".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/include/c++/10/backward".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/usr/include/x86_64-linux-gnu".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/include".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
],
|
||||
builtin_libraries = [
|
||||
"c",
|
||||
"dl",
|
||||
"gcc_s",
|
||||
"gcc",
|
||||
"m",
|
||||
"pthread",
|
||||
"stdc++",
|
||||
],
|
||||
builtin_library_directories = [
|
||||
"{}/lib/x86_64-linux-gnu".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/lib/gcc/x86_64-linux-gnu/10".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
"{}/usr/lib/x86_64-linux-gnu".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"--fatal-warnings",
|
||||
"--sysroot={}".format(SDK_X86_64_UNKNOWN_LINUX_GNU),
|
||||
"--dynamic-linker=/lib64/ld-linux-x86-64.so.2",
|
||||
"--build-id=md5",
|
||||
"--hash-style=gnu",
|
||||
"-z",
|
||||
"relro",
|
||||
"-z",
|
||||
"now",
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "x86_64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,99 @@
|
|||
load(
|
||||
"@nix_config//:config.bzl",
|
||||
"CLANG",
|
||||
"CLANG_LIB",
|
||||
"CLANG_LIB_VERSION",
|
||||
"LLVM",
|
||||
"NIXOS_DYNAMIC_LINKER",
|
||||
"SDK_X86_64_UNKNOWN_NIXOS_GNU",
|
||||
)
|
||||
load("@rules_cc//cc:defs.bzl", "cc_toolchain")
|
||||
load("//bazel/toolchain_rules:llvm_cc_toolchain_config.bzl", "llvm_cc_toolchain_config")
|
||||
|
||||
llvm_cc_toolchain_config(
|
||||
name = "cc_toolchain_config",
|
||||
archive_flags = [],
|
||||
builtin_executable_objects = [
|
||||
":Scrt1.o",
|
||||
":crti.o",
|
||||
":crtbeginS.o",
|
||||
":crtendS.o",
|
||||
":crtn.o",
|
||||
],
|
||||
builtin_include_directories = [
|
||||
"{}/include/c++/v1".format(SDK_X86_64_UNKNOWN_NIXOS_GNU),
|
||||
"{}/lib/clang/{}/include".format(CLANG_LIB, CLANG_LIB_VERSION),
|
||||
"{}/include".format(SDK_X86_64_UNKNOWN_NIXOS_GNU),
|
||||
],
|
||||
builtin_libraries = [
|
||||
":libunwind.a",
|
||||
":libc.so",
|
||||
":libc++.a",
|
||||
":libc++abi.a",
|
||||
"dl",
|
||||
"m",
|
||||
"pthread",
|
||||
],
|
||||
builtin_library_directories = [
|
||||
"{}/lib".format(SDK_X86_64_UNKNOWN_NIXOS_GNU),
|
||||
"{}/lib/gcc/x86_64-unknown-linux-gnu/13.2.0".format(SDK_X86_64_UNKNOWN_NIXOS_GNU),
|
||||
],
|
||||
clang = CLANG,
|
||||
compile_flags = [
|
||||
"-fno-exceptions",
|
||||
"-Werror",
|
||||
"-Wall",
|
||||
"-Wthread-safety",
|
||||
"-Wself-assign",
|
||||
],
|
||||
dbg_compile_flags = [],
|
||||
dbg_link_flags = [],
|
||||
fastbuild_compile_flags = [],
|
||||
fastbuild_link_flags = [],
|
||||
link_flags = [
|
||||
"--fatal-warnings",
|
||||
"--dynamic-linker={}".format(NIXOS_DYNAMIC_LINKER),
|
||||
"--build-id=md5",
|
||||
"--hash-style=gnu",
|
||||
"-z",
|
||||
"relro",
|
||||
"-z",
|
||||
"now",
|
||||
],
|
||||
llvm = LLVM,
|
||||
opt_compile_flags = [],
|
||||
opt_link_flags = [
|
||||
"--gc-sections",
|
||||
],
|
||||
tags = ["manual"],
|
||||
target = "x86_64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
cc_toolchain(
|
||||
name = "cc_toolchain",
|
||||
all_files = "@nix_config//:config.bzl",
|
||||
ar_files = "@nix_config//:config.bzl",
|
||||
as_files = "@nix_config//:config.bzl",
|
||||
compiler_files = "@nix_config//:config.bzl",
|
||||
coverage_files = "@nix_config//:config.bzl",
|
||||
dwp_files = "@nix_config//:config.bzl",
|
||||
linker_files = "@nix_config//:config.bzl",
|
||||
objcopy_files = "@nix_config//:config.bzl",
|
||||
strip_files = "@nix_config//:config.bzl",
|
||||
tags = ["manual"],
|
||||
toolchain_config = "cc_toolchain_config",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
toolchain = ":cc_toolchain",
|
||||
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,43 @@
|
|||
load("@nix_config//:config.bzl", "SDK_UNIVERSAL_APPLE_DARWIN")
|
||||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = "",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {
|
||||
"SDKROOT": SDK_UNIVERSAL_APPLE_DARWIN,
|
||||
},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [
|
||||
"-Clinker-flavor=ld64.lld",
|
||||
],
|
||||
extra_rustc_flags = [
|
||||
"-Clinker-flavor=ld64.lld",
|
||||
],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-aarch64-apple-darwin",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "aarch64-apple-darwin",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,43 @@
|
|||
load("@nix_config//:config.bzl", "SDK_UNIVERSAL_APPLE_IOS")
|
||||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = "",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {
|
||||
"SDKROOT": SDK_UNIVERSAL_APPLE_IOS,
|
||||
},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [
|
||||
"-Clinker-flavor=ld64.lld",
|
||||
],
|
||||
extra_rustc_flags = [
|
||||
"-Clinker-flavor=ld64.lld",
|
||||
],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-aarch64-apple-ios",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "aarch64-apple-ios",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:ios",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = "",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [],
|
||||
extra_rustc_flags = [],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-aarch64-linux-android",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "aarch64-linux-android",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:android",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = "",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [],
|
||||
extra_rustc_flags = [],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-aarch64-unknown-linux-gnu",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "aarch64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:aarch64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = ".wasm",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [],
|
||||
extra_rustc_flags = [],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-wasm32-unknown-unknown",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "wasm32-unknown-unknown",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:none",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = ".wasm",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [],
|
||||
extra_rustc_flags = [],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-wasm32-wasi",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "wasm32-wasi",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:wasm32",
|
||||
"@platforms//os:wasi",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,43 @@
|
|||
load("@nix_config//:config.bzl", "SDK_UNIVERSAL_APPLE_DARWIN")
|
||||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = "",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".dylib",
|
||||
env = {
|
||||
"SDKROOT": SDK_UNIVERSAL_APPLE_DARWIN,
|
||||
},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [
|
||||
"-Clinker-flavor=ld64.lld",
|
||||
],
|
||||
extra_rustc_flags = [
|
||||
"-Clinker-flavor=ld64.lld",
|
||||
],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-x86_64-apple-darwin",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "x86_64-apple-darwin",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:macos",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = ".exe",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".dll",
|
||||
env = {},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [],
|
||||
extra_rustc_flags = [],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-x86_64-pc-windows-msvc",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".lib",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "x86_64-pc-windows-msvc",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:windows",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = "",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [],
|
||||
extra_rustc_flags = [],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-x86_64-unknown-linux-gnu",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "x86_64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:linux",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
load("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
|
||||
|
||||
rust_toolchain(
|
||||
name = "rust_toolchain",
|
||||
binary_ext = "",
|
||||
cargo = "@nix_rust//:cargo",
|
||||
clippy_driver = "@nix_rust//:clippy_driver",
|
||||
default_edition = "2021",
|
||||
dylib_ext = ".so",
|
||||
env = {},
|
||||
exec_triple = "x86_64-unknown-nixos-gnu",
|
||||
extra_exec_rustc_flags = [],
|
||||
extra_rustc_flags = [],
|
||||
rust_doc = "@nix_rust//:rustdoc",
|
||||
rust_std = "@nix_rust//:rust_std-x86_64-unknown-linux-gnu",
|
||||
rustc = "@nix_rust//:rustc",
|
||||
rustc_lib = "@nix_rust//:rustc_lib",
|
||||
staticlib_ext = ".a",
|
||||
stdlib_linkflags = [],
|
||||
tags = ["manual"],
|
||||
target_triple = "x86_64-unknown-linux-gnu",
|
||||
)
|
||||
|
||||
toolchain(
|
||||
name = "toolchain",
|
||||
exec_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
target_compatible_with = [
|
||||
"@platforms//cpu:x86_64",
|
||||
"@platforms//os:nixos",
|
||||
],
|
||||
toolchain = ":rust_toolchain",
|
||||
toolchain_type = "@rules_rust//rust:toolchain_type",
|
||||
)
|
|
@ -0,0 +1,81 @@
|
|||
"""
|
||||
https://github.com/aspect-build/bazel-lib/blob/main/lib/transitions.bzl
|
||||
|
||||
Rules for working with transitions.
|
||||
"""
|
||||
|
||||
load("@bazel_skylib//lib:paths.bzl", "paths")
|
||||
|
||||
def _transition_platform_impl(_, attr):
|
||||
return {"//command_line_option:platforms": str(attr.target_platform)}
|
||||
|
||||
# Transition from any input configuration to one that includes the
|
||||
# --platforms command-line flag.
|
||||
_transition_platform = transition(
|
||||
implementation = _transition_platform_impl,
|
||||
inputs = [],
|
||||
outputs = ["//command_line_option:platforms"],
|
||||
)
|
||||
|
||||
def _platform_transition_binary_impl(ctx):
|
||||
# We need to forward the DefaultInfo provider from the underlying rule.
|
||||
# Unfortunately, we can't do this directly, because Bazel requires that the executable to run
|
||||
# is actually generated by this rule, so we need to symlink to it, and generate a synthetic
|
||||
# forwarding DefaultInfo.
|
||||
|
||||
result = []
|
||||
binary = ctx.attr.binary[0]
|
||||
|
||||
default_info = binary[DefaultInfo]
|
||||
files = default_info.files
|
||||
new_executable = None
|
||||
original_executable = default_info.files_to_run.executable
|
||||
runfiles = default_info.default_runfiles
|
||||
|
||||
if not original_executable:
|
||||
fail("Cannot transition a 'binary' that is not executable")
|
||||
|
||||
new_executable_name = original_executable.basename
|
||||
|
||||
# In order for the symlink to have the same basename as the original
|
||||
# executable (important in the case of proto plugins), put it in a
|
||||
# subdirectory named after the label to prevent collisions.
|
||||
new_executable = ctx.actions.declare_file(paths.join(ctx.label.name, new_executable_name))
|
||||
ctx.actions.symlink(
|
||||
output = new_executable,
|
||||
target_file = original_executable,
|
||||
is_executable = True,
|
||||
)
|
||||
files = depset(direct = [new_executable], transitive = [files])
|
||||
runfiles = runfiles.merge(ctx.runfiles([new_executable]))
|
||||
|
||||
result.append(
|
||||
DefaultInfo(
|
||||
files = files,
|
||||
runfiles = runfiles,
|
||||
executable = new_executable,
|
||||
),
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
platform_transition_binary = rule(
|
||||
doc = "Transitions the binary to use the provided platform.",
|
||||
implementation = _platform_transition_binary_impl,
|
||||
attrs = {
|
||||
"binary": attr.label(
|
||||
doc = "The target to transition.",
|
||||
allow_files = True,
|
||||
cfg = _transition_platform,
|
||||
mandatory = True,
|
||||
),
|
||||
"target_platform": attr.label(
|
||||
doc = "The target platform to transition the binary.",
|
||||
mandatory = True,
|
||||
),
|
||||
"_allowlist_function_transition": attr.label(
|
||||
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
|
||||
),
|
||||
},
|
||||
executable = True,
|
||||
)
|
|
@ -0,0 +1,17 @@
|
|||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
cc_binary(
|
||||
name = "cc_binary",
|
||||
srcs = select({
|
||||
# See comment in `cc_binary_wasm32.cc`.
|
||||
"@platforms//os:none": ["cc_binary_wasm32-unknown-unknown.cc"],
|
||||
"//conditions:default": ["cc_binary.cc"],
|
||||
}),
|
||||
tags = ["platform_missing"],
|
||||
deps = [
|
||||
"//cc_library",
|
||||
"//rust_library:rust_library_cc",
|
||||
],
|
||||
)
|
|
@ -0,0 +1,13 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
extern "C" int cc_double_value(int value);
|
||||
extern "C" int rust_double_value(int value);
|
||||
|
||||
int main() {
|
||||
printf("Hello World!\n");
|
||||
std::cout << "CC: " << cc_double_value(5) << std::endl;
|
||||
std::cout << "Rust: " << rust_double_value(5) << std::endl;
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
extern "C" int cc_double_value(int value);
|
||||
extern "C" int rust_double_value(int value);
|
||||
|
||||
// `wasm32-unknown-unknown` is very barebones, so we have to define `_start()`
|
||||
// and we don't have access to `stdio.h` or `iostream`, so we can't output
|
||||
// anything, but we can still call the functions.
|
||||
extern "C" void _start() {
|
||||
cc_double_value(5);
|
||||
rust_double_value(5);
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
load("@rules_cc//cc:defs.bzl", "cc_library")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
cc_library(
|
||||
name = "cc_library",
|
||||
srcs = ["cc_library.cc"],
|
||||
linkstatic = True,
|
||||
tags = ["platform_missing"],
|
||||
deps = [],
|
||||
)
|
|
@ -0,0 +1 @@
|
|||
extern "C" int cc_double_value(int value) { return value * 2; }
|
|
@ -0,0 +1,9 @@
|
|||
# Nix
|
||||
|
||||
Nix Flake that supplies toolchains and SDKs for cross compiling.
|
||||
|
||||
This is kept in its own package so that when using the Nix `path:` syntax, only
|
||||
this directory is copied to the Nix Store instead of the entire `rules_rust`
|
||||
repository.
|
||||
|
||||
See also: `//bazel/nix_repositories.bzl`
|
|
@ -0,0 +1,159 @@
|
|||
{
|
||||
"nodes": {
|
||||
"android-nixpkgs": {
|
||||
"inputs": {
|
||||
"devshell": "devshell",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701375499,
|
||||
"narHash": "sha256-hiBAShY1YAztW01Qx846pgomyFZpBzsZ8DUY8LFhtX4=",
|
||||
"owner": "tadfisher",
|
||||
"repo": "android-nixpkgs",
|
||||
"rev": "24efd95411d18a8518b64bd041daaeb5d0a45da4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tadfisher",
|
||||
"repo": "android-nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"devshell": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"android-nixpkgs",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1700815693,
|
||||
"narHash": "sha256-JtKZEQUzosrCwDsLgm+g6aqbP1aseUl1334OShEAS3s=",
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"rev": "7ad1c417c87e98e56dcef7ecd0e0a2f2e5669d51",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fenix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701325357,
|
||||
"narHash": "sha256-+CF74n9/AlLwgdCTM5WuKsa/4C1YxJSpRDCfz1ErOl0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "07a409ce1fe2c6d6e871793394b0cc0e5e262e3b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1701237617,
|
||||
"narHash": "sha256-Ryd8xpNDY9MJnBFDYhB37XSFIxCPVVVXAbInNPa95vs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "85306ef2470ba705c97ce72741d56e42d0264015",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"android-nixpkgs": "android-nixpkgs",
|
||||
"fenix": "fenix",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1701186284,
|
||||
"narHash": "sha256-euPBY3EmEy7+Jjm2ToRPlSp/qrj0UL9+PRobxVz6+aQ=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "c7c582afb57bb802715262d7f1ba73b8a86c1c5a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rust-lang",
|
||||
"ref": "nightly",
|
||||
"repo": "rust-analyzer",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
|
@ -0,0 +1,156 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
|
||||
fenix = {
|
||||
url = "github:nix-community/fenix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
android-nixpkgs = {
|
||||
url = "github:tadfisher/android-nixpkgs";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, fenix, android-nixpkgs, ... }:
|
||||
let
|
||||
pkgs = import nixpkgs { system = "x86_64-linux"; };
|
||||
|
||||
llvm = pkgs.llvmPackages_16;
|
||||
|
||||
rust = with fenix.packages."x86_64-linux"; combine [
|
||||
complete.cargo
|
||||
complete.clippy
|
||||
complete.rustc
|
||||
complete.rustfmt
|
||||
complete.rust-src
|
||||
complete.rust-analyzer
|
||||
targets."aarch64-apple-darwin".latest.rust-std
|
||||
targets."aarch64-apple-ios".latest.rust-std
|
||||
targets."aarch64-linux-android".latest.rust-std
|
||||
targets."aarch64-unknown-linux-gnu".latest.rust-std
|
||||
targets."wasm32-unknown-unknown".latest.rust-std
|
||||
targets."wasm32-wasi".latest.rust-std
|
||||
targets."x86_64-apple-darwin".latest.rust-std
|
||||
targets."x86_64-pc-windows-msvc".latest.rust-std
|
||||
targets."x86_64-unknown-linux-gnu".latest.rust-std
|
||||
];
|
||||
|
||||
fetchVendor = { name, url, sha256, stripComponents ? 0 }:
|
||||
let
|
||||
authorization =
|
||||
if (pkgs.lib.hasPrefix "https://raw.githubusercontent.com/<repo>/" url) then
|
||||
''-H "Authorization: Bearer <token>"''
|
||||
else
|
||||
"";
|
||||
in
|
||||
pkgs.runCommandLocal "vendor-${name}"
|
||||
{
|
||||
buildInputs = [ pkgs.cacert ];
|
||||
outputHashMode = "recursive";
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = sha256;
|
||||
} ''
|
||||
# Empty URL special cased for example
|
||||
mkdir --parents $out
|
||||
if [ -n "${url}" ]; then
|
||||
${pkgs.curl}/bin/curl -s -S -L ${authorization} "${url}" | ${pkgs.libarchive}/bin/bsdtar -C $out -xf - --strip-components ${toString stripComponents}
|
||||
fi
|
||||
'';
|
||||
|
||||
libclang_rt_wasm32 = fetchVendor {
|
||||
name = "libclang_rt_wasm32";
|
||||
url = "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/libclang_rt.builtins-wasm32-wasi-20.0.tar.gz";
|
||||
sha256 = "AdRe1XrGeBuai1p5IMUTR7T7nhNlD1RZ8grZjVoHAKs=";
|
||||
};
|
||||
|
||||
sdk_aarch64-unknown-linux-gnu = fetchVendor {
|
||||
name = "sdk_aarch64-unknown-linux-gnu";
|
||||
url = "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/80fc74e431f37f590d0c85f16a9d8709088929e8/debian_bullseye_arm64_sysroot.tar.xz";
|
||||
sha256 = "VwHx6SjTmnGWvEoevjThR2oxNEe9NIdnSIJ9RBgKPE8=";
|
||||
};
|
||||
|
||||
sdk_universal-apple-darwin = fetchVendor {
|
||||
name = "sdk_universal-apple-darwin";
|
||||
url = ""; # User needs to supply.
|
||||
sha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; # User needs to supply.
|
||||
};
|
||||
|
||||
sdk_universal-apple-ios = fetchVendor {
|
||||
name = "sdk_universal-apple-ios";
|
||||
url = ""; # User needs to supply.
|
||||
sha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; # User needs to supply.
|
||||
};
|
||||
|
||||
sdk_universal-linux-android = android-nixpkgs.sdk."x86_64-linux" (sdkPkgs: with sdkPkgs; [
|
||||
cmdline-tools-latest
|
||||
build-tools-33-0-2
|
||||
platform-tools
|
||||
platforms-android-33
|
||||
ndk-25-2-9519653
|
||||
]);
|
||||
|
||||
sdk_wasm32-wasi = fetchVendor {
|
||||
name = "sdk_wasm32-wasi";
|
||||
url = "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sysroot-20.0.tar.gz";
|
||||
sha256 = "aePDwDYWopPPDSO802BO3YWM4d/J4a4CmGP/hDPF8FY=";
|
||||
};
|
||||
|
||||
sdk_x86_64-pc-windows-msvc = fetchVendor {
|
||||
name = "sdk_x86_64-pc-windows-msvc";
|
||||
url = ""; # User needs to supply.
|
||||
sha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; # User needs to supply.
|
||||
};
|
||||
|
||||
sdk_x86_64-unknown-linux-gnu = fetchVendor {
|
||||
name = "sdk_x86_64-unknown-linux-gnu";
|
||||
url = "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/f5f68713249b52b35db9e08f67184cac392369ab/debian_bullseye_amd64_sysroot.tar.xz";
|
||||
sha256 = "+pqXDAsKY1BCBGFD3PDqMv1YiU+0/B2LXXryTFIUaWk=";
|
||||
};
|
||||
|
||||
sdk_x86_64-unknown-nixos-gnu = pkgs.symlinkJoin {
|
||||
name = "sdk_x86_64-unknown-nixos-gnu";
|
||||
paths = [
|
||||
llvm.libcxx.out
|
||||
llvm.libcxx.dev
|
||||
llvm.libcxxabi.out
|
||||
llvm.libunwind.out
|
||||
pkgs.gcc13.cc.libgcc.out
|
||||
pkgs.gcc13.cc.libgcc.libgcc
|
||||
pkgs.glibc.dev
|
||||
pkgs.glibc.libgcc.out
|
||||
pkgs.glibc.out
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
packages."x86_64-linux".bazel = {
|
||||
config = pkgs.writeTextFile {
|
||||
name = "bazel-config";
|
||||
destination = "/config.bzl";
|
||||
text = ''
|
||||
LLVM = "${llvm.bintools-unwrapped}"
|
||||
CLANG = "${llvm.clang-unwrapped}"
|
||||
CLANG_LIB = "${llvm.clang-unwrapped.lib}"
|
||||
CLANG_LIB_VERSION = "16"
|
||||
|
||||
NIXOS_DYNAMIC_LINKER = "${pkgs.glibc.out}/lib64/ld-linux-x86-64.so.2"
|
||||
LIBCLANG_RT_WASM32 = "${libclang_rt_wasm32}"
|
||||
ANDROID_NDK_VERSION = "25.2.9519653"
|
||||
|
||||
SDK_AARCH64_UNKNOWN_LINUX_GNU = "${sdk_aarch64-unknown-linux-gnu}"
|
||||
SDK_UNIVERSAL_APPLE_DARWIN = "${sdk_universal-apple-darwin}"
|
||||
SDK_UNIVERSAL_APPLE_IOS = "${sdk_universal-apple-ios}"
|
||||
SDK_UNIVERSAL_LINUX_ANDROID = "${sdk_universal-linux-android}"
|
||||
SDK_WASM32_WASI = "${sdk_wasm32-wasi}"
|
||||
SDK_X86_64_PC_WINDOWS_MSVC = "${sdk_x86_64-pc-windows-msvc}"
|
||||
SDK_X86_64_UNKNOWN_LINUX_GNU = "${sdk_x86_64-unknown-linux-gnu}"
|
||||
SDK_X86_64_UNKNOWN_NIXOS_GNU = "${sdk_x86_64-unknown-nixos-gnu}"
|
||||
'';
|
||||
};
|
||||
|
||||
rust = rust;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
load("@rules_rust//rust:defs.bzl", "rust_binary")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
rust_binary(
|
||||
name = "rust_binary",
|
||||
srcs = select({
|
||||
# See comments in `rust_binary_wasm32-unknown-unknown.rs`.
|
||||
"@platforms//os:none": ["rust_binary_wasm32-unknown-unknown.rs"],
|
||||
# See comments in `rust_binary_wasm32-wasi.rs`.
|
||||
"@platforms//os:wasi": ["rust_binary_wasm32-wasi.rs"],
|
||||
"//conditions:default": ["rust_binary.rs"],
|
||||
}),
|
||||
tags = ["platform_missing"],
|
||||
deps = [
|
||||
"//cc_library",
|
||||
"//rust_library",
|
||||
"@crate_index//:anyhow",
|
||||
] + select({
|
||||
"@platforms//os:none": [],
|
||||
# To be removed once the `wasm32-wasi` version of `tokio` can `select()`
|
||||
# over different features.
|
||||
"@platforms//os:wasi": [],
|
||||
"//conditions:default": [
|
||||
"@crate_index//:tokio",
|
||||
],
|
||||
}),
|
||||
)
|
|
@ -0,0 +1,14 @@
|
|||
use anyhow::Result;
|
||||
|
||||
use rust_library::rust_double_value;
|
||||
|
||||
extern "C" { fn cc_double_value(value: i32) -> i32; }
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Hello World!");
|
||||
println!("CC: {}", unsafe{ cc_double_value(5) });
|
||||
println!("Rust: {}", rust_double_value(5));
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
use anyhow::Result;
|
||||
|
||||
use rust_library::rust_double_value;
|
||||
|
||||
extern "C" {
|
||||
fn cc_double_value(value: i32) -> i32;
|
||||
}
|
||||
|
||||
// `wasm32-unknown-unknown` is very barebones, so we don't have access to
|
||||
// printing or `tokio`, so we can't output anything or use `async main`,
|
||||
// but we can still call the functions.
|
||||
fn main() -> Result<()> {
|
||||
unsafe { cc_double_value(5) };
|
||||
rust_double_value(5);
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
use anyhow::Result;
|
||||
|
||||
use rust_library::rust_double_value;
|
||||
|
||||
extern "C" {
|
||||
fn cc_double_value(value: i32) -> i32;
|
||||
}
|
||||
|
||||
// `tokio` currently blocked on needing the `wasm32-wasi` version of `tokio`
|
||||
// to `select()` over different features.
|
||||
|
||||
// `wasm32-wasi` has limited support for `tokio` presently, so we can use the
|
||||
// example but only with the single threaded executor.
|
||||
// #[tokio::main(flavor = "current_thread")]
|
||||
// async fn main() -> Result<()> {
|
||||
fn main() -> Result<()> {
|
||||
println!("Hello World!");
|
||||
println!("CC: {}", unsafe { cc_double_value(5) });
|
||||
println!("Rust: {}", rust_double_value(5));
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
load("@rules_rust//rust:defs.bzl", "rust_library", "rust_static_library")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
rust_library(
|
||||
name = "rust_library",
|
||||
srcs = ["rust_library.rs"],
|
||||
tags = ["platform_missing"],
|
||||
deps = [],
|
||||
)
|
||||
|
||||
# CC needs to link against a Rust `staticlib` crate which includes
|
||||
# all the Rust `std` symbols.
|
||||
rust_static_library(
|
||||
name = "rust_library_cc",
|
||||
srcs = ["rust_library.rs"],
|
||||
tags = ["platform_missing"],
|
||||
deps = [],
|
||||
)
|
|
@ -0,0 +1,4 @@
|
|||
#[no_mangle]
|
||||
pub fn rust_double_value(value: i32) -> i32 {
|
||||
value * 2
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Nix
|
||||
|
||||
Nix Flake that declares developer tools when executing in a Nix environment.
|
||||
|
||||
This is kept in its own package so that when using the Nix `path:` syntax, only
|
||||
this directory is copied to the Nix Store instead of the entire `rules_rust`
|
||||
repository.
|
||||
|
||||
See also: `//.direnv`
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1700444282,
|
||||
"narHash": "sha256-s/+tgT+Iz0LZO+nBvSms+xsMqvHt2LqYniG9r+CYyJc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3f21a22b5aafefa1845dec6f4a378a8f53d8681c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, ... }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell
|
||||
{
|
||||
packages = [
|
||||
pkgs.bazel-buildtools
|
||||
pkgs.bazel_6
|
||||
pkgs.cargo
|
||||
pkgs.rustc
|
||||
pkgs.rustfmt
|
||||
];
|
||||
};
|
||||
});
|
||||
}
|
|
@ -1460,8 +1460,7 @@ def rustc_compile_action(
|
|||
else:
|
||||
providers.extend([crate_info, dep_info])
|
||||
|
||||
if toolchain.target_arch != "wasm32":
|
||||
providers += establish_cc_info(ctx, attr, crate_info, toolchain, cc_toolchain, feature_configuration, interface_library)
|
||||
providers += establish_cc_info(ctx, attr, crate_info, toolchain, cc_toolchain, feature_configuration, interface_library)
|
||||
|
||||
output_group_info = {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue