首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CMake在Visual Studio中构建ARM64 ASM

用CMake在Visual Studio中构建ARM64 ASM
EN

Stack Overflow用户
提问于 2020-01-15 06:08:21
回答 1查看 1K关注 0票数 2

我正在做一个跨平台的项目,它有一些手写的汇编,以优化各种CPU架构的性能。我正在将这个项目从一个专有的构建系统转换为CMake,首先使用Windows上的Visual Studio进行编译。对于x86和AMD64,我已经能够很好地组装和链接所有东西,但我不能让它在ARM64 (或者可能是ARM32,尽管我还没有尝试过)上工作。

我将ASM文件包含在我的源代码中,如下所示:

代码语言:javascript
复制
if(CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64")
    list(APPEND SOURCES
        amd64/aesasm.asm
        ...)
    set_source_files_properties(
        amd64/aesasm.asm
        ...
        PROPERTY LANGUAGE ASM_MASM)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "X86")
    # ...
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64")
    list(APPEND SOURCES
        arm64/fdef_asm.asm
        ...)
    set_source_files_properties(
        arm64/fdef_asm.asm
        ...
        PROPERTY LANGUAGE ASM_MASM)

然后,在我的顶级CMakeLists.txt中,我使用enable_language(ASM_MASM)启用了MASM。对于x86和AMD64,CMake会自动找到ml/ml64.exe,正确配置Visual Studio项目,一切都会正常工作。

但是对于ARM64,如果我尝试同样的事情,当我尝试构建时,我从Visual Studio得到这个错误:MSB3721: The command "echo MASM not supported on this platform。据我所知,这是因为Visual Studio认为ARM程序集是一种不同的方言"MARMASM",汇编程序具有不同的可执行文件名(armasm/armasm64.exe)。

我尝试在我的ARM64工具链文件中设置enable_language(ASM_MARMASM),但CMake没有将其识别为ASM方言,并给出以下错误:

代码语言:javascript
复制
CMake Error: Could not find cmake module file: CMakeDetermineASM_MARMASMCompiler.cmake
CMake Error: Could not find cmake module file: F:/os/src/symcrypt/bin/CMakeFiles/3.15.3/CMakeASM_MARMASMCompiler.cmake
CMake Error at CMakeLists.txt:49 (enable_language):
No CMAKE_ASM_MARMASM_COMPILER could be found.

我还尝试了手动设置汇编程序:

代码语言:javascript
复制
get_filename_component(VS_TOOLS_DIRECTORY ${CMAKE_LINKER} DIRECTORY)
find_file(ARM64_COMPILER "armasm64.exe" HINTS ${VS_TOOLS_DIRECTORY})
set(CMAKE_ASM_MARMASM_COMPILER ${ARM64_COMPILER})
enable_language(ASM_MARMASM)
message(STATUS "Manually set assembler to ${CMAKE_ASM_MARMASM_COMPILER}")

但这也不起作用;我仍然收到一个错误,即No CMAKE_ASM_MARMASM_COMPILER could be found.

如何在我的项目中包含ARM/ARM64程序集?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 23:44:51

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

https://stackoverflow.com/questions/59742466

复制
相关文章

相似问题

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