Comment dire à Android NDK d'utiliser une chaîne d'outils différente

J'ai téléchargé une chaîne d'outils personnalisée (linaro ) pour créer des applications Android basées sur ARM. Comment puis-je dire au NDK de l'utiliser? Puis-je définir ou définir quelque chose Android.mk et Application.mk ça me permettrait de faire ça? Est-il une autre voie?

23
demandé sur Phonon 2011-07-07 21:01:33

3 réponses

Comme l'autre réponse le mentionne, les chaînes d'outils sont découvertes par le système Makefile ndk-build dans $(NDK_ROOT)/toolchains/ et vous pouvez refléter les idées que vous voyez là. Mais il y a quelques concepts supplémentaires pour soutenir les plates-formes cibles Non-Android qui sont intéressants bien qu'ils puissent être bientôt obsolètes comme ndk-build commence à soutenir explicitement d'autres plates-formes, telles que MinGW ciblant win32 (ou d'autres compilateurs gcc ciblant plain 'ol linux).

Dans config.mk:

TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports)

C'est une définition importante, parce que vous pouvez utiliser ce nom dans votre Application.mk pour construire en utilisant la chaîne d'outils pour un ABI particulier. L'un des avantages de corrompre l'utilisation de cette définition, est que ndk-build peut construire simultanément pour plusieurs ABIs. Il toujours suppose que la plate-forme Android, mais si vous voulez cibler win32 l'aide d'un mingw en fonction de la chaîne, vous pouvez définir un "ABI" comme x86-win32, puis utiliser cette ABI dans votre Application.mk pour sélectionner une cible supplémentaire via APP_ABI:= x86-win32 Alors Android.mk fichiers vous pouvez utiliser la définition TARGET_ARCH_ABI pour sélectionner des sources spécifiques à win32 et inclure des chemins, par exemple:

ifeq ($(TARGET_ARCH_ABI),x86-win32)
  LOCAL_SRC_FILES += my_win32_file.c
  LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif

La dernière chose est que dans setup.mk pour votre chaîne d'outils, il peut être insuffisant de regarder d'autres chaînes d'outils comme exemples, car ce que setup.mk pour une chaîne d'outils particulièrefait vraiment est de remplacer les paramètres de construction dans default-build-commands.mk, donc ce que vous voulez faire est d'inspecter ce fichier,

Suivant l'exemple précédent, mingw ne soutien à l'option noexec dans les fichiers binaires, et vous pouvez se débarrasser de cette fonctionnalité en ajoutant les lignes suivantes dans votre setup.mk:

# These flags are used to enforce the NX (no execute) security feature in the
# generated machine code. This adds a special section to the generated shared
# libraries that instruct the Linux kernel to disable code execution from
# the stack and the heap.
TARGET_NO_EXECUTE_CFLAGS  := # our platform doesn't support this flag!
TARGET_NO_EXECUTE_LDFLAGS := # our platform doesn't support this flag!

# These flags disable the above security feature
TARGET_DISABLE_NO_EXECUTE_CFLAGS  :=  # our platform doesn't support this flag!
TARGET_DISABLE_NO_EXECUTE_LDFLAGS :=  # our platform doesn't support this flag!

Ceci est juste un exemple des nombreuses fonctionnalités de default-build-commands.mk qui peuvent avoir besoin d'être remplacées, et bien sûr, il est important de fournir TOOLCHAIN_NAME afin que la chaîne d'outils puisse être sélectionnée via la variable NDK_TOOLCHAIN dans votre fichier Application.mk en plus de la méthodologie ABI que je mentionne ci-dessus.

8
répondu Peter M 2013-03-01 16:57:45

Le système Makefile NDK est assez extensible et vous pouvez en effet définir une chaîne d'outils différente. Vous aurez besoin de comprendre comment faire des œuvres.

Les chaînes D'outils sont découvertes et initialisées dans build/core/init.mk ligne 261 (dans NDKr6, la ligne # peut changer dans les futures versions). Le code d'initialisation recherche les fichiers nommés config.mk sous $(NDK_ROOT)/toolchains/*. Vous devrez donc ajouter votre chaîne d'outils dans un sous-répertoire sous le répertoire des chaînes D'outils NDK, et Ajouter un config.mk et setup.mk à ce sous-répertoire. Regardez toolchains/x86-4.4.3 et toolchains/arm-linux-androideabi-4.4.3 pour des exemples. Vous devriez pouvoir couper et coller la chaîne D'outils ARM config.mk et setup.mk si votre chaîne d'outils a une mise en page standard.

Une fois que vous avez défini une chaîne d'outils dans le répertoire de la chaîne d'outils, vous pouvez y passer en définissant la variable NDK_TOOLCHAIN dans votre fichier Application.mk.

10
répondu Ian Ni-Lewis 2013-09-12 17:45:47

Eh bien, vous pouvez simplement ajouter "NDK_TOOLCHAIN_VERSION = 4.9" dans votre Application.mk

0
répondu lily 2017-07-31 07:09:10