From 264a0c3f19c292b83aeaf070dde650fd41c0b271 Mon Sep 17 00:00:00 2001 From: Krzysztof Naglik Date: Tue, 13 Jun 2023 14:29:00 +0200 Subject: [PATCH 1/8] cc: toolchain: Add x86_64 sysroot [CLARM-39] --- cc/BUILD.bazel | 12 +++++ cc/repositories.bzl | 15 +++++++ cc/toolchains/llvm/x86_64-linux/BUILD.bazel | 49 ++++++++++++++++----- 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/cc/BUILD.bazel b/cc/BUILD.bazel index 2a91fa8..4383b13 100644 --- a/cc/BUILD.bazel +++ b/cc/BUILD.bazel @@ -94,3 +94,15 @@ config_setting( flag_values = {":cxx_standard": "23"}, visibility = ["//visibility:public"], ) + +bool_flag( + name = "enable_sysroot", + build_setting_default = False, + visibility = ["//visibility:public"], +) + +config_setting( + name = "_enable_sysroot", + flag_values = {":enable_sysroot": "true"}, + visibility = ["//visibility:public"], +) diff --git a/cc/repositories.bzl b/cc/repositories.bzl index b573358..e1828db 100644 --- a/cc/repositories.bzl +++ b/cc/repositories.bzl @@ -69,6 +69,21 @@ filegroup( url = "https://github.com/swift-nav/swift-toolchains/releases/download/bullseye-aarch64-sysroot-v1/debian_bullseye_aarch64_sysroot.tar.xz", ) +def x86_64_sysroot(): + maybe( + http_archive, + name = "x86_64-sysroot", + # sha256 = "9bd27c7ec6aa4bd3d4df60cd04228669bcf366aec32d4b4dc7b504de2f63121e", + build_file_content = """ +filegroup( + name = "x86_64-sysroot", + srcs = glob(["*/**"]), + visibility = ["//visibility:public"], +) + """, + url = "https://github.com/swift-nav/swift-toolchains/releases/download/bullseye-x86_64-sysroot-v1/debian_bullseye_x86_64_sysroot.tar.xz", + ) + def register_swift_cc_toolchains(): native.register_toolchains("@rules_swiftnav//cc/toolchains/llvm/aarch64-darwin:cc-toolchain-aarch64-darwin") native.register_toolchains("@rules_swiftnav//cc/toolchains/llvm/x86_64-darwin:cc-toolchain-x86_64-darwin") diff --git a/cc/toolchains/llvm/x86_64-linux/BUILD.bazel b/cc/toolchains/llvm/x86_64-linux/BUILD.bazel index 5cad905..2803590 100644 --- a/cc/toolchains/llvm/x86_64-linux/BUILD.bazel +++ b/cc/toolchains/llvm/x86_64-linux/BUILD.bazel @@ -12,6 +12,7 @@ package(default_visibility = ["//visibility:public"]) load("//cc/toolchains/llvm:cc_toolchain_config.bzl", "cc_toolchain_config") load("//cc/toolchains/llvm:target_triplets.bzl", "X86_64_LINUX") +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag") filegroup( name = "wrappers", @@ -26,7 +27,10 @@ filegroup( srcs = [ ":wrappers", "@x86_64-linux-llvm//:ar", - ], + ] + select({ + "//cc:_enable_sysroot": ["@x86_64-sysroot"], + "//conditions:default": [], + }), ) filegroup( @@ -34,7 +38,10 @@ filegroup( srcs = [ ":wrappers", "@x86_64-linux-llvm//:as", - ], + ] + select({ + "//cc:_enable_sysroot": ["@x86_64-sysroot"], + "//conditions:default": [], + }), ) filegroup( @@ -43,7 +50,10 @@ filegroup( ":wrappers", "@x86_64-linux-llvm//:clang", "@x86_64-linux-llvm//:include", - ], + ] + select({ + "//cc:_enable_sysroot": ["@x86_64-sysroot"], + "//conditions:default": [], + }), ) filegroup( @@ -51,7 +61,10 @@ filegroup( srcs = [ ":wrappers", "@x86_64-linux-llvm//:dwp", - ], + ] + select({ + "//cc:_enable_sysroot": ["@x86_64-sysroot"], + "//conditions:default": [], + }), ) filegroup( @@ -62,7 +75,10 @@ filegroup( "@x86_64-linux-llvm//:clang", "@x86_64-linux-llvm//:ld", "@x86_64-linux-llvm//:lib", - ], + ] + select({ + "//cc:_enable_sysroot": ["@x86_64-sysroot"], + "//conditions:default": [], + }), ) filegroup( @@ -70,6 +86,7 @@ filegroup( srcs = [ ":wrappers", "@x86_64-linux-llvm//:objcopy", + "@x86_64-sysroot", ], ) @@ -87,19 +104,29 @@ filegroup( "linker_files", ":compiler_files", "@x86_64-linux-llvm//:bin", - ], + ] + select({ + "//cc:_enable_sysroot": ["@x86_64-sysroot"], + "//conditions:default": [], + }), ) cc_toolchain_config( name = "local-x86_64-linux", abi_libc_version = "glibc_unknown", abi_version = "clang", + builtin_sysroot = select({ + "//cc:_enable_sysroot": "external/x86_64-sysroot", + "//conditions:default": None, + }), compiler = "clang", - cxx_builtin_include_directories = [ - "/include", - "/usr/include", - "/usr/local/include", - ], + cxx_builtin_include_directories = select({ + "//cc:_enable_sysroot": ["%sysroot%/usr/include"], + "//conditions:default": [ + "/include", + "/usr/include", + "/usr/local/include", + ], + }), host_system_name = X86_64_LINUX, target_cpu = "k8", target_libc = "glibc_unknown", From 8945b6c6b57c8c2474c9dca5053a0fe16a49e865 Mon Sep 17 00:00:00 2001 From: Krzysztof Naglik Date: Tue, 13 Jun 2023 16:10:15 +0200 Subject: [PATCH 2/8] Remove unnecessary load --- cc/toolchains/llvm/x86_64-linux/BUILD.bazel | 1 - 1 file changed, 1 deletion(-) diff --git a/cc/toolchains/llvm/x86_64-linux/BUILD.bazel b/cc/toolchains/llvm/x86_64-linux/BUILD.bazel index 2803590..500dff1 100644 --- a/cc/toolchains/llvm/x86_64-linux/BUILD.bazel +++ b/cc/toolchains/llvm/x86_64-linux/BUILD.bazel @@ -12,7 +12,6 @@ package(default_visibility = ["//visibility:public"]) load("//cc/toolchains/llvm:cc_toolchain_config.bzl", "cc_toolchain_config") load("//cc/toolchains/llvm:target_triplets.bzl", "X86_64_LINUX") -load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag") filegroup( name = "wrappers", From d61c4e2a55e1490d4c1ad37cd18e2c8a1e106480 Mon Sep 17 00:00:00 2001 From: Krzysztof Naglik Date: Tue, 13 Jun 2023 16:31:02 +0200 Subject: [PATCH 3/8] Use bundled libc++ when builtin sysroot is defined --- cc/toolchains/llvm/cc_toolchain_config.bzl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cc/toolchains/llvm/cc_toolchain_config.bzl b/cc/toolchains/llvm/cc_toolchain_config.bzl index 41d9da1..0f4bf5f 100644 --- a/cc/toolchains/llvm/cc_toolchain_config.bzl +++ b/cc/toolchains/llvm/cc_toolchain_config.bzl @@ -35,7 +35,7 @@ def cc_toolchain_config( if not is_target_triplet(target_system_name): fail(target_system_name + " is not a target tripplet") - cross_compile = host_system_name != target_system_name + use_bundled_libcpp = builtin_sysroot != None # Default compiler flags: compile_flags = [ @@ -82,7 +82,7 @@ def cc_toolchain_config( # The whole codebase should build with c++14 "-std=c++14", # Use bundled libc++ for hermeticity if not cross compiling - ] + ["-stdlib=libstdc++"] if cross_compile else ["-stdlib=libc++"] + ] + ["-stdlib=libstdc++"] if use_bundled_libcpp else ["-stdlib=libc++"] link_flags = [ "--target=" + target_system_name, @@ -124,7 +124,7 @@ def cc_toolchain_config( "-ldl", ]) - if cross_compile: + if use_bundled_libcpp: link_flags.extend([ # Use libstdc++ from the sysroot when cross compiling "-l:libstdc++.a", From 34f35144bdd808e4de1d8fa132b1617022cea79d Mon Sep 17 00:00:00 2001 From: Krzysztof Naglik Date: Thu, 15 Jun 2023 19:46:07 +0200 Subject: [PATCH 4/8] Review --- cc/toolchains/llvm/cc_toolchain_config.bzl | 2 +- cc/toolchains/llvm/x86_64-linux/BUILD.bazel | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cc/toolchains/llvm/cc_toolchain_config.bzl b/cc/toolchains/llvm/cc_toolchain_config.bzl index 0f4bf5f..6331b33 100644 --- a/cc/toolchains/llvm/cc_toolchain_config.bzl +++ b/cc/toolchains/llvm/cc_toolchain_config.bzl @@ -35,7 +35,7 @@ def cc_toolchain_config( if not is_target_triplet(target_system_name): fail(target_system_name + " is not a target tripplet") - use_bundled_libcpp = builtin_sysroot != None + use_bundled_libcpp = builtin_sysroot != None and not is_darwin # Default compiler flags: compile_flags = [ diff --git a/cc/toolchains/llvm/x86_64-linux/BUILD.bazel b/cc/toolchains/llvm/x86_64-linux/BUILD.bazel index 500dff1..408e9cd 100644 --- a/cc/toolchains/llvm/x86_64-linux/BUILD.bazel +++ b/cc/toolchains/llvm/x86_64-linux/BUILD.bazel @@ -85,8 +85,10 @@ filegroup( srcs = [ ":wrappers", "@x86_64-linux-llvm//:objcopy", - "@x86_64-sysroot", - ], + ] + select({ + "//cc:_enable_sysroot": ["@x86_64-sysroot"], + "//conditions:default": [], + }), ) filegroup( From 41912cd6b5dabecd571a1305e7791f40d4c4a0ee Mon Sep 17 00:00:00 2001 From: Isaac Torres Date: Thu, 15 Jun 2023 14:27:13 -0600 Subject: [PATCH 5/8] fix variable name --- cc/toolchains/llvm/cc_toolchain_config.bzl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cc/toolchains/llvm/cc_toolchain_config.bzl b/cc/toolchains/llvm/cc_toolchain_config.bzl index 6331b33..c3b1029 100644 --- a/cc/toolchains/llvm/cc_toolchain_config.bzl +++ b/cc/toolchains/llvm/cc_toolchain_config.bzl @@ -35,7 +35,7 @@ def cc_toolchain_config( if not is_target_triplet(target_system_name): fail(target_system_name + " is not a target tripplet") - use_bundled_libcpp = builtin_sysroot != None and not is_darwin + use_libstdcpp = builtin_sysroot != None and not is_darwin # Default compiler flags: compile_flags = [ @@ -82,7 +82,7 @@ def cc_toolchain_config( # The whole codebase should build with c++14 "-std=c++14", # Use bundled libc++ for hermeticity if not cross compiling - ] + ["-stdlib=libstdc++"] if use_bundled_libcpp else ["-stdlib=libc++"] + ] + ["-stdlib=libstdc++"] if use_libstdcpp else ["-stdlib=libc++"] link_flags = [ "--target=" + target_system_name, @@ -124,7 +124,7 @@ def cc_toolchain_config( "-ldl", ]) - if use_bundled_libcpp: + if use_libstdcpp: link_flags.extend([ # Use libstdc++ from the sysroot when cross compiling "-l:libstdc++.a", From c6ca201841fcc4c464a3623b5e1d8a270f66d946 Mon Sep 17 00:00:00 2001 From: Isaac Torres Date: Thu, 15 Jun 2023 15:44:54 -0600 Subject: [PATCH 6/8] add mac to linux cross compiler --- .../x86_64-darwin-aarch64-linux/BUILD.bazel | 157 ++++++++++++++++++ .../wrappers/clang | 1 + .../wrappers/clang-cpp | 1 + .../wrappers/ld.ldd | 1 + .../wrappers/llvm-ar | 1 + .../wrappers/llvm-cov | 1 + .../wrappers/llvm-nm | 1 + .../wrappers/llvm-objcopy | 1 + .../wrappers/llvm-objdump | 1 + .../wrappers/llvm-profdata | 1 + .../wrappers/llvm-strip | 1 + .../wrappers/wrapper | 58 +++++++ 12 files changed, 225 insertions(+) create mode 100644 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang-cpp create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/ld.ldd create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-ar create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-cov create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-nm create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objcopy create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objdump create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-profdata create mode 120000 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-strip create mode 100755 cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/wrapper diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel new file mode 100644 index 0000000..2f80273 --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel @@ -0,0 +1,157 @@ +# Copyright (C) 2022 Swift Navigation Inc. +# Contact: Swift Navigation +# +# This source is subject to the license found in the file 'LICENSE' which must +# be be distributed together with this source. All other rights reserved. +# +# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, +# EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + +package(default_visibility = ["//visibility:public"]) + +load("//cc/toolchains/llvm:cc_toolchain_config.bzl", "cc_toolchain_config") +load("//cc/toolchains/llvm:target_triplets.bzl", "X86_64_DARWIN", "X86_64_LINUX") + +filegroup( + name = "wrappers", + srcs = glob([ + "wrappers/**", + ]), + visibility = ["//visibility:public"], +) + +filegroup( + name = "ar_files", + srcs = [ + ":wrappers", + "@x86_64-sysroot", + "@x86_64-darwin-llvm//:ar", + ], +) + +filegroup( + name = "as_files", + srcs = [ + ":wrappers", + "@x86_64-sysroot", + "@x86_64-darwin-llvm//:as", + ], +) + +filegroup( + name = "compiler_files", + srcs = [ + ":wrappers", + "@x86_64-sysroot", + "@x86_64-darwin-llvm//:clang", + "@x86_64-darwin-llvm//:include", + ], +) + +filegroup( + name = "dwp_files", + srcs = [ + ":wrappers", + "@x86_64-sysroot", + "@x86_64-darwin-llvm//:dwp", + ], +) + +filegroup( + name = "linker_files", + srcs = [ + ":wrappers", + "@x86_64-sysroot", + "@x86_64-darwin-llvm//:ar", + "@x86_64-darwin-llvm//:clang", + "@x86_64-darwin-llvm//:ld", + "@x86_64-darwin-llvm//:lib", + ], +) + +filegroup( + name = "objcopy_files", + srcs = [ + ":wrappers", + "@x86_64-sysroot", + "@x86_64-darwin-llvm//:objcopy", + ], +) + +filegroup( + name = "strip_files", + srcs = [ + ":wrappers", + "@x86_64-darwin-llvm//:strip", + ], +) + +filegroup( + name = "all_files", + srcs = [ + "linker_files", + ":compiler_files", + "@x86_64-darwin-llvm//:bin", + ], +) + +cc_toolchain_config( + name = "local-x86_64-darwin", + abi_libc_version = "darwin_x86_64", + abi_version = "darwin_x86_64", + builtin_sysroot = "external/x86_64-sysroot", + compiler = "clang", + cxx_builtin_include_directories = [ + "%sysroot%/usr/include", + ], + host_system_name = X86_64_DARWIN, + is_darwin = False, + target_cpu = "k8", + target_libc = "glibc_unknown", + target_system_name = X86_64_LINUX, + tool_paths = { + "ar": "wrappers/llvm-ar", + "cpp": "wrappers/clang-cpp", + "gcc": "wrappers/clang", + "gcov": "wrappers/llvm-profdata", + "llvm-cov": "wrappers/llvm-cov", + "llvm-profdata": "wrappers/llvm-profdata", + "ld": "wrappers/ld.ldd", + "nm": "wrappers/llvm-nm", + "objcopy": "wrappers/llvm-objcopy", + "objdump": "wrappers/llvm-objdump", + "strip": "wrappers/llvm-strip", + }, + toolchain_identifier = "clang-x86_64-darwin-x86_64-linux", + toolchain_path_prefix = "external/x86_64-darwin-llvm", +) + +cc_toolchain( + name = "cc-clang-x86_64-darwin-x86_64-linux", + all_files = ":all_files", + ar_files = ":ar_files", + as_files = ":as_files", + compiler_files = ":compiler_files", + dwp_files = ":dwp_files", + linker_files = ":linker_files", + objcopy_files = ":objcopy_files", + strip_files = ":strip_files", + toolchain_config = ":local-x86_64-darwin", +) + +toolchain( + name = "cc-toolchain-x86_64-darwin-x86_64-linux", + exec_compatible_with = [ + "@platforms//cpu:x86_64", + "@platforms//os:macos", + ], + target_compatible_with = [ + "@platforms//cpu:x86_64", + "@platforms//os:linux", + "//cc/constraints:llvm_toolchain", + ], + target_settings = None, + toolchain = ":cc-clang-x86_64-darwin-x86_64-linux", + toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", +) diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang-cpp b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang-cpp new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang-cpp @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/ld.ldd b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/ld.ldd new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/ld.ldd @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-ar b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-ar new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-ar @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-cov b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-cov new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-cov @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-nm b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-nm new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-nm @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objcopy b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objcopy new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objcopy @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objdump b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objdump new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objdump @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-profdata b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-profdata new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-profdata @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-strip b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-strip new file mode 120000 index 0000000..22cb46f --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-strip @@ -0,0 +1 @@ +wrapper \ No newline at end of file diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/wrapper b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/wrapper new file mode 100755 index 0000000..e8a60c3 --- /dev/null +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/wrapper @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Copyright (C) 2022 Swift Navigation Inc. +# Contact: Swift Navigation +# +# This source is subject to the license found in the file 'LICENSE' which must +# be be distributed together with this source. All other rights reserved. +# +# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, +# EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + +# Locates the actual tool paths relative to the location this script is +# executed from. +# +# This is necessary because we download the toolchain using +# http_archive, which bazel places in _execroot_/external/_repo_name_. +# +# Unfortunately we cannot provide this location as the argument of tool_path +# when configuring the toolchain, because tool_path only takes a relative path. +# +# This is the fairly common workaround to handle this. +# +# TODO: [BUILD-549] - Remove need for wrapper files +# +# Recent versions of Bazel may have introduced a mechanism that removes +# the need for this workaround: https://github.com/bazelbuild/bazel/issues/7746 + +set -e + +# Use --actionv_env=SWIFTNAV_VERBOSE_TOOLCHAIN to enable +if [[ -n "$SWIFTNAV_VERBOSE_TOOLCHAIN" ]]; then + set -x +fi + +tool_name=$(basename "${BASH_SOURCE[0]}") +toolchain_bindir=external/x86_64-darwin-llvm/bin + +if [[ -f "${toolchain_bindir}"/"${tool_name}" ]]; then + # We're running under _execroot_, call the real tool. + exec "${toolchain_bindir}"/"${tool_name}" "$@" +elif [[ "${BASH_SOURCE[0]}" == "/"* ]]; then + # This branch exists because some users of the toolchain, + # namely rules_foreign_cc, will change CWD and call $CC (this script) + # with its absolute path. + # + # To deal with this we find the tool relative to this script, which is at + # _execroot_/external/rules_swiftnav/cc/toolchain/llvm/x86_64-linux/wrappers/wrapper. + # + # If the wrapper is relocated then this line needs to be adjusted. + execroot_path="${BASH_SOURCE[0]%/*/*/*/*/*/*/*/*}" + tool="${execroot_path}/${toolchain_bindir}/${tool_name}" + exec "${tool}" "${@}" +else + >&2 echo "ERROR: could not find ${tool_name}; PWD=\"$(pwd)\"; PATH=\"${PATH}\"." + exit 5 +fi + From b8c7c5ff7e3a437326baa77bc0ac06af49c3915c Mon Sep 17 00:00:00 2001 From: Isaac Torres Date: Thu, 15 Jun 2023 15:55:42 -0600 Subject: [PATCH 7/8] register toolchain --- cc/repositories.bzl | 1 + cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cc/repositories.bzl b/cc/repositories.bzl index e1828db..3684438 100644 --- a/cc/repositories.bzl +++ b/cc/repositories.bzl @@ -89,6 +89,7 @@ def register_swift_cc_toolchains(): native.register_toolchains("@rules_swiftnav//cc/toolchains/llvm/x86_64-darwin:cc-toolchain-x86_64-darwin") native.register_toolchains("@rules_swiftnav//cc/toolchains/llvm/x86_64-linux:cc-toolchain-x86_64-linux") native.register_toolchains("@rules_swiftnav//cc/toolchains/llvm/x86_64-aarch64-linux:cc-toolchain-x86_64-aarch64-linux") + native.register_toolchains("@rules_swiftnav//cc/toolchains/llvm/x86_64-darwin-x86_64-linux:cc-toolchain-x86_64-darwin-x86_64-linux") def aarch64_linux_musl_toolchain(): http_archive( diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel index 2f80273..9f015e3 100644 --- a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel +++ b/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel @@ -149,7 +149,7 @@ toolchain( target_compatible_with = [ "@platforms//cpu:x86_64", "@platforms//os:linux", - "//cc/constraints:llvm_toolchain", + "//cc/constraints:glibc_2_31", ], target_settings = None, toolchain = ":cc-clang-x86_64-darwin-x86_64-linux", From 9f34ce2603ed38e757709a06cce1af8c8df25381 Mon Sep 17 00:00:00 2001 From: Isaac Torres Date: Thu, 15 Jun 2023 15:58:36 -0600 Subject: [PATCH 8/8] unfuck name --- .../BUILD.bazel | 0 .../wrappers/clang | 0 .../wrappers/clang-cpp | 0 .../wrappers/ld.ldd | 0 .../wrappers/llvm-ar | 0 .../wrappers/llvm-cov | 0 .../wrappers/llvm-nm | 0 .../wrappers/llvm-objcopy | 0 .../wrappers/llvm-objdump | 0 .../wrappers/llvm-profdata | 0 .../wrappers/llvm-strip | 0 .../wrappers/wrapper | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/BUILD.bazel (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/clang (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/clang-cpp (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/ld.ldd (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/llvm-ar (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/llvm-cov (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/llvm-nm (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/llvm-objcopy (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/llvm-objdump (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/llvm-profdata (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/llvm-strip (100%) rename cc/toolchains/llvm/{x86_64-darwin-aarch64-linux => x86_64-darwin-x86_64-linux}/wrappers/wrapper (100%) diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/BUILD.bazel similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/BUILD.bazel rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/BUILD.bazel diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/clang similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/clang diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang-cpp b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/clang-cpp similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/clang-cpp rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/clang-cpp diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/ld.ldd b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/ld.ldd similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/ld.ldd rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/ld.ldd diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-ar b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-ar similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-ar rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-ar diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-cov b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-cov similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-cov rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-cov diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-nm b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-nm similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-nm rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-nm diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objcopy b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-objcopy similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objcopy rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-objcopy diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objdump b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-objdump similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-objdump rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-objdump diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-profdata b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-profdata similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-profdata rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-profdata diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-strip b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-strip similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/llvm-strip rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/llvm-strip diff --git a/cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/wrapper b/cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/wrapper similarity index 100% rename from cc/toolchains/llvm/x86_64-darwin-aarch64-linux/wrappers/wrapper rename to cc/toolchains/llvm/x86_64-darwin-x86_64-linux/wrappers/wrapper