Использование llvm-mca с CMake

#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, похоже, используется для анализа одного файла за раз. Это означает, что простой команды (такой, какую я вставил выше, задавая вопрос) реально достаточно.

Также ошибка «ошибка: инструкции по сборке не найдены». Означает, что оптимизация, вероятно, удалила весь код между НАЧАЛЬНЫМ и КОНЕЧНЫМ макросами (это случилось со мной, когда я сделал простую программу для тестирования).