From 49a19c8a476f32478e146e248822721b9fe0dffd Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Tue, 1 Apr 2025 11:52:47 -0700 Subject: [PATCH 01/10] Make strip_include_prefix apply to textual_hdrs Fixes https://github.com/bazelbuild/bazel/issues/12424 --- .../cc/compile/cc_compilation_helper.bzl | 35 ++++++++++++++----- .../cc/basics/test/BUILD.builtin_test | 12 +++++++ .../builtins_bzl/cc/basics/test/nested/lib.cc | 16 +++++++++ .../builtins_bzl/cc/basics/test/nested/lib.h | 19 ++++++++++ .../cc/basics/test/test_include_textual.cc | 21 +++++++++++ 5 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test create mode 100644 src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc create mode 100644 src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h create mode 100644 src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc diff --git a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl index 25a27b9f3df9ce..2fa8abcb568c02 100644 --- a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl @@ -118,7 +118,7 @@ def _compute_public_headers( headers = public_headers_artifacts + non_module_map_headers, module_map_headers = public_headers_artifacts, virtual_include_path = None, - virtual_to_original_headers = depset(), + virtual_to_original_headers = [], ) module_map_headers = [] @@ -154,7 +154,7 @@ def _compute_public_headers( headers = virtual_headers, module_map_headers = module_map_headers, virtual_include_path = paths.join(binfiles_dir, virtual_include_dir), - virtual_to_original_headers = depset(virtual_to_original_headers_list), + virtual_to_original_headers = virtual_to_original_headers_list, ) def _generates_header_module(feature_configuration, public_headers, private_headers, generate_action): @@ -434,15 +434,32 @@ def _init_cc_compilation_context( else: include_dirs_for_context.append(public_headers.virtual_include_path) + textual_headers = _compute_public_headers( + actions, + config, + public_textual_headers, + include_prefix, + strip_include_prefix, + label, + binfiles_dir, + non_module_map_headers, + sibling_repo_layout, + ) + if textual_headers.virtual_include_path: + if external: + external_include_dirs.append(textual_headers.virtual_include_path) + else: + include_dirs_for_context.append(textual_headers.virtual_include_path) + if config.coverage_enabled: # Populate the map only when code coverage collection is enabled, to report the actual # source file name in the coverage output file. - virtual_to_original_headers = public_headers.virtual_to_original_headers + virtual_to_original_headers = public_headers.virtual_to_original_headers + textual_headers.virtual_to_original_headers else: - virtual_to_original_headers = depset() + virtual_to_original_headers = [] declared_include_srcs.extend(public_headers.headers) - declared_include_srcs.extend(public_textual_headers) + declared_include_srcs.extend(textual_headers.headers) declared_include_srcs.extend(private_headers_artifacts) declared_include_srcs.extend(additional_inputs) @@ -560,7 +577,7 @@ def _init_cc_compilation_context( external_includes = depset(external_include_dirs), system_includes = depset(system_include_dirs_for_context), includes = depset(include_dirs_for_context), - virtual_to_original_headers = virtual_to_original_headers, + virtual_to_original_headers = depset(virtual_to_original_headers), dependent_cc_compilation_contexts = dependent_cc_compilation_contexts, non_code_inputs = additional_inputs, defines = depset(defines), @@ -568,7 +585,7 @@ def _init_cc_compilation_context( headers = depset(declared_include_srcs), direct_public_headers = public_headers.headers, direct_private_headers = private_headers_artifacts, - direct_textual_headers = public_textual_headers, + direct_textual_headers = textual_headers.headers, module_map = module_map, pic_header_module = pic_header_module, header_module = header_module, @@ -586,7 +603,7 @@ def _init_cc_compilation_context( external_includes = depset(external_include_dirs), system_includes = depset(system_include_dirs_for_context), includes = depset(include_dirs_for_context), - virtual_to_original_headers = virtual_to_original_headers, + virtual_to_original_headers = depset(virtual_to_original_headers), dependent_cc_compilation_contexts = dependent_cc_compilation_contexts + implementation_deps, non_code_inputs = additional_inputs, defines = depset(defines), @@ -594,7 +611,7 @@ def _init_cc_compilation_context( headers = depset(declared_include_srcs), direct_public_headers = public_headers.headers, direct_private_headers = private_headers_artifacts, - direct_textual_headers = public_textual_headers, + direct_textual_headers = textual_headers.headers, module_map = module_map, pic_header_module = pic_header_module, header_module = header_module, diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test new file mode 100644 index 00000000000000..927be6aa4dbda6 --- /dev/null +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test @@ -0,0 +1,12 @@ +cc_library( + name = "lib", + srcs = ["nested/lib.cc"], + strip_include_prefix = "nested", + textual_hdrs = ["nested/lib.h"], +) + +cc_test( + name = "test_include_textual", + srcs = ["test_include_textual.cc"], + deps =[ ":lib"], +) diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc new file mode 100644 index 00000000000000..9958a502ba5579 --- /dev/null +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc @@ -0,0 +1,16 @@ +// Copyright 2025 The Bazel Authors. All rights reserved. +// +// 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. +#include "src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h" + +int foo() { return 42; } diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h new file mode 100644 index 00000000000000..6bb3f535060fc4 --- /dev/null +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h @@ -0,0 +1,19 @@ +// Copyright 2025 The Bazel Authors. All rights reserved. +// +// 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. +#ifndef EXAMPLES_TEST_CC__LIB_H +#define EXAMPLES_TEST_CC__LIB_H + +int foo(); + +#endif // EXAMPLES_TEST_CC_STATIC_LIBRARY_FOO_H_ diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc b/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc new file mode 100644 index 00000000000000..21396a0fb88a26 --- /dev/null +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc @@ -0,0 +1,21 @@ +// Copyright 2025 The Bazel Authors. All rights reserved. +// +// 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. +#include "lib.h" + +int main() { + if (foo() != 42) { + return 1; + } + return 0; +} From c58b2bfe5eac18cb2991b09d4ec3f43c41eaf9e6 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Tue, 17 Jun 2025 22:05:27 -0700 Subject: [PATCH 02/10] Allow textual_hdrs to not start with strip_include_prefix --- .../cc/compile/cc_compilation_helper.bzl | 12 ++++++++--- .../cc/basics/test/BUILD.builtin_test | 7 +++++-- .../builtins_bzl/cc/basics/test/nested/lib.h | 2 +- .../builtins_bzl/cc/basics/test/not_nested.h | 20 +++++++++++++++++++ .../cc/basics/test/test_include_textual.cc | 4 ++++ 5 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 src/main/starlark/tests/builtins_bzl/cc/basics/test/not_nested.h diff --git a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl index 2fa8abcb568c02..5e0c1fecd07043 100644 --- a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl @@ -61,7 +61,9 @@ def _compute_public_headers( binfiles_dir, non_module_map_headers, is_sibling_repository_layout, - shorten_virtual_includes): + shorten_virtual_includes, + *, + must_use_strip_prefix = True): if include_prefix: if not paths.is_normalized(include_prefix, False): fail("include prefix should not contain uplevel references: " + include_prefix) @@ -129,8 +131,13 @@ def _compute_public_headers( else: virtual_include_dir = paths.join(source_package_path, _VIRTUAL_INCLUDES_DIR, label.name) for original_header in public_headers_artifacts: + module_map_headers.append(original_header) + repo_relative_path = _repo_relative_path(original_header) if not repo_relative_path.startswith(strip_prefix): + if not must_use_strip_prefix: + continue + fail("header '{}' is not under the specified strip prefix '{}'".format(repo_relative_path, strip_prefix)) include_path = paths.relativize(repo_relative_path, strip_prefix) if include_prefix != None: @@ -147,8 +154,6 @@ def _compute_public_headers( if config.coverage_enabled: virtual_to_original_headers_list.append((virtual_header.path, original_header.path)) - module_map_headers.append(original_header) - virtual_headers = module_map_headers + non_module_map_headers return struct( headers = virtual_headers, @@ -444,6 +449,7 @@ def _init_cc_compilation_context( binfiles_dir, non_module_map_headers, sibling_repo_layout, + must_use_strip_prefix = False, ) if textual_headers.virtual_include_path: if external: diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test index 927be6aa4dbda6..e080d40837c897 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test @@ -2,11 +2,14 @@ cc_library( name = "lib", srcs = ["nested/lib.cc"], strip_include_prefix = "nested", - textual_hdrs = ["nested/lib.h"], + textual_hdrs = [ + "nested/lib.h", + "not_nested.h", + ], ) cc_test( name = "test_include_textual", srcs = ["test_include_textual.cc"], - deps =[ ":lib"], + deps = [":lib"], ) diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h index 6bb3f535060fc4..0cc6d1d6063a63 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h @@ -16,4 +16,4 @@ int foo(); -#endif // EXAMPLES_TEST_CC_STATIC_LIBRARY_FOO_H_ +#endif // EXAMPLES_TEST_CC__LIB_H diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/not_nested.h b/src/main/starlark/tests/builtins_bzl/cc/basics/test/not_nested.h new file mode 100644 index 00000000000000..8e525f6624e713 --- /dev/null +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/not_nested.h @@ -0,0 +1,20 @@ +// Copyright 2025 The Bazel Authors. All rights reserved. +// +// 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. + +#ifndef EXAMPLES_TEST_CC__NOT_NESTED_H +#define EXAMPLES_TEST_CC__NOT_NESTED_H + +#define NOT_NESTED 42 + +#endif // EXAMPLES_TEST_CC__NOT_NESTED_H diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc b/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc index 21396a0fb88a26..e1017334ac6eb5 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc @@ -12,10 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. #include "lib.h" +#include "not_nested.h" int main() { if (foo() != 42) { return 1; } + if (NOT_NESTED != 42) { + return 2; + } return 0; } From 715351ceef303c4563878d3e31ffaadd8126db02 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Mon, 30 Jun 2025 09:52:22 -0700 Subject: [PATCH 03/10] Make sure textual_headers end up in the cppmap --- .../common/cc/compile/cc_compilation_helper.bzl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl index 5e0c1fecd07043..9c7d5315358898 100644 --- a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl @@ -255,6 +255,12 @@ def _module_map_struct_to_module_map_content(parameters, tree_expander): add_header(path = header.path, visibility = "", can_compile = True) added_paths.add(header.path) + for header in expanded(parameters.textual_headers): + if header.path in added_paths: + continue + add_header(path = header.path, visibility = "", can_compile = False) + added_paths.add(header.path) + for header in expanded(parameters.private_headers): if header.path in added_paths: continue @@ -309,6 +315,7 @@ def _create_module_map_action( module_map, private_headers, public_headers, + textual_headers, dependency_module_maps, additional_exported_headers, separate_module_headers, @@ -328,6 +335,7 @@ def _create_module_map_action( data_struct = _ModuleMapInfo( module_map = module_map, public_headers = public_headers, + textual_headers = textual_headers, private_headers = private_headers, dependency_module_maps = dependency_module_maps, additional_exported_headers = additional_exported_headers, @@ -345,6 +353,7 @@ def _create_module_map_action( # simple null function. tree_artifacts = [h for h in private_headers if h.is_directory] tree_artifacts += [h for h in public_headers if h.is_directory] + tree_artifacts += [h for h in textual_headers if h.is_directory] content.add_all(tree_artifacts, map_each = lambda x: None, allow_closure = True) actions.write(module_map.file, content = content, is_executable = True, mnemonic = "CppModuleMap") @@ -512,8 +521,10 @@ def _init_cc_compilation_context( if _enabled(feature_configuration, "only_doth_headers_in_module_maps"): public_headers_for_module_map_action = [header for header in public_headers.module_map_headers if (header.is_directory or header.extension == "h")] + textual_headers_for_module_map_action = [header for header in textual_headers.module_map_headers if (header.is_directory or header.extension == "h")] else: public_headers_for_module_map_action = public_headers.module_map_headers + textual_headers_for_module_map_action = textual_headers.module_map_headers private_headers_for_module_map_action = private_headers_artifacts if _enabled(feature_configuration, "exclude_private_headers_in_module_maps"): @@ -523,6 +534,7 @@ def _init_cc_compilation_context( actions = actions, module_map = module_map, public_headers = public_headers_for_module_map_action, + textual_headers = textual_headers_for_module_map_action, separate_module_headers = separate_public_headers.module_map_headers, dependency_module_maps = dependency_module_maps, private_headers = private_headers_for_module_map_action, From d200566c7087e160dcfbaeb1e43a0c09211d0021 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Mon, 30 Jun 2025 09:56:09 -0700 Subject: [PATCH 04/10] Fix imports to not get replaced during import --- .../tests/builtins_bzl/cc/basics/test/nested/lib.cc | 7 ++++++- .../builtins_bzl/cc/basics/test/test_include_textual.cc | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc index 9958a502ba5579..da31c2cea26fab 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.cc @@ -11,6 +11,11 @@ // 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. -#include "src/main/starlark/tests/builtins_bzl/cc/basics/test/nested/lib.h" + +// NOLINTBEGIN(build/include) +// That the following two includes don't have a directory is the point of this +// test. +#include "lib.h" +// NOLINTEND(build/include) int foo() { return 42; } diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc b/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc index e1017334ac6eb5..9a0b5c5751b53a 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/test_include_textual.cc @@ -11,8 +11,13 @@ // 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. + +// NOLINTBEGIN(build/include) +// That the following two includes don't have a directory is the point of this +// test. #include "lib.h" #include "not_nested.h" +// NOLINTEND(build/include) int main() { if (foo() != 42) { From ae323088618376625df31266f26eec74f7a14f89 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Mon, 30 Jun 2025 10:53:42 -0700 Subject: [PATCH 05/10] Enable layering_check in test This makes the test fail in blaze but not bazel to spot issues with this feature. --- .../tests/builtins_bzl/cc/basics/test/BUILD.builtin_test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test index e080d40837c897..4a98d974ca0569 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test @@ -1,3 +1,5 @@ +package(features = ["layering_check"]) + cc_library( name = "lib", srcs = ["nested/lib.cc"], From 30f8bcf44e0cb0f21c1bb01f54a05eceabe98437 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Fri, 11 Jul 2025 09:51:49 -0700 Subject: [PATCH 06/10] Fix for shorten_virtual_includes --- .../builtins_bzl/common/cc/compile/cc_compilation_helper.bzl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl index 9c7d5315358898..ffd0bb536d9026 100644 --- a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl @@ -458,6 +458,7 @@ def _init_cc_compilation_context( binfiles_dir, non_module_map_headers, sibling_repo_layout, + shorten_virtual_includes, must_use_strip_prefix = False, ) if textual_headers.virtual_include_path: From 9e00ebd4c3c25fbae063f51a8eac2b9a7bc35e86 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Wed, 20 Aug 2025 15:43:05 -0700 Subject: [PATCH 07/10] Fix merge conflict --- .../builtins_bzl/common/cc/compile/cc_compilation_helper.bzl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl index ffd0bb536d9026..4a5e14116db212 100644 --- a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl @@ -201,6 +201,7 @@ _ModuleMapInfo = provider( fields = [ "module_map", "public_headers", + "textual_headers", "private_headers", "dependency_module_maps", "additional_exported_headers", From 2827b1a724749bb23be4c6d9acfb8e3ee59e74ba Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Tue, 2 Sep 2025 10:36:54 -0700 Subject: [PATCH 08/10] Handle system_include_paths for textual_headers --- .../builtins_bzl/common/cc/compile/cc_compilation_helper.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl index 4a5e14116db212..9043b071e29d23 100644 --- a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl @@ -463,7 +463,7 @@ def _init_cc_compilation_context( must_use_strip_prefix = False, ) if textual_headers.virtual_include_path: - if external: + if external or feature_configuration.is_requested("system_include_paths"): external_include_dirs.append(textual_headers.virtual_include_path) else: include_dirs_for_context.append(textual_headers.virtual_include_path) From 153d20895ea5819eed14cb6e1251319cc38bd784 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Mon, 24 Nov 2025 21:14:43 -0800 Subject: [PATCH 09/10] add missing import --- .../tests/builtins_bzl/cc/basics/test/BUILD.builtin_test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test index 4a98d974ca0569..f11c62693e58fe 100644 --- a/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test +++ b/src/main/starlark/tests/builtins_bzl/cc/basics/test/BUILD.builtin_test @@ -1,3 +1,6 @@ +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") + package(features = ["layering_check"]) cc_library( From 63fc24149018f59254a4799fdc33dab5f454ca47 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Fri, 19 Dec 2025 13:08:41 -0800 Subject: [PATCH 10/10] Add bool to disable --- .../builtins_bzl/common/cc/compile/cc_compilation_helper.bzl | 4 ++-- src/main/starlark/builtins_bzl/common/cc/semantics.bzl | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl index 9043b071e29d23..c0936861a32bd0 100644 --- a/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl @@ -20,7 +20,7 @@ load( "repository_exec_path", ) load(":common/cc/cc_info.bzl", "create_compilation_context", "create_module_map") -load(":common/cc/semantics.bzl", "USE_EXEC_ROOT_FOR_VIRTUAL_INCLUDES_SYMLINKS") +load(":common/cc/semantics.bzl", "STRIP_INCLUDE_PREFIX_APPLIES_TO_TEXTUAL_HEADERS", "USE_EXEC_ROOT_FOR_VIRTUAL_INCLUDES_SYMLINKS") load(":common/paths.bzl", "paths") _cc_common_internal = _builtins.internal.cc_common @@ -454,7 +454,7 @@ def _init_cc_compilation_context( config, public_textual_headers, include_prefix, - strip_include_prefix, + strip_include_prefix if STRIP_INCLUDE_PREFIX_APPLIES_TO_TEXTUAL_HEADERS else None, label, binfiles_dir, non_module_map_headers, diff --git a/src/main/starlark/builtins_bzl/common/cc/semantics.bzl b/src/main/starlark/builtins_bzl/common/cc/semantics.bzl index 501d5ef1ee831d..1f03459c67ceba 100644 --- a/src/main/starlark/builtins_bzl/common/cc/semantics.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/semantics.bzl @@ -21,6 +21,8 @@ _config = _builtins.toplevel.config # TODO: b/320980684 - Add a test that fails if this is flipped to True. USE_EXEC_ROOT_FOR_VIRTUAL_INCLUDES_SYMLINKS = False +STRIP_INCLUDE_PREFIX_APPLIES_TO_TEXTUAL_HEADERS = True + def _get_proto_aspects(): return []