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
()

Сейчас в тренде LLVM/Clang-5.0.1 и разрабатывается 6.0-версия.

iZEN ★★★★★
()

Чтобы делать кросс-комипляцию, на практике нужны заголовки libc и ядра для целевой архитектуры, они будут отличаться

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

Ещё всякие libgcc.a, libcrt0.o и тд. Кароче проще взять /lib из целевой системы. Я так кроссом собирал всякие clang/llvm из под win/lin для freebsd.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от annulen

Ну да, только я сам тулчейн тоже с нуля собирал на сборочной системе.

DELIRIUM ☆☆☆☆☆
()

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

Полезен своим существованием, как альтернатива gcc. Конкуренция и всё такое.

ox55ff ★★★★★
()
Ответ на: комментарий от slovazap

Это как-то кривовато. Я находил pdf-ку, где этот вопрос рассматривался, но оно не заработало

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

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

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

clang -Xclang -ast-dump -fsyntax-only luabind-test.cpp
aido ★★
() автор топика
Ответ на: комментарий от aido

И так:

clang-check -ast-dump luabind-test.cpp --extra-arg="-fno-color-diagnostics" --
aido ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.