Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 39 additions & 34 deletions .bazelci/presubmit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ test_targets: &test_targets
- "-//tests/system_library:system_library_test" # Only intended to work in WORKSPACE files
- "-//tests/rule_based_toolchain/tool_map:_duplicate_action_test_subject" # Intentionally broken rule.

flags_bazel_less_than_9: &flags_bazel_less_than_9
- "--deleted_packages=//tests/local_includes"

build_targets_bazel_6: &build_targets_bazel_6
- "//:all"
- "//cc:all"
Expand Down Expand Up @@ -48,12 +51,7 @@ tasks:
bazel: last_green
platform: ubuntu2004
build_targets: *build_targets
test_targets:
- "//:all"
- "//cc/..."
- "//examples/..."
- "//tests/..."
- "-//tests/rule_based_toolchain/tool_map:_duplicate_action_test_subject" # Intentionally broken rule.
test_targets: *test_targets
macos_head:
name: MacOS (Bazel HEAD)
bazel: last_green
Expand All @@ -73,12 +71,7 @@ tasks:
bazel: rolling
platform: ubuntu2004
build_targets: *build_targets
test_targets:
- "//:all"
- "//cc/..."
- "//examples/..."
- "//tests/..."
- "-//tests/rule_based_toolchain/tool_map:_duplicate_action_test_subject" # Intentionally broken rule.
test_targets: *test_targets
macos_rolling:
name: MacOS (Bazel rolling)
bazel: rolling
Expand All @@ -99,82 +92,94 @@ tasks:
platform: ubuntu2004
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9
macos_bazel_6:
name: MacOS (Bazel 6)
bazel: 6.3.0
platform: macos
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9
windows_bazel_6:
name: Windows (Bazel 6)
bazel: 6.3.0
platform: windows
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9

# Bazel 7
ubuntu2004_bazel_7:
name: Ubuntu 20.04 (Bazel 7)
bazel: 7.x
platform: ubuntu2004
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_targets: *build_targets
test_targets: *test_targets
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9
macos_bazel_7:
name: MacOS (Bazel 7)
bazel: 7.x
platform: macos
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_targets: *build_targets
test_targets: *test_targets
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9
windows_bazel_7:
name: Windows (Bazel 7)
bazel: 7.x
platform: windows
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_targets: *build_targets
test_targets: *test_targets
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9

# Bazel 8
ubuntu2004_bazel_8:
name: Ubuntu 20.04 (Bazel 8)
bazel: 8.x
platform: ubuntu2004
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_targets: *build_targets
test_targets: *test_targets
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9
macos_bazel_8:
name: MacOS (Bazel 8)
bazel: 8.x
platform: macos
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_targets: *build_targets
test_targets: *test_targets
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9
windows_bazel_8:
name: Windows (Bazel 8)
bazel: 8.x
platform: windows
build_targets: *build_targets_bazel_6
test_targets: *test_targets_bazel_6
build_targets: *build_targets
test_targets: *test_targets
build_flags: *flags_bazel_less_than_9
test_flags: *flags_bazel_less_than_9

# Bazel 9
ubuntu2004:
name: Ubuntu 20.04 (Bazel LTS)
bazel: last_rc # TODO: change to 9.x when released
bazel: 9.x
platform: ubuntu2004
build_targets: *build_targets
test_targets: *test_targets
macos:
name: MacOS (Bazel LTS)
bazel: last_rc # TODO: change to 9.x when released
bazel: 9.x
build_targets: *build_targets
test_targets: *test_targets
windows:
name: Windows (Bazel LTS)
bazel: last_rc # TODO: change to 9.x when released
bazel: 9.x
build_targets: *build_targets
test_targets: *test_targets
ubuntu_bzlmod:
name: Ubuntu 20.04 (Bazel LTS, bzlmod)
bazel: last_rc # TODO: change to 9.x when released
platform: ubuntu2004
build_flags:
- "--enable_bzlmod"
- "--ignore_dev_dependency"

ubuntu_rule_based_toolchains:
name: Ubuntu rule-based toolchains
Expand Down
4 changes: 2 additions & 2 deletions cc/common/cc_helper.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -811,13 +811,13 @@ def _get_cc_flags_make_variable(_ctx, feature_configuration, cc_toolchain):
def _package_exec_path(ctx, package, sibling_repository_layout):
return get_relative_path(_repository_exec_path(ctx.label.workspace_name, sibling_repository_layout), package)

def _include_dirs(ctx, additional_make_variable_substitutions):
def _include_dirs(ctx, additional_make_variable_substitutions, attr = "includes"):
result = []
sibling_repository_layout = ctx.configuration.is_sibling_repository_layout()
package = ctx.label.package
package_exec_path = _package_exec_path(ctx, package, sibling_repository_layout)
package_source_root = _package_source_root(ctx.label.workspace_name, package, sibling_repository_layout)
for include in ctx.attr.includes:
for include in getattr(ctx.attr, attr):
includes_attr = _expand(ctx, include, additional_make_variable_substitutions)
if is_path_absolute(includes_attr):
continue
Expand Down
2 changes: 2 additions & 0 deletions cc/private/cc_common.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,7 @@ def _compile(
textual_hdrs = [],
additional_exported_hdrs = _UNBOUND, # TODO(ilist@): remove, there are no uses
includes = [],
local_includes = [],
quote_includes = [],
system_includes = [],
framework_includes = [],
Expand Down Expand Up @@ -545,6 +546,7 @@ def _compile(
textual_hdrs = textual_hdrs,
additional_exported_hdrs = additional_exported_hdrs,
includes = includes,
local_includes = local_includes,
quote_includes = quote_includes,
system_includes = system_includes,
framework_includes = framework_includes,
Expand Down
8 changes: 8 additions & 0 deletions cc/private/cc_info.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ CcCompilationContextInfo = provider(
# CommandLineCcCompilationContext fields:
"includes": "Returns the set of search paths (as strings) for header files referenced " +
"both by angle bracket and quotes. Usually passed with -I.",
"local_includes": "Returns the set of search paths (as strings) for header files referenced " +
"both by angle bracket and quotes. Usually passed with -I. These values " +
"are not propagated to the target's transitive dependents.",
"quote_includes": "Returns the set of search paths (as strings) for header files " +
"referenced by quotes, e.g. #include \"foo/bar/header.h\". They can be " +
"either relative to the exec root or absolute. Usually passed with -iquote.",
Expand Down Expand Up @@ -113,6 +116,7 @@ EMPTY_COMPILATION_CONTEXT = CcCompilationContextInfo(
direct_private_headers = [],
direct_textual_headers = [],
includes = depset(),
local_includes = depset(),
quote_includes = depset(),
system_includes = depset(),
framework_includes = depset(),
Expand Down Expand Up @@ -275,6 +279,7 @@ def create_compilation_context(
*,
headers = None,
includes = None,
local_includes = None,
quote_includes = None,
system_includes = None,
framework_includes = None,
Expand All @@ -301,6 +306,7 @@ def create_compilation_context(
Args:
headers: A depset of headers to compile.
includes: A depset of include directories.
local_includes: A depset of local include directories.
quote_includes: A depset of quoted include directories.
system_includes: A depset of system include directories.
framework_includes: A depset of framework include directories.
Expand Down Expand Up @@ -360,6 +366,7 @@ def create_compilation_context(
direct_private_headers = header_info.modular_private_headers,
direct_textual_headers = header_info.textual_headers,
includes = includes,
local_includes = local_includes,
quote_includes = quote_includes,
system_includes = system_includes,
framework_includes = framework_includes,
Expand Down Expand Up @@ -465,6 +472,7 @@ def _merge_compilation_contexts(*, compilation_context = EMPTY_COMPILATION_CONTE
transitive = [dep.defines for dep in all_deps] + [compilation_context.defines],
),
local_defines = compilation_context.local_defines,
local_includes = compilation_context.local_includes,
headers = depset(
direct = compilation_context.headers.to_list(),
transitive = [dep.headers for dep in all_deps],
Expand Down
2 changes: 2 additions & 0 deletions cc/private/compile/cc_compilation_helper.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ def _init_cc_compilation_context(
framework_include_dirs,
system_include_dirs,
include_dirs,
local_includes,
feature_configuration,
public_headers_artifacts,
include_prefix,
Expand Down Expand Up @@ -596,6 +597,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),
local_includes = depset(local_includes),
virtual_to_original_headers = depset(virtual_to_original_headers),
dependent_cc_compilation_contexts = dependent_cc_compilation_contexts,
non_code_inputs = additional_inputs,
Expand Down
4 changes: 4 additions & 0 deletions cc/private/compile/compile.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ def compile(
textual_hdrs = [],
additional_exported_hdrs = [],
includes = [],
local_includes = [],
# TODO(b/396122076): seems unused; double-check and remove
loose_includes = None, # buildifier: disable=unused-variable
quote_includes = [],
Expand Down Expand Up @@ -151,6 +152,8 @@ def compile(
additional_exported_hdrs: undocumented
includes: Search paths for header files referenced both by angle bracket and quotes.
Usually passed with -I. Propagated to dependents transitively.
local_includes: Search paths for header files referenced by angle brackets and quotes.
Usually passed with -I. Not propagated to dependents transitively.
loose_includes: undocumented
quote_includes: Search paths for header files referenced by quotes,
e.g. #include \"foo/bar/header.h\". They can be either relative to the exec
Expand Down Expand Up @@ -291,6 +294,7 @@ def compile(
framework_include_dirs = framework_includes,
system_include_dirs = system_includes,
include_dirs = includes,
local_includes = local_includes,
feature_configuration = feature_configuration,
public_headers_artifacts = public_hdrs_artifacts,
include_prefix = include_prefix,
Expand Down
7 changes: 6 additions & 1 deletion cc/private/compile/compile_build_variables.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ def create_compile_variables(
output_file = None,
user_compile_flags = None,
includes = None,
local_includes = None,
include_directories = None,
quote_include_directories = None,
system_include_directories = None,
Expand Down Expand Up @@ -122,6 +123,7 @@ def create_compile_variables(
includes: paths to headers that should be included using -include
user_compile_flags: List of additional compilation flags (copts).
include_directories: Depset of include directories.
local_includes: Depset of local include directories.
quote_include_directories: Depset of quote include directories.
system_include_directories: Depset of system include directories.
framework_include_directories: Depset of framework include directories.
Expand Down Expand Up @@ -157,6 +159,7 @@ def create_compile_variables(
fdo_build_stamp = _get_fdo_build_stamp(cpp_configuration, fdo_context, feature_configuration),
variables_extension = variables_extension,
includes = includes or [],
local_includes = local_includes or depset(),
include_dirs = include_directories or depset(),
quote_include_dirs = quote_include_directories or depset(),
system_include_dirs = system_include_directories or depset(),
Expand Down Expand Up @@ -197,6 +200,7 @@ def setup_common_compile_build_variables(
fdo_build_stamp = _get_fdo_build_stamp(cpp_configuration, fdo_context, feature_configuration),
variables_extension = variables_extension,
include_dirs = cc_compilation_context.includes,
local_includes = cc_compilation_context.local_includes,
quote_include_dirs = cc_compilation_context.quote_includes,
system_include_dirs = cc_compilation_context.system_includes,
framework_include_dirs = cc_compilation_context.framework_includes,
Expand All @@ -215,6 +219,7 @@ def _setup_common_compile_build_variables_internal(
variables_extension = [], # [dict{str,object}]
additional_build_variables = {}, # dict{str,str}
include_dirs = depset(),
local_includes = depset(),
quote_include_dirs = depset(),
system_include_dirs = depset(),
framework_include_dirs = depset(),
Expand All @@ -225,7 +230,7 @@ def _setup_common_compile_build_variables_internal(

if feature_configuration.is_enabled("use_header_modules"):
result[_VARS.MODULE_FILES] = []
result[_VARS.INCLUDE_PATHS] = include_dirs
result[_VARS.INCLUDE_PATHS] = depset(transitive = [include_dirs, local_includes])
result[_VARS.QUOTE_INCLUDE_PATHS] = quote_include_dirs
result[_VARS.SYSTEM_INCLUDE_PATHS] = system_include_dirs
if includes:
Expand Down
14 changes: 14 additions & 0 deletions cc/private/rules_impl/attrs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,20 @@ very careful, since this may have far-reaching effects. When in doubt, add
The added <code>include</code> paths will include generated files as well as
files in the source tree.
</p>
"""),
"local_includes": attr.string_list(doc = """
List of include dirs to be added to the compile line.
Subject to <a href="${link make-variables}">"Make variable"</a> substitution.
Each string is prepended with the package path and passed to the C++ toolchain for
expansion via the "include_paths" CROSSTOOL feature. A toolchain running on a
POSIX system with typical feature definitions will produce
<code>-I path_to_package/include_entry</code>.

Unlike <a href="#cc_binary.includes">INCLUDES</a>, these flags are added for
this target and not added to every target that depends on it.

The added <code>include</code> paths will include generated files as well as
files in the source tree.
"""),
"defines": attr.string_list(doc = """
List of defines to add to the compile line of this and all dependent targets.
Expand Down
1 change: 1 addition & 0 deletions cc/private/rules_impl/cc_binary.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,7 @@ def cc_binary_impl(ctx, additional_linkopts, force_linkstatic = False):
defines = cc_helper.defines(ctx, additional_make_variable_substitutions),
local_defines = cc_helper.local_defines(ctx, additional_make_variable_substitutions) + cc_helper.get_local_defines_for_runfiles_lookup(ctx, ctx.attr.deps),
includes = cc_helper.include_dirs(ctx, additional_make_variable_substitutions),
local_includes = cc_helper.include_dirs(ctx, additional_make_variable_substitutions, attr = "local_includes"),
private_hdrs = cc_helper.get_private_hdrs(ctx),
public_hdrs = cc_helper.get_public_hdrs(ctx),
copts_filter = cc_helper.copts_filter(ctx, additional_make_variable_substitutions),
Expand Down
1 change: 1 addition & 0 deletions cc/private/rules_impl/cc_library.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ def _cc_library_impl(ctx):
defines = cc_helper.defines(ctx, additional_make_variable_substitutions),
local_defines = cc_helper.local_defines(ctx, additional_make_variable_substitutions) + cc_helper.get_local_defines_for_runfiles_lookup(ctx, ctx.attr.deps + ctx.attr.implementation_deps),
includes = cc_helper.include_dirs(ctx, additional_make_variable_substitutions),
local_includes = cc_helper.include_dirs(ctx, additional_make_variable_substitutions, attr = "local_includes"),
copts_filter = cc_helper.copts_filter(ctx, additional_make_variable_substitutions),
purpose = "cc_library-compile",
srcs = cc_helper.get_srcs(ctx),
Expand Down
Loading