LINUX.ORG.RU

LLVM/Clang не готов для Линукса

 , ,


4

5

Дано: нафаршированная десктопная Gentoo x86_64 с кедами, огнелисом, либреофисом, проигрывателями, звуковыми и видеоредакторами и так далее. В общей сложности 1274 пакета. Список пакетов

LLVM/Clang версии 3.3 из основного дерева.

gcc-4.8.1 на подхвате.

Несколько пакетов у меня постоянно заморожены:

app-misc/pax-utils
 app-office/libreoffice
 dev-lang/fpc
 dev-python/pypy-bin
 dev-util/d-feet
 dev-util/schroot
 games-fps/nexuiz
 games-strategy/hedgewars
 kde-misc/nepomuk-webminer
 media-video/vlc
 sys-boot/grub
 sys-devel/gcc
 sys-kernel/genkernel
 sys-kernel/gentoo-sources
 sys-power/upower

и потому в пересборке мира не участвовали (впрочем, gcc и libreoffice я всё же пересобрал отдельно из интереса).

Сначала в /etc/portage/make.conf я внёс следующие строки:

CC="/usr/bin/clang"
CXX="/usr/bin/clang++"

CFLAGS="-march=native -O2 -fplugin=/usr/lib/llvm/dragonegg.so"
CXXFLAGS="${CFLAGS}"

Это для использования clang в качестве основного компилятора. Для пакетов, которым нужен gcc, я создал файл /etc/portage/env/gcc:

CC="/usr/bin/gcc"
CXX="/usr/bin/g++"

CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"

А для сборки clang'ом с LTO (llvm нужно собрать с флагом +gold) создал файл /etc/portage/env/clang-lto:

CC="/usr/bin/clang"
CXX="/usr/bin/clang++"
CFLAGS="-march=native -O4 -pipe"
CXXFLAGS="${CXXFLAGS}"
LDFLAGS="${LDFLAGS} -O4 -Wl,-plugin,/usr/lib/llvm/LLVMgold.so"
AR="/usr/local/bin/clang-ar"
RANLIB=":"
NM="nm --plugin /usr/lib64/llvm/LLVMgold.so"

и /usr/local/bin/clang-ar:

#!/bin/sh
firstarg=${1}
shift

exec /usr/bin/ar "${firstarg}" --plugin /usr/lib/llvm/LLVMgold.so "${@}"

Всё готово, можно запускать time emerge -e @installed --keep-going=y. Пакеты, вылетающие на сборке с clang, пропускаются и мир пересобирается дальше. Я в это время играл в Монополию (monopoly-club.ru, рекомендую! :)) и время от времени смотрел в Konsole, отлавливал вылетающие пакеты и вносил их в файл /etc/portage/package.env (формат: <package> gcc).

Итог: не собралось довольно много пакетов. Прежде всего, это, конечно, само ядро, сборка вылетает через 5 секунд после начала. Также не собирается большое количество программ, без которых на десктопе жить если и не невозможно, то чрезвычайно убого и затруднительно. Да что там говорить, если не собрались glibc, binutils, udisks, ffmpeg? Полный список здесь.

Зато сборка реально быстрее. Например, Firefox 23 gcc собирает за:

real    22m57.990s
user    132m15.883s
sys     9m51.211s

а clang (причём с задействованным LTO, это пока единственный пакет, который собрался на таком уровне оптимизации):

real    16m48.450s
user    100m22.458s
sys     5m42.477s

Libreoffice-4.1.1.2 gcc собирает за 49 минут, clang - за 36 (конкретные цифры дать не могу, они потерялись из-за зависания системы - память на сборке FF внезапно кончилась :)). Весь мир (это, напомню, более 1200 пакетов) пересобрался за:

real    334m44.765s
user    932m35.380s
sys     126m22.767s

Железо: Core i7 + 8 Gb RAM. Сборка в 8 потоков.

И да, у clang вывод прикольный, разноцветный такой :)

Ответ на: комментарий от Pinkbyte

Запись в бложике/на ЛОРе о том как всё плохо и что «мы всё умрем»

Неужели слух о том, что модераторы читают только заголовок правда о_О

Я не почерпывал, я взял готовое и ознакомился со списком не собирающихся. Про вилы спорно: вполне возможна вторичная реакция и третье лицо потыков у себя используя удобно отформатированные и готовые нароботки из этого пста тискнет багрепорт кудаследует.

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

Ты хотел спросить, а когда gcc-костыли выкинут на мороз(или хотя бы сделают опциональными), правда? :-)

Расширения gcc разумны и полезны, так что их выкидывание - это как раз переход с ног на костыли.

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

Расширения gcc разумны и полезны

Тогда их нужно стандартизировать и только после этого впилить в другие компиляторы. А это случится(если и случится) мягко говоря не скоро

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

вполне возможна вторичная реакция и третье лицо потыков у себя используя удобно отформатированные и готовые нароботки из этого пста тискнет багрепорт кудаследует.

Возможно, ибо сам часто оказываюсь в роли этого «третьего лица» :-)

Pinkbyte ★★★★★
()

Наткнулся на первые серьёзные вилы

Если щёлкнуть по кнопке окна «свернуть в заголовок», падает compiz без возможности перезапустить его, лечится только рестартом иксов. Попробую пересобрать иксы с gcc, если не поможет, придётся откатывать снапшот :)

Кстати, пересобрал все пакеты, в которых упоминается jpeg и png, но анимация смены обоев всё равно дёргается. Может, пересобрать qtgui?

markelov
() автор топика
Ответ на: комментарий от Pinkbyte

Судя по комментариям ТСа - он даже не собирается это делать

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

markelov
() автор топика
Ответ на: комментарий от Pinkbyte

Расширения gcc разумны и полезны

Тогда их нужно стандартизировать

Для начала можно перестать называть полезные вещи «костылями».

и только после этого впилить в другие компиляторы

А почему «после»? Стандартизация работает не так. И да, расширения GCC уже есть и в ICC, и в Clang (не все, правда).

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

Да, 0.8.9. Падает только при нажатии кнопки «свернуть в заголовок», в остальном всё ок. Но такие глюки я терпеть не собираюсь :)

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

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

Т.е. кроме того что ты ленивая морда логирование portage у тебя тоже не настроено ? Ну ок.

init_6 ★★★★★
()

В этом треде особо одаренные [censored] объясняют ТСу, что уже [отчасти] проходили его путь, а он смел идти за ними.

// Тоже планировал немного поэкспериментировать с clang, но подчерпнул немного инфы из топика и решил пока отложить это занятие.

shahid ★★★★★
()
Последнее исправление: shahid (всего исправлений: 1)

Вилы сломаны

Пересобрал kdelibs и плагины компиза с gcc, обои не дёргаются, компиз не падает.

markelov
() автор топика

И это, у меня такое очучение, что процессы стали есть меньше памяти. Например, сразу после логина plasma-desktop у меня занимала 125 Мб памяти, сейчас - 100 Мб. Иксы занимался ~25 Мб, сейчас - 18,5 Мб. Просто совпадение, или?

markelov
() автор топика
Ответ на: комментарий от tailgunner

А пересобранный clang'ом Амарок стал проигрывать кетайские мп3 на 128 килобит на уровне божественного flac!

markelov
() автор топика
Ответ на: комментарий от tailgunner

А почему «после»? Стандартизация работает не так

Именно так. Нужна референсная реализация, она есть в GCC. После того как она будет утверждена - можно начинать впиливать в другие компиляторы.

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

А почему «после»? Стандартизация работает не так

Именно так

Нет.

Нужна референсная реализация, она есть в GCC. После того как она будет утверждена

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

Впрочем, это неважно. Слава ТНБ, для GCC написано достаточно софта, чтобы его раширения распространялись и без стандарта.

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

шланг со спецсоусом тоже ядро собирает

Ну и это тоже ок.

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

Главное то, что в этом нашем метадистрибутиве компилятор по дефолту все еще один единственный gcc а любые сторонние решаются не глобально при помощи eselect либо профилей а при помощи старого как сама gentoo хака с /etc/portage/env

Хотя казалось бы в чем проблема организовать это все по человечески.

init_6 ★★★★★
()

Польза бы была, если бы ты запостил несобирающиеся пакеты в багзиллу и слинковал баги с метабагом #408963 (system-wide-clang).

Nao ★★★★★
()

Фрактальчик, ты ли это?

daemonpnz ★★★★★
()

Странно, а что не так с тем же OpenSSL, binutils и gnupg? Вручную clang-ом собираются без проблем.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.