Skip to main content
Glama
apple_rules_impl_utility.bzl13.9 kB
# Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under both the MIT license found in the # LICENSE-MIT file in the root directory of this source tree and the Apache # License, Version 2.0 found in the LICENSE-APACHE file in the root directory # of this source tree. load("@prelude//:attrs_validators.bzl", "validation_common") load("@prelude//apple:apple_bundle_types.bzl", "AppleBundleResourceInfo", "AppleBundleTypeAttributeType") load("@prelude//apple:apple_code_signing_types.bzl", "CodeSignConfiguration", "CodeSignType") load("@prelude//apple:apple_common.bzl", "apple_common") load("@prelude//apple:apple_toolchain_types.bzl", "AppleToolchainInfo") load("@prelude//apple:resource_groups.bzl", "RESOURCE_GROUP_MAP_ATTR") load("@prelude//apple/swift:swift_incremental_support.bzl", "SwiftCompilationMode") load("@prelude//apple/user:apple_selective_debugging.bzl", "AppleSelectiveDebuggingInfo") load("@prelude//apple/user:cpu_split_transition.bzl", "cpu_split_transition") load("@prelude//cxx:headers.bzl", "CPrecompiledHeaderInfo") load("@prelude//ide_integrations/xcode:scheme_settings.bzl", "XCODE_SCHEME_SETTINGS_ATTR_NAME", "XCODE_SCHEME_SETTINGS_ATTR_TYPE") load("@prelude//linking:execution_preference.bzl", "link_execution_preference_attr") load("@prelude//linking:link_info.bzl", "LinkOrdering") load("@prelude//utils:clear_platform.bzl", "clear_platform_transition") AppleFrameworkBundleModuleMapType = ["auto"] def get_apple_toolchain_attr(): return attrs.toolchain_dep(default = "toolchains//:apple-default", providers = [AppleToolchainInfo]) def get_apple_bundle_toolchain_attr(): return attrs.toolchain_dep(default = "toolchains//:apple-bundle", providers = [AppleToolchainInfo]) def get_apple_xctoolchain_attr(): return attrs.toolchain_dep(default = "toolchains//:apple-xctoolchain") def get_apple_xctoolchain_bundle_id_attr(): return attrs.toolchain_dep(default = "toolchains//:apple-xctoolchain-bundle-id") def get_enable_library_evolution(): return attrs.bool(default = select({ "DEFAULT": False, "config//features/apple:swift_library_evolution_enabled": True, })) def _get_enable_dsym_uses_parallel_linker(): return attrs.bool(default = select({ "DEFAULT": False, "config//features/apple:dsym_uses_parallel_linker_enabled": True, })) def _strict_provisioning_profile_search_default_attr(): default_value = (read_root_config("apple", "strict_provisioning_profile_search", "true").lower() == "true") return attrs.bool(default = select({ "DEFAULT": default_value, "config//features/apple:strict_provisioning_profile_search_enabled": True, })) def _fast_adhoc_signing_enabled_default_attr(): return attrs.bool(default = select({ "DEFAULT": True, "config//features/apple:fast_adhoc_signing_disabled": False, "config//features/apple:fast_adhoc_signing_enabled": True, })) def _skip_adhoc_resigning_scrubbed_frameworks_default_attr(): default_value = (read_root_config("apple", "skip_adhoc_resigning_scrubbed_frameworks", "").lower() == "true") return attrs.bool(default = select({ "DEFAULT": default_value, "config//features/apple/constraints:skip_adhoc_resigning_scrubbed_frameworks_disabled": False, "config//features/apple/constraints:skip_adhoc_resigning_scrubbed_frameworks_enabled": True, })) def _versioned_macos_bundle_default_value(): return select({ "DEFAULT": False, "config//features/apple/constraints:versioned_macos_bundle_false": False, "config//features/apple/constraints:versioned_macos_bundle_true": True, }) APPLE_ARCHIVE_OBJECTS_LOCALLY_OVERRIDE_ATTR_NAME = "_archive_objects_locally_override" APPLE_USE_ENTITLEMENTS_WHEN_ADHOC_CODE_SIGNING_CONFIG_OVERRIDE_ATTR_NAME = "_use_entitlements_when_adhoc_code_signing" APPLE_USE_ENTITLEMENTS_WHEN_ADHOC_CODE_SIGNING_ATTR_NAME = "use_entitlements_when_adhoc_code_signing" APPLE_EMBED_PROVISIONING_PROFILE_WHEN_ADHOC_CODE_SIGNING_CONFIG_OVERRIDE_ATTR_NAME = "_embed_provisioning_profile_when_adhoc_code_signing" APPLE_EMBED_PROVISIONING_PROFILE_WHEN_ADHOC_CODE_SIGNING_ATTR_NAME = "embed_provisioning_profile_when_adhoc_code_signing" APPLE_VALIDATION_DEPS_ATTR_NAME = "validation_deps" APPLE_VALIDATION_DEPS_ATTR_TYPE = attrs.set(attrs.dep(), sorted = True, default = []) def apple_dsymutil_attrs(): return { "dsym_uses_parallel_linker": _get_enable_dsym_uses_parallel_linker(), "_dsymutil_extra_flags": attrs.list(attrs.string()), "_dsymutil_verify_dwarf": attrs.string(), } def get_apple_info_plist_build_system_identification_attrs(): return { "info_plist_identify_build_system": attrs.option(attrs.bool(), default = None), "_info_plist_identify_build_system_default": attrs.bool(default = False), } def _apple_bundle_like_common_attrs(): # `apple_bundle()` and `apple_test()` share a common set of extra attrs attribs = { # Target-level attribute always takes precedence over buckconfigs. "code_signing_configuration": attrs.option(attrs.enum(CodeSignConfiguration.values()), default = None), "codesign_type": attrs.option(attrs.enum(CodeSignType.values()), default = None), "fast_adhoc_signing_enabled": attrs.option(attrs.bool(), default = None), "provisioning_profile_filter": attrs.option(attrs.string(), default = None), "skip_adhoc_resigning_scrubbed_frameworks": attrs.option(attrs.bool(), default = None), "strict_provisioning_profile_search": attrs.option(attrs.bool(), default = None), "versioned_macos_bundle": attrs.bool(default = _versioned_macos_bundle_default_value()), "_apple_xctoolchain": get_apple_xctoolchain_attr(), "_apple_xctoolchain_bundle_id": get_apple_xctoolchain_bundle_id_attr(), "_bundling_cache_buster": attrs.option(attrs.string(), default = None), "_bundling_log_file_enabled": attrs.bool(default = False), "_bundling_log_file_level": attrs.option(attrs.string(), default = None), "_code_signing_configuration": attrs.option(attrs.enum(CodeSignConfiguration.values()), default = None), "_codesign_identities_command_override": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), "_codesign_type": attrs.option(attrs.enum(CodeSignType.values()), default = None), "_compile_resources_locally_override": attrs.option(attrs.bool(), default = None), "_fast_adhoc_signing_enabled_default": _fast_adhoc_signing_enabled_default_attr(), "_fast_provisioning_profile_parsing_enabled": attrs.bool(default = False), "_incremental_bundling_enabled": attrs.bool(default = False), "_profile_bundling_enabled": attrs.bool(default = False), # FIXME: prelude// should be standalone (not refer to fbsource//) "_provisioning_profiles": attrs.dep(default = "fbsource//xplat/buck2/platform/apple:provisioning_profiles"), "_resource_bundle": attrs.option(attrs.dep(providers = [AppleBundleResourceInfo]), default = None), "_skip_adhoc_resigning_scrubbed_frameworks_default": _skip_adhoc_resigning_scrubbed_frameworks_default_attr(), "_skip_adhoc_resigning_scrubbed_frameworks_override": attrs.option(attrs.bool(), default = None), "_strict_provisioning_profile_search_default": _strict_provisioning_profile_search_default_attr(), APPLE_USE_ENTITLEMENTS_WHEN_ADHOC_CODE_SIGNING_CONFIG_OVERRIDE_ATTR_NAME: attrs.option(attrs.bool(), default = None), APPLE_USE_ENTITLEMENTS_WHEN_ADHOC_CODE_SIGNING_ATTR_NAME: attrs.bool(default = False), APPLE_EMBED_PROVISIONING_PROFILE_WHEN_ADHOC_CODE_SIGNING_CONFIG_OVERRIDE_ATTR_NAME: attrs.option(attrs.bool(), default = None), APPLE_EMBED_PROVISIONING_PROFILE_WHEN_ADHOC_CODE_SIGNING_ATTR_NAME: attrs.bool(default = False), APPLE_VALIDATION_DEPS_ATTR_NAME: APPLE_VALIDATION_DEPS_ATTR_TYPE, XCODE_SCHEME_SETTINGS_ATTR_NAME: XCODE_SCHEME_SETTINGS_ATTR_TYPE, } attribs.update(get_apple_info_plist_build_system_identification_attrs()) attribs.update(apple_dsymutil_attrs()) attribs.update(apple_common.apple_tools_arg()) return attribs def apple_test_extra_attrs(): # To build an `apple_test`, one needs to first build a shared `apple_library` then # wrap this test library into an `apple_bundle`. Because of this, `apple_test` has attributes # from both `apple_library` and `apple_bundle`. attribs = { # Expected by `apple_bundle`, for `apple_test` this field is always None. "binary": attrs.option(attrs.dep(), default = None), "enable_library_evolution": attrs.option(attrs.bool(), default = None), # The resulting test bundle should have .xctest extension. "extension": attrs.string(), "extra_xcode_sources": attrs.list(attrs.source(allow_directory = True), default = []), "link_execution_preference": link_execution_preference_attr(), "link_ordering": attrs.option(attrs.enum(LinkOrdering.values()), default = None), "precompiled_header": attrs.option(attrs.dep(providers = [CPrecompiledHeaderInfo]), default = None), "propagated_target_sdk_version": attrs.option(attrs.string(), default = None), # Expected by `apple_bundle`, for `apple_test` this field is always None. "resource_group": attrs.option(attrs.string(), default = None), # Expected by `apple_bundle`, for `apple_test` this field is always None. "resource_group_map": attrs.option(attrs.string(), default = None), "sanitizer_runtime_enabled": attrs.option(attrs.bool(), default = None), "stripped": attrs.bool(default = False), "swift_compilation_mode": attrs.enum(SwiftCompilationMode.values(), default = "wmo"), "swift_package_name": attrs.option(attrs.string(), default = None), "test_re_capabilities": attrs.option(attrs.dict(key = attrs.string(), value = attrs.string(), sorted = False), default = None, doc = """ An optional dictionary with the RE capabilities for the test execution. Overrides a default selection mechanism. """), "test_re_use_case": attrs.option(attrs.string(), default = None, doc = """ An optional name of the RE use case for the test execution. Overrides a default selection mechanism. """), "_apple_toolchain": get_apple_toolchain_attr(), "_enable_library_evolution": get_enable_library_evolution(), "_ios_booted_simulator": attrs.transition_dep(cfg = clear_platform_transition, default = "fbsource//xplat/buck2/platform/apple:ios_booted_simulator", providers = [LocalResourceInfo]), "_ios_unbooted_simulator": attrs.transition_dep(cfg = clear_platform_transition, default = "fbsource//xplat/buck2/platform/apple:ios_unbooted_simulator", providers = [LocalResourceInfo]), "_swift_enable_testing": attrs.default_only(attrs.bool(default = True)), } | validation_common.attrs_validators_arg() attribs.update(_apple_bundle_like_common_attrs()) return attribs def apple_xcuitest_extra_attrs(): attribs = { # This is ignored, but required for info plist processing. "binary": attrs.option(attrs.source(), default = None), "codesign_identity": attrs.option(attrs.string(), default = None), "enable_library_evolution": attrs.option(attrs.bool(), default = None), "entitlements_file": attrs.option(attrs.source(), default = None), "extension": attrs.default_only(attrs.string(default = "app")), "incremental_bundling_enabled": attrs.bool(default = False), "info_plist": attrs.source(), "info_plist_substitutions": attrs.dict(key = attrs.string(), value = attrs.string(), sorted = False, default = {}), "target_sdk_version": attrs.option(attrs.string(), default = None), # The test bundle to package in the UI test runner app. "test_bundle": attrs.dep(), "_apple_toolchain": get_apple_toolchain_attr(), "_enable_library_evolution": get_enable_library_evolution(), } attribs.update(_apple_bundle_like_common_attrs()) attribs.pop("_dsymutil_extra_flags", None) attribs.pop("_dsymutil_verify_dwarf", None) return attribs def _embed_xctest_frameworks_default_value(): return select({ "DEFAULT": False, # Xcode copies XCTest frameworks to test host apps, required when the # selected Xcode version != Xcode version used to build an app under test "config//marker/apple/constraints:embed_xctest_frameworks_enabled": True, }) def apple_bundle_extra_attrs(): attribs = { "binary": attrs.option(attrs.split_transition_dep(cfg = cpu_split_transition), default = None), "bundle_type": attrs.option(attrs.enum(AppleBundleTypeAttributeType.values()), default = None), "copy_public_framework_headers": attrs.option(attrs.bool(), default = None), "embed_xctest_frameworks": attrs.bool(default = _embed_xctest_frameworks_default_value()), "module_map": attrs.option(attrs.one_of(attrs.enum(AppleFrameworkBundleModuleMapType), attrs.source()), default = None), "propagated_target_sdk_version": attrs.option(attrs.string(), default = None), "resource_group_map": RESOURCE_GROUP_MAP_ATTR, "selective_debugging": attrs.option(attrs.dep(providers = [AppleSelectiveDebuggingInfo]), default = None), "split_arch_dsym": attrs.bool(default = False), "universal": attrs.option(attrs.bool(), default = None), "_apple_toolchain": get_apple_bundle_toolchain_attr(), "_codesign_entitlements": attrs.option(attrs.source(), default = None), } | apple_common.debug_artifacts_validators_arg() attribs.update(_apple_bundle_like_common_attrs()) return attribs

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server