aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Yu <zachyu@google.com>2023-10-02 18:32:15 -0700
committerZach Yu <zachyu@google.com>2023-10-05 21:00:33 +0000
commit63553bdf1972f043ea0b9e0f77b07964d7b33611 (patch)
treef52150f63df29bbdef46dbb0b935941baa40bb4b
parent3b737936702e4e2b3a283571c58eef102057d565 (diff)
downloadbazel-63553bdf1972f043ea0b9e0f77b07964d7b33611.tar.gz
A minimal example is also added as a baseline test for the toolchain. Test: bazel build //build/bazel/toolchains/cc/objc_example:hello Change-Id: I2ae0597cbf4f2905f5c77856959240fe0e2018d2
-rw-r--r--tool.bazelrc2
-rw-r--r--toolchains/cc/actions.bzl8
-rw-r--r--toolchains/cc/clang.BUILD13
-rw-r--r--toolchains/cc/linux_clang/features.bzl57
-rw-r--r--toolchains/cc/mac_clang/BUILD.bazel4
-rw-r--r--toolchains/cc/mac_clang/features.bzl40
-rw-r--r--toolchains/cc/mac_clang/sdk.BUILD17
-rw-r--r--toolchains/cc/objc_example/BUILD9
-rw-r--r--toolchains/cc/objc_example/defs/defs.h3
-rw-r--r--toolchains/cc/objc_example/hello.m7
10 files changed, 108 insertions, 52 deletions
diff --git a/tool.bazelrc b/tool.bazelrc
index e250851b..9adfd453 100644
--- a/tool.bazelrc
+++ b/tool.bazelrc
@@ -11,7 +11,7 @@ build:linux --force_pic
build:macos --host_platform='//build/bazel/platforms:host_clang'
build:macos --features='generate_debug_symbols'
-build:linux --force_pic
+build:macos --force_pic
build:windows --host_platform='//build/bazel/platforms:host_clang-cl'
build:windows --features='-supports_start_end_lib'
diff --git a/toolchains/cc/actions.bzl b/toolchains/cc/actions.bzl
index b962a544..7e56dd01 100644
--- a/toolchains/cc/actions.bzl
+++ b/toolchains/cc/actions.bzl
@@ -1,15 +1,16 @@
"""Cc toolchain actions and configs."""
+load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load(
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
"action_config",
"tool",
"with_feature_set",
)
-load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
C_COMPILE_ACTIONS = [
ACTION_NAMES.c_compile,
+ ACTION_NAMES.objc_compile,
]
# C++ actions that directly reads the source
@@ -17,12 +18,14 @@ CPP_SOURCE_ACTIONS = [
ACTION_NAMES.cpp_compile,
ACTION_NAMES.cpp_header_parsing,
ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.objcpp_compile,
]
# C++ actions that generate machine code
CPP_CODEGEN_ACTIONS = [
ACTION_NAMES.cpp_compile,
ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.objcpp_compile,
]
CPP_COMPILE_ACTIONS = CPP_SOURCE_ACTIONS + [
@@ -40,10 +43,13 @@ LINK_ACTIONS = [
ACTION_NAMES.cpp_link_executable,
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+ ACTION_NAMES.objc_executable,
+ ACTION_NAMES.objc_fully_link,
]
ARCHIVER_ACTIONS = [
ACTION_NAMES.cpp_link_static_library,
+ ACTION_NAMES.objc_archive,
]
def create_action_configs(tool_configs):
diff --git a/toolchains/cc/clang.BUILD b/toolchains/cc/clang.BUILD
index e64dc84e..a1cfeb5c 100644
--- a/toolchains/cc/clang.BUILD
+++ b/toolchains/cc/clang.BUILD
@@ -1,15 +1,16 @@
load(
- "@//build/bazel/toolchains/cc:rules.bzl",
- "cc_tool",
- "cc_toolchain_import",
-)
-load(
"@//build/bazel/toolchains/cc:actions.bzl",
+ "ARCHIVER_ACTIONS",
"ASSEMBLE_ACTIONS",
"CPP_COMPILE_ACTIONS",
"C_COMPILE_ACTIONS",
"LINK_ACTIONS",
)
+load(
+ "@//build/bazel/toolchains/cc:rules.bzl",
+ "cc_tool",
+ "cc_toolchain_import",
+)
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load("@toolchain_defs//:defs.bzl", "TOOL_VERSIONS")
@@ -134,7 +135,7 @@ cc_tool(
cc_tool(
name = "macos_all_archiver",
- applied_actions = [ACTION_NAMES.cpp_link_static_library],
+ applied_actions = ARCHIVER_ACTIONS,
tool = target_macos_all + "/bin/llvm-ar",
)
diff --git a/toolchains/cc/linux_clang/features.bzl b/toolchains/cc/linux_clang/features.bzl
index 331176e5..4f51e9f5 100644
--- a/toolchains/cc/linux_clang/features.bzl
+++ b/toolchains/cc/linux_clang/features.bzl
@@ -1,21 +1,6 @@
"""Cc toolchain features that works with clang."""
load(
- "@//build/bazel/toolchains/cc:utils.bzl",
- "check_args",
- "filter_none",
- "flatten",
-)
-load(
- "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
- "feature",
- "flag_group",
- "flag_set",
- "variable_with_value",
- "with_feature_set",
-)
-load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
-load(
"@//build/bazel/toolchains/cc:actions.bzl",
"ARCHIVER_ACTIONS",
"ASSEMBLE_ACTIONS",
@@ -26,11 +11,6 @@ load(
"LINK_ACTIONS",
)
load(
- "@//build/bazel/toolchains/cc:rules.bzl",
- "CcFeatureConfigInfo",
- "CcToolchainImportInfo",
-)
-load(
"@//build/bazel/toolchains/cc:features_common.bzl",
"OBJECT_EXTENSIONS_UNIX",
"dynamic_linking_mode_feature",
@@ -48,6 +28,26 @@ load(
"user_compile_flags_feature",
"user_link_flags_feature",
)
+load(
+ "@//build/bazel/toolchains/cc:rules.bzl",
+ "CcFeatureConfigInfo",
+ "CcToolchainImportInfo",
+)
+load(
+ "@//build/bazel/toolchains/cc:utils.bzl",
+ "check_args",
+ "filter_none",
+ "flatten",
+)
+load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
+load(
+ "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
+ "feature",
+ "flag_group",
+ "flag_set",
+ "variable_with_value",
+ "with_feature_set",
+)
def get_toolchain_include_paths_feature(import_config):
return feature(
@@ -105,7 +105,10 @@ def get_toolchain_libraries_to_link_feature(import_config):
enabled = True,
flag_sets = [
flag_set(
- actions = [ACTION_NAMES.cpp_link_executable],
+ actions = [
+ ACTION_NAMES.cpp_link_executable,
+ ACTION_NAMES.objc_executable,
+ ],
flag_groups = filter_none([
check_args(
len,
@@ -123,7 +126,10 @@ def get_toolchain_libraries_to_link_feature(import_config):
],
),
flag_set(
- actions = [ACTION_NAMES.cpp_link_executable],
+ actions = [
+ ACTION_NAMES.cpp_link_executable,
+ ACTION_NAMES.objc_executable,
+ ],
flag_groups = filter_none([
check_args(
len,
@@ -144,6 +150,7 @@ def get_toolchain_libraries_to_link_feature(import_config):
actions = [
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+ ACTION_NAMES.objc_fully_link,
],
flag_groups = filter_none([
check_args(
@@ -320,6 +327,7 @@ shared_flag_feature = feature(
actions = [
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+ ACTION_NAMES.objc_fully_link,
],
flag_groups = [
flag_group(
@@ -544,7 +552,10 @@ force_pic_feature = feature(
enabled = True,
flag_sets = [
flag_set(
- actions = [ACTION_NAMES.cpp_link_executable],
+ actions = [
+ ACTION_NAMES.cpp_link_executable,
+ ACTION_NAMES.objc_executable,
+ ],
flag_groups = [
flag_group(
expand_if_available = "force_pic",
diff --git a/toolchains/cc/mac_clang/BUILD.bazel b/toolchains/cc/mac_clang/BUILD.bazel
index e96947d5..57d05be2 100644
--- a/toolchains/cc/mac_clang/BUILD.bazel
+++ b/toolchains/cc/mac_clang/BUILD.bazel
@@ -1,4 +1,3 @@
-load(":features.bzl", "cc_features")
load(
"@//build/bazel/toolchains/cc:rules.bzl",
"cc_artifact_name",
@@ -6,6 +5,7 @@ load(
"cc_toolchain_dynamic_runtime",
"cc_toolchain_static_runtime",
)
+load(":features.bzl", "cc_features")
package(default_visibility = ["//visibility:public"])
@@ -27,6 +27,7 @@ cc_features(
link_flags = [
"--target=x86_64-apple-darwin-macho",
"-undefined dynamic_lookup",
+ "-fobjc-link-runtime",
"-fuse-ld=lld",
],
toolchain_imports = _imports,
@@ -108,6 +109,7 @@ cc_features(
link_flags = [
"--target=arm64e-apple-darwin-macho",
"-undefined dynamic_lookup",
+ "-fobjc-link-runtime",
"-fuse-ld=lld",
],
toolchain_imports = _imports,
diff --git a/toolchains/cc/mac_clang/features.bzl b/toolchains/cc/mac_clang/features.bzl
index c45228f1..8e195036 100644
--- a/toolchains/cc/mac_clang/features.bzl
+++ b/toolchains/cc/mac_clang/features.bzl
@@ -1,29 +1,12 @@
"""Cc toolchain features that works with clang."""
load(
- "@//build/bazel/toolchains/cc:utils.bzl",
- "flatten",
-)
-load(
- "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
- "feature",
- "flag_group",
- "flag_set",
- "variable_with_value",
-)
-load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
-load(
"@//build/bazel/toolchains/cc:actions.bzl",
"CPP_COMPILE_ACTIONS",
"C_COMPILE_ACTIONS",
"LINK_ACTIONS",
)
load(
- "@//build/bazel/toolchains/cc:rules.bzl",
- "CcFeatureConfigInfo",
- "CcToolchainImportInfo",
-)
-load(
"@//build/bazel/toolchains/cc:features_common.bzl",
"OBJECT_EXTENSIONS_UNIX",
"dynamic_linking_mode_feature",
@@ -42,6 +25,15 @@ load(
"user_link_flags_feature",
)
load(
+ "@//build/bazel/toolchains/cc:rules.bzl",
+ "CcFeatureConfigInfo",
+ "CcToolchainImportInfo",
+)
+load(
+ "@//build/bazel/toolchains/cc:utils.bzl",
+ "flatten",
+)
+load(
"@//build/bazel/toolchains/cc/linux_clang:features.bzl",
"archiver_flags_feature",
"compiler_input_feature",
@@ -64,6 +56,14 @@ load(
"strip_debug_symbols_feature",
"sysroot_feature",
)
+load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
+load(
+ "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
+ "feature",
+ "flag_group",
+ "flag_set",
+ "variable_with_value",
+)
# https://cs.opensource.google/bazel/bazel/+/master:src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java;drc=feea781b30788997c0b97ad9103a13fdc3f627c8;l=537
rpath_feature = feature(
@@ -98,6 +98,7 @@ set_install_name_feature = feature(
actions = [
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
+ ACTION_NAMES.objc_executable,
],
flag_groups = [
flag_group(
@@ -238,7 +239,10 @@ force_pic_feature = feature(
enabled = True,
flag_sets = [
flag_set(
- actions = [ACTION_NAMES.cpp_link_executable],
+ actions = [
+ ACTION_NAMES.cpp_link_executable,
+ ACTION_NAMES.objc_executable,
+ ],
flag_groups = [
flag_group(
expand_if_available = "force_pic",
diff --git a/toolchains/cc/mac_clang/sdk.BUILD b/toolchains/cc/mac_clang/sdk.BUILD
index c7da65c9..8965e625 100644
--- a/toolchains/cc/mac_clang/sdk.BUILD
+++ b/toolchains/cc/mac_clang/sdk.BUILD
@@ -18,10 +18,23 @@ sysroot(
),
)
+# keep sorted
+ALL_FRAMEWORKS = [
+ "CFNetwork",
+ "CoreFoundation",
+ "CoreGraphics",
+ "CoreServices",
+ "DiskArbitration",
+ "Foundation",
+ "IOKit",
+ "Security",
+]
+
cc_toolchain_import(
name = "frameworks",
framework_paths = [":System/Library/Frameworks"],
support_files = glob([
- "System/Library/Frameworks/CoreFoundation.framework/**",
+ "System/Library/Frameworks/{}.framework/**".format(f)
+ for f in ALL_FRAMEWORKS
]),
-) \ No newline at end of file
+)
diff --git a/toolchains/cc/objc_example/BUILD b/toolchains/cc/objc_example/BUILD
new file mode 100644
index 00000000..27de3587
--- /dev/null
+++ b/toolchains/cc/objc_example/BUILD
@@ -0,0 +1,9 @@
+objc_library(
+ name = "hello",
+ srcs = [
+ "defs/defs.h",
+ "hello.m",
+ ],
+ copts = ["-iquote $(execpath defs)"],
+ data = ["defs"],
+)
diff --git a/toolchains/cc/objc_example/defs/defs.h b/toolchains/cc/objc_example/defs/defs.h
new file mode 100644
index 00000000..0cf51316
--- /dev/null
+++ b/toolchains/cc/objc_example/defs/defs.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define HELLO @"Hello objc!"
diff --git a/toolchains/cc/objc_example/hello.m b/toolchains/cc/objc_example/hello.m
new file mode 100644
index 00000000..b9f5a418
--- /dev/null
+++ b/toolchains/cc/objc_example/hello.m
@@ -0,0 +1,7 @@
+#import <Foundation/Foundation.h>
+#import "defs.h"
+
+int main() {
+ NSLog(HELLO);
+ return 0;
+}