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 вывод прикольный, разноцветный такой :)

не собрались glibc, binutils, udisks, ffmpeg? Полный список здесь.

Результат был немного предсказуем, но за попытку спасибо. Интересно. У самого бы руки не дошли никогда.

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

На глаз вообще никакой разницы не заметил. Лиса вроде стала быстрее запускаться, но это может мне казаться.

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

Да при чём здесь gcc, вы говорите: «Потому что можно», но в то же самое время «не собрались glibc, binutils, udisks, ffmpeg? Полный список здесь.», значит получается, что нельзя.

kostik87 ★★★★★ ()

Фря ушла на clang, линуксойды побежали пересобирать системы clangom с криком «ШЛАНГ НЕНУЖЕН». Цирк.

ggrn ★★★★★ ()

если не собрались glibc, binutils, udisks, ffmpeg? Полный список здесь.

По каждому из 57 поциентов баги в багзиллу отправлены или это просто так ради высера на любимом ЛОРе?

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

Ну-ну, но когда Clang не может собрать основные системные компоненты, ядро, libc и binutils тут вообще нечего говорить.

Ну а язычок попридержал бы.

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

Я где-то утверждал, что clang может полностью заменить gcc в Линуксе? Может, перестанешь общаться с голосами в своей голове? :)

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

Просто решил поделиться опытом.

Хм каким именно опытом? Все описанное в шапке очевидно просто до слез. От всей этой твоей затеи был бы хоть какой то смысл если б ты хотя бы новых багов им навешал и тем самым хоть как то приблизил тот день когда clang-ом можно будет собирать еще больше ebuild-ов. А так на школьника в данный момент похож как раз ты.

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

Ну а язычок попридержал бы

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

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

Все описанное в шапке очевидно просто до слез

Я очень рад, что тебе всё это очевидно, правда. Вот только я, пропарсив гугл с постами за прошлый год, видел, что у людей не собиралась куча софта, которая у меня собралась. Например, я не ожидал, что clang осилит собрать libreoffice (openoffice, судя по жалобам бсдшников, clang'ом не собирается). Также не думал, что соберётся FF с lto.

А так на школьника в данный момент похож как раз ты.

Твоя немотивированная агрессия вынуждает считать тебя никчёмным говном, уж извини. Разговор закончен до того момента, как ты посетишь психиатра и начнёшь лечиться, долго и упорно.

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

Вот только я, пропарсив гугл с постами за прошлый год, видел, что у людей не собиралась куча софта, которая у меня собралась.

Пичаль-бида материал за прошлый год сегодня оказывается уже не актуален. И софт который не собирался уже ВНЕЗАПНО собирается…

В общем пиши еще!

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

markelov

когда делишься с людьми опытом

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

Я вам лучше открою секрет, если ты ещё не в курсе, для каждого пакета может быть свой make.conf, в котором можно указывать свои CFLAGS и прочие параметры.

Я не стал ничего писать в прошлую тему, когда в шапке увидел вот это:

markelov

make.conf игнорируется, EXPORT=«CC=clang» не помогает

И так ясно, что кто-то не прочитал, хотя бы, справку по bash.

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

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

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

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

kostik87 ★★★★★ ()

Отличный псто как детектор gcc-мозга, терминальная стадия.

Схоронил env-шки, спасибо тебе добрый человек.

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

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

А тут уже отписался один человек:

Результат был немного предсказуем, но за попытку спасибо. Интересно. У самого бы руки не дошли никогда.
drake (13.09.2013 9:52:42)

Значит, уже кому-то мой опыт показался как минимум интересным. И тему я создавал для них, а не для того, чтобы оправдываться перед распальцованными знатоками с психологическими проблемами. Хоспаде, не форум, а какой-то заповедник озлобленных чмошников :)

Короче, разговор и с тобой закончен тоже.

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

На здоровье!

Кстати, обнаружил первую проблему:

раньше при изменении фона рабочего стола (или просто изменения пропорций) в кедах картинка менялась плавной анимацией, сейчас изменение дёргается, никакой плавности, всё рывками

Подозреваю, что виноват какой-то пакет, ответственный за работу с графикой, но какой?

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

видел, что у людей не собиралась куча софта, которая у меня собралась. ...
когда делишься с людьми опытом

У тебя начальный синдром Дениса Попова: www.linux.org.ru/people/gromes/profile, обратись скорее к врачу.

А так, ещё раз, ну провёл ты эксперимент, ну получил результаты, есть ошибки, дальше что ? Ты о них написал хотя бы разработчикам Gentoo, отправил репорты разработчикам Clang и проблемных пакетов ?

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

Возможно. Нужно отыскать виновника и пересобрать его с gcc.

markelov ()

ну ожидать что ядро или glibc соберётся шлангом было как-то глупо :)

а gcc не пробовал собрать?

Harald ★★★★★ ()

Linux не готов для Clang

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

От всей этой твоей затеи был бы хоть какой то смысл если б ты хотя бы новых багов им навешал и тем самым хоть как то приблизил тот день когда clang-ом можно будет собирать еще больше ebuild-ов. А так на школьника в данный момент похож как раз ты.

Вот резко ты выражаешься, часто мы с тобой конфликтуем последнее время. Однако в данном конкретном случае - люто-бешено плюсую. Какой профит от этого, если мэйнтэйнеры пакетов и/или апстрим будут совершенно без понятия о том, работает ли сборка с clang-ом или они где-то накосячили?

Pinkbyte ★★★★★ ()

Я просто оставлю это здесь pryoidain-clang и если что то там последний коммит был 9 месяцев назад.

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

А когда в clang добавят поддержку gcc-костылей?

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

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

Но это сколько ж надо софта переписывать...

Не так уж и много, на самом деле(я имею ввиду количество программ, а не количество кода в них). Другое дело, что это КЛЮЧЕВОЙ софт, без которого всё остальное практически теряет смысл.

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

Вот резко ты выражаешься, часто мы с тобой конфликтуем последнее время.

Конфликтуем мы с тобой по другому поводу. Я не вижу смысла в багзилле потому что сам исправляю быстрее Самый свежий пример. (кстати там официально ядра до 3.8.* а неофициально в самих сырцах до 3.9.*)

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

Что должно его подтолкнуть к такой мысли?

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

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

Не пойми неправильно, вот ты почерпнул как переключать компилятор из этой темы, так что я не говорю что она бесполезна. Но если цель автора - показать текущей состояние поддержки софта Clang-ом без сообщения о проблемах куда следует - это как водить вилами по воде. Вроде и разводы прикольные, а пользы всем остальным - 0.

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

Хе-хе, такое не лечится, только время расставит.

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