treewide: migrate to toolchain_cc
This contains the first part of the toolchain_cc migration. It leaves
the native host GCC, but everything that we ship is now built with
toolchain_cc with the exception of Linux which gets migrated later in
this stack.
Change-Id: Icb3422857fd3baf0ff61b7edd5754517f6a73dfc
Reviewed-on: https://review.monogon.dev/c/monogon/+/4012
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/build/toolchain/BUILD.bazel b/build/toolchain/BUILD.bazel
index 75cd911..a1d2288 100644
--- a/build/toolchain/BUILD.bazel
+++ b/build/toolchain/BUILD.bazel
@@ -51,7 +51,7 @@
config_setting(
name = "is_dynamic",
- flag_values = {"//build/platforms/linkmode:static": "False"},
+ flag_values = {"@toolchain_cc_mngn//buildmode:static": "False"},
)
toolchain(
diff --git a/build/toolchain/llvm-efi/BUILD.bazel b/build/toolchain/llvm-efi/BUILD.bazel
deleted file mode 100644
index 169a37f..0000000
--- a/build/toolchain/llvm-efi/BUILD.bazel
+++ /dev/null
@@ -1,47 +0,0 @@
-load("@rules_cc//cc:defs.bzl", "cc_toolchain")
-load(":cc_toolchain_config.bzl", "efi_k8_cc_toolchain_config")
-
-package(default_visibility = ["//visibility:public"])
-
-filegroup(name = "empty")
-
-filegroup(
- name = "fltused",
- srcs = ["fltused.o"],
-)
-
-filegroup(
- name = "all",
- srcs = [":fltused"],
-)
-
-cc_toolchain(
- name = "efi_k8_cc_toolchain",
- all_files = ":all",
- ar_files = ":empty",
- as_files = ":empty",
- compiler_files = ":empty",
- dwp_files = ":empty",
- linker_files = ":fltused",
- objcopy_files = ":empty",
- strip_files = ":empty",
- supports_param_files = 0,
- toolchain_config = ":efi_k8_cc_toolchain_config",
- toolchain_identifier = "efi-k8-toolchain",
-)
-
-efi_k8_cc_toolchain_config(name = "efi_k8_cc_toolchain_config")
-
-toolchain(
- name = "efi_k8_toolchain",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:uefi",
- ],
- toolchain = ":efi_k8_cc_toolchain",
- toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
-)
diff --git a/build/toolchain/llvm-efi/README.md b/build/toolchain/llvm-efi/README.md
deleted file mode 100644
index 0360ec5..0000000
--- a/build/toolchain/llvm-efi/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-llvm-efi
-========
-
-llvm-efi is a Bazel cc toolchain that uses the sandbox sysroot LLVM/clang with flags targeting freestanding EFI.
-EFI headers are not shipped as part of the toolchain, but are available as a cc_library from `@gnuefi//:gnuefi`.
-
-Usage
------
-
-To use this toolchain explicitly while building a `cc_binary`, do:
-
- bazel build --platforms=//build/platforms:efi_amd64 //foo/bar
-
-During an actual build however, the right toolchain should be selected using transitions
-or other configuration mechanisms.
-
-fltused
--------
-
-This is a special symbol emitted by MSVC-compatible compilers. In an EFI environment it can be ignored, but it needs to
-be defined. See fltused.c for more information on the symbol. Since we cannot build an object file with Bazel and
-building things for toolchains isn't a thing anyways, this file is prebuilt. If this ever needs to be rebuilt (which
-will probably never happen since there is only one static symbol in there) this can be done with the following clang
-invocation:
-
- clang -target x86_64-unknown-windows -fno-ms-compatibility -fno-ms-extensions -ffreestanding -o fltused.o .o -c fltused.c
-
diff --git a/build/toolchain/llvm-efi/cc_toolchain_config.bzl b/build/toolchain/llvm-efi/cc_toolchain_config.bzl
deleted file mode 100644
index f6de95d..0000000
--- a/build/toolchain/llvm-efi/cc_toolchain_config.bzl
+++ /dev/null
@@ -1,217 +0,0 @@
-load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
-load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "feature", "flag_group", "flag_set", "tool_path", "with_feature_set")
-
-all_compile_actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.linkstamp_compile,
- ACTION_NAMES.assemble,
- ACTION_NAMES.preprocess_assemble,
- ACTION_NAMES.cpp_header_parsing,
- ACTION_NAMES.cpp_module_compile,
- ACTION_NAMES.cpp_module_codegen,
- ACTION_NAMES.clif_match,
- ACTION_NAMES.lto_backend,
-]
-
-all_cpp_compile_actions = [
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.linkstamp_compile,
- ACTION_NAMES.cpp_header_parsing,
- ACTION_NAMES.cpp_module_compile,
- ACTION_NAMES.cpp_module_codegen,
- ACTION_NAMES.clif_match,
-]
-
-preprocessor_compile_actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.linkstamp_compile,
- ACTION_NAMES.preprocess_assemble,
- ACTION_NAMES.cpp_header_parsing,
- ACTION_NAMES.cpp_module_compile,
- ACTION_NAMES.clif_match,
-]
-
-codegen_compile_actions = [
- ACTION_NAMES.c_compile,
- ACTION_NAMES.cpp_compile,
- ACTION_NAMES.linkstamp_compile,
- ACTION_NAMES.assemble,
- ACTION_NAMES.preprocess_assemble,
- ACTION_NAMES.cpp_module_codegen,
- ACTION_NAMES.lto_backend,
-]
-
-all_link_actions = [
- ACTION_NAMES.cpp_link_executable,
- ACTION_NAMES.cpp_link_dynamic_library,
- ACTION_NAMES.cpp_link_nodeps_dynamic_library,
-]
-
-lto_index_actions = [
- ACTION_NAMES.lto_index_for_executable,
- ACTION_NAMES.lto_index_for_dynamic_library,
- ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
-]
-
-# This defines a relatively minimal EFI toolchain based on host LLVM and no standard library or headers.
-def _efi_k8_cc_toolchain_impl(ctx):
- default_compile_flags_feature = feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = all_compile_actions,
- flag_groups = ([
- flag_group(
- flags = ["-target", "x86_64-unknown-windows"],
- ),
- ]),
- ),
- flag_set(
- actions = all_compile_actions,
- flag_groups = ([
- flag_group(
- flags = ["-g"],
- ),
- ]),
- with_features = [with_feature_set(features = ["dbg"])],
- ),
- flag_set(
- actions = all_compile_actions,
- flag_groups = ([
- flag_group(
- # Don't bother with O3, this is an EFI toolchain. It's unlikely to gain much performance here
- # and increases the risk of dangerous optimizations.
- flags = ["-O2", "-DNDEBUG"],
- ),
- ]),
- with_features = [with_feature_set(features = ["opt"])],
- ),
- ],
- )
-
- # "Hybrid" mode disables some MSVC C extensions (but keeps its ABI), but still identifies as MSVC.
- # This is useful if code requires GNU extensions to work which are silently ignored in full MSVC mode.
- # As EFI does not include Windows headers which depend on nonstandard C behavior this should be fine for most code.
- # If this feature is disabled, the toolchain runs with MSVC C extensions fully enabled.
- hybrid_gnu_msvc_feature = feature(
- name = "hybrid_gnu_msvc",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = all_compile_actions,
- flag_groups = [
- flag_group(
- flags = ["-D_MSC_VER=1920", "-fno-ms-compatibility", "-fno-ms-extensions"],
- ),
- ],
- ),
- ],
- )
-
- default_link_flags_feature = feature(
- name = "default_link_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = all_link_actions + lto_index_actions,
- flag_groups = ([
- flag_group(
- flags = [
- "--target=x86_64-unknown-windows",
- "-fuse-ld=lld",
- "-Wl,-entry:efi_main",
- "-Wl,-subsystem:efi_application",
- "-Wl,/BASE:0x0",
- "-Wl,/Brepro",
- "-nostdlib",
- "build/toolchain/llvm-efi/fltused.o",
- ],
- ),
- ]),
- ),
- ],
- )
-
- lto_feature = feature(
- name = "lto",
- enabled = False,
- flag_sets = [
- flag_set(
- actions = all_compile_actions + all_link_actions,
- flag_groups = ([
- flag_group(
- flags = [
- "-flto",
- ],
- ),
- ]),
- ),
- ],
- )
-
- tool_paths = [
- tool_path(
- name = "gcc",
- path = "/usr/bin/clang",
- ),
- tool_path(
- name = "ld",
- path = "/usr/bin/lld-link",
- ),
- tool_path(
- name = "ar",
- path = "/usr/bin/llvm-ar",
- ),
- tool_path(
- name = "cpp",
- path = "/bin/false",
- ),
- tool_path(
- name = "gcov",
- path = "/bin/false",
- ),
- tool_path(
- name = "nm",
- path = "/usr/bin/llvm-nm",
- ),
- tool_path(
- name = "objcopy",
- # We can't use LLVM's objcopy until we pick up https://reviews.llvm.org/D106942
- path = "/usr/bin/objcopy",
- ),
- tool_path(
- name = "objdump",
- path = "/usr/bin/llvm-objdump",
- ),
- tool_path(
- name = "strip",
- path = "/usr/bin/llvm-strip",
- ),
- ]
-
- return cc_common.create_cc_toolchain_config_info(
- ctx = ctx,
- features = [default_link_flags_feature, default_compile_flags_feature, hybrid_gnu_msvc_feature, lto_feature],
- # Needed for various compiler built-in headers and auxiliary data. No system libraries are being used.
- cxx_builtin_include_directories = [
- "/usr/lib/clang/18/include/",
- ],
- toolchain_identifier = "k8-toolchain",
- host_system_name = "local",
- target_system_name = "x86_64-efi",
- target_cpu = "k8",
- target_libc = "none",
- compiler = "clang",
- abi_version = "none",
- abi_libc_version = "none",
- tool_paths = tool_paths,
- )
-
-efi_k8_cc_toolchain_config = rule(
- implementation = _efi_k8_cc_toolchain_impl,
- attrs = {},
- provides = [CcToolchainConfigInfo],
-)
diff --git a/build/toolchain/llvm-efi/fltused.c b/build/toolchain/llvm-efi/fltused.c
deleted file mode 100644
index 6934b9e..0000000
--- a/build/toolchain/llvm-efi/fltused.c
+++ /dev/null
@@ -1,6 +0,0 @@
-// This is a marker symbol emitted by MSVC-ABI compatible compilers. Its presence indicates that the linked binary
-// contains instructions working with floating-point registers. Since we do not have a standard library which consumes
-// it we can just define it as zero.
-// See https://github.com/rust-lang/rust/issues/62785#issuecomment-531186089 for more discussion.
-// Since building static libraries is not possible with Bazel this is compiled and checked in.
-int _fltused __attribute__((weak)) = 0;
\ No newline at end of file
diff --git a/build/toolchain/llvm-efi/fltused.o b/build/toolchain/llvm-efi/fltused.o
deleted file mode 100644
index 68faed5..0000000
--- a/build/toolchain/llvm-efi/fltused.o
+++ /dev/null
Binary files differ
diff --git a/build/toolchain/musl-host-gcc/BUILD.bazel b/build/toolchain/musl-host-gcc/BUILD.bazel
deleted file mode 100644
index fd7e553..0000000
--- a/build/toolchain/musl-host-gcc/BUILD.bazel
+++ /dev/null
@@ -1,65 +0,0 @@
-load("@rules_cc//cc:defs.bzl", "cc_toolchain")
-load("//build/toolchain:cc_toolchain_config.bzl", "host_cc_toolchain_config")
-
-# This file defines //build/toolchain/musl-host-gcc:musl_host_toolchain.
-#
-# This is a C++ toolchain that uses GCC from the sandbox sysroot at hardcoded paths, with
-# a pre-built sysroot tarball that targets Metropolis nodes with musl and Linux
-# headers. It's a superset of //build/toolchain:host_cc_toolchain.
-#
-# For more information, see README.md.
-
-cc_toolchain(
- name = "musl_host_cc_k8_toolchain",
- all_files = ":musl_toolchain_files",
- ar_files = ":musl_toolchain_files",
- as_files = ":musl_toolchain_files",
- compiler_files = ":musl_toolchain_files",
- dwp_files = ":musl_toolchain_files",
- linker_files = ":musl_toolchain_files",
- objcopy_files = ":musl_toolchain_files",
- strip_files = ":musl_toolchain_files",
- supports_param_files = 0,
- toolchain_config = ":musl_host_cc_k8_toolchain_config",
- toolchain_identifier = "host-musl-k8-toolchain",
-)
-
-host_cc_toolchain_config(
- name = "musl_host_cc_k8_toolchain_config",
- gcc = "gcc-wrapper.sh",
- has_cpp = False,
- host_includes = [],
- is_glibc = False,
- sysroot = package_relative_label("@musl_sysroot//:all").workspace_root,
-)
-
-filegroup(
- name = "musl_toolchain_files",
- srcs = [
- ":gcc-wrapper.sh",
- ":musl.spec",
- "@musl_sysroot//:all",
- ],
-)
-
-config_setting(
- name = "is_static",
- flag_values = {"//build/platforms/linkmode:static": "True"},
-)
-
-toolchain(
- name = "musl_host_toolchain",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- target_settings = [
- ":is_static",
- ],
- toolchain = ":musl_host_cc_k8_toolchain",
- toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
-)
diff --git a/build/toolchain/musl-host-gcc/README.md b/build/toolchain/musl-host-gcc/README.md
deleted file mode 100644
index a5e9222..0000000
--- a/build/toolchain/musl-host-gcc/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-musl-host-gcc
-=============
-
-musl-host-gcc is a Bazel C++ toolchain that uses the sandbox sysroot gcc in combination with a pre-built musl, musl headers, and Linux headers.
-
-It is currently used to build the few C binaries we need on Metropolis nodes.
-
-At some point, this toolchain should be improved to directly consume a static compiler toolchain and sysroot, so we can eventually get rid of the sandbox (like Aspect's [gcc-toolchain](https://github.com/aspect-build/gcc-toolchain) is doing).
-
-Usage
------
-
-To use this toolchain explicitly while building a `cc_binary`, do:
-
- bazel build --platforms=//build/platforms:linux_amd64_static //foo/bar
-
-During an actual build however, the right toolchain should be selected using transitions
-or other configuration mechanisms.
-
-Building Toolchain Sysroot Tarball
-----------------------------------
-
-The toolchain's musl/linux components are currently built ahead of time and committed to this repository as `//build/toolchain/musl-host-gcc/toolchain.tar.xz`. This is the 'sysroot' tarball, that contains all headers and libraries required to build for Metropolis nodes.
-
-To build this tarball, run the following commands:
-
- bazel build //build/toolchain/musl-host-gcc/sysroot
- cp -f bazel-bin/build/toolchain/musl-host-gcc/sysroot/sysroot.tar.xz build/toolchain/musl-host-gcc/sysroot.tar.xz
-
-As a temporary hack the compiler-specific headers of our current development container have been manually merged in. This is expected to be replaced by a proper LLVM-based toolchain.
-
-Internals
----------
-
-The toolchain is implemented in the following way:
-
-1. `//build/toolchain/musl-host-gcc/sysroot` is used to build `//build/toolchain/musl-host-gcc/sysroot.tar.xz` which is a tarball that contains all include and binary library files for building against musl for Metropolis nodes (x86\_64 / k8) - these are musl headers, musl libraries, and linux headers. This tarball is committed to source control.
-1. When building a target that uses the toolchain, the `sysroot.tar.xz` tarball is extracted into an external repository `@musl_sysroot`, via `sysroot.bzl` and `sysroot_repository.bzl`.
-1. A toolchain config is built using `//build/toolchain:cc_toolchain_config.bzl`, which points at `gcc-wrapper.sh` as its gcc entrypoint. `gcc-wrapper.sh` expects to be able to call the host gcc with `musl.spec`.
-1. A toolchain is defined in `//build/toolchain/musl-host-gcc:musl_host_toolchain` with a `//build/platforms/linkmode:musl-static` constraint, which is selected by the `//build/platforms:linux_amd64_static` platform.
-
-Quirks
-------
-
-As mentioned above, the musl sysroot is kept in a tarball in this repository. This is obviously suboptimal, but on the other hand gives us an effectively pre-built part of a toolchain. In the future, once we have a hermetic toolchain, a similar tarball might actually contain a fully hermetic toolchain pre-built for k8.
diff --git a/build/toolchain/musl-host-gcc/gcc-wrapper.sh b/build/toolchain/musl-host-gcc/gcc-wrapper.sh
deleted file mode 100755
index 33048c0..0000000
--- a/build/toolchain/musl-host-gcc/gcc-wrapper.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
-exec /usr/bin/gcc "$@" -specs $SCRIPT_DIR/musl.spec
diff --git a/build/toolchain/musl-host-gcc/musl.spec b/build/toolchain/musl-host-gcc/musl.spec
deleted file mode 100644
index 49f0176..0000000
--- a/build/toolchain/musl-host-gcc/musl.spec
+++ /dev/null
@@ -1,32 +0,0 @@
-%rename cpp_options old_cpp_options
-
-*cpp_options:
--nostdinc %(old_cpp_options) -isystem $SYSROOT/include
-
-*cc1:
-%(cc1_cpu) -nostdinc -isystem $SYSROOT/include
-
-*link_libgcc:
--L .%s -L %R/lib
-
-*libgcc:
-libgcc.a%s %:if-exists(libgcc_eh.a%s)
-
-*startfile:
-%{static-pie: %R/lib/rcrt1.o; !shared: %R/lib/Scrt1.o} %R/lib/crti.o crtbeginS.o%s
-
-*endfile:
-crtendS.o%s %R/lib/crtn.o
-
-*link:
-%{static-pie: -pie} -no-dynamic-linker -nostdlib -static %{rdynamic:-export-dynamic}
-
-*esp_link:
-
-
-*esp_options:
-
-
-*esp_cpp_options:
-
-
diff --git a/build/toolchain/musl-host-gcc/sysroot.bzl b/build/toolchain/musl-host-gcc/sysroot.bzl
deleted file mode 100644
index 2f54ced..0000000
--- a/build/toolchain/musl-host-gcc/sysroot.bzl
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2020 The Monogon Project Authors.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# 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("//build/toolchain/musl-host-gcc:sysroot_repository.bzl", "musl_sysroot_rule")
-
-def musl_sysroot_repositories():
- """
- Provides an external repository that contains the extracted musl/linux sysroot.
- """
- musl_sysroot_rule(
- name = "musl_sysroot",
- snapshot = "//build/toolchain/musl-host-gcc:sysroot.tar.xz",
- )
diff --git a/build/toolchain/musl-host-gcc/sysroot.tar.xz b/build/toolchain/musl-host-gcc/sysroot.tar.xz
deleted file mode 100644
index 5fd3f55..0000000
--- a/build/toolchain/musl-host-gcc/sysroot.tar.xz
+++ /dev/null
Binary files differ
diff --git a/build/toolchain/musl-host-gcc/sysroot/BUILD.bazel b/build/toolchain/musl-host-gcc/sysroot/BUILD.bazel
deleted file mode 100644
index dbd2982..0000000
--- a/build/toolchain/musl-host-gcc/sysroot/BUILD.bazel
+++ /dev/null
@@ -1,24 +0,0 @@
-load(":linux.bzl", "linux_headers")
-load(":musl.bzl", "musl_headers")
-load(":tarball.bzl", "musl_gcc_tarball")
-
-linux_headers(
- name = "linux_headers",
- src = "@linux//:all",
- arch = "x86_64",
- visibility = ["//visibility:public"],
-)
-
-musl_headers(
- name = "musl_headers",
- src = "@musl//:all",
- arch = "x86_64",
- visibility = ["//visibility:public"],
-)
-
-musl_gcc_tarball(
- name = "sysroot",
- linux_headers = ":linux_headers",
- musl = "//third_party/musl",
- musl_headers = ":musl_headers",
-)
diff --git a/build/toolchain/musl-host-gcc/sysroot/linux.bzl b/build/toolchain/musl-host-gcc/sysroot/linux.bzl
deleted file mode 100644
index 0d6b999..0000000
--- a/build/toolchain/musl-host-gcc/sysroot/linux.bzl
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2020 The Monogon Project Authors.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# 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(
- "//build/utils:detect_root.bzl",
- "detect_root",
-)
-
-def _linux_headers(ctx):
- hdrs_name = ctx.attr.name + "_headers"
- hdrs_dir = ctx.actions.declare_directory(hdrs_name)
-
- root = detect_root(ctx.attr.src)
- ctx.actions.run_shell(
- inputs = ctx.files.src,
- outputs = [hdrs_dir],
- progress_message = "Generating Linux Kernel Headers",
- mnemonic = "LinuxCollectHeaders",
- arguments = [root, ctx.attr.arch, hdrs_dir.path],
- use_default_shell_env = True,
- command = "make -C \"$1\" headers_install ARCH=\"$2\" INSTALL_HDR_PATH=\"$(pwd)/$3\" > /dev/null && mv \"$3/include/\"* \"$3/\" && rmdir \"$3/include\"",
- )
- return [DefaultInfo(files = depset([hdrs_dir]))]
-
-linux_headers = rule(
- implementation = _linux_headers,
- attrs = {
- "src": attr.label(mandatory = True),
- "arch": attr.string(mandatory = True),
- },
-)
diff --git a/build/toolchain/musl-host-gcc/sysroot/musl.bzl b/build/toolchain/musl-host-gcc/sysroot/musl.bzl
deleted file mode 100644
index f5dba26..0000000
--- a/build/toolchain/musl-host-gcc/sysroot/musl.bzl
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2020 The Monogon Project Authors.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# 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(
- "//build/utils:detect_root.bzl",
- "detect_root",
-)
-
-def _musl_headers(ctx):
- hdrs_name = ctx.attr.name + "_headers"
- hdrs_dir = ctx.actions.declare_directory(hdrs_name)
-
- root = detect_root(ctx.attr.src)
- ctx.actions.run_shell(
- inputs = ctx.files.src,
- outputs = [hdrs_dir],
- progress_message = "Collecting musl headers",
- mnemonic = "MuslCollectHeaders",
- arguments = [root, ctx.attr.arch, hdrs_dir.path],
- use_default_shell_env = True,
- command = "make -C \"$1\" install-headers ARCH=\"$2\" includedir=\"$(pwd)/$3\" > /dev/null",
- )
- return [DefaultInfo(files = depset([hdrs_dir]))]
-
-musl_headers = rule(
- implementation = _musl_headers,
- attrs = {
- "src": attr.label(mandatory = True),
- "arch": attr.string(mandatory = True),
- },
-)
diff --git a/build/toolchain/musl-host-gcc/sysroot/tarball.bzl b/build/toolchain/musl-host-gcc/sysroot/tarball.bzl
deleted file mode 100644
index a7e407d..0000000
--- a/build/toolchain/musl-host-gcc/sysroot/tarball.bzl
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright 2020 The Monogon Project Authors.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# 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.
-
-"""
-Build a sysroot-style tarball containing musl/linux headers and libraries.
-
-This can then be used to build a C toolchain that builds C/C++ binaries for Metropolis nodes.
-"""
-
-load(
- "//build/utils:detect_root.bzl",
- "detect_root",
-)
-
-def _musl_gcc_tarball(ctx):
- tarball_name = ctx.attr.name + ".tar.xz"
- tarball = ctx.actions.declare_file(tarball_name)
-
- musl_headers = ctx.file.musl_headers
- musl_headers_path = musl_headers.path
- linux_headers = ctx.file.linux_headers
- linux_headers_path = linux_headers.path
-
- compiler_headers_path = "lib/gcc/x86_64-redhat-linux/14/include"
-
- musl_root = detect_root(ctx.attr.musl)
-
- # This builds a tarball containing musl, musl headers and linux headers.
- # This is done by some carefully crafted tar command line arguments that rewrite
- # paths to ensure that everything lands in lib/ and include/ in the tarball.
-
- # TODO(q3k): write nice, small static Go utility for this.
-
- arguments = [tarball.path]
- command = "tar -chJf $1"
-
- # Order is important here as this is a terrible hack producing a tar file with duplicate files. The decompressor
- # will then overwrite the wrong one with the correct one for us.
- arguments.append(compiler_headers_path)
- command += " --transform 's|^'$2'|include|' /$2"
-
- arguments.append(musl_headers_path)
- command += " --transform 's|^'$3'|include|' $3"
-
- arguments.append(linux_headers_path)
- command += " --transform 's|^'$4'|include|' $4"
-
- arguments.append(musl_root)
- command += " --transform 's|^'$5'|lib|' $5"
-
- ctx.actions.run_shell(
- inputs = [musl_headers, linux_headers] + ctx.files.musl,
- outputs = [tarball],
- progress_message = "Building toolchain tarball",
- mnemonic = "BuildToolchainTarball",
- arguments = arguments,
- use_default_shell_env = True,
- command = command,
- )
- return [DefaultInfo(files = depset([tarball]))]
-
-musl_gcc_tarball = rule(
- implementation = _musl_gcc_tarball,
- attrs = {
- "musl": attr.label(mandatory = True),
- "musl_headers": attr.label(mandatory = True, allow_single_file = True),
- "linux_headers": attr.label(mandatory = True, allow_single_file = True),
- },
-)
diff --git a/build/toolchain/musl-host-gcc/sysroot_repository.bzl b/build/toolchain/musl-host-gcc/sysroot_repository.bzl
deleted file mode 100644
index 72882ea..0000000
--- a/build/toolchain/musl-host-gcc/sysroot_repository.bzl
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 2020 The Monogon Project Authors.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-# 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.
-
-"""
-A generic workspace rule that extracts some subpaths from a tarball.
-
-TODO(q3k): This should maybe be moved to //build/utils and called differently.
-"""
-
-def _musl_sysroot_rule_impl(rctx):
- rctx.extract(rctx.attr.snapshot)
- rctx.file("BUILD.bazel", """
-filegroup(
- name = "all",
- srcs = glob(["include/**", "lib/**"]),
- visibility = ["//visibility:public"],
-)
-""")
-
-musl_sysroot_rule = repository_rule(
- implementation = _musl_sysroot_rule_impl,
- attrs = {
- "snapshot": attr.label(
- default = Label("//build/toolchain/musl-host-gcc:sysroot.tar.xz"),
- allow_single_file = True,
- ),
- },
-)