Сборка ARM64 ASM в Visual Studio с помощью CMake - PullRequest
1 голос
/ 15 января 2020

Я работаю над кроссплатформенным проектом, который имеет некоторую рукописную сборку для оптимизации производительности для различных архитектур ЦП. Я конвертирую этот проект в CMake из собственной системы сборки, начиная с компиляции с использованием Visual Studio на Windows. Для x86 и AMD64 я смог собрать и связать все просто отлично, но я не могу заставить его работать на ARM64 (или, вероятно, ARM32, хотя я еще не пробовал).

Я включаю файлы ASM в мои источники следующим образом:

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 верхнего уровня я включаю MASM, используя enable_language(ASM_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).

Я попытался установить enable_language(ASM_MARMASM) в моем файле инструментария ARM64, но CMake не распознает это как диалект ASM и выдает мне эту ошибку:

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.

Я также попытался вручную установить ассемблер:

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 в мой проект?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...