Spec-Zone.ru › Bazel 6.0

Правила 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

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

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

defines

List of strings; optional

Дополнительные флаги -D для компилятора. Они должны иметь вид KEY=VALUE или просто KEY и передаются не только компилятору для этой цели (как copts), но и всем зависимым от этой цели целям. Подлежат подстановке переменных Makefile и токенизации оболочки 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 module map для этой цели. Использование пользовательского модульного файла не рекомендуется. Большинство пользователей должны использовать модульные файлы, сгенерированные 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

Локальные
remote_versions

Label; optional; nonconfigurable

Удалённые
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

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

String; optional; nonconfigurable

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

String; optional; nonconfigurable

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

String; required; nonconfigurable

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

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

Последнее обновление 2022-12-19 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.0.0/reference/be/objective-c

Spec-Zone.ru

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