Я работаю над кроссплатформенным проектом, который имеет некоторую рукописную сборку для оптимизации производительности для различных архитектур ЦП. Я конвертирую этот проект в 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 в мой проект?