skia2/toolchain/BUILD.bazel

42 lines
1.0 KiB
Python
Raw Normal View History

[infra] Add hermetic toolchain for C/C++ using Clang+Musl This can successfully build a C library: bazel build --config=clang //third_party:libpng This can build and run a statically-linked executable: bazel test --config=clang //:bazel_test For more verbose compile and linking output, add the `--features diagnostic` flag to a Bazel command (see _make_diagnostic_flags() in toolchain/clang_toolchain_config.bzl. Similarly, a `--features print_search_dirs` can be used to show where clang is looking for libraries etc to link against. These features are made available for easier debugging. Suggested review order: - Read https://docs.bazel.build/versions/4.2.1/tutorial/cc-toolchain-config.html if unfamiliar with setting up C++ toolchains in Bazel - .bazelrc and WORKSPACE.bazel that configure use and download of the toolchain (Clang 13, musl 1.2.2) - toolchain/build_toolchain.bzl which downloads and assembles the toolchain (w/o installing anything on the host machine) - toolchain/BUILD.bazel and toolchain/*trampoline.sh to see the setup of the toolchain rules. - toolchain/clang_toolchain_config.bzl to see the configuration of the toolchain. Pay special attention to the various command line flags that are set. - See that tools/bazel_test.cc has made a new home in experimental/bazel_test/bazel_test.cpp, with a companion BUILD.bazel. Note the addition of some function calls that test use of the C++ standard library. The number being used to test the PNG library is the latest and greatest that verifies we are compiling the one brought in via DEPS (and not a local one). - third_party/* to see how png (and its dependent zlib) have been built. Pay special attention to the musl_compat hack to fix static linking (any idea what the real cause is?) - //BUILD.bazel to see definition of the bazel_test executable. Change-Id: I7b0922d0d45cb9be8df2fd5fa5a1f48492654d5f Bug: skia:12541 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/461178 Reviewed-by: Ben Wagner <bungeman@google.com> Reviewed-by: Leandro Lovisolo <lovisolo@google.com>
2021-10-20 20:20:42 +00:00
load("@rules_cc//cc:defs.bzl", "cc_toolchain", "cc_toolchain_suite")
load(":clang_toolchain_config.bzl", "provide_clang_toolchain_config")
package(default_visibility = ["//visibility:public"])
cc_toolchain_suite(
name = "clang_suite",
toolchains = {
"k8|clang": ":clang_toolchain",
},
)
filegroup(name = "not_implemented")
filegroup(
name = "all-toolchain-files",
srcs = [
"ar_trampoline.sh",
"clang_trampoline.sh",
"lld_trampoline.sh",
"@clang_linux_amd64_musl//:all_files",
],
)
provide_clang_toolchain_config(
name = "clang_toolchain_config",
)
cc_toolchain(
name = "clang_toolchain",
all_files = ":all-toolchain-files",
ar_files = ":all-toolchain-files",
compiler_files = ":all-toolchain-files",
dwp_files = ":not_implemented",
linker_files = ":all-toolchain-files",
objcopy_files = ":not_implemented",
strip_files = ":not_implemented",
supports_param_files = 0,
toolchain_config = ":clang_toolchain_config",
toolchain_identifier = "clang-toolchain",
)