arm - ARM A-32 的条件 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
根据使用 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 应该使用 AM_CONDITIONAL 设置 LINUX 条件(请参阅Conditionals)。
在指向条件的链接之后,我没有看到LINUX
示例中使用的条件列表。它还缺少对 ARM 和 PowerPC 等体系结构的条件编译的讨论。
Automake 对 ARM A-32 使用什么条件?
或者如何有条件地为 ARM A-32 编译?
解决方案
在指向条件的链接之后,我没有看到像
LINUX
手册示例中那样的条件列表。它也缺少对平台条件编译的讨论,例如 ARM 和 PowerPC。
您似乎从手册的引用摘录中忽略了此文本:
在这种情况下,configure.ac 应该使用 AM_CONDITIONAL 设置 LINUX 条件
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 输出变量。如果您不是这种情况,那么我相信它至少为您提供了一个模型供您开始使用。
使用ARM32
configure.ac 中定义的谓词,您可以在Makefile.am
文件中使用它,就像手册中的示例一样:
if ARM32
hello_SOURCES = hello-arm32.c hello-common.c
else
hello_SOURCES = hello-generic.c hello-common.c
endif
推荐阅读
- json - 如何在 jq 中传播对象的属性?
- javascript - 如何在 Vue 组件中使用 JavaScript
- mysql - 如何在过程中的 If 内执行多个查询?
- javascript - 如何遍历它并检查skip是否接受数字,如果不是打印错误
- excel - 将 With-function 中的内部颜色应用到一定范围内
- apache-flink - Apache Flink - FsStateBackend - 在任务管理器失败的情况下如何恢复状态,将状态存储在其本地文件系统中
- swift - Swift 可重用 NavigationLink
- c# - Web api Restful : 通过外键获取资源
- python - 运行 sls deploy 时无服务器挂起。Docker 命令没有结束
- git - 有没有办法 gitignore 所有当前的额外文件?