カスタムツールチェーン( linaro )をダウンロードしてARM based Androidアプリをビルドしました。NDKに使用するように指示するにはどうすればよいですか。 Android.mkとApplication.mkでそれを可能にする何かを定義または設定できますか?別の方法はありますか?
他の回答が述べているように、ツールチェーンは$(NDK_ROOT)/toolchains/
のndk-buildmakefileシステムによって検出され、そこで見たアイデアをミラーリングできます。ただし、Android以外のターゲットプラットフォームをサポートするためのいくつかの追加の概念がありますが、ndk-buildがwin32をターゲットとするmingw(またはプレーンな 'ol linuxをターゲットとする他のgccコンパイラ)などの他のプラットフォームを明示的にサポートし始めると、すぐに時代遅れになる可能性があります。 。
_config.mk
_:
_TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports)
_
Application.mkでこの名前を使用して、特定のABIのツールチェーンを使用してビルドできるため、これは重要な定義です。この定義の使用法を損なうことの利点の1つは、ndk-buildが複数のABIに対して同時にビルドできることです。 常にプラットフォームがAndroidであると想定していますが、mingwベースのツールチェーンを使用してwin32をターゲットにする場合は、「ABI」を_x86-win32
_として定義してから、 _Application.mk
_でこのABIを使用して、_APP_ABI:= x86-win32
_を介して追加のターゲットとして選択します。次に、_Android.mk
_ファイルで、_TARGET_Arch_ABI
_定義を使用してwin32固有のソースを選択し、パスを含めることができます。 、 例えば:
_ifeq ($(TARGET_Arch_ABI),x86-win32)
LOCAL_SRC_FILES += my_win32_file.c
LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif
_
最後に、ツールチェーンの_setup.mk
_では、他のツールチェーンを例として見るだけでは不十分な場合があります。これは、特定のツールチェーンの_setup.mk
_が本当にdoesは、_default-build-commands.mk
_のビルド設定をオーバーライドするため、そのファイルを検査して、不要なものを再定義します。
前の例に従って、mingwはバイナリのnoexecフラグをサポートしていません。この機能を取り除くには、_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!
_
これは、オーバーライドする必要がある_default-build-commands.mk
_の多くの機能のほんの一例です。もちろん、ツールチェーンを_TOOLCHAIN_NAME
_変数で選択できるように_NDK_TOOLCHAIN
_を提供することが重要です。上記のABI方法論に加えて、_Application.mk
_ファイル。
NDK makefileシステムは非常に拡張可能であり、実際に別のツールチェーンを定義できます。 Makeがどのように機能するかをある程度理解する必要があります。
ツールチェーンは、_build/core/init.mk
_行261で検出および初期化されます(NDKr6では、行番号は将来のバージョンで変更される可能性があります)。初期化コードは、$(NDK_ROOT)/toolchains/*
の下で_config.mk
_という名前のファイルを探します。そのため、NDK toolchainsディレクトリの下のサブディレクトリにツールチェーンを追加し、そのサブディレクトリに_config.mk
_と_setup.mk
_を追加する必要があります。例については、_toolchains/x86-4.4.3
_および_toolchains/arm-linux-androideabi-4.4.3
_を参照してください。ツールチェーンに標準のレイアウトがある場合は、ARMツールチェーン_config.mk
_および_setup.mk
_をカットアンドペーストできるはずです。
ツールチェーンディレクトリでツールチェーンを定義したら、_NDK_TOOLCHAIN
_ファイル内の_Application.mk
_変数を設定することでツールチェーンに切り替えることができます。
そうですね、Application.mkに「NDK_TOOLCHAIN_VERSION = 4.9」を追加するだけです。