首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定CMake中的汇编程序版本?

确定CMake中的汇编程序版本?
EN

Stack Overflow用户
提问于 2017-03-28 09:16:10
回答 2查看 221关注 0票数 0

在决定构建什么和如何构建之前,我们需要确定GNU的AS (GAS)的版本。一些较老的GAS,比如与CentOS 5和OpenBSD 6一起分发的GAS,不能处理SSE4和更高版本。我们需要禁用使用SSE4、AES-NI、SHA、AVX和BMI的代码路径。

我们的主要构建系统是GNU Make,它是performs the following

代码语言:javascript
复制
HAVE_GAS := $(shell $(CXX) -xc -c /dev/null -Wa,-v -o/dev/null 2>&1 | $(EGREP) -c "GNU assembler")
ifneq ($(HAVE_GAS),0)
  GAS210_OR_LATER := $(shell $(CXX) -xc -c /dev/null -Wa,-v -o/dev/null 2>&1 | $(EGREP) -c "GNU assembler version (2\.[1-9][0-9]|[3-9])")
  GAS217_OR_LATER := $(shell $(CXX) -xc -c /dev/null -Wa,-v -o/dev/null 2>&1 | $(EGREP) -c "GNU assembler version (2\.1[7-9]|2\.[2-9]|[3-9])")
  GAS219_OR_LATER := $(shell $(CXX) -xc -c /dev/null -Wa,-v -o/dev/null 2>&1 | $(EGREP) -c "GNU assembler version (2\.19|2\.[2-9]|[3-9])")
endif

根据CMake的Assembler wiki,CMake具有对程序集源文件的基本支持。但它没有讨论如何获得汇编程序的版本。

在使用CMake时,我们如何确定汇编程序的版本?

EN

回答 2

Stack Overflow用户

发布于 2017-03-30 05:17:16

我已经运行了一些测试并检查了CMake的汇编器检测代码。CMake做到了

与例如CXX)

  • only set CMAKE_ASM-ATT_COMPILER_ID

一样,

  • 既不确定也不设置CMAKE_ASM-ATT_COMPILER_VERSION

因此,我使用了您的示例代码,并将其转换为CMake:

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.6)
project(AsmTest CXX)

enable_language(ASM-ATT)

if (CMAKE_ASM-ATT_COMPILER_ID STREQUAL "GNU")
    execute_process(
        COMMAND ${CMAKE_ASM-ATT_COMPILER} --version 
        OUTPUT_VARIABLE _gas_version
    )
    if (_gas_version MATCHES "GNU.[Aa]ssembler.*(2\.[1-9][0-9]|[3-9])")
        set(GAS210_OR_LATER 1)
    endif()
endif()
message(STATUS "GAS210_OR_LATER = ${GAS210_OR_LATER}")

参考

票数 1
EN

Stack Overflow用户

发布于 2017-03-28 21:17:08

与其尝试查找汇编程序版本并硬编码哪些汇编程序版本支持哪些功能的映射,不如只测试汇编一些您知道在旧版本中失败的最小代码片段不是最好的吗?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43059015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档