| # Copyright 2019 The Bazel Authors. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| """A C++ toolchain configuration rule for macOS.""" |
| |
| load("@bazel_features//:features.bzl", "bazel_features") |
| load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES") |
| load( |
| "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", |
| "action_config", |
| "artifact_name_pattern", |
| "env_entry", |
| "env_set", |
| "feature", |
| "feature_set", |
| "flag_group", |
| "flag_set", |
| "make_variable", |
| "tool", |
| "tool_path", |
| "variable_with_value", |
| "with_feature_set", |
| ) |
| load("@build_bazel_apple_support//lib:apple_support.bzl", "apple_support") |
| |
| # TODO: Remove when we drop bazel 6.x support |
| _OBJC_ARCHIVE_ACTION_NAME = "objc-archive" |
| _OBJCPP_EXECUTABLE_ACTION_NAME = "objc++-executable" |
| |
| _DYNAMIC_LINK_ACTIONS = [ |
| ACTION_NAMES.cpp_link_dynamic_library, |
| ACTION_NAMES.cpp_link_executable, |
| ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| ACTION_NAMES.objc_executable, |
| _OBJCPP_EXECUTABLE_ACTION_NAME, |
| ] |
| |
| def _sdk_version_for_platform(xcode_config, platform_type): |
| if platform_type == apple_common.platform_type.ios: |
| return xcode_config.sdk_version_for_platform(apple_common.platform.ios_device) |
| elif platform_type == apple_common.platform_type.tvos: |
| return xcode_config.sdk_version_for_platform(apple_common.platform.tvos_device) |
| elif platform_type == getattr(apple_common.platform_type, "visionos", None): |
| return xcode_config.sdk_version_for_platform(apple_common.platform.visionos_device) |
| elif platform_type == apple_common.platform_type.watchos: |
| return xcode_config.sdk_version_for_platform(apple_common.platform.watchos_device) |
| elif platform_type == apple_common.platform_type.macos: |
| return xcode_config.sdk_version_for_platform(apple_common.platform.macos) |
| else: |
| fail("Unhandled platform type: {}".format(platform_type)) |
| |
| def _sdk_name(platform_type, is_simulator): |
| if platform_type == apple_common.platform_type.ios and is_simulator: |
| return "iPhoneSimulator" |
| elif platform_type == apple_common.platform_type.ios: |
| return "iPhoneOS" |
| elif platform_type == getattr(apple_common.platform_type, "visionos", None) and is_simulator: |
| return "XRSimulator" |
| elif platform_type == getattr(apple_common.platform_type, "visionos", None): |
| return "XROS" |
| elif platform_type == apple_common.platform_type.watchos and is_simulator: |
| return "WatchSimulator" |
| elif platform_type == apple_common.platform_type.watchos: |
| return "WatchOS" |
| elif platform_type == apple_common.platform_type.tvos and is_simulator: |
| return "AppleTVSimulator" |
| elif platform_type == apple_common.platform_type.tvos: |
| return "AppleTVOS" |
| elif platform_type == apple_common.platform_type.macos: |
| return "MacOSX" |
| else: |
| fail("Unhandled platform type: {}".format(platform_type)) |
| |
| def _impl(ctx): |
| if ctx.attr.cpu.startswith("darwin"): |
| platform_type = apple_common.platform_type.macos |
| elif ctx.attr.cpu.startswith("ios"): |
| platform_type = apple_common.platform_type.ios |
| elif ctx.attr.cpu.startswith("tvos"): |
| platform_type = apple_common.platform_type.tvos |
| elif ctx.attr.cpu.startswith("watchos"): |
| platform_type = apple_common.platform_type.watchos |
| elif ctx.attr.cpu.startswith("visionos"): |
| # TODO: Remove when we drop bazel 5.x support, falling back to iOS |
| # doesn't hurt since you can't build for visionOS in this case anyways |
| platform_type = getattr(apple_common.platform_type, "visionos", None) or apple_common.platform_type.ios |
| else: |
| fail("""\ |
| Unknown CPU: {cpu}. Please update 'apple_support' to the latest version. If \ |
| you are sure you are on the latest version, try 'bazel shutdown' to work \ |
| around a Bazel staleness bug. Finally, if you still encounter this error, \ |
| please file an issue at https://github.com/bazelbuild/apple_support/issues/new |
| """.format(cpu = ctx.attr.cpu)) |
| |
| xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig] |
| xcode_execution_requirements = xcode_config.execution_info().keys() |
| target_os_version = xcode_config.minimum_os_for_platform_type(platform_type) |
| sdk_version = _sdk_version_for_platform(xcode_config, platform_type) |
| |
| is_simulator = False |
| if (ctx.attr.cpu == "ios_arm64"): |
| target_system_name = "arm64-apple-ios{}".format(target_os_version) |
| elif (ctx.attr.cpu == "tvos_arm64"): |
| target_system_name = "arm64-apple-tvos{}".format(target_os_version) |
| elif (ctx.attr.cpu == "visionos_arm64"): |
| target_system_name = "arm64-apple-xros{}".format(target_os_version) |
| elif (ctx.attr.cpu == "watchos_arm64_32"): |
| target_system_name = "arm64_32-apple-watchos{}".format(target_os_version) |
| elif (ctx.attr.cpu == "ios_arm64e"): |
| target_system_name = "arm64e-apple-ios{}".format(target_os_version) |
| elif (ctx.attr.cpu == "watchos_armv7k"): |
| target_system_name = "armv7k-apple-watchos{}".format(target_os_version) |
| elif (ctx.attr.cpu == "ios_x86_64"): |
| target_system_name = "x86_64-apple-ios{}-simulator".format(target_os_version) |
| is_simulator = True |
| elif (ctx.attr.cpu == "ios_sim_arm64"): |
| target_system_name = "arm64-apple-ios{}-simulator".format(target_os_version) |
| is_simulator = True |
| elif (ctx.attr.cpu == "tvos_sim_arm64"): |
| target_system_name = "arm64-apple-tvos{}-simulator".format(target_os_version) |
| is_simulator = True |
| elif (ctx.attr.cpu == "visionos_sim_arm64"): |
| target_system_name = "arm64-apple-xros{}-simulator".format(target_os_version) |
| is_simulator = True |
| elif (ctx.attr.cpu == "watchos_arm64"): |
| target_system_name = "arm64-apple-watchos{}-simulator".format(target_os_version) |
| is_simulator = True |
| elif (ctx.attr.cpu == "watchos_device_arm64"): |
| target_system_name = "arm64-apple-watchos{}".format(target_os_version) |
| elif (ctx.attr.cpu == "watchos_device_arm64e"): |
| target_system_name = "arm64e-apple-watchos{}".format(target_os_version) |
| elif (ctx.attr.cpu == "darwin_x86_64"): |
| target_system_name = "x86_64-apple-macosx{}".format(target_os_version) |
| elif (ctx.attr.cpu == "darwin_arm64"): |
| target_system_name = "arm64-apple-macosx{}".format(target_os_version) |
| elif (ctx.attr.cpu == "darwin_arm64e"): |
| target_system_name = "arm64e-apple-macosx{}".format(target_os_version) |
| elif (ctx.attr.cpu == "tvos_x86_64"): |
| target_system_name = "x86_64-apple-tvos{}-simulator".format(target_os_version) |
| is_simulator = True |
| elif (ctx.attr.cpu == "watchos_x86_64"): |
| target_system_name = "x86_64-apple-watchos{}-simulator".format(target_os_version) |
| is_simulator = True |
| else: |
| fail("""\ |
| Unknown CPU: {cpu}. Please update 'apple_support' to the latest version. If \ |
| you are sure you are on the latest version, try 'bazel shutdown' to work \ |
| around a Bazel staleness bug. Finally, if you still encounter this error, \ |
| please file an issue at https://github.com/bazelbuild/apple_support/issues/new |
| """.format(cpu = ctx.attr.cpu)) |
| |
| if ctx.attr.cpu.startswith("darwin_"): |
| target_libc = "macosx" |
| else: |
| target_libc = ctx.attr.cpu.split("_")[0] |
| |
| if ctx.attr.cpu == "darwin_x86_64": |
| abi_libc_version = "darwin_x86_64" |
| abi_version = "darwin_x86_64" |
| else: |
| abi_libc_version = "local" |
| abi_version = "local" |
| |
| arch = ctx.attr.cpu.split("_", 1)[-1] |
| if ctx.attr.cpu in ["ios_sim_arm64", "tvos_sim_arm64", "visionos_sim_arm64", "watchos_arm64", "watchos_device_arm64"]: |
| arch = "arm64" |
| elif ctx.attr.cpu in ["watchos_device_arm64e"]: |
| arch = "arm64e" |
| |
| all_link_actions = [ |
| ACTION_NAMES.cpp_link_executable, |
| ACTION_NAMES.cpp_link_dynamic_library, |
| ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| ] |
| |
| strip_action = action_config( |
| action_name = ACTION_NAMES.strip, |
| flag_sets = [ |
| flag_set( |
| flag_groups = [ |
| flag_group(flags = ["-S", "-o", "%{output_file}"]), |
| flag_group( |
| flags = ["%{stripopts}"], |
| iterate_over = "stripopts", |
| ), |
| flag_group(flags = ["%{input_file}"]), |
| ], |
| ), |
| ], |
| tools = [tool(path = "/usr/bin/strip")], |
| ) |
| |
| cpp_header_parsing_action = action_config( |
| action_name = ACTION_NAMES.cpp_header_parsing, |
| implies = [ |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "unfiltered_cxx_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| objc_compile_action = action_config( |
| action_name = ACTION_NAMES.objc_compile, |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| flag_groups = [flag_group(flags = ["-target", target_system_name])], |
| ), |
| ], |
| implies = [ |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "objc_actions", |
| "apply_default_compiler_flags", |
| "apply_default_warnings", |
| "framework_paths", |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "apply_simulator_compiler_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| objc_link_flag_feature = feature( |
| name = "objc_link_flag", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.objc_executable, _OBJCPP_EXECUTABLE_ACTION_NAME], |
| flag_groups = [flag_group(flags = ["-ObjC"])], |
| with_features = [with_feature_set(not_features = ["kernel_extension"])], |
| ), |
| ], |
| ) |
| |
| objcpp_executable_action = action_config( |
| action_name = _OBJCPP_EXECUTABLE_ACTION_NAME, |
| flag_sets = [ |
| flag_set( |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Xlinker", |
| "-objc_abi_version", |
| "-Xlinker", |
| "2", |
| ], |
| ), |
| ], |
| with_features = [with_feature_set(not_features = ["kernel_extension"])], |
| ), |
| flag_set( |
| flag_groups = [ |
| flag_group(flags = ["-target", target_system_name]), |
| flag_group( |
| flags = ["-l%{library_names}"], |
| iterate_over = "library_names", |
| ), |
| flag_group(flags = ["-filelist", "%{filelist}"]), |
| flag_group(flags = ["-o", "%{linked_binary}"]), |
| flag_group( |
| flags = ["-force_load", "%{force_load_exec_paths}"], |
| iterate_over = "force_load_exec_paths", |
| ), |
| flag_group( |
| flags = ["%{dep_linkopts}"], |
| iterate_over = "dep_linkopts", |
| ), |
| flag_group( |
| flags = ["-Wl,%{attr_linkopts}"], |
| iterate_over = "attr_linkopts", |
| ), |
| ], |
| ), |
| ], |
| implies = [ |
| "include_system_dirs", |
| "framework_paths", |
| "strip_debug_symbols", |
| "apple_env", |
| "apply_implicit_frameworks", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| cpp_link_dynamic_library_action = action_config( |
| action_name = ACTION_NAMES.cpp_link_dynamic_library, |
| implies = [ |
| "has_configured_linker_path", |
| "shared_flag", |
| "linkstamps", |
| "output_execpath_flags", |
| "runtime_root_flags", |
| "input_param_flags", |
| "strip_debug_symbols", |
| "linker_param_file", |
| "apple_env", |
| "sysroot", |
| "apply_implicit_frameworks", |
| ], |
| tools = [ |
| tool( |
| path = "cc_wrapper.sh", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| cpp_link_static_library_action = action_config( |
| action_name = ACTION_NAMES.cpp_link_static_library, |
| implies = [ |
| "runtime_root_flags", |
| "archiver_flags", |
| "input_param_flags", |
| "linker_param_file", |
| "apple_env", |
| ], |
| tools = [ |
| tool( |
| path = "libtool", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| c_compile_action = action_config( |
| action_name = ACTION_NAMES.c_compile, |
| implies = [ |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "unfiltered_cxx_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| cpp_compile_action = action_config( |
| action_name = ACTION_NAMES.cpp_compile, |
| implies = [ |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "unfiltered_cxx_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang_pp", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| objcpp_compile_action = action_config( |
| action_name = ACTION_NAMES.objcpp_compile, |
| flag_sets = [ |
| flag_set( |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-target", |
| target_system_name, |
| "-stdlib=libc++", |
| "-std=gnu++14", |
| ], |
| ), |
| ], |
| ), |
| ], |
| implies = [ |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "apply_default_compiler_flags", |
| "apply_default_warnings", |
| "framework_paths", |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "apply_simulator_compiler_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang_pp", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| assemble_action = action_config( |
| action_name = ACTION_NAMES.assemble, |
| implies = [ |
| "objc_arc", |
| "no_objc_arc", |
| "include_system_dirs", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "unfiltered_cxx_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| preprocess_assemble_action = action_config( |
| action_name = ACTION_NAMES.preprocess_assemble, |
| implies = [ |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "unfiltered_cxx_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| objc_archive_action = action_config( |
| action_name = _OBJC_ARCHIVE_ACTION_NAME, |
| flag_sets = [ |
| flag_set( |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-D", |
| "-no_warning_for_no_symbols", |
| "-static", |
| "-filelist", |
| "%{obj_list_path}", |
| "-arch_only", |
| arch, |
| "-syslibroot", |
| "__BAZEL_XCODE_SDKROOT__", |
| "-o", |
| "%{output_execpath}", |
| ], |
| ), |
| ], |
| ), |
| ], |
| implies = ["apple_env"], |
| tools = [ |
| tool( |
| path = "libtool", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| objc_executable_action = action_config( |
| action_name = "objc-executable", |
| flag_sets = [ |
| flag_set( |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Xlinker", |
| "-objc_abi_version", |
| "-Xlinker", |
| "2", |
| ], |
| ), |
| ], |
| with_features = [with_feature_set(not_features = ["kernel_extension"])], |
| ), |
| flag_set( |
| flag_groups = [ |
| flag_group(flags = ["-target", target_system_name]), |
| flag_group( |
| flags = ["-l%{library_names}"], |
| iterate_over = "library_names", |
| ), |
| flag_group(flags = ["-filelist", "%{filelist}"]), |
| flag_group(flags = ["-o", "%{linked_binary}"]), |
| flag_group( |
| flags = ["-force_load", "%{force_load_exec_paths}"], |
| iterate_over = "force_load_exec_paths", |
| ), |
| flag_group( |
| flags = ["%{dep_linkopts}"], |
| iterate_over = "dep_linkopts", |
| ), |
| flag_group( |
| flags = ["-Wl,%{attr_linkopts}"], |
| iterate_over = "attr_linkopts", |
| ), |
| ], |
| ), |
| ], |
| implies = [ |
| "include_system_dirs", |
| "framework_paths", |
| "strip_debug_symbols", |
| "apple_env", |
| "apply_implicit_frameworks", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| cpp_link_executable_action = action_config( |
| action_name = ACTION_NAMES.cpp_link_executable, |
| implies = [ |
| "linkstamps", |
| "output_execpath_flags", |
| "runtime_root_flags", |
| "input_param_flags", |
| "force_pic_flags", |
| "strip_debug_symbols", |
| "linker_param_file", |
| "apple_env", |
| "sysroot", |
| "apply_implicit_frameworks", |
| ], |
| tools = [ |
| tool( |
| path = "cc_wrapper.sh", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| linkstamp_compile_action = action_config( |
| action_name = ACTION_NAMES.linkstamp_compile, |
| implies = [ |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "compiler_input_flags", |
| "compiler_output_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| cpp_module_compile_action = action_config( |
| action_name = ACTION_NAMES.cpp_module_compile, |
| implies = [ |
| "preprocessor_defines", |
| "include_system_dirs", |
| "objc_arc", |
| "no_objc_arc", |
| "apple_env", |
| "user_compile_flags", |
| "sysroot", |
| "unfiltered_compile_flags", |
| "compiler_input_flags", |
| "compiler_output_flags", |
| "unfiltered_cxx_flags", |
| ], |
| tools = [ |
| tool( |
| path = "wrapped_clang", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| cpp_link_nodeps_dynamic_library_action = action_config( |
| action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| implies = [ |
| "has_configured_linker_path", |
| "shared_flag", |
| "linkstamps", |
| "output_execpath_flags", |
| "runtime_root_flags", |
| "input_param_flags", |
| "strip_debug_symbols", |
| "linker_param_file", |
| "apple_env", |
| "sysroot", |
| "apply_implicit_frameworks", |
| ], |
| tools = [ |
| tool( |
| path = "cc_wrapper.sh", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| objc_fully_link_action = action_config( |
| action_name = "objc-fully-link", |
| flag_sets = [ |
| flag_set( |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-D", |
| "-no_warning_for_no_symbols", |
| "-static", |
| "-arch_only", |
| arch, |
| "-syslibroot", |
| "__BAZEL_XCODE_SDKROOT__", |
| "-o", |
| "%{fully_linked_archive_path}", |
| ], |
| ), |
| flag_group( |
| flags = ["%{objc_library_exec_paths}"], |
| iterate_over = "objc_library_exec_paths", |
| ), |
| flag_group( |
| flags = ["%{cc_library_exec_paths}"], |
| iterate_over = "cc_library_exec_paths", |
| ), |
| flag_group( |
| flags = ["%{imported_library_exec_paths}"], |
| iterate_over = "imported_library_exec_paths", |
| ), |
| ], |
| ), |
| ], |
| implies = ["apple_env"], |
| tools = [ |
| tool( |
| path = "libtool", |
| execution_requirements = xcode_execution_requirements, |
| ), |
| ], |
| ) |
| |
| objcopy_embed_data_action = action_config( |
| action_name = "objcopy_embed_data", |
| enabled = True, |
| tools = [tool(path = "/usr/bin/objcopy")], |
| ) |
| |
| action_configs = [ |
| strip_action, |
| c_compile_action, |
| cpp_compile_action, |
| linkstamp_compile_action, |
| cpp_module_compile_action, |
| cpp_header_parsing_action, |
| objc_compile_action, |
| objcpp_compile_action, |
| assemble_action, |
| preprocess_assemble_action, |
| objc_archive_action, |
| objc_executable_action, |
| objcpp_executable_action, |
| cpp_link_executable_action, |
| cpp_link_dynamic_library_action, |
| cpp_link_nodeps_dynamic_library_action, |
| cpp_link_static_library_action, |
| objc_fully_link_action, |
| objcopy_embed_data_action, |
| ] |
| |
| if (ctx.attr.cpu == "ios_arm64" or |
| ctx.attr.cpu == "ios_arm64e" or |
| ctx.attr.cpu == "ios_sim_arm64" or |
| ctx.attr.cpu == "ios_x86_64" or |
| ctx.attr.cpu == "watchos_arm64_32" or |
| ctx.attr.cpu == "watchos_device_arm64" or |
| ctx.attr.cpu == "watchos_device_arm64e" or |
| ctx.attr.cpu == "watchos_armv7k" or |
| ctx.attr.cpu == "watchos_x86_64" or |
| ctx.attr.cpu == "watchos_arm64"): |
| apply_default_compiler_flags_feature = feature( |
| name = "apply_default_compiler_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.objc_compile, ACTION_NAMES.objcpp_compile], |
| flag_groups = [flag_group(flags = ["-DOS_IOS", "-fno-autolink"])], |
| ), |
| ], |
| ) |
| elif (ctx.attr.cpu == "darwin_x86_64" or |
| ctx.attr.cpu == "darwin_arm64" or |
| ctx.attr.cpu == "darwin_arm64e"): |
| apply_default_compiler_flags_feature = feature( |
| name = "apply_default_compiler_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.objc_compile, ACTION_NAMES.objcpp_compile], |
| flag_groups = [flag_group(flags = ["-DOS_MACOSX", "-fno-autolink"])], |
| ), |
| ], |
| ) |
| elif (ctx.attr.cpu == "tvos_arm64" or |
| ctx.attr.cpu == "tvos_x86_64" or |
| ctx.attr.cpu == "tvos_sim_arm64"): |
| apply_default_compiler_flags_feature = feature( |
| name = "apply_default_compiler_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.objc_compile, ACTION_NAMES.objcpp_compile], |
| flag_groups = [flag_group(flags = ["-DOS_TVOS", "-fno-autolink"])], |
| ), |
| ], |
| ) |
| elif ( |
| ctx.attr.cpu == "visionos_arm64" or |
| ctx.attr.cpu == "visionos_sim_arm64" |
| ): |
| apply_default_compiler_flags_feature = feature( |
| name = "apply_default_compiler_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.objc_compile, ACTION_NAMES.objcpp_compile], |
| flag_groups = [flag_group(flags = ["-fno-autolink"])], |
| ), |
| ], |
| ) |
| else: |
| fail("""\ |
| Unknown CPU: {cpu}. Please update 'apple_support' to the latest version. If \ |
| you are sure you are on the latest version, try 'bazel shutdown' to work \ |
| around a Bazel staleness bug. Finally, if you still encounter this error, \ |
| please file an issue at https://github.com/bazelbuild/apple_support/issues/new |
| """.format(cpu = ctx.attr.cpu)) |
| |
| runtime_root_flags_feature = feature( |
| name = "runtime_root_flags", |
| flag_sets = [ |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Xlinker", |
| "-rpath", |
| "-Xlinker", |
| "@loader_path/%{runtime_library_search_directories}", |
| ], |
| iterate_over = "runtime_library_search_directories", |
| expand_if_available = "runtime_library_search_directories", |
| ), |
| ], |
| ), |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = ["%{runtime_root_flags}"], |
| iterate_over = "runtime_root_flags", |
| expand_if_available = "runtime_root_flags", |
| ), |
| ], |
| ), |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = ["%{runtime_root_entries}"], |
| iterate_over = "runtime_root_entries", |
| expand_if_available = "runtime_root_entries", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| objc_arc_feature = feature( |
| name = "objc_arc", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-fobjc-arc"], |
| expand_if_available = "objc_arc", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| unfiltered_cxx_flags_feature = feature( |
| name = "unfiltered_cxx_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ], |
| flag_groups = [ |
| flag_group(flags = ["-no-canonical-prefixes", "-pthread"]), |
| ], |
| ), |
| ], |
| ) |
| |
| compiler_input_flags_feature = feature( |
| name = "compiler_input_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-c", "%{source_file}"], |
| expand_if_available = "source_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| external_include_paths_feature = feature( |
| name = "external_include_paths", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.clif_match, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-isystem", "%{external_include_paths}"], |
| iterate_over = "external_include_paths", |
| expand_if_available = "external_include_paths", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| strip_debug_symbols_feature = feature( |
| name = "strip_debug_symbols", |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group( |
| flags = ["-Wl,-S"], |
| expand_if_available = "strip_debug_symbols", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| shared_flag_feature = feature( |
| name = "shared_flag", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.cpp_link_dynamic_library, |
| ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| ], |
| flag_groups = [flag_group(flags = ["-shared"])], |
| ), |
| ], |
| ) |
| |
| if is_simulator: |
| apply_simulator_compiler_flags_feature = feature( |
| name = "apply_simulator_compiler_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.objc_compile, ACTION_NAMES.objcpp_compile], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-fexceptions", |
| "-fasm-blocks", |
| "-fobjc-abi-version=2", |
| "-fobjc-legacy-dispatch", |
| ], |
| ), |
| ], |
| ), |
| ], |
| ) |
| else: |
| apply_simulator_compiler_flags_feature = feature(name = "apply_simulator_compiler_flags") |
| |
| user_link_flags_feature = feature( |
| name = "user_link_flags", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group( |
| flags = ["%{user_link_flags}"], |
| iterate_over = "user_link_flags", |
| expand_if_available = "user_link_flags", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| includes_feature = feature( |
| name = "includes", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ACTION_NAMES.clif_match, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-include", "%{includes}"], |
| iterate_over = "includes", |
| expand_if_available = "includes", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| gcc_coverage_map_format_feature = feature( |
| name = "gcc_coverage_map_format", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-fprofile-arcs", "-ftest-coverage", "-g"], |
| ), |
| ], |
| ), |
| flag_set( |
| actions = [ |
| ACTION_NAMES.cpp_link_dynamic_library, |
| ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| ACTION_NAMES.cpp_link_executable, |
| ], |
| flag_groups = [flag_group(flags = ["--coverage"])], |
| ), |
| ], |
| requires = [feature_set(features = ["coverage"])], |
| ) |
| |
| gcc_quoting_for_param_files_feature = feature( |
| name = "gcc_quoting_for_param_files", |
| enabled = bazel_features.cc.fixed_dsym_path_quoting, |
| ) |
| |
| default_link_flags_feature = feature( |
| name = "default_link_flags", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-no-canonical-prefixes", |
| "-target", |
| target_system_name, |
| "-fobjc-link-runtime", |
| ], |
| ), |
| ], |
| ), |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-dead_strip"])], |
| with_features = [with_feature_set(features = ["opt"])], |
| ), |
| ], |
| ) |
| |
| no_deduplicate_feature = feature( |
| name = "no_deduplicate", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Xlinker", |
| "-no_deduplicate", |
| ], |
| ), |
| ], |
| with_features = [ |
| with_feature_set(not_features = ["opt"]), |
| ], |
| ), |
| ], |
| ) |
| |
| output_execpath_flags_feature = feature( |
| name = "output_execpath_flags", |
| flag_sets = [ |
| flag_set( |
| actions = all_link_actions, |
| flag_groups = [ |
| flag_group( |
| flags = ["-o", "%{output_execpath}"], |
| expand_if_available = "output_execpath", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| pic_feature = feature( |
| name = "pic", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.preprocess_assemble, |
| ], |
| flag_groups = [ |
| flag_group(flags = ["-fPIC"], expand_if_available = "pic"), |
| ], |
| ), |
| ], |
| ) |
| |
| framework_paths_feature = feature( |
| name = "framework_paths", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-F%{framework_include_paths}"], |
| iterate_over = "framework_include_paths", |
| ), |
| ], |
| ), |
| flag_set( |
| actions = [ |
| "objc-executable", |
| _OBJCPP_EXECUTABLE_ACTION_NAME, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-F%{framework_paths}"], |
| iterate_over = "framework_paths", |
| ), |
| flag_group( |
| flags = ["-framework", "%{framework_names}"], |
| iterate_over = "framework_names", |
| ), |
| flag_group( |
| flags = ["-weak_framework", "%{weak_framework_names}"], |
| iterate_over = "weak_framework_names", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| compiler_output_flags_feature = feature( |
| name = "compiler_output_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-S"], |
| expand_if_available = "output_assembly_file", |
| ), |
| flag_group( |
| flags = ["-E"], |
| expand_if_available = "output_preprocess_file", |
| ), |
| flag_group( |
| flags = ["-o", "%{output_file}"], |
| expand_if_available = "output_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| pch_feature = feature( |
| name = "pch", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-include", |
| "%{pch_file}", |
| ], |
| expand_if_available = "pch_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| include_system_dirs_feature = feature( |
| name = "include_system_dirs", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| "objc-executable", |
| _OBJCPP_EXECUTABLE_ACTION_NAME, |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-isysroot", |
| "__BAZEL_XCODE_SDKROOT__", |
| "-F__BAZEL_XCODE_SDKROOT__/System/Library/Frameworks", |
| "-F{}".format(apple_support.path_placeholders.platform_frameworks(apple_fragment = ctx.fragments.apple)), |
| ], |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| input_param_flags_feature = feature( |
| name = "input_param_flags", |
| flag_sets = [ |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = ["-L%{library_search_directories}"], |
| iterate_over = "library_search_directories", |
| expand_if_available = "library_search_directories", |
| ), |
| ], |
| ), |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = ["%{libopts}"], |
| iterate_over = "libopts", |
| expand_if_available = "libopts", |
| ), |
| ], |
| ), |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = ["-Wl,-force_load,%{whole_archive_linker_params}"], |
| iterate_over = "whole_archive_linker_params", |
| expand_if_available = "whole_archive_linker_params", |
| ), |
| ], |
| ), |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = ["%{linker_input_params}"], |
| iterate_over = "linker_input_params", |
| expand_if_available = "linker_input_params", |
| ), |
| ], |
| ), |
| flag_set( |
| actions = all_link_actions + |
| [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| iterate_over = "libraries_to_link", |
| flag_groups = [ |
| flag_group( |
| iterate_over = "libraries_to_link.object_files", |
| flag_groups = [ |
| flag_group( |
| flags = ["%{libraries_to_link.object_files}"], |
| expand_if_false = "libraries_to_link.is_whole_archive", |
| ), |
| flag_group( |
| flags = ["-Wl,-force_load,%{libraries_to_link.object_files}"], |
| expand_if_true = "libraries_to_link.is_whole_archive", |
| ), |
| ], |
| expand_if_equal = variable_with_value( |
| name = "libraries_to_link.type", |
| value = "object_file_group", |
| ), |
| ), |
| flag_group( |
| flag_groups = [ |
| flag_group( |
| flags = ["%{libraries_to_link.name}"], |
| expand_if_false = "libraries_to_link.is_whole_archive", |
| ), |
| flag_group( |
| flags = ["-Wl,-force_load,%{libraries_to_link.name}"], |
| expand_if_true = "libraries_to_link.is_whole_archive", |
| ), |
| ], |
| expand_if_equal = variable_with_value( |
| name = "libraries_to_link.type", |
| value = "object_file", |
| ), |
| ), |
| flag_group( |
| flag_groups = [ |
| flag_group( |
| flags = ["%{libraries_to_link.name}"], |
| expand_if_false = "libraries_to_link.is_whole_archive", |
| ), |
| flag_group( |
| flags = ["-Wl,-force_load,%{libraries_to_link.name}"], |
| expand_if_true = "libraries_to_link.is_whole_archive", |
| ), |
| ], |
| expand_if_equal = variable_with_value( |
| name = "libraries_to_link.type", |
| value = "interface_library", |
| ), |
| ), |
| flag_group( |
| flag_groups = [ |
| flag_group( |
| flags = ["%{libraries_to_link.name}"], |
| expand_if_false = "libraries_to_link.is_whole_archive", |
| ), |
| flag_group( |
| flags = ["-Wl,-force_load,%{libraries_to_link.name}"], |
| expand_if_true = "libraries_to_link.is_whole_archive", |
| ), |
| ], |
| expand_if_equal = variable_with_value( |
| name = "libraries_to_link.type", |
| value = "static_library", |
| ), |
| ), |
| flag_group( |
| flag_groups = [ |
| flag_group( |
| flags = ["-l%{libraries_to_link.name}"], |
| expand_if_false = "libraries_to_link.is_whole_archive", |
| ), |
| flag_group( |
| flags = ["-Wl,-force_load,-l%{libraries_to_link.name}"], |
| expand_if_true = "libraries_to_link.is_whole_archive", |
| ), |
| ], |
| expand_if_equal = variable_with_value( |
| name = "libraries_to_link.type", |
| value = "dynamic_library", |
| ), |
| ), |
| flag_group( |
| flag_groups = [ |
| flag_group( |
| flags = ["%{libraries_to_link.path}"], |
| ), |
| ], |
| expand_if_equal = variable_with_value( |
| name = "libraries_to_link.type", |
| value = "versioned_dynamic_library", |
| ), |
| ), |
| ], |
| expand_if_available = "libraries_to_link", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| per_object_debug_info_feature = feature( |
| name = "per_object_debug_info", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-gsplit-dwarf", "-g"], |
| expand_if_available = "per_object_debug_info_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| lipo_feature = feature( |
| name = "lipo", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], |
| flag_groups = [flag_group(flags = ["-fripa"])], |
| ), |
| ], |
| requires = [ |
| feature_set(features = ["autofdo"]), |
| feature_set(features = ["fdo_optimize"]), |
| feature_set(features = ["fdo_instrument"]), |
| ], |
| ) |
| |
| apple_env_feature = feature( |
| name = "apple_env", |
| env_sets = [ |
| env_set( |
| actions = _DYNAMIC_LINK_ACTIONS + [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| _OBJC_ARCHIVE_ACTION_NAME, |
| "objc-fully-link", |
| ACTION_NAMES.cpp_link_static_library, |
| ACTION_NAMES.linkstamp_compile, |
| ], |
| env_entries = [ |
| env_entry( |
| key = "XCODE_VERSION_OVERRIDE", |
| value = str(xcode_config.xcode_version()), |
| ), |
| # TODO: Remove once we drop bazel 7.x support |
| env_entry( |
| key = "APPLE_SDK_VERSION_OVERRIDE", |
| value = str(sdk_version), |
| ), |
| env_entry( |
| key = "APPLE_SDK_PLATFORM", |
| value = _sdk_name(platform_type, is_simulator), |
| ), |
| env_entry( |
| key = "ZERO_AR_DATE", |
| value = "1", |
| ), |
| ] + [env_entry(key = key, value = value) for key, value in ctx.attr.extra_env.items()], |
| ), |
| ], |
| ) |
| |
| if (ctx.attr.cpu == "ios_arm64" or |
| ctx.attr.cpu == "ios_arm64e" or |
| ctx.attr.cpu == "ios_x86_64" or |
| ctx.attr.cpu == "ios_sim_arm64" or |
| ctx.attr.cpu == "tvos_arm64" or |
| ctx.attr.cpu == "tvos_x86_64" or |
| ctx.attr.cpu == "tvos_sim_arm64" or |
| ctx.attr.cpu == "visionos_arm64" or |
| ctx.attr.cpu == "visionos_sim_arm64" or |
| ctx.attr.cpu == "watchos_arm64_32" or |
| ctx.attr.cpu == "watchos_device_arm64" or |
| ctx.attr.cpu == "watchos_device_arm64e" or |
| ctx.attr.cpu == "watchos_armv7k" or |
| ctx.attr.cpu == "watchos_x86_64" or |
| ctx.attr.cpu == "watchos_arm64"): |
| apply_implicit_frameworks_feature = feature( |
| name = "apply_implicit_frameworks", |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group( |
| flags = ["-framework", "Foundation", "-framework", "UIKit"], |
| ), |
| ], |
| ), |
| ], |
| ) |
| elif (ctx.attr.cpu == "darwin_x86_64" or |
| ctx.attr.cpu == "darwin_arm64" or |
| ctx.attr.cpu == "darwin_arm64e"): |
| apply_implicit_frameworks_feature = feature( |
| name = "apply_implicit_frameworks", |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-framework", "Foundation"])], |
| with_features = [with_feature_set(not_features = ["kernel_extension"])], |
| ), |
| ], |
| ) |
| else: |
| apply_implicit_frameworks_feature = None |
| |
| random_seed_feature = feature( |
| name = "random_seed", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.cpp_module_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-frandom-seed=%{output_file}"], |
| expand_if_available = "output_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| llvm_coverage_map_format_feature = feature( |
| name = "llvm_coverage_map_format", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-fprofile-instr-generate", "-fcoverage-mapping", "-g"], |
| ), |
| ], |
| ), |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-fprofile-instr-generate"])], |
| ), |
| ], |
| requires = [feature_set(features = ["coverage"])], |
| ) |
| |
| coverage_prefix_map_feature = feature( |
| name = "coverage_prefix_map", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-fcoverage-prefix-map=__BAZEL_EXECUTION_ROOT__=."], |
| ), |
| ], |
| ), |
| ], |
| requires = [feature_set(features = ["coverage"])], |
| ) |
| |
| force_pic_flags_feature = feature( |
| name = "force_pic_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.cpp_link_executable], |
| flag_groups = [ |
| flag_group( |
| flags = ["-Wl,-pie"], |
| expand_if_available = "force_pic", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| sysroot_feature = feature( |
| name = "sysroot", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_link_executable, |
| ACTION_NAMES.cpp_link_dynamic_library, |
| ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.clif_match, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["--sysroot=%{sysroot}"], |
| expand_if_available = "sysroot", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| autofdo_feature = feature( |
| name = "autofdo", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-fauto-profile=%{fdo_profile_path}", |
| "-fprofile-correction", |
| ], |
| expand_if_available = "fdo_profile_path", |
| ), |
| ], |
| ), |
| ], |
| provides = ["profile"], |
| ) |
| |
| link_libcpp_feature = feature( |
| name = "link_libc++", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-lc++"])], |
| with_features = [with_feature_set(not_features = ["kernel_extension"])], |
| ), |
| ], |
| ) |
| |
| objc_actions_feature = feature( |
| name = "objc_actions", |
| implies = [ |
| "objc-compile", |
| "objc++-compile", |
| "objc-fully-link", |
| _OBJC_ARCHIVE_ACTION_NAME, |
| "objc-executable", |
| _OBJCPP_EXECUTABLE_ACTION_NAME, |
| "assemble", |
| "preprocess-assemble", |
| "c-compile", |
| "c++-compile", |
| "c++-link-static-library", |
| "c++-link-dynamic-library", |
| "c++-link-nodeps-dynamic-library", |
| "c++-link-executable", |
| ], |
| ) |
| |
| unfiltered_compile_flags_feature = feature( |
| name = "unfiltered_compile_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.linkstamp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-no-canonical-prefixes", |
| "-Wno-builtin-macro-redefined", |
| "-D__DATE__=\"redacted\"", |
| "-D__TIMESTAMP__=\"redacted\"", |
| "-D__TIME__=\"redacted\"", |
| "-target", |
| target_system_name, |
| ], |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| linker_param_file_feature = feature( |
| name = "linker_param_file", |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS + [ |
| ACTION_NAMES.cpp_link_static_library, |
| _OBJC_ARCHIVE_ACTION_NAME, |
| ACTION_NAMES.objc_fully_link, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["@%{linker_param_file}"], |
| expand_if_available = "linker_param_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| relative_ast_path_feature = feature( |
| name = "relative_ast_path", |
| enabled = True, |
| env_sets = [ |
| env_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| env_entries = [ |
| env_entry( |
| key = "RELATIVE_AST_PATH", |
| value = "true", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| archiver_flags_feature = feature( |
| name = "archiver_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.cpp_link_static_library], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-D", |
| "-no_warning_for_no_symbols", |
| "-static", |
| "-o", |
| "%{output_execpath}", |
| ], |
| expand_if_available = "output_execpath", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| fdo_optimize_feature = feature( |
| name = "fdo_optimize", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-fprofile-use=%{fdo_profile_path}", |
| "-Wno-profile-instr-unprofiled", |
| "-Wno-profile-instr-out-of-date", |
| "-fprofile-correction", |
| ], |
| expand_if_available = "fdo_profile_path", |
| ), |
| ], |
| ), |
| ], |
| provides = ["profile"], |
| ) |
| |
| no_objc_arc_feature = feature( |
| name = "no_objc_arc", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-fno-objc-arc"], |
| expand_if_available = "no_objc_arc", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| debug_prefix_map_pwd_is_dot_feature = feature( |
| name = "debug_prefix_map_pwd_is_dot", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [flag_group(flags = ["-fdebug-prefix-map=__BAZEL_EXECUTION_ROOT__=."])], |
| ), |
| ], |
| ) |
| |
| remap_xcode_path_feature = feature( |
| name = "remap_xcode_path", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [flag_group(flags = [ |
| "-fdebug-prefix-map=__BAZEL_XCODE_DEVELOPER_DIR__=/PLACEHOLDER_DEVELOPER_DIR", |
| ])], |
| ), |
| ], |
| ) |
| |
| linkstamps_feature = feature( |
| name = "linkstamps", |
| flag_sets = [ |
| flag_set( |
| actions = all_link_actions, |
| flag_groups = [ |
| flag_group( |
| flags = ["%{linkstamp_paths}"], |
| iterate_over = "linkstamp_paths", |
| expand_if_available = "linkstamp_paths", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| include_paths_feature = feature( |
| name = "include_paths", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.clif_match, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-iquote", "%{quote_include_paths}"], |
| iterate_over = "quote_include_paths", |
| ), |
| flag_group( |
| flags = ["-I%{include_paths}"], |
| iterate_over = "include_paths", |
| ), |
| flag_group( |
| flags = ["-isystem", "%{system_include_paths}"], |
| iterate_over = "system_include_paths", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| default_compile_flags_feature = feature( |
| name = "default_compile_flags", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.lto_backend, |
| ACTION_NAMES.clif_match, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-D_FORTIFY_SOURCE=1", |
| ], |
| ), |
| ], |
| with_features = [with_feature_set(not_features = ["asan"])], |
| ), |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.lto_backend, |
| ACTION_NAMES.clif_match, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-fstack-protector", |
| "-fcolor-diagnostics", |
| "-Wall", |
| "-Wthread-safety", |
| "-Wself-assign", |
| "-fno-omit-frame-pointer", |
| ], |
| ), |
| ], |
| ), |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.lto_backend, |
| ACTION_NAMES.clif_match, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [flag_group(flags = ["-O0", "-DDEBUG"])], |
| with_features = [with_feature_set(features = ["fastbuild"])], |
| ), |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.lto_backend, |
| ACTION_NAMES.clif_match, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-g0", |
| "-O2", |
| "-DNDEBUG", |
| "-DNS_BLOCK_ASSERTIONS=1", |
| ], |
| ), |
| ], |
| with_features = [with_feature_set(features = ["opt"])], |
| ), |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.lto_backend, |
| ACTION_NAMES.clif_match, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [flag_group(flags = ["-g"])], |
| with_features = [with_feature_set(features = ["dbg"])], |
| ), |
| flag_set( |
| actions = [ |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.lto_backend, |
| ACTION_NAMES.clif_match, |
| ], |
| flag_groups = [flag_group(flags = ["-std=c++14"])], |
| ), |
| ], |
| ) |
| |
| objcopy_embed_flags_feature = feature( |
| name = "objcopy_embed_flags", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = ["objcopy_embed_data"], |
| flag_groups = [flag_group(flags = ["-I", "binary"])], |
| ), |
| ], |
| ) |
| |
| dead_strip_feature = feature( |
| name = "dead_strip", |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-dead_strip"])], |
| ), |
| ], |
| ) |
| |
| oso_prefix_feature = feature( |
| name = "oso_prefix_is_pwd", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-Wl,-oso_prefix,__BAZEL_EXECUTION_ROOT__/"])], |
| ), |
| ], |
| ) |
| |
| generate_dsym_file_feature = feature( |
| name = "generate_dsym_file", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| "objc-executable", |
| _OBJCPP_EXECUTABLE_ACTION_NAME, |
| ], |
| flag_groups = [flag_group(flags = ["-g"])], |
| ), |
| flag_set( |
| actions = ["objc-executable", _OBJCPP_EXECUTABLE_ACTION_NAME], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "DSYM_HINT_LINKED_BINARY=%{linked_binary}", |
| "DSYM_HINT_DSYM_PATH=%{dsym_path}", |
| ], |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| # Kernel extensions for Apple Silicon are arm64e. |
| if (ctx.attr.cpu == "darwin_x86_64" or |
| ctx.attr.cpu == "darwin_arm64e"): |
| kernel_extension_feature = feature( |
| name = "kernel_extension", |
| flag_sets = [ |
| flag_set( |
| actions = ["objc-executable", _OBJCPP_EXECUTABLE_ACTION_NAME], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-nostdlib", |
| "-lkmod", |
| "-lkmodc++", |
| "-lcc_kext", |
| "-Xlinker", |
| "-kext", |
| ], |
| ), |
| ], |
| ), |
| ], |
| ) |
| else: |
| kernel_extension_feature = feature(name = "kernel_extension") |
| |
| apply_default_warnings_feature = feature( |
| name = "apply_default_warnings", |
| flag_sets = [ |
| flag_set( |
| actions = [ACTION_NAMES.objc_compile, ACTION_NAMES.objcpp_compile], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Werror=incompatible-sysroot", |
| "-Wshorten-64-to-32", |
| "-Wbool-conversion", |
| "-Wconstant-conversion", |
| "-Wduplicate-method-match", |
| "-Wempty-body", |
| "-Wenum-conversion", |
| "-Wint-conversion", |
| "-Wunreachable-code", |
| "-Wmismatched-return-types", |
| "-Wundeclared-selector", |
| "-Wuninitialized", |
| "-Wunused-function", |
| "-Wunused-variable", |
| ], |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| dependency_file_feature = feature( |
| name = "dependency_file", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-MD", "-MF", "%{dependency_file}"], |
| expand_if_available = "dependency_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| serialized_diagnostics_file_feature = feature( |
| name = "serialized_diagnostics_file", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["--serialize-diagnostics", "%{serialized_diagnostics_file}"], |
| expand_if_available = "serialized_diagnostics_file", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| preprocessor_defines_feature = feature( |
| name = "preprocessor_defines", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["-D%{preprocessor_defines}"], |
| iterate_over = "preprocessor_defines", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| fdo_instrument_feature = feature( |
| name = "fdo_instrument", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_link_dynamic_library, |
| ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| ACTION_NAMES.cpp_link_executable, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-fprofile-generate=%{fdo_instrument_path}", |
| "-fno-data-sections", |
| ], |
| expand_if_available = "fdo_instrument_path", |
| ), |
| ], |
| ), |
| ], |
| provides = ["profile"], |
| ) |
| |
| if (ctx.attr.cpu == "darwin_x86_64" or |
| ctx.attr.cpu == "darwin_arm64" or |
| ctx.attr.cpu == "darwin_arm64e"): |
| link_cocoa_feature = feature( |
| name = "link_cocoa", |
| flag_sets = [ |
| flag_set( |
| actions = ["objc-executable", _OBJCPP_EXECUTABLE_ACTION_NAME], |
| flag_groups = [flag_group(flags = ["-framework", "Cocoa"])], |
| ), |
| ], |
| ) |
| else: |
| link_cocoa_feature = feature(name = "link_cocoa") |
| |
| user_compile_flags_feature = feature( |
| name = "user_compile_flags", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.assemble, |
| ACTION_NAMES.preprocess_assemble, |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.cpp_module_codegen, |
| ACTION_NAMES.linkstamp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = ["%{user_compile_flags}"], |
| iterate_over = "user_compile_flags", |
| expand_if_available = "user_compile_flags", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| headerpad_feature = feature( |
| name = "headerpad", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-headerpad_max_install_names"])], |
| ), |
| ], |
| ) |
| |
| generate_linkmap_feature = feature( |
| name = "generate_linkmap", |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Xlinker", |
| "-map", |
| "-Xlinker", |
| "%{linkmap_exec_path}", |
| ], |
| expand_if_available = "linkmap_exec_path", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| set_install_name = feature( |
| name = "set_install_name", |
| enabled = ctx.fragments.cpp.do_not_use_macos_set_install_name, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.cpp_link_dynamic_library, |
| ACTION_NAMES.cpp_link_nodeps_dynamic_library, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Wl,-install_name,@rpath/%{runtime_solib_name}", |
| ], |
| expand_if_available = "runtime_solib_name", |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| asan_feature = feature( |
| name = "asan", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group(flags = ["-fsanitize=address"]), |
| ], |
| with_features = [ |
| with_feature_set(features = ["asan"]), |
| ], |
| ), |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group(flags = ["-fsanitize=address"]), |
| ], |
| with_features = [ |
| with_feature_set(features = ["asan"]), |
| ], |
| ), |
| ], |
| ) |
| |
| tsan_feature = feature( |
| name = "tsan", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group(flags = ["-fsanitize=thread"]), |
| ], |
| with_features = [ |
| with_feature_set(features = ["tsan"]), |
| ], |
| ), |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group(flags = ["-fsanitize=thread"]), |
| ], |
| with_features = [ |
| with_feature_set(features = ["tsan"]), |
| ], |
| ), |
| ], |
| ) |
| |
| ubsan_feature = feature( |
| name = "ubsan", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group(flags = ["-fsanitize=undefined"]), |
| ], |
| with_features = [ |
| with_feature_set(features = ["ubsan"]), |
| ], |
| ), |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group(flags = ["-fsanitize=undefined"]), |
| ], |
| with_features = [ |
| with_feature_set(features = ["ubsan"]), |
| ], |
| ), |
| ], |
| ) |
| |
| default_sanitizer_flags_feature = feature( |
| name = "default_sanitizer_flags", |
| enabled = True, |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-gline-tables-only", |
| "-fno-omit-frame-pointer", |
| "-fno-sanitize-recover=all", |
| ], |
| ), |
| ], |
| with_features = [ |
| with_feature_set(features = ["asan"]), |
| with_feature_set(features = ["tsan"]), |
| with_feature_set(features = ["ubsan"]), |
| ], |
| ), |
| ], |
| ) |
| |
| treat_warnings_as_errors_feature = feature( |
| name = "treat_warnings_as_errors", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [flag_group(flags = ["-Werror"])], |
| ), |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [flag_group(flags = ["-Wl,-fatal_warnings"])], |
| ), |
| ], |
| ) |
| |
| # As of Xcode 15, linker warnings are emitted if duplicate `-l` options are |
| # present. Until such linkopts can be deduped by bazel itself, we disable |
| # these warnings. |
| no_warn_duplicate_libraries_feature = feature( |
| name = "no_warn_duplicate_libraries", |
| enabled = "no_warn_duplicate_libraries" in ctx.features, |
| flag_sets = [ |
| flag_set( |
| actions = _DYNAMIC_LINK_ACTIONS, |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-Wl,-no_warn_duplicate_libraries", |
| ], |
| ), |
| ], |
| ), |
| ], |
| ) |
| |
| modulemaps = ctx.attr.module_map.files.to_list() |
| if modulemaps: |
| if len(modulemaps) != 1: |
| fail("internal error: expected 1 modulemap got:", modulemaps) |
| layering_check_feature = feature( |
| name = "layering_check", |
| flag_sets = [ |
| flag_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| flag_groups = [ |
| flag_group( |
| flags = [ |
| "-fmodules-strict-decluse", |
| "-Wprivate-header", |
| "-Xclang", |
| "-fmodule-name=%{module_name}", |
| "-Xclang", |
| "-fmodule-map-file=%{module_map_file}", |
| ], |
| ), |
| flag_group( |
| iterate_over = "dependent_module_map_files", |
| flags = [ |
| "-Xclang", |
| "-fmodule-map-file=%{dependent_module_map_files}", |
| ], |
| ), |
| ], |
| ), |
| ], |
| env_sets = [ |
| env_set( |
| actions = [ |
| ACTION_NAMES.c_compile, |
| ACTION_NAMES.cpp_compile, |
| ACTION_NAMES.cpp_header_parsing, |
| ACTION_NAMES.cpp_module_compile, |
| ACTION_NAMES.objc_compile, |
| ACTION_NAMES.objcpp_compile, |
| ], |
| env_entries = [ |
| env_entry( |
| key = "APPLE_SUPPORT_MODULEMAP", |
| value = modulemaps[0].path, |
| ), |
| ], |
| ), |
| ], |
| ) |
| else: |
| layering_check_feature = feature(name = "layering_check") |
| |
| features = [ |
| # Marker features |
| feature(name = "archive_param_file"), |
| feature(name = "compile_all_modules"), |
| feature(name = "coverage"), |
| feature(name = "dbg"), |
| feature(name = "exclude_private_headers_in_module_maps"), |
| feature(name = "fastbuild"), |
| feature(name = "has_configured_linker_path"), |
| feature(name = "module_maps", enabled = True), |
| feature(name = "no_legacy_features"), |
| feature(name = "only_doth_headers_in_module_maps"), |
| feature(name = "opt"), |
| |
| # Features with more configuration |
| link_libcpp_feature, |
| default_compile_flags_feature, |
| debug_prefix_map_pwd_is_dot_feature, |
| remap_xcode_path_feature, |
| generate_dsym_file_feature, |
| generate_linkmap_feature, |
| oso_prefix_feature, |
| objc_actions_feature, |
| strip_debug_symbols_feature, |
| shared_flag_feature, |
| kernel_extension_feature, |
| linkstamps_feature, |
| output_execpath_flags_feature, |
| archiver_flags_feature, |
| runtime_root_flags_feature, |
| input_param_flags_feature, |
| objc_link_flag_feature, |
| force_pic_flags_feature, |
| pch_feature, |
| apply_default_warnings_feature, |
| includes_feature, |
| include_paths_feature, |
| sysroot_feature, |
| dependency_file_feature, |
| serialized_diagnostics_file_feature, |
| pic_feature, |
| per_object_debug_info_feature, |
| preprocessor_defines_feature, |
| framework_paths_feature, |
| random_seed_feature, |
| fdo_instrument_feature, |
| fdo_optimize_feature, |
| autofdo_feature, |
| lipo_feature, |
| llvm_coverage_map_format_feature, |
| gcc_coverage_map_format_feature, |
| coverage_prefix_map_feature, |
| apply_default_compiler_flags_feature, |
| include_system_dirs_feature, |
| headerpad_feature, |
| objc_arc_feature, |
| no_objc_arc_feature, |
| apple_env_feature, |
| relative_ast_path_feature, |
| gcc_quoting_for_param_files_feature, |
| user_link_flags_feature, |
| default_link_flags_feature, |
| no_deduplicate_feature, |
| dead_strip_feature, |
| apply_implicit_frameworks_feature, |
| link_cocoa_feature, |
| apply_simulator_compiler_flags_feature, |
| unfiltered_cxx_flags_feature, |
| user_compile_flags_feature, |
| unfiltered_compile_flags_feature, |
| linker_param_file_feature, |
| compiler_input_flags_feature, |
| compiler_output_flags_feature, |
| objcopy_embed_flags_feature, |
| set_install_name, |
| asan_feature, |
| tsan_feature, |
| ubsan_feature, |
| default_sanitizer_flags_feature, |
| treat_warnings_as_errors_feature, |
| no_warn_duplicate_libraries_feature, |
| layering_check_feature, |
| external_include_paths_feature, |
| ] |
| |
| if (ctx.attr.cpu == "darwin_x86_64" or |
| ctx.attr.cpu == "darwin_arm64" or |
| ctx.attr.cpu == "darwin_arm64e"): |
| features.append(feature(name = "dynamic_linking_mode")) |
| |
| # macOS artifact name patterns differ from the defaults only for dynamic |
| # libraries. |
| artifact_name_patterns = [ |
| artifact_name_pattern( |
| category_name = "dynamic_library", |
| prefix = "lib", |
| extension = ".dylib", |
| ), |
| ] |
| |
| make_variables = [ |
| make_variable( |
| name = "STACK_FRAME_UNLIMITED", |
| value = "-Wframe-larger-than=100000000 -Wno-vla", |
| ), |
| ] |
| |
| tool_paths = { |
| "ar": "libtool", |
| "cpp": "/usr/bin/cpp", |
| "dwp": "/usr/bin/dwp", |
| "gcc": "cc_wrapper.sh", |
| "gcov": "/usr/bin/gcov", |
| "ld": "/usr/bin/ld", |
| "nm": "/usr/bin/nm", |
| "objcopy": "/usr/bin/objcopy", |
| "objdump": "/usr/bin/objdump", |
| "strip": "/usr/bin/strip", |
| } |
| |
| tool_paths.update(ctx.attr.tool_paths_overrides) |
| |
| out = ctx.actions.declare_file(ctx.label.name) |
| ctx.actions.write(out, "Fake executable") |
| return [ |
| cc_common.create_cc_toolchain_config_info( |
| ctx = ctx, |
| features = features, |
| action_configs = action_configs, |
| artifact_name_patterns = artifact_name_patterns, |
| cxx_builtin_include_directories = ctx.attr.cxx_builtin_include_directories, |
| toolchain_identifier = ctx.attr.cpu, |
| host_system_name = "x86_64-apple-macosx", |
| target_system_name = target_system_name, |
| target_cpu = ctx.attr.cpu, |
| target_libc = target_libc, |
| compiler = "clang", |
| abi_version = abi_version, |
| abi_libc_version = abi_libc_version, |
| tool_paths = [tool_path(name = name, path = path) for (name, path) in tool_paths.items()], |
| make_variables = make_variables, |
| builtin_sysroot = None, |
| cc_target_os = "apple", |
| ), |
| DefaultInfo( |
| executable = out, |
| ), |
| ] |
| |
| cc_toolchain_config = rule( |
| implementation = _impl, |
| attrs = { |
| "cpu": attr.string(mandatory = True), |
| "cxx_builtin_include_directories": attr.string_list(), |
| "tool_paths_overrides": attr.string_dict(), |
| "extra_env": attr.string_dict(), |
| "module_map": attr.label(), |
| "_xcode_config": attr.label(default = configuration_field( |
| fragment = "apple", |
| name = "xcode_config_label", |
| )), |
| }, |
| provides = [CcToolchainConfigInfo], |
| executable = True, |
| fragments = [ |
| "apple", |
| "cpp", |
| ], |
| ) |