Format de fichier Android.bp

Les fichiers Android.bp sont conçus pour être simples à utiliser. Ils ne contiennent pas d’expressions conditionnelles ou les instructions de flux de contrôle ; toute la complexité est gérée par une logique de compilation écrite OK. Dans la mesure du possible, la syntaxe et la sémantique des fichiers Android.bp sont similaires à Fichiers CREATE Bazel

Modules

Un module d'un fichier Android.bp commence par type de module suivi d'un ensemble de propriétés au format name: "value",:

cc_binary {
    name: "gzip",
    srcs: ["src/test/minigzip.c"],
    shared_libs: ["libz"],
    stl: "none",
}

Chaque module doit avoir une propriété name, et la valeur doit être unique dans tous les fichiers Android.bp, à l'exception des valeurs de propriété name dans des espaces de noms et des modules prédéfinis, qui peuvent être répétés.

La propriété srcs spécifie les fichiers sources utilisés pour créer le module, sous la forme liste de chaînes. Vous pouvez référencer la sortie d'autres modules qui produisent des fichiers sources, comme genrule ou filegroup, à l'aide de la référence du module ":<module-name>".

Pour obtenir la liste des types de modules valides et de leurs propriétés, consultez le Documentation de référence sur les modules Soong

Types

Les variables et les propriétés sont très typées, les variables étant basées de manière dynamique la première attribution, et les propriétés définies de manière statique par le type de module. La types pris en charge sont les suivants:

  • Booléens (true ou false)
  • Entiers (int)
  • Chaînes ("string")
  • Listes de chaînes (["string1", "string2"])
  • Cartes ({key1: "value1", key2: ["value2"]})

Les cartes peuvent contenir des valeurs de n'importe quel type, y compris des cartes imbriquées. Les listes et les cartes peuvent avoir une virgule de fin après la dernière valeur.

Globes

Les propriétés qui utilisent une liste de fichiers, comme srcs, peuvent également utiliser le schéma glob. modèles de ML. Les modèles de globe peuvent contenir le caractère générique UNIX normal *, par exemple *.java Les modèles glob peuvent également contenir un seul caractère générique ** comme chemin d'accès. , qui correspond à zéro, un ou plusieurs éléments de tracé. Par exemple : java/**/*.java correspond à la fois aux java/Main.java et Modèles java/com/android/Main.java.

Variables

Un fichier Android.bp peut contenir des attributions de variables de niveau supérieur:

gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
    name: "gzip",
    srcs: gzip_srcs,
    shared_libs: ["libz"],
    stl: "none",
}

Les variables sont limitées au reste du fichier dans lequel elles sont déclarées. que n'importe quel fichier de plan enfant. Les variables sont immuables, à une exception près: elles peuvent être ajoutées par une attribution +=, mais uniquement avant d'être référencées.

Commentaires

Les fichiers Android.bp peuvent contenir un /* */ multiligne de style C++ et un style C++ commentaires // sur une seule ligne.

Opérateurs

Vous pouvez ajouter des chaînes, des listes de chaînes et des mappages à l'aide de l'opérateur +. Les nombres entiers peuvent être additionnés à l'aide de l'opérateur +. L'ajout d'une carte produit l'union de clés dans les deux mappages, en ajoutant les valeurs de toutes les clés présentes dans les deux cartes.

Expressions conditionnelles

Soong n'accepte pas les instructions conditionnelles dans les fichiers Android.bp. À la place, la complexité des règles de compilation nécessitant des conditions sont gérées dans Go. où des fonctionnalités de langage de haut niveau peuvent être utilisées, et les dépendances implicites introduites par des conditions peut être suivi. La plupart des instructions conditionnelles sont converties en map, où l'une des valeurs de la carte est sélectionnée et ajoutée aux propriétés de premier niveau.

Par exemple, pour prendre en charge les fichiers spécifiques à l'architecture:

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

Outil de mise en forme

Soong inclut un outil de mise en forme canonique pour les fichiers de plan, semblable à gofmt Tout reformater de manière récursive Android.bp dans le répertoire actuel, exécutez la commande suivante:

bpfmt -w .

Le format canonique comprend des retraits à quatre espaces, de nouvelles lignes après chaque élément d'une liste à plusieurs éléments, et une virgule de fin dans les listes et les cartes.