LINUX.ORG.RU

полезности clang, llvm

 ,


2

5

Всем привет!

Руки дошли до анализа кода на clang/llvm, и встал такой вопрос - а как в них посмотреть список таргет-архитектур? llc-3.8 --version выдает необходимый список, но дело в том, что clang -emit-llvm выдает архитектуро-зависимый код и даже самый простой хеллоуворлд не получается собрать из *.ll в армы, в x86-linux и x86_64-windows одновременно.

Ну и ещё - если пользуетесь этими инструментами, то какие опции чаще всего оказываются нужны? Ну то есть хочется увидеть, на что способна связка clang/llvm помимо своей основной задачи компиляции кода. Вместо сухих манов, хочется какого-нибудь «вау-интро», чтоб посмотреть, что крутого с этими инструментами можно сделать быстро. Писали, что можно генерить кол-стек или диаграмму классов как в графическом виде, так и в текстовом. Где-то еще видел, что можно получить список тех или иных сущностей в проекте - список деклараций/имплементаций функций/классов/методов/структур, и прочего. Где-то натыкался на кодогенерацию. Проблема в том, что все эти мануалы в основном 2012-2016 годов и за это время оба проекта успели измениться значительно. Пример: отсутствие опций --print-supported-archs, --print-available-systems в clang-3.8.

★★

выдает архитектуро-зависимый код

Так и должно быть. size_t будет разного размера на 32-х и 64-х битах. В винде long не того размера, что в Linux. Наверняка еще есть много других отличий...

anonymous ()
Ответ на: комментарий от anonymous

я помню про различие размеров типов. Только ожидалось, что байт-код питона, джавы и ллвм в чем-то похожи между собой. Например, портируемостью. ну и промежуточный код тоже.

aido ★★ ()
Последнее исправление: aido (всего исправлений: 1)
Ответ на: комментарий от slovazap

Я пока маны не докурил. Прочитал по одному разу и пока что думал немного попрактиковаться с прочитанным, но из-за быстрого развития проектов, я читал какую-то непригодную для текущего использования шляпу. ну или версии компилеров надо поменять.

Так а список архитектур и ОСей-то как вывести?

aido ★★ ()

В состав Clang входит полезная утилитка opt-viewer для визуализации результатов работы оптимизатора. Пользоваться примерно так:

clang++ -fsave-optimization-record hello.cpp -o hello
opt-viewer.py hello.opt.yaml -o hello.opt.out/
$BROWSER hello.opt.out/index.html
anonymous ()
Ответ на: комментарий от anonymous

А как сделать так, чтобы clang показал AST только для одного файла, не переходя в заголовочные файлы?

Пробовал пока так:

clang -Xclang -ast-dump -fsyntax-only luabind-test.cpp
aido ★★ ()