Skip to content

Use includes instead of system_includes for includes attr #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

arvi18
Copy link

@arvi18 arvi18 commented Apr 15, 2025

Previously even though the attribute was named includes it was passed
through the system_includes field of the compilation context. This
resulted in toolchains passing these include paths with -isystem,
which is unexpected if you use this for first party code.

Many non bazel-first projects have header directory structures that
require custom include paths be propagated throughout the graph, the
alternative to includes is to use strip_include_prefix. The downside
of strip_include_prefix is that you add 1 include path per
cc_library, even if the libraries are in the same package. With
includes these are deduplicated. In the case of LLVM using includes
reduced the number of search paths on the order of hundreds.

If users want to use -isystem for third party code that uses
includes, they can pass --features=external_include_paths --host_features=external_include_paths

If there are first party libraries users want to use -isystem with,
they can use features = ["system_include_paths"]

Fixes bazelbuild#20267

RELNOTES[INC]: Use -I instead of -isystem for cc_library / cc_binary includes attr. To use -isystem for only external repositories, you can pass --features=external_include_paths --host_features=external_include_paths. To use -isystem for a single cc_library / cc_binary includes, you can set features = ["system_include_paths"], on the target

Summary by CodeRabbit

  • New Features

    • Expanded support for specifying general include directories in C++ and Objective-C build rules.
    • Added new build flags to improve handling of external include paths during the build process.
  • Bug Fixes

    • Improved validation to correctly ignore external include directories during compilation.
  • Tests

    • Updated and added tests to verify correct handling and propagation of include directories and related compiler flags.
  • Chores

    • Updated internal scripts to pass new build options for enhanced compatibility and warning control on Windows.

Previously even though the attribute was named `includes` it was passed
through the `system_includes` field of the compilation context. This
resulted in toolchains passing these include paths with `-isystem`,
which is unexpected if you use this for first party code.

Many non bazel-first projects have header directory structures that
require custom include paths be propagated throughout the graph, the
alternative to `includes` is to use `strip_include_prefix`. The downside
of `strip_include_prefix` is that you add 1 include path per
`cc_library`, even if the libraries are in the same package. With
`includes` these are deduplicated. In the case of LLVM using `includes`
reduced the number of search paths on the order of hundreds.

If users want to use `-isystem` for third party code that uses
`includes`, they can pass `--features=external_include_paths --host_features=external_include_paths`

If there are first party libraries users want to use `-isystem` with,
they can use `features = ["system_include_paths"]`

Fixes bazelbuild#20267

RELNOTES[INC]: Use `-I` instead of `-isystem` for `cc_library` / `cc_binary` `includes` attr. To use `-isystem` for only external repositories, you can pass `--features=external_include_paths --host_features=external_include_paths`. To use `-isystem` for a single `cc_library` / `cc_binary` `includes`, you can set `features = ["system_include_paths"],` on the target
@arvi18
Copy link
Author

arvi18 commented Apr 15, 2025

this requires a toolchain change in order to add a test, I can do that if folks are happy with this direction

@arvi18
Copy link
Author

arvi18 commented Apr 15, 2025

see the alternative here bazelbuild#25751

@arvi18
Copy link
Author

arvi18 commented Apr 15, 2025

Selfishly, we have on the order of a dozen+ cc_toolchains that will need to add the "system_include_paths" feature for backwards compatibility until we can spend the time to test the rollout.

I'm not opposed in principle, but can we add an incompatible flag for this? Or keep the current behavior if a feature is unset?

Open to suggestions, but I'd like to have a way to disable this globally (for our monorepo) without having to modify many toolchains.

@arvi18
Copy link
Author

arvi18 commented Apr 15, 2025

totally fair, I can add this behind an incompatible flag, before I do that on this one, should we consider bazelbuild#25751 or should I close that and move forward with this approach?

@arvi18
Copy link
Author

arvi18 commented Apr 15, 2025

it looks like there is another implementation option, we can use feature_configuration.is_requested instead of is_enabled so that toolchains don't have to contain the feature, then I imagine it could be added in the REPO.bazel to enable globally, without any toolchain updates. What do you think about that option? The downside is still that you'd have to handle --features=external_include_paths --host_features=external_include_paths separately

@arvi18
Copy link
Author

arvi18 commented Apr 15, 2025

I've updated to the is_requested approach because the tests have the same issue

@arvi18
Copy link
Author

arvi18 commented Apr 15, 2025

ok the CI failures here lead to some interesting discoveries. for one the BUILD files of both grpc and c-ares have undeclared inclusion errors lurking that only hit if you use --spawn_strategy=standalone (which the bootstrap build of bazel does).

the change here is that previously those were ignored because --strict_system_includes=false (the default) disables those checks for any headers from -isystem, but they no longer are.

The fix here is to pass --features=external_include_paths --host_features=external_include_paths to continue using -isystem for external headers, and to start external_includes the same as system_includes for --strict_system_includes.

I've added a release notes blurb as well

@visz11
Copy link
Collaborator

visz11 commented Apr 25, 2025

@coderabbitai full review

Copy link

coderabbitai bot commented Apr 25, 2025

✅ Actions performed

Full review triggered.

Copy link

coderabbitai bot commented Apr 25, 2025

Walkthrough

This set of changes updates the handling of include directories in Bazel's C++ and Objective-C build rules. The code and build scripts are modified to shift from using "system include" directories to more general "include" directories in both the build logic and associated tests. Several scripts and Starlark files now use includes instead of system_includes, and helper functions are renamed accordingly. Compiler and Bazel flags are updated in shell scripts to accommodate new include path features. Tests are adjusted to reflect the new include handling, with new assertions and test cases added.

Changes

Files Change Summary
compile.sh, scripts/bootstrap/bootstrap.sh Added/updated Bazel build flags for external include paths and compiler options to control warning levels and include path features.
src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java Expanded the set of directories ignored during include validation to include external include directories.
src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl, src/main/starlark/builtins_bzl/common/cc/cc_library.bzl, src/main/starlark/builtins_bzl/common/objc/compilation_support.bzl Changed calls from using system_include_dirs to include_dirs for passing include directories to compilation functions.
src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl Renamed _system_include_dirs to _include_dirs, updated struct keys, and added a deprecation note.
src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl Modified logic to merge or separate system and general include directories based on feature configuration.
src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java Updated tests to check general include directories instead of system include directories; added a new test for include handling.
src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java Updated assertions to check for -I flags and general include directories; added assertion to ensure implementation deps' includes are not propagated.
src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java Adjusted assertions to reflect the new logic for merged include directories.
src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java Changed expected compile argument from -isystem to -I for transitive C++ dependency includes.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Bazel
    participant StarlarkRule
    participant CppCompileAction

    User->>Bazel: Starts build with updated flags
    Bazel->>StarlarkRule: Invokes cc_binary/cc_library/objc rules
    StarlarkRule->>StarlarkRule: Calls cc_helper.include_dirs(...)
    StarlarkRule->>CppCompileAction: Passes include dirs as 'includes'
    CppCompileAction->>CppCompileAction: Ignores built-in, system, and external include dirs during validation
    CppCompileAction-->>Bazel: Compilation proceeds with updated include handling
Loading

Assessment against linked issues

Objective Addressed Explanation
Rename includes to system_includes in cc_* functions (bazelbuild#20267) The code changes do the opposite: they replace system_includes with includes in function arguments and logic, rather than renaming includes to system_includes.

Poem

Oh, what a tangle of paths we weave,
When headers and includes we must retrieve!
From system to general, the flags realign,
Directories merge, and the build scripts shine.
With every hop and every bound,
This bunny keeps code safe and sound.
🐇✨


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@visz11
Copy link
Collaborator

visz11 commented Apr 28, 2025

/gemini review

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request aims to replace system_includes with includes for the includes attribute in Bazel's C++ rules. This change intends to use -I instead of -isystem for include paths, providing more control to users over how include paths are propagated. The changes look good overall.

Summary of Findings

  • External Include Directories Validation: The change in CppCompileAction.java introduces the validation of external include directories. It's important to ensure that this validation doesn't inadvertently break existing builds or introduce performance regressions. Consider adding more robust testing to cover various scenarios with external include paths.
  • TODO comment in cc_helper.bzl: The cc_helper.bzl file contains a TODO comment regarding the removal of the old name system_include_dirs. It's important to address this TODO in a timely manner to avoid confusion and maintain code clarity. Consider adding a follow-up issue or task to track the removal of the deprecated name.
  • Feature flag for external include paths: The pull request introduces a feature flag (external_include_paths) to control the use of -isystem for external repositories. It's important to document this feature flag clearly and provide guidance on when and how to use it. Consider adding a section to the Bazel documentation or a dedicated README file explaining the purpose and usage of this flag.

Merge Readiness

The pull request appears to be well-structured and addresses the intended issue. However, it's important to address the TODO comment in cc_helper.bzl and ensure that the validation of external include directories doesn't introduce any regressions. Additionally, clear documentation for the external_include_paths feature flag is crucial for users to understand and utilize this functionality effectively. I am unable to directly approve this pull request, and recommend that others review and approve this code before merging. I would recommend addressing the high severity issue before merging.

@@ -1264,7 +1264,8 @@ cc_helper = struct(
get_private_hdrs = _get_private_hdrs,
get_public_hdrs = _get_public_hdrs,
report_invalid_options = _report_invalid_options,
system_include_dirs = _system_include_dirs,
include_dirs = _include_dirs,
system_include_dirs = _include_dirs, # TODO: Remove uses of old name

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

There is a TODO comment here to remove the old name system_include_dirs. It's important to address this in a timely manner to avoid confusion and maintain code clarity. Should we create a follow-up issue or task to track the removal of this deprecated name?

    include_dirs = _include_dirs,
    # TODO: Remove uses of old name
    # system_include_dirs = _include_dirs,

Comment on lines +1913 to 1915
.doesNotContain("foo/implementation_dep");
assertThat(pathfragmentsToStrings(libCompilationContext.getSystemIncludeDirs()))
.doesNotContain("foo/implementation_dep");

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Why is getSystemIncludeDirs() still being called here, even though it's intended to be deprecated? Should this be updated to use getIncludeDirs() instead for consistency?

@visz11
Copy link
Collaborator

visz11 commented Apr 28, 2025

@coderabbitai full review

Copy link

coderabbitai bot commented Apr 28, 2025

✅ Actions performed

Full review triggered.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java (1)

1908-1913: Correctly verifies implementation dependencies are not propagated

The test now checks getIncludeDirs() instead of getSystemIncludeDirs() to verify that implementation dependency include directories are not propagated transitively, consistent with the change to use regular includes instead of system includes.

🧹 Nitpick comments (2)
scripts/bootstrap/bootstrap.sh (1)

47-47: Enable external include paths for bootstrap invocations

The addition of --features=external_include_paths and --host_features=external_include_paths to _BAZEL_ARGS ensures the bootstrap process respects the new include-path semantics for both target and host compilations. Please verify that the script still completes successfully on all supported platforms after these flags are applied.

Suggestion: Refactor _BAZEL_ARGS to a Bash array

To improve readability and prevent potential word-splitting pitfalls when appending future flags, consider defining _BAZEL_ARGS as an array instead of a single quoted string. For example:

_BAZEL_ARGS=(
  --spawn_strategy=standalone
  --nojava_header_compilation
  --strategy=Javac=worker
  --worker_quit_after_build
  --ignore_unsupported_sandboxing
  --compilation_mode=opt
  --repository_cache=derived/repository_cache
  --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0
  --extra_toolchains=//scripts/bootstrap:all
  --extra_toolchains=@rules_python//python/runtime_env_toolchains:all
  --enable_bzlmod
  --check_direct_dependencies=error
  --lockfile_mode=update
  --features=external_include_paths
  --host_features=external_include_paths
  --override_repository=$(cat derived/maven/MAVEN_CANONICAL_REPO_NAME)=derived/maven
  --java_runtime_version=${JAVA_VERSION}
  --java_language_version=${JAVA_VERSION}
  --tool_java_runtime_version=${JAVA_VERSION}
  --tool_java_language_version=${JAVA_VERSION}
  --cxxopt=-std=c++17
  --host_cxxopt=-std=c++17
  ${DIST_BOOTSTRAP_ARGS:-}
  ${EXTRA_BAZEL_ARGS:-}
)

Then invoke Bazel with "${_BAZEL_ARGS[@]}" to preserve each element as a discrete argument.

src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl (1)

230-233: Added conditional logic for system_include_paths feature

This change adds support for the system_include_paths feature flag that allows users to opt into the previous behavior (using -isystem for includes). When the feature is enabled, regular include directories are merged with system include directories.

Consider adding a brief comment explaining the purpose of the system_include_paths feature to make the code more self-documenting.

+    # When system_include_paths feature is enabled, treat include_dirs as system includes
+    # to maintain backward compatibility with previous behavior
     if not external and feature_configuration.is_requested("system_include_paths"):
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Lite

📥 Commits

Reviewing files that changed from the base of the PR and between c0c98a2 and c9a5bfb.

📒 Files selected for processing (12)
  • compile.sh (1 hunks)
  • scripts/bootstrap/bootstrap.sh (1 hunks)
  • src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java (1 hunks)
  • src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl (1 hunks)
  • src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl (2 hunks)
  • src/main/starlark/builtins_bzl/common/cc/cc_library.bzl (1 hunks)
  • src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl (1 hunks)
  • src/main/starlark/builtins_bzl/common/objc/compilation_support.bzl (1 hunks)
  • src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java (4 hunks)
  • src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java (2 hunks)
  • src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java (1 hunks)
  • src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java (1 hunks)
🔇 Additional comments (14)
src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java (2)

1401-1402: Verified includes attribute behavior change.

The test now only checks for "foo/bar" being in the merged system includes, omitting "a/dep1/baz" and "a/dep2/qux" which have been moved to regular includes. This correctly validates the change described in the PR where the includes attribute now uses -I flags instead of -isystem.


1404-1405: Correctly updates test to match the new behavior for includes.

Now testing that "a/dep1/baz" and "a/dep2/qux" are present in merged_includes rather than in system_includes, confirming that the includes attribute now correctly places paths in regular includes rather than system includes. This is the key verification for the PR behavior change.

compile.sh (1)

64-64: Added compiler flags to suppress warnings for external includes on Windows.

This change adds two MSVC-specific compiler flags (/external:W0) that disable warnings from headers in external include directories on Windows. This complements the PR's main change where includes are now passed with -I instead of -isystem, ensuring consistent warning behavior between platforms.

src/main/starlark/builtins_bzl/common/cc/cc_library.bzl (1)

66-66: Changed parameter from system_includes to includes reflecting the new include path handling approach.

This is the core change implementing the PR objective. The function now uses cc_helper.include_dirs() and passes the result as the includes parameter instead of system_includes, which means these include paths will be passed with -I flags rather than -isystem. This aligns with the expectation that first-party code should use regular include paths.

src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java (1)

1135-1139: Added external include directories to validation ignored dirs.

This change properly extends the set of directories ignored during include validation by adding external include directories. Even though these paths will now be passed with -I flags rather than -isystem, they should still be exempt from the requirement that all included files must be explicitly declared in the build files.

src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java (1)

1400-1400: Test correctly updated to validate new include flag behavior

This change properly updates the test to verify that include directories from transitive C++ dependencies are now passed to compile actions with -I flags rather than -isystem flags, confirming the core functionality of this PR.

src/main/starlark/builtins_bzl/common/objc/compilation_support.bzl (1)

108-108: Core implementation change for include paths handling

This change is the key implementation that shifts include directories specified in the includes attribute from being treated as system includes (-isystem) to regular includes (-I). This correctly implements the main objective of the PR to use -I flags for first-party code includes.

src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl (1)

513-513: Consistent implementation of include path handling in cc_binary rule

This change correctly updates the cc_binary implementation to use regular include flags (-I) instead of system include flags (-isystem) for include directories, maintaining consistency with the changes in other files and properly implementing the PR's objective.

src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java (1)

1197-1204: Changes correctly use -I instead of -isystem for include paths

The test now expects include directories to be passed with -I flags rather than -isystem, aligning with the change to use regular includes for the includes attribute instead of system includes.

src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl (1)

1065-1065: Renamed function to better reflect its purpose

Function renamed from _system_include_dirs to _include_dirs to accurately reflect that it's now used for regular include directories, not just system includes.

src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java (4)

576-577: Test assertion updated to check include dirs instead of system include dirs

This change correctly updates the test assertion to check getIncludeDirs() instead of getSystemIncludeDirs(), aligning with the PR's objective to make the includes attribute use -I flags instead of -isystem flags for include paths.


599-600: Updated assertions for testing includes with merge_genfiles_directory flag

These assertion changes properly test that regular include directories (not system include directories) are affected by the --incompatible_merge_genfiles_directory flag, consistent with the PR's change to how include directories are handled.

Also applies to: 604-605


629-629: Added system_include_paths feature flag to test

This addition correctly implements the new opt-in mechanism for the old behavior. By adding the system_include_paths feature, this test now explicitly requests that include paths should be treated as system includes (using -isystem), which tests the backward compatibility feature mentioned in the PR objectives.


648-685: Added new test for -I include behavior

This new test method complements the existing testUseIsystemForIncludes() method by verifying the new default behavior where include paths use the -I flag. The test properly checks that paths from the includes attribute are added to the IncludeDirs rather than SystemIncludeDirs, which is the key change in this PR.

Comment on lines +1267 to +1268
include_dirs = _include_dirs,
system_include_dirs = _include_dirs, # TODO: Remove uses of old name
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Updated struct to reference the renamed function

Both include_dirs and system_include_dirs keys now reference the renamed _include_dirs function, with a TODO to eventually remove the old name.

The TODO comment indicates the system_include_dirs name should be removed in the future. Consider creating a follow-up issue to track this cleanup task to avoid technical debt accumulation.


🏁 Script executed:

#!/bin/bash
# Search for usages of system_include_dirs to identify code that needs to be updated
rg "system_include_dirs" --type bzl

Length of output: 63


🏁 Script executed:

#!/bin/bash
# Search for any usage of system_include_dirs in .bzl files
rg "system_include_dirs" -n --color never -g '*.bzl'

Length of output: 1324


Track and plan removal of system_include_dirs alias
There are still multiple references to system_include_dirs that will need updating once the alias is removed. To avoid accumulating technical debt, please create a follow-up issue to track this cleanup and update these locations when ready:

  • src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl (line 1268)
  • src/main/starlark/builtins_bzl/common/cc/compile/cc_compilation_helper.bzl (lines 186, 231, 234, 237–238, 245, 401, 430)

No immediate code changes required—just open an issue to consolidate and schedule the refactor.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Request: rename includes to system_includes in cc_* functions
3 participants