studio - ndk-build android.mk




在Android.mk中定义一个程序集(.s)源文件的符号? (2)

汇编文件需要以大写S( .S.sx )结尾,由gcc进行预处理。 见GCC文档,3.2选项控制那种输出

我相信你可以从Bionic 来源作弊,例如libc / arch-arm / bionic / memcpy.S

有没有简单的方法来从Android.mk文件定义Android NDK工具链的汇编程序的符号?

我的目标是能够构建一个本地库,这些库由编译和调优的几个.C和.s(汇编程序)文件组成,用于ARMV6或ARMV7A EABIS,所有必需的条件编译都是通过简单地修改应用程序上的APP_ABI值.mk文件。

首先,我成功地使用了Android.mk可用的ifeq()指令来查询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

任何指针或建议,非常感谢。


要使TARGET_ARMEABI在程序集文件中定义可见,请使用“ -x assembler-with-cpp ”选项进行编译,并在程序集文件中使用标准C预处理程序#ifdef指令。





arm