mirror of
https://github.com/bazelbuild/rules_cc
synced 2024-11-26 20:02:22 +00:00
Merge pull request #237 from armandomontanez:rules-based-toolchain-example
PiperOrigin-RevId: 684024413 Change-Id: I36767bb7452d83749a48342ff447f792979da576
This commit is contained in:
commit
7782be6db1
|
@ -49,3 +49,13 @@ tasks:
|
||||||
- "--ignore_dev_dependency"
|
- "--ignore_dev_dependency"
|
||||||
build_targets:
|
build_targets:
|
||||||
- "//cc/..."
|
- "//cc/..."
|
||||||
|
ubuntu_rule_based_toolchains:
|
||||||
|
name: Ubuntu rule-based toolchains
|
||||||
|
platform: ubuntu1804
|
||||||
|
working_directory: examples/rule_based_toolchain
|
||||||
|
build_flags:
|
||||||
|
- "--enable_bzlmod"
|
||||||
|
build_targets:
|
||||||
|
- "//..."
|
||||||
|
test_targets:
|
||||||
|
- "//..."
|
||||||
|
|
1
.bazelignore
Normal file
1
.bazelignore
Normal file
|
@ -0,0 +1 @@
|
||||||
|
examples/rule_based_toolchain
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,2 @@
|
||||||
/bazel-*
|
bazel-*
|
||||||
MODULE.bazel.lock
|
MODULE.bazel.lock
|
||||||
|
|
2
examples/rule_based_toolchain/.bazelrc
Normal file
2
examples/rule_based_toolchain/.bazelrc
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Do not use the default toolchain.
|
||||||
|
build --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=0
|
1
examples/rule_based_toolchain/.bazelversion
Normal file
1
examples/rule_based_toolchain/.bazelversion
Normal file
|
@ -0,0 +1 @@
|
||||||
|
7.2.1
|
28
examples/rule_based_toolchain/BUILD.bazel
Normal file
28
examples/rule_based_toolchain/BUILD.bazel
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@rules_cc//cc:defs.bzl", "cc_test")
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
cc_test(
|
||||||
|
name = "quick_test",
|
||||||
|
srcs = ["quick_test.cc"],
|
||||||
|
deps = [
|
||||||
|
"//dynamic_answer",
|
||||||
|
"//static_answer",
|
||||||
|
"@googletest//:gtest",
|
||||||
|
"@googletest//:gtest_main",
|
||||||
|
],
|
||||||
|
)
|
44
examples/rule_based_toolchain/MODULE.bazel
Normal file
44
examples/rule_based_toolchain/MODULE.bazel
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
module(
|
||||||
|
name = "rule_based_toolchain",
|
||||||
|
version = "0.0.1",
|
||||||
|
)
|
||||||
|
|
||||||
|
bazel_dep(name = "platforms", version = "0.0.10")
|
||||||
|
bazel_dep(name = "googletest", version = "1.15.2")
|
||||||
|
bazel_dep(name = "bazel_skylib", version = "1.7.1")
|
||||||
|
bazel_dep(name = "rules_cc")
|
||||||
|
local_path_override(
|
||||||
|
module_name = "rules_cc",
|
||||||
|
path = "../..",
|
||||||
|
)
|
||||||
|
|
||||||
|
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "clang-linux-x86_64",
|
||||||
|
build_file = "//toolchain:clang.BUILD",
|
||||||
|
sha256 = "9042f89df9c13a2bf28e16ce34dfe22934b59b5d8390e94b030bb378bdb3c898",
|
||||||
|
type = "zip",
|
||||||
|
url = "https://chrome-infra-packages.appspot.com/dl/fuchsia/third_party/clang/linux-amd64/+/git_revision:0cfd03ac0d3f9713090a581bda07584754c73a49",
|
||||||
|
)
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "clang-linux-aarch64",
|
||||||
|
build_file = "//toolchain:clang.BUILD",
|
||||||
|
sha256 = "61abb915821190baddafa973c69a9db9acda5a16ed3a89489ea2b3b030a2330b",
|
||||||
|
type = "zip",
|
||||||
|
url = "https://chrome-infra-packages.appspot.com/dl/fuchsia/third_party/clang/linux-arm64/+/git_revision:0cfd03ac0d3f9713090a581bda07584754c73a49",
|
||||||
|
)
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "linux_sysroot",
|
||||||
|
build_file = "//toolchain:linux_sysroot.BUILD",
|
||||||
|
sha256 = "f45ca0d8b46810b94d2a7dbc65f9092337d6a9568b260b51173a5ab9314da25e",
|
||||||
|
type = "zip",
|
||||||
|
url = "https://chrome-infra-packages.appspot.com/dl/fuchsia/third_party/sysroot/bionic/+/git_revision:702eb9654703a7cec1cadf93a7e3aa269d053943",
|
||||||
|
)
|
||||||
|
|
||||||
|
register_toolchains(
|
||||||
|
"//toolchain:host_cc_toolchain",
|
||||||
|
dev_dependency = True,
|
||||||
|
)
|
15
examples/rule_based_toolchain/README.md
Normal file
15
examples/rule_based_toolchain/README.md
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# Rule-based toolchains
|
||||||
|
This example showcases a fully working rule-based toolchain for Linux. This also
|
||||||
|
serves as an integration test to ensure rule-based toolchains continue to work
|
||||||
|
as intended.
|
||||||
|
|
||||||
|
The complete toolchain configuration lives [here](https://github.com/bazelbuild/rules_cc/tree/main/examples/rule_based_toolchain/toolchain).
|
||||||
|
|
||||||
|
# Trying the example
|
||||||
|
From this directory, you can run example tests that build using this toolchain
|
||||||
|
with the following command:
|
||||||
|
```
|
||||||
|
$ bazel test //...
|
||||||
|
```
|
||||||
|
|
||||||
|
This example currently only supports Linux.
|
65
examples/rule_based_toolchain/constraint/BUILD.bazel
Normal file
65
examples/rule_based_toolchain/constraint/BUILD.bazel
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@bazel_skylib//lib:selects.bzl", "selects")
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
selects.config_setting_group(
|
||||||
|
name = "linux_x86_64",
|
||||||
|
match_all = [
|
||||||
|
"@platforms//os:linux",
|
||||||
|
"@platforms//cpu:x86_64",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
selects.config_setting_group(
|
||||||
|
name = "linux_aarch64",
|
||||||
|
match_all = [
|
||||||
|
"@platforms//os:linux",
|
||||||
|
"@platforms//cpu:aarch64",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
selects.config_setting_group(
|
||||||
|
name = "macos_x86_64",
|
||||||
|
match_all = [
|
||||||
|
"@platforms//os:macos",
|
||||||
|
"@platforms//cpu:x86_64",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
selects.config_setting_group(
|
||||||
|
name = "macos_aarch64",
|
||||||
|
match_all = [
|
||||||
|
"@platforms//os:macos",
|
||||||
|
"@platforms//cpu:aarch64",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
selects.config_setting_group(
|
||||||
|
name = "windows_x86_64",
|
||||||
|
match_all = [
|
||||||
|
"@platforms//os:windows",
|
||||||
|
"@platforms//cpu:x86_64",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
selects.config_setting_group(
|
||||||
|
name = "windows_aarch64",
|
||||||
|
match_all = [
|
||||||
|
"@platforms//os:windows",
|
||||||
|
"@platforms//cpu:aarch64",
|
||||||
|
],
|
||||||
|
)
|
45
examples/rule_based_toolchain/dynamic_answer/BUILD.bazel
Normal file
45
examples/rule_based_toolchain/dynamic_answer/BUILD.bazel
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@rules_cc//cc:defs.bzl", "cc_library", "cc_shared_library")
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
cc_library(
|
||||||
|
name = "headers",
|
||||||
|
hdrs = ["public/dynamic_answer.h"],
|
||||||
|
includes = ["public"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_library(
|
||||||
|
name = "answer",
|
||||||
|
srcs = ["dynamic_answer.c"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
deps = [":headers"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_shared_library(
|
||||||
|
name = "shared_library",
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
deps = [":answer"],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Forces linkage as a shared library.
|
||||||
|
cc_library(
|
||||||
|
name = "dynamic_answer",
|
||||||
|
srcs = [":shared_library"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
deps = [":headers"],
|
||||||
|
)
|
|
@ -0,0 +1,19 @@
|
||||||
|
// Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#include "dynamic_answer.h"
|
||||||
|
|
||||||
|
int dynamic_answer(void) {
|
||||||
|
return 24;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
// Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#ifndef DYNAMIC_ANSWER_PUBLIC_DYNAMIC_ANSWER_H_
|
||||||
|
#define DYNAMIC_ANSWER_PUBLIC_DYNAMIC_ANSWER_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
int dynamic_answer(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // DYNAMIC_ANSWER_PUBLIC_DYNAMIC_ANSWER_H_
|
26
examples/rule_based_toolchain/quick_test.cc
Normal file
26
examples/rule_based_toolchain/quick_test.cc
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "dynamic_answer.h"
|
||||||
|
#include "static_answer.h"
|
||||||
|
|
||||||
|
TEST(Static, ProperlyLinked) {
|
||||||
|
EXPECT_EQ(static_answer(), 42);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Dynamic, ProperlyLinked) {
|
||||||
|
EXPECT_EQ(dynamic_answer(), 24);
|
||||||
|
}
|
33
examples/rule_based_toolchain/static_answer/BUILD.bazel
Normal file
33
examples/rule_based_toolchain/static_answer/BUILD.bazel
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@rules_cc//cc:defs.bzl", "cc_library")
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
cc_library(
|
||||||
|
name = "answer",
|
||||||
|
srcs = ["static_answer.cc"],
|
||||||
|
hdrs = ["public/static_answer.h"],
|
||||||
|
includes = ["public"],
|
||||||
|
linkstatic = True,
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO: This should be a cc_static_library when that's supported.
|
||||||
|
alias(
|
||||||
|
name = "static_answer",
|
||||||
|
actual = ":answer",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
|
@ -0,0 +1,28 @@
|
||||||
|
// Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#ifndef STATIC_ANSWER_PUBLIC_STATIC_ANSWER_H_
|
||||||
|
#define STATIC_ANSWER_PUBLIC_STATIC_ANSWER_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
int static_answer(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // STATIC_ANSWER_PUBLIC_STATIC_ANSWER_H_
|
19
examples/rule_based_toolchain/static_answer/static_answer.cc
Normal file
19
examples/rule_based_toolchain/static_answer/static_answer.cc
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#include "static_answer.h"
|
||||||
|
|
||||||
|
extern "C" int static_answer() {
|
||||||
|
return 42;
|
||||||
|
}
|
39
examples/rule_based_toolchain/toolchain/BUILD.bazel
Normal file
39
examples/rule_based_toolchain/toolchain/BUILD.bazel
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@rules_cc//cc/toolchains:toolchain.bzl", "cc_toolchain")
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
cc_toolchain(
|
||||||
|
name = "host_clang",
|
||||||
|
args = select({
|
||||||
|
"@platforms//os:linux": [
|
||||||
|
"//toolchain/args:linux_sysroot",
|
||||||
|
],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}) + [
|
||||||
|
"//toolchain/args:no_canonical_prefixes",
|
||||||
|
"//toolchain/args:warnings",
|
||||||
|
],
|
||||||
|
enabled_features = ["@rules_cc//cc/toolchains/args:experimental_replace_legacy_action_config_features"],
|
||||||
|
known_features = ["@rules_cc//cc/toolchains/args:experimental_replace_legacy_action_config_features"],
|
||||||
|
tool_map = "//toolchain/tools:all_tools",
|
||||||
|
)
|
||||||
|
|
||||||
|
toolchain(
|
||||||
|
name = "host_cc_toolchain",
|
||||||
|
toolchain = ":host_clang",
|
||||||
|
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
|
||||||
|
)
|
52
examples/rule_based_toolchain/toolchain/args/BUILD.bazel
Normal file
52
examples/rule_based_toolchain/toolchain/args/BUILD.bazel
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@rules_cc//cc/toolchains:args.bzl", "cc_args")
|
||||||
|
load("@rules_cc//cc/toolchains/args:sysroot.bzl", "cc_sysroot")
|
||||||
|
|
||||||
|
cc_sysroot(
|
||||||
|
name = "linux_sysroot",
|
||||||
|
data = [
|
||||||
|
"@linux_sysroot//:root",
|
||||||
|
"@linux_sysroot//:usr-include",
|
||||||
|
"@linux_sysroot//:usr-include-x86_64-linux-gnu",
|
||||||
|
],
|
||||||
|
sysroot = "@linux_sysroot//:root",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_args(
|
||||||
|
name = "warnings",
|
||||||
|
actions = [
|
||||||
|
"@rules_cc//cc/toolchains/actions:c_compile",
|
||||||
|
"@rules_cc//cc/toolchains/actions:cpp_compile_actions",
|
||||||
|
],
|
||||||
|
args = [
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Wpedantic",
|
||||||
|
],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_args(
|
||||||
|
name = "no_canonical_prefixes",
|
||||||
|
actions = [
|
||||||
|
"@rules_cc//cc/toolchains/actions:c_compile",
|
||||||
|
"@rules_cc//cc/toolchains/actions:cpp_compile_actions",
|
||||||
|
],
|
||||||
|
args = ["-no-canonical-prefixes"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
85
examples/rule_based_toolchain/toolchain/clang.BUILD
Normal file
85
examples/rule_based_toolchain/toolchain/clang.BUILD
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@bazel_skylib//rules/directory:directory.bzl", "directory")
|
||||||
|
load("@bazel_skylib//rules/directory:subdirectory.bzl", "subdirectory")
|
||||||
|
|
||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
exports_files(glob(["bin/**"]))
|
||||||
|
|
||||||
|
# Directory-based rules in this toolchain only referece things in
|
||||||
|
# lib/ or include/ subdirectories.
|
||||||
|
directory(
|
||||||
|
name = "toolchain_root",
|
||||||
|
srcs = glob([
|
||||||
|
"lib/**",
|
||||||
|
"include/**",
|
||||||
|
]),
|
||||||
|
)
|
||||||
|
|
||||||
|
subdirectory(
|
||||||
|
name = "include-c++-v1",
|
||||||
|
parent = ":toolchain_root",
|
||||||
|
path = "include/c++/v1",
|
||||||
|
)
|
||||||
|
|
||||||
|
subdirectory(
|
||||||
|
name = "lib-clang-include",
|
||||||
|
parent = ":toolchain_root",
|
||||||
|
path = "lib/clang/19/include",
|
||||||
|
)
|
||||||
|
|
||||||
|
subdirectory(
|
||||||
|
name = "include-x86_64-unknown-linux-gnu-c++-v1",
|
||||||
|
parent = ":toolchain_root",
|
||||||
|
path = "include/x86_64-unknown-linux-gnu/c++/v1",
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "builtin_headers",
|
||||||
|
srcs = [
|
||||||
|
":include-c++-v1",
|
||||||
|
":include-x86_64-unknown-linux-gnu-c++-v1",
|
||||||
|
":lib-clang-include",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Various supporting files needed to run the linker.
|
||||||
|
filegroup(
|
||||||
|
name = "linker_builtins",
|
||||||
|
data = glob([
|
||||||
|
"bin/lld*",
|
||||||
|
"bin/ld*",
|
||||||
|
"lib/**/*.a",
|
||||||
|
"lib/**/*.so*",
|
||||||
|
"lib/**/*.o",
|
||||||
|
]) + [
|
||||||
|
":multicall_support_files",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Some toolchain distributions use busybox-style handling of tools, so things
|
||||||
|
# like `clang++` just redirect to a `llvm` binary. This glob catches this
|
||||||
|
# binary if it's included in the distribution, and is a no-op if the multicall
|
||||||
|
# binary doesn't exist.
|
||||||
|
filegroup(
|
||||||
|
name = "multicall_support_files",
|
||||||
|
srcs = glob(
|
||||||
|
["bin/llvm"],
|
||||||
|
allow_empty = True,
|
||||||
|
),
|
||||||
|
)
|
37
examples/rule_based_toolchain/toolchain/linux_sysroot.BUILD
Normal file
37
examples/rule_based_toolchain/toolchain/linux_sysroot.BUILD
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@bazel_skylib//rules/directory:directory.bzl", "directory")
|
||||||
|
load("@bazel_skylib//rules/directory:subdirectory.bzl", "subdirectory")
|
||||||
|
|
||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
directory(
|
||||||
|
name = "root",
|
||||||
|
srcs = glob(["**/*"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
subdirectory(
|
||||||
|
name = "usr-include-x86_64-linux-gnu",
|
||||||
|
parent = ":root",
|
||||||
|
path = "usr/include/x86_64-linux-gnu",
|
||||||
|
)
|
||||||
|
|
||||||
|
subdirectory(
|
||||||
|
name = "usr-include",
|
||||||
|
parent = ":root",
|
||||||
|
path = "usr/include",
|
||||||
|
)
|
200
examples/rule_based_toolchain/toolchain/tools/BUILD.bazel
Normal file
200
examples/rule_based_toolchain/toolchain/tools/BUILD.bazel
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
# Copyright 2024 The Bazel Authors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
load("@rules_cc//cc/toolchains:tool.bzl", "cc_tool")
|
||||||
|
load("@rules_cc//cc/toolchains:tool_map.bzl", "cc_tool_map")
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
# This `select` happens under the target configuration. For macOS,
|
||||||
|
# llvm-libtool-darwin should be used when creating static libraries even if the
|
||||||
|
# exec platform is linux.
|
||||||
|
alias(
|
||||||
|
name = "all_tools",
|
||||||
|
actual = select({
|
||||||
|
"@platforms//os:macos": ":macos_tools",
|
||||||
|
"//conditions:default": ":default_tools",
|
||||||
|
}),
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
COMMON_TOOLS = {
|
||||||
|
"@rules_cc//cc/toolchains/actions:assembly_actions": ":asm",
|
||||||
|
"@rules_cc//cc/toolchains/actions:c_compile": ":clang",
|
||||||
|
"@rules_cc//cc/toolchains/actions:cpp_compile_actions": ":clang++",
|
||||||
|
"@rules_cc//cc/toolchains/actions:link_actions": ":lld",
|
||||||
|
"@rules_cc//cc/toolchains/actions:objcopy_embed_data": ":llvm-objcopy",
|
||||||
|
"@rules_cc//cc/toolchains/actions:strip": ":llvm-strip",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_tool_map(
|
||||||
|
name = "default_tools",
|
||||||
|
tools = COMMON_TOOLS | {
|
||||||
|
"@rules_cc//cc/toolchains/actions:ar_actions": ":llvm-ar",
|
||||||
|
},
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool_map(
|
||||||
|
name = "macos_tools",
|
||||||
|
tools = COMMON_TOOLS | {
|
||||||
|
"@rules_cc//cc/toolchains/actions:ar_actions": ":llvm-libtool-darwin",
|
||||||
|
},
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO: https://github.com/bazelbuild/rules_cc/issues/235 - Workaround until
|
||||||
|
# Bazel has a more robust way to implement `cc_tool_map`.
|
||||||
|
alias(
|
||||||
|
name = "asm",
|
||||||
|
actual = ":clang",
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "clang",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/clang",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/clang",
|
||||||
|
}),
|
||||||
|
data = [
|
||||||
|
":exec_platform_builtin_headers",
|
||||||
|
":exec_platform_multicall_support_files",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "clang++",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/clang++",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/clang++",
|
||||||
|
}),
|
||||||
|
data = [
|
||||||
|
":exec_platform_builtin_headers",
|
||||||
|
":exec_platform_multicall_support_files",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "lld",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/clang++",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/clang++",
|
||||||
|
}),
|
||||||
|
data = [
|
||||||
|
":exec_platform_builtin_headers",
|
||||||
|
":exec_platform_linker_builtins",
|
||||||
|
":exec_platform_multicall_support_files",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "llvm-ar",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/llvm-ar",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/llvm-ar",
|
||||||
|
}),
|
||||||
|
data = [":exec_platform_multicall_support_files"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "llvm-libtool-darwin",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/llvm-libtool-darwin",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/llvm-libtool-darwin",
|
||||||
|
}),
|
||||||
|
data = [":exec_platform_multicall_support_files"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "llvm-objcopy",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/llvm-objcopy",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/llvm-objcopy",
|
||||||
|
}),
|
||||||
|
data = [":exec_platform_multicall_support_files"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "llvm-objdump",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/llvm-objdump",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/llvm-objdump",
|
||||||
|
}),
|
||||||
|
data = [":exec_platform_multicall_support_files"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "llvm-cov",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/llvm-cov",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/llvm-cov",
|
||||||
|
}),
|
||||||
|
data = [":exec_platform_multicall_support_files"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "llvm-strip",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/llvm-strip",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/llvm-strip",
|
||||||
|
}),
|
||||||
|
data = [":exec_platform_multicall_support_files"],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_tool(
|
||||||
|
name = "clang-tidy",
|
||||||
|
src = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:bin/clang-tidy",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:bin/clang-tidy",
|
||||||
|
}),
|
||||||
|
data = [
|
||||||
|
":exec_platform_builtin_headers",
|
||||||
|
":exec_platform_multicall_support_files",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Platform-specific aliases #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# These aliases are used to reduce duplication of `select` statements throughout
|
||||||
|
# this build file. The select statements in these aliases are evaluated under
|
||||||
|
# the exec configuration.
|
||||||
|
|
||||||
|
alias(
|
||||||
|
name = "exec_platform_builtin_headers",
|
||||||
|
actual = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:builtin_headers",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:builtin_headers",
|
||||||
|
}),
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
alias(
|
||||||
|
name = "exec_platform_multicall_support_files",
|
||||||
|
actual = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:multicall_support_files",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:multicall_support_files",
|
||||||
|
}),
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
alias(
|
||||||
|
name = "exec_platform_linker_builtins",
|
||||||
|
actual = select({
|
||||||
|
"//constraint:linux_aarch64": "@clang-linux-aarch64//:linker_builtins",
|
||||||
|
"//constraint:linux_x86_64": "@clang-linux-x86_64//:linker_builtins",
|
||||||
|
}),
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
Loading…
Reference in a new issue