#cmake #llvm-mca
Вопрос:
Я пытаюсь настроить llvm-mca для работы с CMake. Официальная документация содержит простые команды для вывода такой информации, как.
$ clang foo.c -O2 -target x86_64-unknown-unknown -S -o - | llvm-mca -mcpu=btver2
Это отлично подходит для простых файлов. Однако я не уверен, как расширить это и реализовать для практического проекта с использованием CMake.
Комментарии:
1.
add_custom_command
.
Ответ №1:
Публикую свой ответ для всех, кто столкнется с этой проблемой.
#compile with optimizations on target_compile_options(Executable PRIVATE -O3 -g) #this will convert the passed file to assembly add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s COMMAND ${CMAKE_CXX_COMPILER} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/foo.cpp -O3 -S -o ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/foo.cpp COMMENT "Generating The Assembly File" VERBATIM ) #this will convert the assembly analysis add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/analysis.txt COMMAND llvm-mca ARGS -mcpu=btver2 -timeline ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s -o ${CMAKE_CURRENT_SOURCE_DIR}/analysis.txt DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s COMMENT "Running LLVM MCA" VERBATIM ) add_custom_target(run ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assembly.s ${CMAKE_CURRENT_SOURCE_DIR}/analysis.txt)
Вероятно, стоит упомянуть, что я ни в коем случае не эксперт, однако LLVM MCA, похоже, используется для анализа одного файла за раз. Это означает, что простой команды (такой, какую я вставил выше, задавая вопрос) реально достаточно.
Также ошибка «ошибка: инструкции по сборке не найдены». Означает, что оптимизация, вероятно, удалила весь код между НАЧАЛЬНЫМ и КОНЕЧНЫМ макросами (это случилось со мной, когда я сделал простую программу для тестирования).