Como dizer ao Android NDK para usar uma cadeia de ferramentas diferente

Phonon 09/02/2017. 3 answers, 18.326 views
android android android-ndk android-ndk toolchain

Eu baixei um conjunto de ferramentas personalizado ( linaro ) para criar aplicativos Android baseados em ARM. Como eu digo ao NDK para usá-lo? Posso definir ou definir algo no Android.mk e no Application.mk que me permita fazer isso? Existe outro caminho?

1 Comments
corbin 03/08/2012
Você fez isso no Ubuntu? Como você instalou o toolchain?

3 Answers


Peter M 03/01/2013.

Como a outra resposta menciona, toolchains são descobertos pelo sistema de makefile ndk-build em $(NDK_ROOT)/toolchains/ e você pode espelhar idéias que você vê lá. Mas há alguns conceitos extras para suportar plataformas de destino não Android que são interessantes, embora possam estar desatualizados, pois o ndk-build começa a suportar explicitamente outras plataformas, como mingw targeting win32 (ou outros compiladores de gcc visando plain ol linux) .

No config.mk :

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

Essa é uma definição importante, porque você pode usar esse nome em seu Application.mk para construir usando o conjunto de ferramentas para uma ABI específica. Um dos benefícios de corromper o uso dessa definição é que o ndk-build pode construir simultaneamente várias ABIs. Ele always assume que a plataforma é Android, mas se você quiser segmentar o win32 usando uma toolchain baseada em mingw, você pode definir uma "ABI" como x86-win32 e usar essa ABI em seu Application.mk para selecioná-la como um adicional target via APP_ABI:= x86-win32 Em seguida, em seus arquivos Android.mk você pode usar a definição TARGET_ARCH_ABI para selecionar origens específicas do win32 e incluir caminhos, por exemplo:

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

A parte final é que no setup.mk para o seu conjunto de ferramentas, pode ser insuficiente ver outras toolchains como exemplos, porque o que setup.mk para um conjunto de ferramentas em particular really faz é sobrescrever as configurações de compilação no default-build-commands.mk , então O que você quer fazer é inspecionar esse arquivo e redefinir as coisas que você não gosta.

Seguindo o exemplo anterior, o mingw não suporta o sinalizador noexec nos binários, e você pode se livrar desse recurso adicionando as seguintes linhas em seu 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! 

Este é apenas um exemplo dos muitos recursos em default-build-commands.mk que podem precisar ser substituídos, e é claro que é importante fornecer o TOOLCHAIN_NAME para que o conjunto de ferramentas possa ser selecionado via variável NDK_TOOLCHAIN dentro do seu arquivo Application.mk além disso à metodologia ABI menciono acima.


Ian Ni-Lewis 09/12/2013.

O sistema makefile do NDK é bastante extensível e você pode definir um conjunto de ferramentas diferente. Você precisará de um pouco de compreensão de como o Make funciona.

Os toolchains são descobertos e inicializados na linha 261 do build/core/init.mk (no NDKr6, o número da linha pode mudar em versões futuras). O código de inicialização procura por arquivos chamados config.mk em $(NDK_ROOT)/toolchains/* . Portanto, você precisará adicionar seu conjunto de ferramentas em um subdiretório no diretório de config.mk da NDK e incluir um config.mk e setup.mk nesse subdiretório. Olhe para toolchains/x86-4.4.3 e toolchains/arm-linux-androideabi-4.4.3 para exemplos. Você deve ser capaz de recortar e colar o toolchain ARM config.mk e setup.mk se o seu conjunto de ferramentas tiver um layout padrão.

Depois de definir um conjunto de ferramentas no diretório toolchain, você pode alternar para ele definindo a variável NDK_TOOLCHAIN dentro do arquivo Application.mk .


lily 07/31/2017.

Bem, você pode simplesmente adicionar "NDK_TOOLCHAIN_VERSION = 4.9" no seu Application.mk

Related questions

Hot questions

Language

Popular Tags