Reglas de Objective-C

Informar un problema Ver fuente Noche

Reglas

j2objc_library

Ver el código fuente de la regla
j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, exec_compatible_with, exec_properties, features, jre_deps, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Esta regla usa J2ObjC para traducir archivos de origen de Java a Objective-C, que luego se puede usar como dependencias de las reglas objc_library y objc_binary. Puedes encontrar información detallada sobre J2ObjC en el sitio de J2ObjC.

Las marcas de transpilación J2ObjC personalizadas se pueden especificar mediante la marca de compilación --j2objc_translation_flags en la línea de comandos.

Ten en cuenta que los archivos traducidos incluidos en un destino j2objc_library se compilarán usando la configuración de compilación predeterminada, que es la misma que la de las fuentes de una regla objc_library sin opciones de compilación especificadas en los atributos.

Además, se anula la duplicación del código generado a nivel del destino, no del fuente. Si tienes dos destinos de Java diferentes que incluyen los mismos archivos de origen de Java, es posible que veas un error de símbolo duplicado en el momento de la vinculación. La forma correcta de resolver este problema es mover los archivos fuente de Java compartidos a un destino común separado en el que se pueda confiar.

Argumentos

Atributos
name

Name; obligatorio

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Una lista de objetivos j2objc_library, java_library, java_import y java_proto_library que contienen archivos Java para transpilar a Objective-C.

Se traducirán y compilarán todos los destinos java_library y java_import a los que se pueda acceder de forma transitiva mediante exports, deps y runtime_deps, incluidos los archivos generados por el procesamiento de anotaciones de Java. No se admite para los destinos code>java_import sin srcjar especificado.

La traducción de J2ObjC funciona de manera diferente según el tipo de archivos fuente Java de origen incluidos en el cierre transitivo. Por cada archivo fuente .java incluido en srcs de java_library, se generará un archivo fuente .h y .m correspondiente. Para cada jar fuente incluido en srcs de java_library o srcjar de java_import, se generará un archivo fuente .h y .m correspondiente con todo el código para ese jar.

Los usuarios pueden importar los archivos de encabezado generados por J2ObjC en su código. Las rutas de importación de estos archivos son la ruta de acceso relativa de raíz de los artefactos originales de Java. Por ejemplo, //some/package/foo.java tiene una ruta de importación de some/package/foo.h y //some/package/bar.srcjar tiene some/package/bar.h.

Si las reglas proto_library se encuentran en el cierre transitivo de esta regla, los protos J2ObjC también se generarán, compilarán y vincularán a nivel binario. Para //some/proto/foo.proto proto, los usuarios pueden hacer referencia al código generado con la ruta de importación some/proto/foo.j2objc.pb.h.

entry_classes

Lista de cadenas; el valor predeterminado es []

El código ObjC del usuario hará referencia directamente a la lista de clases Java a cuyos equivalentes traducidos ObjC. Este atributo es obligatorio si la marca --j2objc_dead_code_removal está activada. Las clases de Java deben especificarse en sus nombres canónicos, como se define en la especificación de lenguaje Java. Cuando se especifica la marca --j2objc_dead_code_removal, la lista de clases de entrada se recopilará de forma transitiva y se usará como puntos de entrada para realizar un análisis de código no alcanzado. Luego, las clases no usadas se quitarán del paquete de aplicación ObjC final.
jre_deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de bibliotecas de emulación de JRE adicionales que requiere todo el código Java traducido por esta regla j2objc_library. Solo la funcionalidad principal de JRE está vinculada de forma predeterminada.

objc_import

Ver el código fuente de la regla
objc_import(name, deps, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

Esta regla encapsula una biblioteca estática ya compilada en forma de un archivo .a. También permite exportar encabezados y recursos con los mismos atributos que admite objc_library.

Argumentos

Atributos
name

Name; obligatorio

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de destinos de los que depende este objetivo.
hdrs

Lista de etiquetas; el valor predeterminado es []

La lista de archivos de encabezado de C, C++, Objective-C y Objective-C++ que publica esta biblioteca que se incluirán en las fuentes en reglas dependientes.

Estos encabezados describen la interfaz pública de la biblioteca y estarán disponibles para su inclusión por fuentes en esta regla o en reglas dependientes. Los encabezados que no sean incluidos por un cliente de esta biblioteca se deben enumerar en el atributo srcs en su lugar.

Se compilarán por separado de la fuente si los módulos están habilitados.

Booleano; el valor predeterminado es False

Si es 1, cualquier paquete o objeto binario que dependa (directa o indirectamente) de esta biblioteca se vinculará en todos los archivos de objeto de los archivos enumerados en srcs y non_arc_srcs, incluso si algunos no contienen símbolos a los que hace referencia el objeto binario. Esto es útil si no se llama explícitamente a tu código en el objeto binario, p.ej., si se registra para recibir alguna devolución de llamada que proporciona algún servicio.
archives

Lista de etiquetas; obligatorio

Es la lista de archivos .a proporcionados a los objetivos de Objective-C que dependen de este destino.
includes

Lista de cadenas; el valor predeterminado es []

Lista de rutas de búsqueda de #include/#import para agregar a este destino y todos los destinos dependientes. Esto es para admitir bibliotecas de terceros y de código abierto que no especifican la ruta de acceso completa del espacio de trabajo en sus sentencias #import/#include.

Las rutas de acceso se interpretan en relación con el directorio del paquete, y las raíces gen. y bin (p. ej., blaze-genfiles/pkg/includedir y blaze-out/pkg/includedir) se incluyen además de la raíz real del cliente.

A diferencia de COPTS, estas marcas se agregan para esta regla y cada regla que depende de ella. (Nota: No depende de las reglas de las que depende). Ten mucho cuidado, ya que esto puede tener efectos de largo alcance. Si tienes dudas, agrega marcas "-iquote" a COPTS.

sdk_dylibs

Lista de cadenas; el valor predeterminado es []

Nombres de las bibliotecas .dylib del SDK con las que se vincularán. Por ejemplo, "libz" o "libarchive". "libc++" se incluye automáticamente si el objeto binario tiene fuentes C++ u Objective-C++ en su árbol de dependencias. Cuando se vincula un objeto binario, se usan todas las bibliotecas nombradas en su gráfico de dependencia transitiva.
sdk_frameworks

Lista de cadenas; el valor predeterminado es []

Nombres de los frameworks del SDK con los que se vinculará (p.ej., "AddressBook" o "QuartzCore").

Cuando se vincula un objeto binario de Apple de nivel superior, se vinculan todos los frameworks del SDK que se indican en el gráfico de dependencia transitivo de ese objeto binario.

sdk_includes

Lista de cadenas; el valor predeterminado es []

Lista de rutas de búsqueda de #include/#import para agregar a este destino y todos los destinos dependientes, en los que cada ruta está relacionada con $(SDKROOT)/usr/include.
textual_hdrs

Lista de etiquetas; el valor predeterminado es []

Es la lista de archivos C, C++, Objective-C y Objective-C++ que los archivos de origen en esta regla o los usuarios de esta biblioteca incluyen como encabezados. A diferencia de HDFS, no se compilarán por separado de las fuentes.
weak_sdk_frameworks

Lista de cadenas; el valor predeterminado es []

Nombres de frameworks del SDK con los que se vinculará de manera débil. Por ejemplo, "MediaAccessibility". A diferencia de los frameworks del SDK vinculados con regularidad, los símbolos de frameworks con vínculos débiles no generan un error si no están presentes en el entorno de ejecución.

objc_library

Ver el código fuente de la regla
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, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, stamp, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

Esta regla produce una biblioteca estática a partir de los archivos fuente de Objective-C proporcionados.

Argumentos

Atributos
name

Name; obligatorio

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de destinos de los que depende este objetivo.
srcs

Lista de etiquetas; el valor predeterminado es []

La lista de archivos de origen y de encabezado de C, C++, Objective-C y Objective-C++, o archivos de origen de ensamblado (`.s`, `.S` o `.asm`), que se procesan para crear el destino de la biblioteca. Estos son los archivos registrados, más los archivos generados. Los archivos fuente se compilan en archivos .o con Clang. Cualquier fuente o encabezado en el atributo srcs de este destino puede incluir o importar los archivos de encabezado, pero no con los encabezados en hdrs ni ningún destino que dependa de esta regla. Además, los archivos .o precompilados se pueden proporcionar como srcs. Asegúrate de garantizar la coherencia en la arquitectura de los archivos .o proporcionados y la de la compilación para evitar errores de vinculador de símbolos.
hdrs

Lista de etiquetas; el valor predeterminado es []

La lista de archivos de encabezado de C, C++, Objective-C y Objective-C++ que publica esta biblioteca que se incluirán en las fuentes en reglas dependientes.

Estos encabezados describen la interfaz pública de la biblioteca y estarán disponibles para su inclusión por fuentes en esta regla o en reglas dependientes. Los encabezados que no sean incluidos por un cliente de esta biblioteca se deben enumerar en el atributo srcs en su lugar.

Se compilarán por separado de la fuente si los módulos están habilitados.

Booleano; el valor predeterminado es False

Si es 1, cualquier paquete o objeto binario que dependa (directa o indirectamente) de esta biblioteca se vinculará en todos los archivos de objeto de los archivos enumerados en srcs y non_arc_srcs, incluso si algunos no contienen símbolos a los que hace referencia el objeto binario. Esto es útil si no se llama explícitamente a tu código en el objeto binario, p.ej., si se registra para recibir alguna devolución de llamada que proporciona algún servicio.
copts

Lista de cadenas; el valor predeterminado es []

Marcas adicionales para pasar al compilador. Sujeto a la sustitución "Make variable" y a la asignación de token de shell de Bourne. Estas marcas solo se aplicarán a este destino y no a las de las que depende ni a las que dependen de él.

Ten en cuenta que, en el proyecto de Xcode generado, las rutas de acceso a directorios especificadas con marcas “-I” en copts se analizan, se anteponen con “$(WORKSPACE_ROOT)/” si son rutas de acceso relativas y se agregan a las rutas de búsqueda del encabezado para el destino de Xcode asociado.

defines

Lista de cadenas; el valor predeterminado es []

Marcas -D adicionales para pasar al compilador. Deben tener el formato KEY=VALUE o simplemente KEY, y se pasan no solo al compilador para este destino (como sucede con copts), sino también a todos los objc_dependientes de este objetivo. Sujeto a la sustitución "Make variable" y a la asignación de token de shell de Bourne.
enable_modules

Booleano; el valor predeterminado es False

Habilita la compatibilidad con el módulo Clang (a través de -fmodules). Si lo estableces en 1, podrás usar @import encabezados del sistema y otros objetivos: @import UIKit; @import path_to_package_target;
implementation_deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de otras bibliotecas de las que depende la biblioteca objetivo. A diferencia de deps, los encabezados y las rutas de acceso de inclusión de estas bibliotecas (y todas sus dependencias transitivas) solo se usan para la compilación de esta biblioteca, y no para las bibliotecas que dependen de ella. Las bibliotecas especificadas con implementation_deps siguen vinculadas en objetivos binarios que dependen de ella.
includes

Lista de cadenas; el valor predeterminado es []

Lista de rutas de búsqueda de #include/#import para agregar a este destino y todos los destinos dependientes. Esto es para admitir bibliotecas de terceros y de código abierto que no especifican la ruta de acceso completa del espacio de trabajo en sus sentencias #import/#include.

Las rutas de acceso se interpretan en relación con el directorio del paquete, y las raíces gen. y bin (p. ej., blaze-genfiles/pkg/includedir y blaze-out/pkg/includedir) se incluyen además de la raíz real del cliente.

A diferencia de COPTS, estas marcas se agregan para esta regla y cada regla que depende de ella. (Nota: No depende de las reglas de las que depende). Ten mucho cuidado, ya que esto puede tener efectos de largo alcance. Si tienes dudas, agrega marcas "-iquote" a COPTS.

linkopts

Lista de cadenas; el valor predeterminado es []

Marcas adicionales para pasar al vinculador.
module_map

Etiqueta; el valor predeterminado es None

un mapa de módulos personalizado de Clang para este destino. No se recomienda el uso de un mapa de módulos personalizado. La mayoría de los usuarios deben usar mapas de módulos generados por Bazel. Si se especifica, Bazel no generará un mapa de módulos para este destino, pero pasará el mapa de módulos proporcionado al compilador.
module_name

String; el valor predeterminado es ""

Establece el nombre del módulo para este destino. De forma predeterminada, el nombre del módulo es la ruta de destino con todos los símbolos especiales reemplazados por _, p.ej., //foo/baz:bar se puede importar como foo_baz_bar.
non_arc_srcs

Lista de etiquetas; el valor predeterminado es []

Es la lista de archivos de Objective-C que se procesan para crear el destino de la biblioteca que NO usa ARC. Los archivos de este atributo se tratan de manera muy similar a los del atributo srcs, pero se compilan sin ARC habilitado.
pch

Etiqueta; el valor predeterminado es None

Archivo de encabezado que se antepondrá a cada archivo de origen que se compile (arco y no arco). Se desaconseja el uso de archivos pch en los archivos BUILD y se debe considerar obsoleto. Como los archivos pch no están precompilados, no se trata de una mejora en la velocidad de compilación, sino solo una dependencia global. Desde el punto de vista de la eficiencia de compilación, es mejor incluir directamente lo que necesitas en las fuentes donde lo necesites.
sdk_dylibs

Lista de cadenas; el valor predeterminado es []

Nombres de las bibliotecas .dylib del SDK con las que se vincularán. Por ejemplo, "libz" o "libarchive". "libc++" se incluye automáticamente si el objeto binario tiene fuentes C++ u Objective-C++ en su árbol de dependencias. Cuando se vincula un objeto binario, se usan todas las bibliotecas nombradas en su gráfico de dependencia transitiva.
sdk_frameworks

Lista de cadenas; el valor predeterminado es []

Nombres de los frameworks del SDK con los que se vinculará (p.ej., "AddressBook" o "QuartzCore").

Cuando se vincula un objeto binario de Apple de nivel superior, se vinculan todos los frameworks del SDK que se indican en el gráfico de dependencia transitivo de ese objeto binario.

sdk_includes

Lista de cadenas; el valor predeterminado es []

Lista de rutas de búsqueda de #include/#import para agregar a este destino y todos los destinos dependientes, en los que cada ruta está relacionada con $(SDKROOT)/usr/include.
stamp

Booleano; el valor predeterminado es False

textual_hdrs

Lista de etiquetas; el valor predeterminado es []

Es la lista de archivos C, C++, Objective-C y Objective-C++ que los archivos de origen en esta regla o los usuarios de esta biblioteca incluyen como encabezados. A diferencia de HDFS, no se compilarán por separado de las fuentes.
weak_sdk_frameworks

Lista de cadenas; el valor predeterminado es []

Nombres de frameworks del SDK con los que se vinculará de manera débil. Por ejemplo, "MediaAccessibility". A diferencia de los frameworks del SDK vinculados con regularidad, los símbolos de frameworks con vínculos débiles no generan un error si no están presentes en el entorno de ejecución.