Spec-Zone.ru › Bazel 7.0

Правила Objective-C

Правила

  • j2objc_library
  • objc_import
  • objc_library
  • доступные_xcode
  • xcode_config
  • xcode_version

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

Имя; обязательно

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

deps

Список меток; значение по умолчанию []

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

Все java_library и java_import цели, которые могут быть достигнуты транзитивно через exports, deps и runtime_deps, будут переведены и скомпилированы, включая файлы, сгенерированные обработкой аннотаций Java. Поддержка правил без указанных 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

Список строк; значение по умолчанию []

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

Список меток; значение по умолчанию []

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

objc_import

objc_import(name, deps, 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

Имя; обязательно

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

deps

Список меток; значение по умолчанию []

Список целей, от которых зависит эта цель.
hdrs

Список меток; значение по умолчанию []

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

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

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

alwayslink

Булево; значение по умолчанию False

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

Список меток; обязательно

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

Список строк; значение по умолчанию []

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

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

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

sdk_dylibs

Список строк; значение по умолчанию []

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

Список строк; значение по умолчанию []

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

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

sdk_includes

Список строк; значение по умолчанию []

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

Список меток; значение по умолчанию []

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

Список строк; значение по умолчанию []

Имена фреймворков 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, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

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

Аргументы

Атрибуты
name

Имя; обязательно

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

deps

Список меток; значение по умолчанию []

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

Список меток; значение по умолчанию []

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

Список меток; значение по умолчанию []

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

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

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

alwayslink

Булево; значение по умолчанию False

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

Список строк; значение по умолчанию []

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

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

defines

Список строк; значение по умолчанию []

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

Булево; значение по умолчанию False

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

Список меток; значение по умолчанию []

Список других библиотек, от которых зависит целевой объект библиотеки. В отличие от deps, заголовки и пути включения этих библиотек (и всех их транзитивных зависимостей) используются только для компиляции этой библиотеки, а не библиотек, которые от нее зависят. Библиотеки, указанные в implementation_deps, по-прежнему подключаются к двоичным целям, которые зависят от этой библиотеки.
includes

Список строк; значение по умолчанию []

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

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

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

linkopts

Список строк; значение по умолчанию []

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

Метка; значение по умолчанию None

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

Строка; значение по умолчанию ""

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

Список меток; значение по умолчанию []

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

Метка; значение по умолчанию None

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

Список строк; значение по умолчанию []

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

Список строк; значение по умолчанию []

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

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

sdk_includes

Список строк; значение по умолчанию []

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

Список меток; значение по умолчанию []

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

Список строк; значение по умолчанию []

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

Доступные версии Xcode

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

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

Аргументы

Атрибуты
name

Имя; обязательно

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

default

Метка; не настраиваемый; обязательно

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

Список меток; не настраиваемый; значение по умолчанию []

Версии 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

Имя; обязательно

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

default

Метка; не настраиваемый; значение по умолчанию — None

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

Метка; не настраиваемый; значение по умолчанию — None

Целевые объекты xcode_version, доступные локально. Используются вместе с local_versions, чтобы выбрать взаимно доступную версию. Не может быть установлено, если задан versions .
remote_versions

Метка; не настраиваемый; значение по умолчанию — None

Целевые объекты xcode_version, доступные удалённо. Используются вместе с remote_versions, чтобы выбрать взаимно доступную версию. Не может быть установлено, если задан versions .
versions

Список меток; не настраиваемый; значение по умолчанию — []

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

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

Имя; обязательно

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

default_ios_sdk_version

Строка; не настраиваемый; значение по умолчанию — ""

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

Строка; не настраиваемый; значение по умолчанию — ""

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

Строка; не настраиваемый; значение по умолчанию — ""

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

Строка; не настраиваемый; значение по умолчанию — ""

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

Строка; не настраиваемый; значение по умолчанию — ""

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

Строка; не настраиваемый; обязательно

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

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

Последнее обновление 2023-12-11 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/7.0.0/reference/be/objective-c

Spec-Zone.ru

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