From 532501f2e7504533f0ef286ab67c501168efb36c Mon Sep 17 00:00:00 2001 From: martin4861 Date: Mon, 7 Jul 2025 13:02:01 +0200 Subject: [PATCH] Implement bzl_mod compatible workaround for local_includes --- cc/defs.bzl | 20 ++++++++++---------- cc/utils.bzl | 9 +++++++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/cc/defs.bzl b/cc/defs.bzl index 9f109ca..abf1971 100644 --- a/cc/defs.bzl +++ b/cc/defs.bzl @@ -78,8 +78,8 @@ def _common_cxx_opts(exceptions = False, rtti = False, standard = None): }) + _common_cxx_standard_opts(standard) # Handle various nuances of local include paths -def _construct_local_includes(local_includes): - return [construct_local_include(path) for path in local_includes] +def _construct_local_includes(target_name, local_includes): + return [construct_local_include(target_name, path) for path in local_includes] # Handle whether to link statically def _link_static(linkstatic = True): @@ -232,7 +232,7 @@ def swift_c_library(**kwargs): _create_srcs(**kwargs) _create_hdrs(**kwargs) - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) nocopts = kwargs.pop("nocopts", []) # pop because nocopts is a deprecated cc* attr. @@ -284,7 +284,7 @@ def swift_cc_library(**kwargs): _create_srcs(**kwargs) _create_hdrs(**kwargs) - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) nocopts = kwargs.pop("nocopts", []) # pop because nocopts is a deprecated cc* attr. @@ -331,7 +331,7 @@ def swift_c_tool_library(**kwargs): nocopts: List of flags to remove from the default compile options. Use judiciously. """ - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) nocopts = kwargs.pop("nocopts", []) @@ -377,7 +377,7 @@ def swift_cc_tool_library(**kwargs): nocopts: List of flags to remove from the default compile options. Use judiciously. """ - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) nocopts = kwargs.pop("nocopts", []) @@ -421,7 +421,7 @@ def swift_c_binary(**kwargs): nocopts: List of flags to remove from the default compile options. Use judiciously. """ - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) nocopts = kwargs.pop("nocopts", []) @@ -471,7 +471,7 @@ def swift_cc_binary(**kwargs): nocopts: List of flags to remove from the default compile options. Use judiciously. """ - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) nocopts = kwargs.pop("nocopts", []) @@ -598,7 +598,7 @@ def swift_cc_test_library(**kwargs): _ = kwargs.pop("nocopts", []) # To handle API compatibility. - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) kwargs["copts"] = local_includes + kwargs.get("copts", []) @@ -650,7 +650,7 @@ def swift_cc_test(name, type, **kwargs): if not (type == UNIT or type == INTEGRATION): fail("The 'type' attribute must be either UNIT or INTEGRATION") - local_includes = _construct_local_includes(kwargs.pop("local_includes", [])) + local_includes = _construct_local_includes(kwargs.get("name", ""), kwargs.pop("local_includes", [])) kwargs["copts"] = local_includes + kwargs.get("copts", []) + _tests_warn_deprecated_declarations() + _common_cxx_standard_opts(kwargs.pop("standard", [])) kwargs["data"] = kwargs.get("data", []) + _symbolizer_data() diff --git a/cc/utils.bzl b/cc/utils.bzl index b31bf8a..3954f6e 100644 --- a/cc/utils.bzl +++ b/cc/utils.bzl @@ -8,7 +8,7 @@ # EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. -def construct_local_include(path): +def construct_local_include(target_name, path): """Helper to correctly set up local (non-public) include paths. When a bazel workspace is consumed externally, (i.e. via local_repository), @@ -19,13 +19,18 @@ def construct_local_include(path): building a workpace standalone, and externally. Args: + name: The target, which calls this macro + path: The include path relative to the package this macro is called from Use the special argument $(GENDIR) to construct an include path for any generated files the build depends on. Assumes these files are not generated into a subdirectory. """ - root = Label(native.repository_name() + "//:WORKSPACE").workspace_root or "." + if target_name != "": + root = Label(target_name).workspace_root or "." + else: + root = "." package = native.package_name() # Generated files are placed in $(GENDIR)/external/