Files
carbon-lang/common/BUILD
T
Richard SmithandJon Ross-Perkins bf8697113a Move llvm::Initialize* calls to main. (#3449)
Per their documentation, the `llvm::Initialize*` functions are only
supposed to be called by the main program, not by a library like
toolchain/codegen. Fixes a hang due to a data race in multithreaded
autoupdate.

Add a utility class `Carbon::InitLLVM` to do the common LLVM
initialization shared by all Carbon tools, optionally including
initializing the LLVM targets. Because the LLVM targets add a lot of
binary size, only initialize them for binaries that opt in by depending
on a new target `//common:all_llvm_targets`.

Also fix `//explorer:file_test` and `//explorer:file_test.trace` to
share a binary rather than linking an identical binary twice.

---------

Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
2023-12-07 01:45:47 +00:00

262 lines
5.4 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("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
package(default_visibility = ["//visibility:public"])
cc_library(
name = "bazel_working_dir",
hdrs = ["bazel_working_dir.h"],
deps = [
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "command_line",
srcs = ["command_line.cpp"],
hdrs = ["command_line.h"],
deps = [
":check",
":ostream",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "command_line_test",
size = "small",
srcs = ["command_line_test.cpp"],
deps = [
":command_line",
"//testing/base:gtest_main",
"//testing/base:test_raw_ostream",
"@com_google_googletest//:gtest",
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "check",
srcs = [
"check_internal.cpp",
"check_internal.h",
],
hdrs = ["check.h"],
deps = [
":ostream",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "check_test",
size = "small",
srcs = ["check_test.cpp"],
deps = [
":check",
"//testing/base:gtest_main",
"@com_google_googletest//:gtest",
],
)
cc_library(
name = "enum_base",
hdrs = ["enum_base.h"],
deps = [
"//common:ostream",
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "enum_base_test_def",
testonly = 1,
textual_hdrs = ["enum_base_test.def"],
)
cc_test(
name = "enum_base_test",
size = "small",
srcs = ["enum_base_test.cpp"],
deps = [
":enum_base",
":enum_base_test_def",
"//testing/base:gtest_main",
"//testing/base:test_raw_ostream",
"@com_google_googletest//:gtest",
],
)
cc_library(
name = "error",
hdrs = ["error.h"],
deps = [
":check",
":ostream",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "error_test",
size = "small",
srcs = ["error_test.cpp"],
deps = [
":error",
"//testing/base:gtest_main",
"//testing/base:test_raw_ostream",
"@com_google_googletest//:gtest",
],
)
cc_library(
name = "hashing",
srcs = ["hashing.cpp"],
hdrs = ["hashing.h"],
deps = [
":check",
":ostream",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "hashing_test",
srcs = ["hashing_test.cpp"],
deps = [
":hashing",
"//testing/base:gtest_main",
"//testing/base:test_raw_ostream",
"@com_google_googletest//:gtest",
"@llvm-project//llvm:Support",
],
)
cc_binary(
name = "hashing_benchmark",
testonly = 1,
srcs = ["hashing_benchmark.cpp"],
deps = [
":check",
":hashing",
"@com_github_google_benchmark//:benchmark_main",
"@com_google_absl//absl/hash",
"@com_google_absl//absl/random",
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "indirect_value",
hdrs = ["indirect_value.h"],
)
cc_test(
name = "indirect_value_test",
size = "small",
srcs = ["indirect_value_test.cpp"],
deps = [
":indirect_value",
"//testing/base:gtest_main",
"@com_google_googletest//:gtest",
],
)
cc_library(
name = "init_llvm",
srcs = ["init_llvm.cpp"],
hdrs = ["init_llvm.h"],
deps = [
"@llvm-project//llvm:Support",
],
)
# Link against this to cause `:init_llvm` to pull in all LLVM targets.
#
# Be careful when depending on this: it pulls in several hundred megabytes of
# LLVM binary size in -c fastbuild. This should only be depended on by a
# `cc_binary` or `cc_test` target, never a `cc_library`.
cc_library(
name = "all_llvm_targets",
srcs = ["all_llvm_targets.cpp"],
deps = [
":init_llvm",
"@llvm-project//llvm:AllTargetsAsmParsers",
"@llvm-project//llvm:AllTargetsCodeGens",
"@llvm-project//llvm:Support",
],
alwayslink = 1,
)
cc_library(
name = "ostream",
hdrs = ["ostream.h"],
deps = [
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "string_helpers",
srcs = ["string_helpers.cpp"],
hdrs = ["string_helpers.h"],
deps = [
":check",
":error",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "string_helpers_test",
size = "small",
srcs = ["string_helpers_test.cpp"],
deps = [
":string_helpers",
"//testing/base:gtest_main",
"@com_google_googletest//:gtest",
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "struct_reflection",
hdrs = ["struct_reflection.h"],
)
cc_test(
name = "struct_reflection_test",
size = "small",
srcs = ["struct_reflection_test.cpp"],
deps = [
":struct_reflection",
"//testing/base:gtest_main",
"@com_google_googletest//:gtest",
],
)
cc_library(
name = "vlog",
srcs = ["vlog_internal.h"],
hdrs = ["vlog.h"],
deps = [
":ostream",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "vlog_test",
size = "small",
srcs = ["vlog_test.cpp"],
deps = [
":vlog",
"//testing/base:gtest_main",
"//testing/base:test_raw_ostream",
"@com_google_googletest//:gtest",
],
)