1

ファイルから Android NDK ツールチェーンのアセンブラーのシンボルを定義する簡単な方法はありAndroid.mkますか?

私の目的は、ARMV6 または ARMV7A EABIS 用にコンパイルおよび調整された複数の .C および .s (アセンブラー) ファイルから構成されるネイティブ ライブラリを構築できるようにすることです。必要なすべての条件付きコンパイルは、アプリケーションの APP_ABI 値を変更するだけで駆動されます。 .mk ファイル。

最初に、ifeq()で使用可能なディレクティブを使用しAndroid.mkて APP_ABI 値の値を照会し、ビルド スクリプトのさまざまな部分を条件付きで実行することに成功しました。

次に、次のように、(-D を介して) 条件付きでシンボルを挿入するために、この機能を使用しようとしました。

# Compilation Flags
ifeq ($(TARGET_ARCH_ABI),armeabi)
   LOCAL_CFLAGS += -DTARGET_ARMEABI -marm  -mtune='arm1136jf-s' -ffast-math -O3 -march=armv6 -fvisibility=hidden 
else
   #armeabi-v7a
   LOCAL_CFLAGS += -marm -ffast-math -O3 -march=armv7-a -fvisibility=hidden
endif

C ソース コード ファイルでは TARGET_ARMEABI シンボルが正しく定義されていることがわかりますが、アセンブラー ファイルでは見つかりません。 (アーキテクチャに従って適切な EABI 属性を定義するには、これが必要です)。これは、アセンブリ言語ファイルで条件付きで EABI 属性を定義しようとする方法の例です。

.ifdef TARGET_ARMEABI
    .arch armv6
    .fpu softvfp
    .eabi_attribute 23, 1
    .eabi_attribute 24, 1
    .eabi_attribute 25, 1
    .eabi_attribute 26, 2
    .eabi_attribute 30, 2
    .eabi_attribute 18, 4
.else
    .arch armv7-a
    .eabi_attribute 27, 3
    .fpu vfp
    .eabi_attribute 23, 1
    .eabi_attribute 24, 1
    .eabi_attribute 25, 1
    .eabi_attribute 26, 2
    .eabi_attribute 30, 2
    .eabi_attribute 18, 4
.endif

ポインタや提案は大歓迎です。

4

2 に答える 2

1

アセンブリ ファイルで TARGET_ARMEABI 定義を可視にするには、' -x assembler-with-cpp ' オプションを使用してコンパイルし、アセンブリ ファイルで標準の C プリプロセッサ#ifdefディレクティブを使用します。

于 2013-06-11T11:16:22.863 に答える
1

によって前処理されるアセンブリ ファイルは、大文字の S (.Sまたは) で終わる必要があります。それについては、GCC doc、3.2 Options Controlling the Kind of Outputを参照してください。.sxgcc

libc/arch-arm/bionic/memcpy.SなどのBionic ソースからチートできると思います。

于 2013-06-11T06:36:56.450 に答える