Skip to main content
Glama
apple_rules_impl.bzl16.3 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//:validation_deps.bzl", "VALIDATION_DEPS_ATTR_NAME", "VALIDATION_DEPS_ATTR_TYPE", ) load("@prelude//apple:apple_common.bzl", "apple_common") # @oss-disable[end= ]: load("@prelude//apple/meta_only:meta_only_rules.bzl", "meta_only_apple_rule_attributes", "meta_only_apple_rule_implementations") load("@prelude//apple/swift:swift_incremental_support.bzl", "SwiftCompilationMode") load("@prelude//apple/swift:swift_toolchain.bzl", "swift_toolchain_impl") load("@prelude//apple/swift:swift_toolchain_types.bzl", "SwiftObjectFormat") load("@prelude//apple/user:apple_spm_package.bzl", "apple_spm_package_extra_attrs") load("@prelude//cxx:headers.bzl", "CPrecompiledHeaderInfo", "HeaderMode") load("@prelude//cxx:link_groups_types.bzl", "LINK_GROUP_MAP_ATTR") load("@prelude//linking:execution_preference.bzl", "link_execution_preference_attr") load("@prelude//linking:link_info.bzl", "LinkOrdering") load("@prelude//linking:types.bzl", "Linkage") load("@prelude//transitions:constraint_overrides.bzl", "constraint_overrides") load(":apple_asset_catalog.bzl", "apple_asset_catalog_impl") load(":apple_binary.bzl", "apple_binary_impl") load(":apple_bundle.bzl", "apple_bundle_impl") load(":apple_bundle_types.bzl", "AppleBundleInfo", "ApplePackageExtension") load(":apple_core_data.bzl", "apple_core_data_impl") load(":apple_library.bzl", "AppleSharedLibraryMachOFileType", "apple_library_impl") load(":apple_package.bzl", "apple_package_impl") load(":apple_package_config.bzl", "IpaCompressionLevel") load(":apple_resource.bzl", "apple_resource_impl") load( ":apple_rules_impl_utility.bzl", "APPLE_ARCHIVE_OBJECTS_LOCALLY_OVERRIDE_ATTR_NAME", "apple_bundle_extra_attrs", "apple_dsymutil_attrs", "apple_xcuitest_extra_attrs", "get_apple_toolchain_attr", "get_apple_xctoolchain_attr", "get_apple_xctoolchain_bundle_id_attr", "get_enable_library_evolution", ) load(":apple_test.bzl", "apple_test_impl") load(":apple_toolchain.bzl", "apple_toolchain_impl") load(":apple_xcuitest.bzl", "apple_xcuitest_impl") load(":prebuilt_apple_framework.bzl", "prebuilt_apple_framework_impl") load(":scene_kit_assets.bzl", "scene_kit_assets_impl") implemented_rules = { "apple_asset_catalog": apple_asset_catalog_impl, "apple_binary": apple_binary_impl, "apple_bundle": apple_bundle_impl, "apple_library": apple_library_impl, "apple_package": apple_package_impl, "apple_resource": apple_resource_impl, "apple_test": apple_test_impl, "apple_toolchain": apple_toolchain_impl, "apple_xcuitest": apple_xcuitest_impl, "core_data_model": apple_core_data_impl, "prebuilt_apple_framework": prebuilt_apple_framework_impl, "scene_kit_assets": scene_kit_assets_impl, "swift_toolchain": swift_toolchain_impl, # @oss-disable[end= ]: } | meta_only_apple_rule_implementations() } # @oss-enable _APPLE_TOOLCHAIN_ATTR = get_apple_toolchain_attr() def _apple_binary_extra_attrs(): attribs = { "application_extension": attrs.bool(default = False), "binary_linker_flags": attrs.list(attrs.arg(), default = []), "dist_thin_lto_codegen_flags": attrs.list(attrs.arg(), default = []), "enable_distributed_thinlto": attrs.bool(default = select({ "DEFAULT": False, "config//build_mode/constraints:distributed-thin-lto-enabled": True, })), "enable_library_evolution": attrs.option(attrs.bool(), default = None), "extra_xcode_sources": attrs.list(attrs.source(allow_directory = True), default = []), "link_execution_preference": link_execution_preference_attr(), "link_group_map": LINK_GROUP_MAP_ATTR, "link_ordering": attrs.option(attrs.enum(LinkOrdering.values()), default = None), "precompiled_header": attrs.option(attrs.dep(providers = [CPrecompiledHeaderInfo]), default = None), "prefer_stripped_objects": attrs.bool(default = False), "preferred_linkage": attrs.enum(Linkage.values(), default = "any"), "propagated_target_sdk_version": attrs.option(attrs.string(), default = None), "sanitizer_runtime_enabled": attrs.option(attrs.bool(), default = None), "stripped": attrs.option(attrs.bool(), default = None), "swift_compilation_mode": attrs.enum(SwiftCompilationMode.values(), default = "wmo"), "swift_package_name": attrs.option(attrs.string(), default = None), "_apple_toolchain": _APPLE_TOOLCHAIN_ATTR, "_apple_xctoolchain": get_apple_xctoolchain_attr(), "_apple_xctoolchain_bundle_id": get_apple_xctoolchain_bundle_id_attr(), "_enable_library_evolution": get_enable_library_evolution(), "_stripped_default": attrs.bool(default = False), "_swift_enable_testing": attrs.default_only(attrs.bool(default = False)), VALIDATION_DEPS_ATTR_NAME: VALIDATION_DEPS_ATTR_TYPE, } | validation_common.attrs_validators_arg() attribs.update(apple_common.apple_tools_arg()) attribs.update(apple_dsymutil_attrs()) attribs.update(constraint_overrides.attributes) return attribs def _apple_library_extra_attrs(): attribs = { "dist_thin_lto_codegen_flags": attrs.list(attrs.arg(), default = []), "enable_distributed_thinlto": attrs.bool(default = select({ "DEFAULT": False, "config//build_mode/constraints:distributed-thin-lto-enabled": True, })), "enable_library_evolution": attrs.option(attrs.bool(), default = None), "extra_xcode_sources": attrs.list(attrs.source(allow_directory = True), default = []), "header_mode": attrs.option(attrs.enum(HeaderMode.values()), default = None), "link_execution_preference": link_execution_preference_attr(), "link_group_map": LINK_GROUP_MAP_ATTR, "link_ordering": attrs.option(attrs.enum(LinkOrdering.values()), default = None), "precompiled_header": attrs.option(attrs.dep(providers = [CPrecompiledHeaderInfo]), default = None), "preferred_linkage": attrs.enum(Linkage.values(), default = "any"), "propagated_target_sdk_version": attrs.option(attrs.string(), default = None), # Mach-O file type for binary when the target is built as a shared library. "shared_library_macho_file_type": attrs.enum(AppleSharedLibraryMachOFileType.values(), default = "dylib"), "stripped": attrs.option(attrs.bool(), default = None), "supports_header_symlink_subtarget": attrs.bool(default = False), "supports_shlib_interfaces": attrs.bool(default = True), "swift_compilation_mode": attrs.enum(SwiftCompilationMode.values(), default = "wmo"), "swift_package_name": attrs.option(attrs.string(), default = None), "use_archive": attrs.option(attrs.bool(), default = None), "_apple_toolchain": _APPLE_TOOLCHAIN_ATTR, "_apple_xctoolchain": get_apple_xctoolchain_attr(), "_apple_xctoolchain_bundle_id": get_apple_xctoolchain_bundle_id_attr(), "_enable_library_evolution": get_enable_library_evolution(), "_stripped_default": attrs.bool(default = False), "_swift_enable_testing": attrs.bool(default = select({ "DEFAULT": False, "config//features/apple:swift_enable_testing_enabled": True, })), APPLE_ARCHIVE_OBJECTS_LOCALLY_OVERRIDE_ATTR_NAME: attrs.option(attrs.bool(), default = None), VALIDATION_DEPS_ATTR_NAME: VALIDATION_DEPS_ATTR_TYPE, } | validation_common.attrs_validators_arg() attribs.update(apple_common.apple_tools_arg()) attribs.update(apple_dsymutil_attrs()) return attribs extra_attributes = { "apple_asset_catalog": { "dirs": attrs.list(attrs.source(allow_directory = True), default = []), } | apple_common.skip_universal_resource_dedupe_arg(), "apple_binary": _apple_binary_extra_attrs(), "apple_bundle": apple_bundle_extra_attrs(), "apple_library": _apple_library_extra_attrs(), "apple_package": { "bundle": attrs.dep(providers = [AppleBundleInfo]), "ext": attrs.enum(ApplePackageExtension.values(), default = "ipa"), "package_name": attrs.option(attrs.string(), default = None), "packager": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), "packager_args": attrs.list(attrs.arg(), default = []), "prepackaged_validators": attrs.list( attrs.one_of( attrs.exec_dep(providers = [RunInfo]), attrs.tuple(attrs.exec_dep(providers = [RunInfo]), attrs.list(attrs.arg())), ), default = [], ), "_ipa_compression_level": attrs.enum(IpaCompressionLevel.values()), "_ipa_package": attrs.dep(), } | apple_common.apple_tools_arg(), "apple_resource": { "codesign_entitlements": attrs.option(attrs.source(), default = None), "codesign_flags_override": attrs.option(attrs.list(attrs.string()), default = None), "codesign_on_copy": attrs.bool(default = False), "content_dirs": attrs.list(attrs.source(allow_directory = True), default = []), "dirs": attrs.list(attrs.source(allow_directory = True), default = []), "files": attrs.list(attrs.one_of(attrs.dep(), attrs.source()), default = []), } | apple_common.skip_universal_resource_dedupe_arg(), "apple_spm_package": apple_spm_package_extra_attrs(), "apple_test": constraint_overrides.attributes, "apple_toolchain": { # The Buck v1 attribute specs defines those as `attrs.source()` but # we want to properly handle any runnable tools that might have # addition runtime requirements. "actool": attrs.exec_dep(providers = [RunInfo]), "codesign": attrs.exec_dep(providers = [RunInfo]), "codesign_allocate": attrs.exec_dep(providers = [RunInfo]), "codesign_identities_command": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), # Controls invocations of `ibtool`, `actool` `mapc` and `momc` "compile_resources_locally": attrs.bool(default = False), "copy_scene_kit_assets": attrs.exec_dep(providers = [RunInfo]), "cxx_toolchain": attrs.toolchain_dep(), "dsymutil": attrs.exec_dep(providers = [RunInfo]), "dwarfdump": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), "extra_linker_outputs": attrs.set(attrs.string(), default = []), "ibtool": attrs.exec_dep(providers = [RunInfo]), "installer": attrs.default_only(attrs.label(default = "fbsource//xplat/buck2/platform/apple/installer/src/com/facebook/buck/apple/installer:apple_installer")), "libtool": attrs.exec_dep(providers = [RunInfo]), "lipo": attrs.exec_dep(providers = [RunInfo]), "mapc": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), "merge_index_store": attrs.default_only(attrs.dep(providers = [RunInfo], default = "prelude//apple/tools/index:merge_index_store")), "momc": attrs.exec_dep(providers = [RunInfo]), "objdump": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), # A placeholder tool that can be used to set up toolchain constraints. # Useful when fat and thin toolchahins share the same underlying tools via `command_alias()`, # which requires setting up separate platform-specific aliases with the correct constraints. "placeholder_tool": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), "platform_path": attrs.option(attrs.source(), default = None), # Mark as optional until we remove `_internal_platform_path` # Defines whether the Xcode project generator needs to check # that the selected Xcode version matches the one defined # by the `xcode_build_version` fields. "requires_xcode_version_match": attrs.bool(default = False), "sdk_path": attrs.option(attrs.source(), default = None), # Mark as optional until we remove `_internal_sdk_path` "swift_toolchain": attrs.option(attrs.toolchain_dep(), default = None), "version": attrs.option(attrs.string(), default = None), "xcode_build_version": attrs.option(attrs.string(), default = None), "xcode_version": attrs.string(), "xctest": attrs.exec_dep(providers = [RunInfo]), # TODO(T111858757): Mirror of `platform_path` but treated as a string. It allows us to # pass abs paths during development and using the currently selected Xcode. "_internal_platform_path": attrs.option(attrs.string(), default = None), # TODO(T111858757): Mirror of `sdk_path` but treated as a string. It allows us to # pass abs paths during development and using the currently selected Xcode. "_internal_sdk_path": attrs.option(attrs.string(), default = None), }, "apple_xcuitest": apple_xcuitest_extra_attrs(), "core_data_model": { "module": attrs.option(attrs.string(), default = None), "path": attrs.source(allow_directory = True), }, "prebuilt_apple_framework": { "contains_swift": attrs.bool(default = False), "dsyms": attrs.list(attrs.source(allow_directory = True), default = []), "framework": attrs.option(attrs.source(allow_directory = True), default = None), "modular": attrs.bool(default = True), "preferred_linkage": attrs.enum(Linkage.values(), default = "any"), "sdk_modules": attrs.list(attrs.string(), default = []), "stripped": attrs.option(attrs.bool(), default = None), "_apple_toolchain": _APPLE_TOOLCHAIN_ATTR, "_stripped_default": attrs.bool(default = False), } | apple_common.apple_tools_arg(), "scene_kit_assets": { "path": attrs.source(allow_directory = True), }, "swift_toolchain": { "architecture": attrs.string(), "make_swift_comp_db": attrs.default_only(attrs.dep(providers = [RunInfo], default = "prelude//apple/tools:make_swift_comp_db")), "make_swift_interface": attrs.default_only(attrs.dep(providers = [RunInfo], default = "prelude//apple/tools:make_swift_interface")), "object_format": attrs.enum(SwiftObjectFormat.values(), default = "object"), # A placeholder tool that can be used to set up toolchain constraints. # Useful when fat and thin toolchahins share the same underlying tools via `command_alias()`, # which requires setting up separate platform-specific aliases with the correct constraints. "placeholder_tool": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), "platform_path": attrs.option(attrs.source(), default = None), "provide_swift_debug_info": attrs.bool(default = True), "sdk_module_path_prefixes": attrs.dict(key = attrs.string(), value = attrs.source(), default = {}), "sdk_modules": attrs.list(attrs.exec_dep(), default = []), # A list or a root target that represent a graph of sdk modules (e.g Frameworks) "sdk_path": attrs.option(attrs.source(), default = None), # Mark as optional until we remove `_internal_sdk_path` "swift_ide_test_tool": attrs.option(attrs.exec_dep(providers = [RunInfo]), default = None), "swift_stdlib_tool": attrs.exec_dep(providers = [RunInfo]), "swiftc": attrs.exec_dep(providers = [RunInfo]), "use_depsfiles": attrs.bool(default = False), # TODO(T111858757): Mirror of `sdk_path` but treated as a string. It allows us to # pass abs paths during development and using the currently selected Xcode. "_internal_sdk_path": attrs.option(attrs.string(), default = None), "_swiftc_wrapper": attrs.exec_dep(providers = [RunInfo], default = "prelude//apple/tools:swift_exec"), }, # @oss-disable[end= ]: } | meta_only_apple_rule_attributes() } # @oss-enable

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