aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Yu <zachyu@google.com>2023-05-08 22:55:24 -0700
committerZach Yu <zachyu@google.com>2023-05-11 14:45:23 -0700
commit1831fbf8d454aa37c6754f6b632525540569d1b1 (patch)
tree22f982c7195a0ebc57feef6dce09e352cc76c608
parent6dd9624983df7fd16cade3a214c2cffbb33b4b95 (diff)
downloadbazel-1831fbf8d454aa37c6754f6b632525540569d1b1.tar.gz
Add framework path with cc_toolchain_import.
Test: bazel build @com_google_absl//absl/time/internal/cctz:time_zone Bug: 274512969 Change-Id: Id0b9ace08feb380ba1d531dfaadb6ceffe97fc8c
-rw-r--r--toolchains/cc/features_common.bzl5
-rw-r--r--toolchains/cc/linux_clang/features.bzl8
-rw-r--r--toolchains/cc/mac_clang/BUILD.bazel1
-rw-r--r--toolchains/cc/mac_clang/sdk.BUILD14
-rw-r--r--toolchains/cc/rules.bzl16
5 files changed, 43 insertions, 1 deletions
diff --git a/toolchains/cc/features_common.bzl b/toolchains/cc/features_common.bzl
index 61159d9d..763ae281 100644
--- a/toolchains/cc/features_common.bzl
+++ b/toolchains/cc/features_common.bzl
@@ -35,6 +35,10 @@ def toolchain_import_configs(import_libs):
lib[CcToolchainImportInfo].include_paths
for lib in import_libs
], order = "topological").to_list()
+ framework_paths = depset(transitive = [
+ lib[CcToolchainImportInfo].framework_paths
+ for lib in import_libs
+ ], order = "topological").to_list()
dynamic_mode_libs = depset(transitive = [
lib[CcToolchainImportInfo].dynamic_mode_libraries
for lib in import_libs
@@ -70,6 +74,7 @@ def toolchain_import_configs(import_libs):
return struct(
include_paths = include_paths,
+ framework_paths = framework_paths,
dynamic_linked_objects = dynamic_linked_objects,
static_linked_objects = static_linked_objects,
lib_search_paths = lib_search_paths,
diff --git a/toolchains/cc/linux_clang/features.bzl b/toolchains/cc/linux_clang/features.bzl
index 9c28a38a..82997242 100644
--- a/toolchains/cc/linux_clang/features.bzl
+++ b/toolchains/cc/linux_clang/features.bzl
@@ -67,6 +67,14 @@ def get_toolchain_include_paths_feature(import_config):
for path in import_config.include_paths
]),
),
+ check_args(
+ len,
+ flag_group,
+ flags = flatten([
+ ("-F", path)
+ for path in import_config.framework_paths
+ ]),
+ ),
]),
),
],
diff --git a/toolchains/cc/mac_clang/BUILD.bazel b/toolchains/cc/mac_clang/BUILD.bazel
index 4886e161..ea287fe0 100644
--- a/toolchains/cc/mac_clang/BUILD.bazel
+++ b/toolchains/cc/mac_clang/BUILD.bazel
@@ -11,6 +11,7 @@ package(default_visibility = ["//visibility:public"])
_imports = [
"@clang//:macos_all_libcxx",
+ "@macos_sdk//:frameworks",
]
cc_features(
diff --git a/toolchains/cc/mac_clang/sdk.BUILD b/toolchains/cc/mac_clang/sdk.BUILD
index b4b34d0d..c7da65c9 100644
--- a/toolchains/cc/mac_clang/sdk.BUILD
+++ b/toolchains/cc/mac_clang/sdk.BUILD
@@ -1,6 +1,10 @@
# Exports macOS SDK from Xcode or Command Line Tools directory.
-load("@//build/bazel/toolchains/cc:rules.bzl", "sysroot")
+load(
+ "@//build/bazel/toolchains/cc:rules.bzl",
+ "cc_toolchain_import",
+ "sysroot",
+)
package(default_visibility = ["@//build/bazel/toolchains/cc:__subpackages__"])
@@ -13,3 +17,11 @@ sysroot(
],
),
)
+
+cc_toolchain_import(
+ name = "frameworks",
+ framework_paths = [":System/Library/Frameworks"],
+ support_files = glob([
+ "System/Library/Frameworks/CoreFoundation.framework/**",
+ ]),
+) \ No newline at end of file
diff --git a/toolchains/cc/rules.bzl b/toolchains/cc/rules.bzl
index 072fda42..f66a2988 100644
--- a/toolchains/cc/rules.bzl
+++ b/toolchains/cc/rules.bzl
@@ -64,6 +64,7 @@ CcToolchainImportInfo = provider(
"include_paths": "Include directories for this library.",
"dynamic_mode_libraries": "Libraries to be linked in dynamic linking mode.",
"dynamic_runtimes": "Libraries used as the dynamic runtime library of cc_toolchain.",
+ "framework_paths": "Framework search directories to add.",
"static_mode_libraries": "Libraries to be linked in static linking mode.",
"static_runtimes": "Libraries used as the static runtime library of cc_toolchain.",
"so_linked_objects": "Directly linked objects to shared libraries.",
@@ -74,11 +75,16 @@ def _cc_toolchain_import_impl(ctx):
if ctx.files.hdrs and not ctx.files.include_paths:
fail(ctx.label, ": 'include_paths' is mandatory when 'hdrs' is not empty.")
include_paths = [p.path for p in ctx.files.include_paths]
+ framework_paths = [p.path for p in ctx.files.framework_paths]
dep_include_paths = [
dep[CcToolchainImportInfo].include_paths
for dep in ctx.attr.deps
]
+ dep_framework_paths = [
+ dep[CcToolchainImportInfo].framework_paths
+ for dep in ctx.attr.deps
+ ]
dep_shared_libs = [
dep[CcToolchainImportInfo].dynamic_mode_libraries
for dep in ctx.attr.deps
@@ -116,6 +122,11 @@ def _cc_toolchain_import_impl(ctx):
transitive = dep_include_paths,
order = "topological",
),
+ framework_paths = depset(
+ direct = framework_paths,
+ transitive = dep_framework_paths,
+ order = "topological",
+ ),
dynamic_mode_libraries = depset(
direct = dynamic_libs,
transitive = dep_shared_libs,
@@ -167,6 +178,11 @@ cc_toolchain_import = rule(
doc = "Include paths to search for headers. Mandatory if hdrs is set.",
allow_files = True,
),
+ "framework_paths": attr.label_list(
+ default = [],
+ doc = "Framework search paths to add.",
+ allow_files = True,
+ ),
"dynamic_mode_libs": attr.label_list(
default = [],
doc = "Libraries to be linked in dynamic linking mode." +