我有一个需要为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编译?
答案 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'])
这假设HOSTX
和GREP
是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