diff options
author | Zach Yu <zachyu@google.com> | 2023-05-08 22:55:24 -0700 |
---|---|---|
committer | Zach Yu <zachyu@google.com> | 2023-05-11 14:45:23 -0700 |
commit | 1831fbf8d454aa37c6754f6b632525540569d1b1 (patch) | |
tree | 22f982c7195a0ebc57feef6dce09e352cc76c608 | |
parent | 6dd9624983df7fd16cade3a214c2cffbb33b4b95 (diff) | |
download | bazel-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.bzl | 5 | ||||
-rw-r--r-- | toolchains/cc/linux_clang/features.bzl | 8 | ||||
-rw-r--r-- | toolchains/cc/mac_clang/BUILD.bazel | 1 | ||||
-rw-r--r-- | toolchains/cc/mac_clang/sdk.BUILD | 14 | ||||
-rw-r--r-- | toolchains/cc/rules.bzl | 16 |
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." + |