Automated rollback of commit 0a658930a9fe39f98206f32fac068c97ebd1f09f.
*** Reason for rollback ***
Broke Bazel postsubmit: https://buildkite.com/bazel/bazel-bazel/builds/28021#018f9a8b-8711-4f02-af8a-c29a1e7c6255
https://github.com/bazelbuild/bazel/pull/22259#issuecomment-2122897663
*** Original change description ***
Add layering_check support for macOS
There were 2 things with the previous implementation that needed to be improved here:
1. Apple Clang has a bug where it doesn't pass module compiler flags to the underlying -cc1 invocation, so we have to manually pass them directly to that invocation with -Xclang
2. The previous search script was too aggressive and slow for macOS. The macOS SDK has tons of files that aren't headers, and tons of symlin...
***
RELNOTES:
PiperOrigin-RevId: 635852793
Change-Id: I03b0831706a555bbcf141742aefa3bf48ed0caf3
diff --git a/src/test/shell/bazel/bazel_layering_check_test.sh b/src/test/shell/bazel/bazel_layering_check_test.sh
index 720a698..4ccf75d 100755
--- a/src/test/shell/bazel/bazel_layering_check_test.sh
+++ b/src/test/shell/bazel/bazel_layering_check_test.sh
@@ -144,6 +144,11 @@
}
function test_bazel_layering_check() {
+ if is_darwin; then
+ echo "This test doesn't run on Darwin. Skipping."
+ return
+ fi
+
local -r clang_tool=$(which clang)
if [[ ! -x ${clang_tool:-/usr/bin/clang_tool} ]]; then
echo "clang not installed. Skipping test."
diff --git a/tools/cpp/generate_system_module_map.sh b/tools/cpp/generate_system_module_map.sh
index deb52c2..abbaec2 100755
--- a/tools/cpp/generate_system_module_map.sh
+++ b/tools/cpp/generate_system_module_map.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
# Copyright 2020 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,19 +17,10 @@
echo 'module "crosstool" [system] {'
-if [[ "$OSTYPE" == darwin* ]]; then
- for dir in $@; do
- find "$dir" -type f \( -name "*.h" -o -name "*.def" -o -path "*/c++/*" \) \
- | LANG=C sort -u | while read -r header; do
- echo " textual header \"${header}\""
- done
+for dir in $@; do
+ find -L "${dir}" -type f 2>/dev/null | LANG=C sort | uniq | while read header; do
+ echo " textual header \"${header}\""
done
-else
- for dir in $@; do
- find -L "${dir}" -type f 2>/dev/null | LANG=C sort -u | while read -r header; do
- echo " textual header \"${header}\""
- done
- done
-fi
+done
echo "}"
diff --git a/tools/cpp/unix_cc_configure.bzl b/tools/cpp/unix_cc_configure.bzl
index ef8b8b4..3f162bd 100644
--- a/tools/cpp/unix_cc_configure.bzl
+++ b/tools/cpp/unix_cc_configure.bzl
@@ -534,7 +534,7 @@
["/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"],
)
- generate_modulemap = is_clang
+ generate_modulemap = is_clang and not darwin
if generate_modulemap:
repository_ctx.file("module.modulemap", _generate_system_module_map(
repository_ctx,
diff --git a/tools/cpp/unix_cc_toolchain_config.bzl b/tools/cpp/unix_cc_toolchain_config.bzl
index 5a0cd71..a361e7b 100644
--- a/tools/cpp/unix_cc_toolchain_config.bzl
+++ b/tools/cpp/unix_cc_toolchain_config.bzl
@@ -36,7 +36,7 @@
xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig]
return xcode_config.minimum_os_for_platform_type(platform_type)
-def layering_check_features(compiler, is_macos):
+def layering_check_features(compiler):
if compiler != "clang":
return []
return [
@@ -53,10 +53,8 @@
],
flag_groups = [
flag_group(
- # macOS requires -Xclang because of a bug in Apple Clang
- flags = (["-Xclang"] if is_macos else []) + [
+ flags = [
"-fmodule-name=%{module_name}",
- ] + (["-Xclang"] if is_macos else []) + [
"-fmodule-map-file=%{module_map_file}",
],
),
@@ -88,7 +86,7 @@
]),
flag_group(
iterate_over = "dependent_module_map_files",
- flags = (["-Xclang"] if is_macos else []) + [
+ flags = [
"-fmodule-map-file=%{dependent_module_map_files}",
],
),
@@ -1489,7 +1487,7 @@
unfiltered_compile_flags_feature,
treat_warnings_as_errors_feature,
archive_param_file_feature,
- ] + layering_check_features(ctx.attr.compiler, is_macos = False)
+ ] + layering_check_features(ctx.attr.compiler)
else:
# macOS artifact name patterns differ from the defaults only for dynamic
# libraries.
@@ -1530,7 +1528,7 @@
treat_warnings_as_errors_feature,
archive_param_file_feature,
generate_linkmap_feature,
- ] + layering_check_features(ctx.attr.compiler, is_macos = True)
+ ]
parse_headers_action_configs, parse_headers_features = parse_headers_support(
parse_headers_tool_path = ctx.attr.tool_paths.get("parse_headers"),