2012-09-27 1 views
34

私は別のチップセット、すなわち、armeabi MIPS、およびx86サポートするためのネイティブコードをコンパイル横断するAndroid.mkを設定しようとしています。私は、私は別のチップセット用のソースコードをコンパイルするために、次のようにApplication.mkを設定することができます知っている:のAndroid NDKは:Android.mkにコンパイラアーキテクチャを取得するにはどのように動的に

APP_ABI := all 

これは、すべてのチップセットのためのソースコードをコンパイルするには、Android-NDKのビルドスクリプトをトリガします。しかし、異なるチップセットでコンパイルされた異なる静的ライブラリの依存関係を探すためにAndroid.mkに動的に伝えたいと思います。

# Get the architecture info 
ARCH := ???? 

include $(CLEAR_VARS) 
LOCAL_MODULE:= mylib 
LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 
include $(PREBUILT_STATIC_LIBRARY) 

これは可能ですか?もしそうなら、どうすればよいのかアドバイスできますか?

Update: I tried something like this in Application.mk:

APP_ABI := armeabi armeabi-v7a mips x64 

with Android.mk:

# Get the architecture info 
ARCH := $(APP_ABI) 

include $(CLEAR_VARS) 
LOCAL_MODULE:= mylib 
LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 
include $(PREBUILT_STATIC_LIBRARY) 

but it errors with the following:

The LOCAL_SRC_FILES for a prebuilt static library should only contain one item 

which makes sense. I want to pass APP_ABI := all in Application.mk and be able to dynamically reference it. Any ideas?

+0

あなたはNDKや他のlibsを見れば、彼らは 'の#ifdefの__arm__'ような定義はなく、それが定義または標準化 – minsk

+0

こんにちは、私はまったく同じことをしたいのWHERE私は確認していない使用しています。 Andorid.mkファイルの例を教えてください。どこにアプリケーションを置くのですか? – jeevs

答えて

28

建設され、現在のABIの値を保持しているTARGET_ARCH変数があります。あなたがAPP_ABI := armeabi-v7a armeabi mips x86またはAPP_ABI := allを指定した場合

ifeq ($(TARGET_ARCH),x86) 
    LOCAL_CFLAGS := $(COMMON_FLAGS_LIST) 
else 
    LOCAL_CFLAGS := -mfpu=vfp -mfloat-abi=softfp $(COMMON_FLAGS_LIST) 
endif 

Application.mkあなたは一人ひとりの個別のABI値を取得します:あなたはそれを次のように使用することができます。

+1

こんにちはセルゲイ、に感謝回答。それは魅力のように働いた!どのように私がこれをより良く使うことができるかの例を私に与えたことにも感謝します。私もコンパイル時にfp警告を受け取っていましたが、これも同様に警告を解決しました:) – LuxuryMaster

+1

あなたが余分な助けとしてあなたのコードを意図していたのかどうかは分かりませんが、とにかく私は好奇心のために試しました:) LOCAL_CFLAGS:= -mfpu = vfp -mfloat -abi = softfp。 cc1plus:エラー:認識できないコマンドラインオプション「-mfpu = VFP」 cc1plus:エラー:認識できないコマンドラインオプション「-mfloat-ABI = softfp」私はMIPSアーキテクチャをコンパイルながらエラーことを観察し、それは次のようにエラーが発生しました。これは、正しいコードスニペットはLOCAL_CFLAGSがifeq($(TARGET_ARCH)、腕)になるだろう意味 LOCAL_CFLAGS:= -mfpu = VFP -mfloat-ABI = softfp $(COMMON_FLAGS_LIST) 他 LOCAL_CFLAGS:= $(COMMON_FLAGS_LIST)。 endif。右? – LuxuryMaster

+0

あなたはこの偉大な発言のために大歓迎であり、ありがとう! –

32

チェックTARGET_ARCH_ABI

ifeq($(TARGET_ARCH_ABI), armeabi-v7a) 
    # v7a-specific stuff 
endif 
+1

$ TARGET_ARCH_ABIは、私がAPP_ABIで設定したものだけを返します。 APP_ABI:= armeabi armeabi-v7a mips x64またはAPP_ABI:=すべてのいずれかを渡す方法はありますか?唯一のデフォルトの 'armeabi'アーキテクチャを使用しますが、そうでない場合は、' NDK-build'をApplication.mk' 'で= ALL': – LuxuryMaster

+3

あなたは' APP_ABIを設定する必要があります。複数のアーキテクチャの場合、NDKは毎回 '$(TARGET_ARCH_ABI) 'を異なる方法で設定するたびに' Android.mk'ファイルを繰り返し呼び出します。 –

+0

私は彼が 'Android.mk'に' APP_ABI'を設定していると思っていましたが、私は誤解しました。ごめんなさい。 – nneonneo

関連する問題