Introduction
L'API en bac à sable (SAPI) peut être utilisée avec le système de compilation Bazel de Google ou avec le système de métacompilation CMake. Cette page se concentre sur Bazel, mais les mêmes fonctionnalités sont disponibles pour CMake. Bazel est le système de compilation recommandé et le plus facile à intégrer.
Dans votre fichier BUILD.bazel, vous disposez d'une règle de compilation pour compiler votre code hôte. Pour que le code hôte utilise la version en bac à sable d'une bibliothèque, vous devez préparer une cible de compilation que votre code hôte utilisera.
Règles de compilation SAPI
- sapi_library
sapi_library
sapi_library(name, deps, srcs, hdrs, embed, functions, lib, lib_name, input_files, namespace, header, add_default_deps, limit_scan_depth, visibility)
Cibles de sortie
La règle de compilation sapi_library() génère les cibles suivantes :
- name-sapi : bibliothèque en bac à sable, remplace la cc_library normale en tant que cible de code hôte. Composée de
zlib_sapi.binet de dépendances de bac à sable. - name.interface : interface de bibliothèque générée.
- name.embed : cible
cc_embed_data()utilisée pour intégrer le Sandboxee dans le binaire. Consultez bazel/embed_data.bzl.- name.bin : binaire Sandboxee, composé d'un petit stub de communication et de la bibliothèque en bac à sable.
Arguments
| Attributs | |
|---|---|
| nom |
Nom ; obligatoire Nom unique pour cette cible. Il identifie la bibliothèque C/C++ en bac à sable. Consultez la cible de sortie name-sapi. |
| dép. |
Liste de libellés ; facultatif Liste d'autres bibliothèques à lier à la bibliothèque C/C++ en bac à sable. |
| srcs |
Liste de libellés ; facultatif Liste de fichiers C et C++ traités pour créer la bibliothèque C/C++ en bac à sable. Il s'agit de fichiers sources et d'en-tête C/C++, soit non générés (code source normal) ou générés. Pour en savoir plus, consultez l'explication de l'attribut srcs dans la documentation cc_library. |
| hdrs | Liste de libellés ; facultatif Liste de fichiers d'en-tête traités pour créer la bibliothèque C/C++ en bac à sable. C'est là que doit se trouver la définition du bac à sable (sandbox.h). Laissez ce champ vide si la bibliothèque SAPI intégrée est utilisée et que la configuration par défaut du bac à sable (DefaultConfig, qui utilise |
| embed | Valeur booléenne ; facultatif ; la valeur par défaut est True Si la valeur est True, la bibliothèque en bac à sable doit être intégrée dans le code hôte
code. Cela permet d'initialiser le bac à sable SAPI avec le
|
| fonctions | Liste de noms de fonctions ; facultatif Liste de fonctions de la bibliothèque C/C++ pour lesquelles une version en bac à sable est générée et qui peuvent ensuite être utilisées dans le code hôte. Une liste vide tente d'exporter et d'encapsuler toutes les fonctions trouvées dans la bibliothèque. |
| lib | Chaîne ; obligatoire Nom de la cible de la bibliothèque C/C++ qui sera la bibliothèque en bac à sable. Cela suppose que vous disposez d'une règle de compilation cc_library pour la bibliothèque C/C++ dans le projet. |
| lib_name | Chaîne ; obligatoire Nom de l'objet SAPI utilisé pour proxy les fonctions de la bibliothèque à partir de l'attribut functions. Tout appel à la fonction dans the bibliothèque en bac à sable se fait via l'objet SAPI. |
| input_files | Liste de libellés ; facultatif Liste de fichiers C et C++ traités lors de l'exécution interne de la règle sapi_interface. Le générateur analyse ces fichiers pour les déclarations de fonction de la bibliothèque C/C++. Cela n'est généralement pas nécessaire, car les en-têtes exportés de la bibliothèque C/C++ sont toujours analysés. |
| espace de noms | Chaîne ; facultatif ; la valeur par défaut est sapigen Identifiant d'espace de noms C++ dans lequel placer l'objet SAPI défini par lib_name into. L'espace de noms par défaut est sapigen. |
| en-tête | Chaîne ; facultatif Nom du fichier d'en-tête à utiliser à la place du fichier d'en-tête généré file. Si vous souhaitez générer automatiquement le code, n'utilisez pas cet attribut |
| add_default_deps | Valeur booléenne ; facultatif ; la valeur par défaut est True OBSOLÈTE |
| limit_scan_depth | Valeur booléenne ; facultatif ; la valeur par défaut est False Pour les bibliothèques complexes, le nombre de fichiers pour Bazel peut être atteint et le processus de compilation échoue. Cet attribut est une solution de secours pour ces situations complexes. Ne l'utilisez pas sauf si nécessaire. |
| tags | Consultez la documentation Bazel pour les tags. |
| visibility | Consultez la documentation Bazel pour la visibilité |
Exemple d'utilisation
L'exemple zlib est un bon projet de référence qui montre comment utiliser la règle de compilation sapi_library :
load(
"//sandboxed_api/tools/generator:sapi_generator.bzl",
"sapi_library",
)
sapi_library(
name = "zlib-sapi",
srcs = [], # Extra code compiled with the SAPI library
hdrs = [], # Leave empty if embedded SAPI libraries are used, and the
# default sandbox configuration (DefaultConfig) is sufficient.
embed = True, # This is the default
functions = [
"deflateInit_",
"deflate",
"deflateEnd",
],
lib = "@zlib//:zlibonly",
lib_name = "Zlib",
namespace = "sapi::zlib",
)