Spec-Zone.ru › Bazel 6.2

Правила Objective-C

Правила

  • j2objc_library
  • objc_import
  • objc_library
  • доступные Xcode
  • настройка Xcode
  • версия Xcode

j2objc_library

j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, features, jre_deps, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

Это правило использует J2ObjC для преобразования Java-исходных файлов в Objective-C, которые затем могут быть использованы в качестве зависимостей правил objc_library и objc_binary. Подробную информацию о самом J2ObjC можно найти на сайте J2ObjC

Пользовательские флаги транспиляции J2ObjC можно указать с помощью флага сборки --j2objc_translation_flags в командной строке.

Обратите внимание, что переведённые файлы, включённые в цель j2objc_library, будут скомпилированы с использованием стандартной конфигурации компиляции, той же, что и для исходных файлов правила objc_library без указанных опций компиляции в атрибутах.

Кроме того, сгенерированный код дедуплицируется на уровне цели, а не на уровне исходного кода. Если у вас есть две разные Java-цели, содержащие одни и те же Java-исходные файлы, вы можете получить ошибку дублирования символов во время линковки. Правильный способ решения этой проблемы — поместить общие Java-исходные файлы в отдельную общую цель, от которой можно зависеть.

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

deps

List of labels; optional

Список целей j2objc_library, java_library, java_import и java_proto_library, содержащих Java-файлы, которые должны быть преобразованы в Objective-C.

Все цели java_library и java_import, которые могут быть достигнуты транзитивно через exports, deps и runtime_deps, будут преобразованы и скомпилированы. В настоящее время нет поддержки файлов, сгенерированных обработкой Java-аннотаций или целей java_import без указанных srcjar.

Преобразование J2ObjC работает по-разному в зависимости от типа исходных Java-файлов, включённых в транзитивное замыкание. Для каждого файла .java, включённого в srcs из java_library, будет сгенерирован соответствующий файл .h и .m. Для каждого исходного jar-файла, включённого в srcs из java_library или srcjar из java_import, будет сгенерирован соответствующий файл .h и .m с кодом этого jar-файла.

Пользователи могут импортировать сгенерированные J2ObjC-заголовочные файлы в свой код. Пути импорта для этих файлов — это относительные пути к корню оригинальных Java-артефактов. Например, //some/package/foo.java имеет путь импорта some/package/foo.h, а //some/package/bar.srcjar имеет some/package/bar.h.

Если правила proto_library находятся в транзитивном замыкании этого правила, J2ObjC также сгенерирует, скомпилирует и подключит протоколы на уровне двоичного файла. Для протокола //some/proto/foo.proto, пользователи могут обратиться к сгенерированному коду с помощью пути импорта some/proto/foo.j2objc.pb.h.

entry_classes

List of strings; optional

Список Java-классов, переведённые Objective-C-эквиваленты которых будут непосредственно использоваться в пользовательском Objective-C-коде. Этот атрибут необходим, если флаг --j2objc_dead_code_removal включён. Java-классы должны быть указаны в своих канонических именах, как определено в спецификации языка Java. Если указан флаг --j2objc_dead_code_removal, список входных классов будет собираться транзитивно и использоваться в качестве точек входа для анализа мёртвого кода. Неиспользуемые классы будут удалены из конечного Objective-C-пакета приложения.
jre_deps

List of labels; optional

Список дополнительных библиотек эмуляции JRE, необходимых для всего Java-кода, преобразованного этим правилом j2objc_library. По умолчанию подключается только функциональность ядра JRE.

objc_import

objc_import(name, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, features, includes, licenses, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, visibility, weak_sdk_frameworks)

Это правило инкапсулирует уже скомпилированную статическую библиотеку в виде файла .a. Оно также позволяет экспортировать заголовки и ресурсы с помощью тех же атрибутов, поддерживаемых objc_library.

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

hdrs

List of labels; optional

Список C, C++, Objective-C и Objective-C++ заголовочных файлов, опубликованных этой библиотекой для включения источниками в зависимых правилах.

Эти заголовки описывают публичный интерфейс библиотеки и будут доступны для включения источниками в этом правиле или в зависимых правилах. Заголовки, которые не должны включаться клиентом этой библиотеки, должны быть указаны в атрибуте srcs.

Эти заголовки будут компилироваться отдельно от исходных файлов, если модули включены.

alwayslink

Boolean; optional; default is False

Если 1, любой пакет или двоичный файл, который зависит (прямо или косвенно) от этой библиотеки, будет линковать все объектные файлы для файлов, перечисленных в srcs и non_arc_srcs, даже если некоторые из них не содержат символы, на которые ссылается двоичный файл. Это полезно, если ваш код явно не вызывается кодом в двоичном файле, например, если ваш код регистрируется для получения обратного вызова, предоставляемого некоторой службой.
archives

List of labels; required

Список файлов .a предоставляемых Objective-C-целям, зависящим от этой цели.
includes

List of strings; optional

Список #include/#import путей поиска, которые нужно добавить к этой цели и всем зависимым целям. Это необходимо для поддержки сторонних и открытых библиотек, которые не указывают полный путь рабочего пространства в своих директивах #import/#include.

Пути интерпретируются относительно каталога пакета, и каталоги genfiles и bin (например, blaze-genfiles/pkg/includedir и blaze-out/pkg/includedir) включаются помимо фактического корня клиента.

В отличие от COPTS, эти флаги добавляются для этого правила и для каждого правила, зависящего от него. (Примечание: не для правил, от которых оно зависит!) Будьте очень осторожны, так как это может иметь далеко идущие последствия. В случае сомнений, добавьте флаги "-iquote" к COPTS вместо этого.

sdk_dylibs

List of strings; optional

Имена библиотек SDK .dylib для линковки. Например, "libz" или "libarchive". "libc++" включается автоматически, если двоичный файл содержит какие-либо C++ или Objective-C++ исходные файлы в своей зависимости. При линковке двоичного файла используются все библиотеки, указанные в графе транзитивных зависимостей этого двоичного файла.
sdk_frameworks

List of strings; optional

Имена фреймворков SDK для линковки (например, "AddressBook", "QuartzCore"). "UIKit" и "Foundation" всегда включаются при построении для платформ iOS, tvOS и watchOS. Для macOS всегда включается только "Foundation".

При линковке верхнего уровня Apple-двоичного файла линковались все фреймворки SDK, перечисленные в графе транзитивных зависимостей этого двоичного файла.

sdk_includes

List of strings; optional

Список #include/#import путей поиска, которые нужно добавить к этой цели и всем зависимым целям, где каждый путь относительн $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

Список C, C++, Objective-C и Objective-C++ файлов, которые включаются как заголовки источниками в этом правиле или пользователями этой библиотеки. В отличие от hdrs, эти файлы не будут компилироваться отдельно от источников.
weak_sdk_frameworks

List of strings; optional

Имена фреймворков SDK для слабой линковки. Например, "MediaAccessibility". В отличие от обычно линкованных фреймворков SDK, символы из слабо линкованных фреймворков не вызывают ошибку, если они отсутствуют во время выполнения.

objc_library

objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, enable_modules, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, runtime_deps, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

Это правило создаёт статическую библиотеку из заданных Objective-C-исходных файлов.

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

deps

List of labels; optional

Список целей, связанные вместе для формирования конечного пакета.
srcs

List of labels; optional

Список файлов исходного кода на C, C++, Objective-C и Objective-C++, файлов заголовков и/или файлов ассемблерного кода (`.s`, `.S` или `.asm`), обрабатываемых для создания целевого объекта библиотеки. Это ваши файлы, проверенные на наличие ошибок, плюс любые сгенерированные файлы. Исходные файлы компилируются в файлы .o с помощью Clang. Файлы заголовков могут включаться/импортироваться любыми исходными или заголовочными файлами в атрибуте srcs этой цели, но не заголовками в атрибуте hdrs или любыми целями, которые зависят от этой правила. Кроме того, могут предоставляться предварительно скомпилированные файлы .o. Обратите внимание на соответствие архитектуры предоставленных файлов .o и архитектуры сборки, чтобы избежать ошибок линковщика, связанных с пропущенными символами.
hdrs

List of labels; optional

Список файлов заголовков C, C++, Objective-C и Objective-C++, опубликованных этой библиотекой для включения в исходные файлы зависимых правил.

Эти заголовки описывают публичный интерфейс библиотеки и будут доступны для включения исходными файлами в этом правиле или в зависимых правилах. Заголовки, которые не предназначены для включения клиентом этой библиотеки, должны быть перечислены в атрибуте srcs вместо этого.

Они будут компилироваться отдельно от исходного кода, если включены модули.

alwayslink

Boolean; optional; default is False

Если 1, любой пакет или двоичный файл, который зависит (прямо или косвенно) от этой библиотеки, будет подключать все файлы объектов, указанные в srcs и non_arc_srcs, даже если некоторые из них не содержат символов, на которые ссылается двоичный файл. Это полезно, если ваш код не вызывается явно кодом в двоичном файле, например, если ваш код регистрируется для получения обратного вызова, предоставляемого какой-то службой.
copts

List of strings; optional

Дополнительные флаги для передачи компилятору. Подлежат подстановке переменных Make и токенизации оболочки Bourne. Эти флаги будут применяться только к этой цели, а не к целям, от которых она зависит, или к целям, которые зависят от нее.

Обратите внимание, что для сгенерированного проекта Xcode пути к каталогам, указанные с помощью флагов "-I" в copts, анализируются, добавляются префиксы "$(WORKSPACE_ROOT)/" , если это относительные пути, и добавляются в пути поиска заголовков для соответствующей цели Xcode.

defines

List of strings; optional

Дополнительные флаги -D для передачи компилятору. Они должны быть в формате KEY=VALUE или просто KEY, и передаются не только компилятору для этой цели (как copts), но и всем objc_ зависимым целям этой цели. Подлежат подстановке переменных Make и токенизации оболочки Bourne.
enable_modules

Boolean; optional; default is False

Включает поддержку модулей clang (через -fmodules). Установка значения 1 позволит вам @import системные заголовки и другие цели: @import UIKit; @import path_to_package_target;
includes

List of strings; optional

Список путей поиска #include/#import для добавления к этой цели и всем зависимым целям. Это для поддержки сторонних и открытых библиотек, которые не указывают весь путь к рабочей области в своих #import/#include объявлениях.

Пути интерпретируются относительно каталога пакета, и корни genfiles и bin (например, blaze-genfiles/pkg/includedir и blaze-out/pkg/includedir) включаются помимо фактического корня клиента.

В отличие от COPTS, эти флаги добавляются для этого правила и для каждого правила, которое зависит от него. (Примечание: не правила, от которых оно зависит!) Будьте очень осторожны, так как это может иметь далеко идущие последствия. В случае сомнений, добавьте флаги "-iquote" к COPTS вместо этого.

linkopts

List of strings; optional

Дополнительные флаги для передачи линковщику.
module_map

Label; optional

Пользовательский карта модулей Clang для этой цели. Использование пользовательской карты модулей не рекомендуется. Большинство пользователей должны использовать карты модулей, генерируемые Bazel. Если указано, Bazel не сгенерирует карту модулей для этой цели, но передаст предоставленную карту модулей компилятору.
module_name

String; optional

Устанавливает имя модуля для этой цели. По умолчанию имя модуля — путь к цели со всеми специальными символами, заменёнными на «_», например, //foo/baz:bar можно импортировать как foo_baz_bar.
non_arc_srcs

List of labels; optional

Список файлов Objective-C, обрабатываемых для создания целевого объекта библиотеки, НЕ использующих ARC. Файлы в этом атрибуте обрабатываются очень похожим образом, как файлы в атрибуте srcs, но компилируются без включения ARC.
pch

Label; optional

Файл заголовка, добавляемый перед каждым компилируемым исходным файлом (как с ARC, так и без). Использование файлов pch в файлах BUILD активно не рекомендуется, и это следует считать устаревшим. Поскольку файлы pch фактически не предварительно компилируются, это не ускорение сборки, а всего лишь глобальная зависимость. С точки зрения эффективности сборки, вам на самом деле лучше включать необходимые файлы непосредственно в свои исходные файлы там, где они вам нужны.
runtime_deps

List of labels; optional

Список целей фреймворков, которые подключаются динамически во время выполнения. Они включены в пакет приложения, но не подключаются при сборке.
sdk_dylibs

List of strings; optional

Имена библиотек SDK .dylib, с которыми следует связать. Например, "libz" или "libarchive". "libc++" включается автоматически, если в дереве зависимостей двоичного файла есть какие-либо файлы C++ или Objective-C++. При линковании двоичного файла используются все библиотеки, перечисленные в графе транзитивных зависимостей этого двоичного файла.
sdk_frameworks

List of strings; optional

Имена фреймворков SDK, с которыми следует связать (например, "AddressBook", "QuartzCore"). "UIKit" и "Foundation" всегда включаются при построении для платформ iOS, tvOS и watchOS. Для macOS всегда включается только "Foundation".

При линковании двоичного файла верхнего уровня Apple линковаются все фреймворки SDK, перечисленные в графе транзитивных зависимостей этого двоичного файла.

sdk_includes

List of strings; optional

Список путей поиска #include/#import для добавления к этой цели и всем зависимым целям, где каждый путь является относительным к $(SDKROOT)/usr/include.
textual_hdrs

List of labels; optional

Список файлов C, C++, Objective-C и Objective-C++, которые включаются как заголовки исходными файлами в этом правиле или пользователями этой библиотеки. В отличие от hdrs, они не будут компилироваться отдельно от исходных файлов.
weak_sdk_frameworks

List of strings; optional

Имена фреймворков SDK, с которыми следует слабо связать. Например, "MediaAccessibility". В отличие от обычно связанных фреймворков SDK, символы из слабо связанных фреймворков не вызывают ошибки, если они отсутствуют во время выполнения.

Доступные Xcode

available_xcodes(name, default, deprecation, distribs, features, licenses, tags, testonly, versions, visibility)

Две цели этого правила могут зависеть от экземпляра правила xcode_config для указания удалённо и локально доступных версий Xcode. Это позволяет выбрать официальную версию Xcode из совокупности доступных версий.

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

default

Label; required; nonconfigurable

Версия Xcode по умолчанию для этой платформы.
versions

List of labels; optional; nonconfigurable

Доступные версии Xcode на этой платформе.

Настройки Xcode

xcode_config(name, default, deprecation, distribs, features, licenses, local_versions, remote_versions, tags, testonly, versions, visibility)

Одна единственная цель этого правила может ссылаться на флаг сборки --xcode_version_config для перевода флага --xcode_version в принятую официальную версию Xcode. Это позволяет выбрать официальную версию Xcode из нескольких зарегистрированных псевдонимов.

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

default

Label; optional; nonconfigurable

По умолчанию официальная версия Xcode для использования. Версия, указанная с помощью предоставленной цели xcode_version, используется, если не задан флаг сборки xcode_version. Это необходимо, если установлены какие-либо versions. Это не может быть установлено, если установлены remote_versions или local_versions.
local_versions

Label; optional; nonconfigurable

xcode_version targets that are available locally. These are used along with local_versions to select a mutually available version. This may not be set if versions is set.
remote_versions

Label; optional; nonconfigurable

xcode_version targets that are available remotely. These are used along with remote_versions to select a mutually available version. This may not be set if versions is set.
versions

List of labels; optional; nonconfigurable

Принятые xcode_version targets that may be used. If the value of the xcode_version build flag matches one of the aliases or version number of any of the given xcode_version targets, the matching target will be used. This may not be set if remote_versions or local_versions is set.

Версия Xcode

xcode_version(name, default_ios_sdk_version, default_macos_sdk_version, default_tvos_sdk_version, default_watchos_sdk_version, deprecation, distribs, features, licenses, tags, testonly, version, visibility)

Представляет одну официальную версию Xcode с допустимыми псевдонимами для этой версии Xcode. См. правило xcode_config.

Аргументы

Атрибуты
name

Name; required

Уникальное имя для этой цели.

default_ios_sdk_version

String; optional; nonconfigurable

Версия ios sdk, используемая по умолчанию при использовании этой версии Xcode. Флаг сборки ios_sdk_version переопределит значение, указанное здесь.
default_macos_sdk_version

String; optional; nonconfigurable

Версия macOS sdk, используемая по умолчанию при использовании этой версии Xcode. Флаг сборки macos_sdk_version переопределит значение, указанное здесь.
default_tvos_sdk_version

String; optional; nonconfigurable

Версия tvOS sdk, используемая по умолчанию при использовании этой версии Xcode. Флаг сборки tvos_sdk_version переопределит значение, указанное здесь.
default_watchos_sdk_version

String; optional; nonconfigurable

Версия watchOS sdk, используемая по умолчанию при использовании этой версии Xcode. Флаг сборки watchos_sdk_version переопределит значение, указанное здесь.
version

String; required; nonconfigurable

Официальное номер версии Xcode.

За исключением случаев, оговоренных отдельно, содержимое этой страницы лицензировано по лицензии Creative Commons Attribution 4.0, а примеры кода лицензированы по лицензии Apache 2.0. Подробности см. в Политике Google Developers. Java — зарегистрированная торговая марка Oracle и/или ее дочерних компаний.

Последнее обновление 2023-05-15 UTC.

Licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License.
https://bazel.build/versions/6.2.0/reference/be/objective-c

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API