Spec-Zone.ru › Bazel 6.4

Правила 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, visionOS и 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, implementation_deps, 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 как srcs. Следует следить за согласованностью архитектуры предоставленных файлов .o и архитектуры сборки, чтобы избежать ошибок линкера, связанных с недостающими символами.
hdrs

List of labels; optional

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

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

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

alwayslink

Boolean; optional; default is False

Если 1, любой пакет или двоичный файл, который зависит (прямо или косвенно) от этой библиотеки, будет подключать все файлы .o для файлов, перечисленных в 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;
implementation_deps

List of labels; optional

Список других библиотек, от которых зависит целевой объект библиотеки. В отличие от deps, заголовки и пути включения этих библиотек (и всех их транзитивных зависимостей) используются только для компиляции этой библиотеки, а не библиотек, которые зависят от нее. Библиотеки, указанные с implementation_deps, все равно подключаются к двоичным целям, которые зависят от этой библиотеки.
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, так и без 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, visionOS и 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 не указан, используется версия, указанная в целевом объекте. Требуется, если установлены любые 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_version

xcode_version(name, default_ios_sdk_version, default_macos_sdk_version, default_tvos_sdk_version, default_visionos_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_visionos_sdk_version

String; optional; nonconfigurable

Версия visionOS SDK, используемая по умолчанию при использовании этой версии Xcode. Флаг сборки visionos_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 для разработчиков. Java — зарегистрированный товарный знак Oracle и/или её филиалов.

Последнее обновление 2023-10-20 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.4.0/reference/be/objective-c

Spec-Zone.ru

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