mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
This shifts the Bazel toolchain configuration of our installation to build all of the Clang runtimes Carbon uses on-demand natively in Bazel. We export the information about how to build into a generated Starlark file, and emit BUILD files and Starlark logic into the installation to orchestrate the build. This requires some complex management of Bazel toolchains -- we need to first set-up a "runtimes toolchain" that doesn't have runtimes of its own, but can be used to _build_ runtimes. Then we build the runtimes using that toolchain, and assemble them into the standard layout for a Carbon runtimes tree. Finally we configure the _actual_ toolchain with this built tree. Currently, this is only setup for the installed toolchain, but I plan to factor this runtimes build into one that can be used directly as well to break up the monolithic runtimes build step into Bazel-integrated build of the runtimes. This will also serve as the foundation for adding bootstrapping support directly to our Bazel build. --------- Co-authored-by: Dana Jansens <danakj@orodu.net>
371 lines
8.1 KiB
Python
371 lines
8.1 KiB
Python
# Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
# Exceptions. See /LICENSE for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
load("//bazel/cc_rules:defs.bzl", "cc_binary", "cc_library", "cc_test")
|
|
load("llvm_tools.bzl", "LLVM_MAIN_TOOLS", "generate_llvm_tools_def")
|
|
load("runtimes_build_info.bzl", "generate_runtimes_build_info_cc_library")
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
exports_files([
|
|
"runtimes_build_vars.tpl.bzl",
|
|
])
|
|
|
|
cc_library(
|
|
name = "block_value_store",
|
|
hdrs = ["block_value_store.h"],
|
|
deps = [
|
|
":id_tag",
|
|
":mem_usage",
|
|
":value_store",
|
|
":yaml",
|
|
"//common:check",
|
|
"//common:hashing",
|
|
"//common:set",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "canonical_value_store",
|
|
hdrs = ["canonical_value_store.h"],
|
|
deps = [
|
|
":mem_usage",
|
|
":value_store",
|
|
":value_store_types",
|
|
":yaml",
|
|
"//common:hashtable_key_context",
|
|
"//common:set",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "canonical_value_store_test",
|
|
size = "small",
|
|
srcs = ["canonical_value_store_test.cpp"],
|
|
deps = [
|
|
":canonical_value_store",
|
|
":value_ids",
|
|
"//testing/base:gtest_main",
|
|
"@googletest//:gtest",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "clang_invocation",
|
|
srcs = ["clang_invocation.cpp"],
|
|
hdrs = ["clang_invocation.h"],
|
|
deps = [
|
|
":install_paths",
|
|
"//common:check",
|
|
"//common:string_helpers",
|
|
"//toolchain/diagnostics:emitter",
|
|
"@llvm-project//clang:basic",
|
|
"@llvm-project//clang:driver",
|
|
"@llvm-project//clang:frontend",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "fixed_size_value_store",
|
|
hdrs = ["fixed_size_value_store.h"],
|
|
deps = [
|
|
":mem_usage",
|
|
":value_store",
|
|
":value_store_types",
|
|
"//common:check",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "for_each_macro",
|
|
hdrs = ["for_each_macro.h"],
|
|
deps = [
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "id_tag",
|
|
hdrs = ["id_tag.h"],
|
|
deps = [
|
|
"//common:check",
|
|
"//common:ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "index_base",
|
|
hdrs = ["index_base.h"],
|
|
deps = [
|
|
"//common:ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
# A library for computing install paths for the toolchain. Note that this
|
|
# library does *not* include the data itself, as that would form a dependency
|
|
# cycle. Each part of the toolchain should add the narrow data file groups to
|
|
# their data dependencies, and then use this library to locate them.
|
|
cc_library(
|
|
name = "install_paths",
|
|
srcs = ["install_paths.cpp"],
|
|
hdrs = ["install_paths.h"],
|
|
deps = [
|
|
":llvm_tools",
|
|
"//common:check",
|
|
"//common:error",
|
|
"//common:filesystem",
|
|
"@bazel_tools//tools/cpp/runfiles",
|
|
"@llvm-project//clang:basic",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "test_binary",
|
|
testonly = 1,
|
|
srcs = ["test_binary.cpp"],
|
|
data = ["//toolchain/install:install_data"],
|
|
)
|
|
|
|
cc_test(
|
|
name = "install_paths_test",
|
|
size = "small",
|
|
srcs = ["install_paths_test.cpp"],
|
|
data = [
|
|
":test_binary",
|
|
"//toolchain/install:install_data",
|
|
],
|
|
deps = [
|
|
":install_paths",
|
|
"//common:check",
|
|
"//common:error_test_helpers",
|
|
"//common:filesystem",
|
|
"//common:ostream",
|
|
"//testing/base:global_exe_path",
|
|
"//testing/base:gtest_main",
|
|
"@bazel_tools//tools/cpp/runfiles",
|
|
"@googletest//:gtest",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "install_paths_test_helpers",
|
|
testonly = 1,
|
|
srcs = ["install_paths_test_helpers.cpp"],
|
|
hdrs = ["install_paths_test_helpers.h"],
|
|
deps = [
|
|
":install_paths",
|
|
"//testing/base:global_exe_path",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "kind_switch",
|
|
hdrs = ["kind_switch.h"],
|
|
deps = [
|
|
":for_each_macro",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "kind_switch_test",
|
|
size = "small",
|
|
srcs = ["kind_switch_test.cpp"],
|
|
deps = [
|
|
":kind_switch",
|
|
"//common:raw_string_ostream",
|
|
"//testing/base:gtest_main",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "mem_usage",
|
|
hdrs = ["mem_usage.h"],
|
|
deps = [
|
|
":yaml",
|
|
"//common:map",
|
|
"//common:set",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "relational_value_store",
|
|
hdrs = ["relational_value_store.h"],
|
|
deps = [
|
|
":value_store",
|
|
":value_store_types",
|
|
"//common:check",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "timings",
|
|
hdrs = ["timings.h"],
|
|
deps = [
|
|
":yaml",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "value_ids",
|
|
hdrs = ["value_ids.h"],
|
|
deps = [
|
|
":index_base",
|
|
"//common:check",
|
|
"//common:ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "value_store",
|
|
hdrs = ["value_store.h"],
|
|
deps = [
|
|
":id_tag",
|
|
":mem_usage",
|
|
":value_store_types",
|
|
":yaml",
|
|
"//common:check",
|
|
"//common:hashtable_key_context",
|
|
"//common:ostream",
|
|
"//common:set",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "value_store_test",
|
|
size = "small",
|
|
srcs = ["value_store_test.cpp"],
|
|
deps = [
|
|
":value_ids",
|
|
":value_store",
|
|
"//common:raw_string_ostream",
|
|
"//testing/base:gtest_main",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "value_store_types",
|
|
hdrs = ["value_store_types.h"],
|
|
deps = [
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "int",
|
|
srcs = ["int.cpp"],
|
|
hdrs = ["int.h"],
|
|
deps = [
|
|
":canonical_value_store",
|
|
":index_base",
|
|
":mem_usage",
|
|
":value_store",
|
|
":yaml",
|
|
"//common:check",
|
|
"//common:hashtable_key_context",
|
|
"//common:ostream",
|
|
"//common:set",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "int_test",
|
|
size = "small",
|
|
srcs = ["int_test.cpp"],
|
|
deps = [
|
|
":int",
|
|
"//common:raw_string_ostream",
|
|
"//testing/base:gtest_main",
|
|
"//toolchain/testing:yaml_test_helpers",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
generate_llvm_tools_def(
|
|
name = "llvm_tools_def",
|
|
out = "llvm_tools.def",
|
|
)
|
|
|
|
config_setting(
|
|
name = "is_macos",
|
|
constraint_values = ["@platforms//os:macos"],
|
|
)
|
|
|
|
cc_library(
|
|
name = "llvm_tools",
|
|
srcs = ["llvm_tools.cpp"],
|
|
hdrs = ["llvm_tools.h"],
|
|
linkopts = select({
|
|
# TODO: This should be moved upstream to LLVM's tool libraries that
|
|
# require it.
|
|
":is_macos": [
|
|
"-framework",
|
|
"CoreFoundation",
|
|
],
|
|
"//conditions:default": [],
|
|
}),
|
|
deps = [
|
|
":llvm_tools_def",
|
|
"//common:command_line",
|
|
"//common:enum_base",
|
|
"@llvm-project//llvm:Support",
|
|
] + [info.lib for info in LLVM_MAIN_TOOLS.values()],
|
|
)
|
|
|
|
generate_runtimes_build_info_cc_library(name = "runtimes_build_info")
|
|
|
|
cc_library(
|
|
name = "shared_value_stores",
|
|
hdrs = ["shared_value_stores.h"],
|
|
deps = [
|
|
":canonical_value_store",
|
|
":int",
|
|
":mem_usage",
|
|
":value_ids",
|
|
":value_store",
|
|
":yaml",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "shared_value_stores_test",
|
|
size = "small",
|
|
srcs = ["shared_value_stores_test.cpp"],
|
|
deps = [
|
|
":shared_value_stores",
|
|
"//common:raw_string_ostream",
|
|
"//testing/base:gtest_main",
|
|
"//toolchain/testing:yaml_test_helpers",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "yaml",
|
|
hdrs = ["yaml.h"],
|
|
deps = [
|
|
"//common:check",
|
|
"//common:ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|