适用于ARM A-32的条件Automake编译?

时间:2018-07-11 16:55:37

标签: arm autotools automake

我有一个需要为ARM A-32编译的源文件。 A-32包括ARMv4和ARMv7(但不包括Aarch32或Aarch64)。我们的GNU makefile具有:

IS_ARM32 := $(shell echo "$(HOSTX)" | $(GREP) -i -c -E 'arm|armhf|arm7l|eabihf')
...

ifeq ($(IS_ARM32),1)
AES_ARCH = -march=armv7-a -marm
SRCS += aes-armv4.S
endif
...

ifeq ($(IS_ARM32),1)
aes-armv4.o : aes-armv4.S
    $(CC) $(strip $(CXXFLAGS) $(AES_ARCH) -mfloat-abi=$(FP_ABI) -c) $<
endif

根据Conditional Compilation using Automake Conditionals手册:

  

有条件地编译源文件的一种通常更简单的方法是使用   Automake有条件的。例如,您可以使用此Makefile.am   构造以构建相同的hello示例:

bin_PROGRAMS = hello
if LINUX
hello_SOURCES = hello-linux.c hello-common.c
else
hello_SOURCES = hello-generic.c hello-common.c
endif
     

在这种情况下,configure.ac应该使用以下命令设置LINUX条件   AM_CONDITIONAL(请参见Conditionals)。

在链接到条件语句之后,我没有看到示例中使用的LINUX之类的条件列表。它还缺少对诸如ARM和PowerPC之类的体系结构的条件编译的讨论。

Automake对ARM A-32使用什么条件?

或者一个人如何有条件地为ARM A-32编译?

1 个答案:

答案 0 :(得分:0)

  

在链接到条件语句后,我没有看到列表   手册示例中的条件LINUX。它也缺少   讨论平台的条件编译,例如ARM和   PowerPC。

您似乎从手册引用的摘录中忽略了此文本:

  
    

在这种情况下,configure.ac应该使用以下命令设置LINUX条件     AM_CONDITIONAL

  

AM_CONDITIONAL是Autoconf宏,您可以使用该宏定义用于Automake条件中的谓词。没有预制谓词。

  

Automake对ARM A-32使用什么?

     

或者一个人如何有条件地为ARM A-32编译?

鉴于您现有的方法基于

IS_ARM32 := $(shell echo "$(HOSTX)" | $(GREP) -i -c -E 'arm|armhf|arm7l|eabihf')

您可以在configure.ac中进行此操作:

AM_CONDITIONAL([ARM32], [echo "$HOSTX" | $GREP -i -c -E 'arm|armhf|arm7l|eabihf'])

这假设HOSTXGREP是autoconf输出变量,其值已被设置。如果您不是这种情况,那么我确信它至少为您提供了一个模型。

使用configure.ac中定义的ARM32谓词,您就可以在Makefile.am文件中使用它,就像手册中的示例中一样:

if ARM32
hello_SOURCES = hello-arm32.c hello-common.c
else
hello_SOURCES = hello-generic.c hello-common.c
endif