Convertir de Make vers Soong

Avant la sortie d'Android 7.0, Android utilisait exclusivement GNU Make pour décrire et exécuter ses règles de compilation. Le système de compilation Make est largement pris en charge et utilisé, mais à l'échelle d'Android, il est devenu lent, sujet aux erreurs, non scalable et difficile à tester. Le système de compilation Soong offre la flexibilité requise pour les compilations Android. Nous apportons des modifications importantes au système de compilation Android, en abandonnant le système de compilation Make (Android.mk) et en le remplaçant par Soong (Android.bp).

C'est pourquoi les développeurs de plates-formes sont censés passer de Make à Soong dès que possible. Pour obtenir de l'aide, envoyez vos questions au groupe Google Android Building.

Qu'est-ce que Soong ?

Le système de compilation Soong a été introduit dans Android 7.0 (Nougat) pour remplacer Make. Il utilise l'outil de clonage GNU Make Kati et le composant du système de compilation Ninja pour accélérer les compilations d'Android.

Consultez la description du système de compilation Android Make dans le projet Android Open Source (AOSP) pour obtenir des instructions générales et Modifications du système de compilation pour les rédacteurs Android.mk pour en savoir plus sur les modifications nécessaires pour passer de Make à Soong. Consultez les entrées liées à la compilation dans le glossaire pour obtenir la définition des termes clés et la documentation de référence des modules Soong pour en savoir plus.

Comparaison entre Make et Soong

Voici une comparaison de la configuration Make avec Soong pour accomplir la même chose dans un fichier de configuration Soong (Blueprint ou .bp).

Créer un exemple

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libxmlrpc++
LOCAL_MODULE_HOST_OS := linux

LOCAL_RTTI_FLAG := -frtti
LOCAL_CPPFLAGS := -Wall -Werror -fexceptions
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/src

LOCAL_SRC_FILES := $(call \
     all-cpp-files-under,src)
include $(BUILD_SHARED_LIBRARY)

Exemple Soong

cc_library_shared {
     name: "libxmlrpc++",

     rtti: true,
     cppflags: [
           "-Wall",
           "-Werror",
           "-fexceptions",
     ],
     export_include_dirs: ["src"],
     srcs: ["src/**/*.cpp"],

     target: {
           darwin: {
                enabled: false,
           },
     },
}

Pour obtenir des exemples de configuration Soong spécifiques aux tests, consultez Configuration de compilation simple.

Procédure de conversion de base

La conversion d'un fichier Android.mk en fichier Android.bp suit généralement ce workflow général à l'aide de l'outil d'assistance androidmk. En général, les étapes suivantes sont suivies lors de la conversion.

  1. Configurez l'environnement du terminal et créez l'outil androidmk.

    androidmk est un outil de ligne de commande qui analyse un fichier Android.mk et tente de générer un fichier Android.bp analogue. Il peut convertir la plupart des fichiers Android.mk au format Android.bp avec peu ou pas de modifications manuelles.

    cd <root-of-the-tree>
    source build/envsetup.sh
    lunch <lunch-target>
    m androidmk
    
  2. Créez avec Android.mk : sh m <module-name>

  3. Exécutez l'outil de conversion androidmk : sh androidmk <path-to-Android.mk>/Android.mk > <path-to-Android.bp>/Android.bp

  4. Modifiez manuellement le fichier Android.bp :

    • Corrigez les éventuels avertissements émis par l'outil androidmk.
    • Conservez ou ajoutez un en-tête de copyright. Si vous en ajoutez un, utilisez l'année en cours.
  5. Supprimez le fichier Android.mk et compilez avec le fichier Android.bp.

  6. Validez la conversion en comparant les artefacts créés ou en exécutant des tests unitaires et fonctionnels.

  7. Enregistrez les modifications et importez-les pour examen.

Pour en savoir plus, consultez la section Format du fichier Android.bp.