39

Gentoo + clang, что из этого вышло.

Давно уже заглядывался на разные компиляторы, помимо gcc. Недавно чекнул icc и понял, что он скорее мертв, чем жив. А вот clang живет себе во freebsd, на маках  и в ус не дует.

Как показали интернеты, на линуксе тоже реально его завести. Как пишут на лоре и в бенчмарках, он даже шустрее gcc:

http://www.phoronix.com/scan.php?page=article&item=gcc-6...

https://losst.ru/sravnenie-gcc-vs-clang

Почему бы не попробовать ?


Сначала настроил llvm  со всем необходимым

Пересобрал, это дело. Дальше прописал пару конфигов и настроил make.conf.

Как вариант, можно добавить flto в cflags(перед этим сделать $ binutils-config --linker ld.gold). После этого пересобрать мир.


emerge -e --keep-going world

Из 694 пакетов не собрались только эти + ядро, которое без кучи патчей шлангом не собрать.

К ним я подпихнул gcc И все нормально заработало. Косяк был с ncmpcpp, который почему-то не захотел вообще никак  пересобираться и ffmpeg, который позже собрал без 32 либ(вот тут оговорка, то ли из-за того, что убрал 32, то ли из-за того, что другой компилятор, но нагрузка на процессор при проигрывании уменьшилась, надо будет еще раз посмотреть результаты с gcc).


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


Скоро 4.0 версию шланга подвезут  в анстейбл и даже может профиль. И можно будет сказать, что за пределами gcc на линуксе есть жизнь. Кривоватая, но она есть :D

GNU/Linux

1.2K постов15.6K подписчиков

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

1
Автор поста оценил этот комментарий

Чуть-чуть некропостинга.
Я тут от нефиг делать свой оверлей сделал с патчами для мира что бы собирать всё шлангом (просто потому что я могу).
В лаймане gentoo-clang.
Инструкции и сама репа тут: https://github.com/BilyakA/gentoo-clang

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Все по деловому, с инструкцией, найс. А то вики протухла.

Я так еще ллд закинул в бинутилс к остальным линкерам и просто переключил на него, помимо строки в make.conf. Таким образом собираются почти все 570 пакетов с lto и libtool не матюкается на неизвестные конфиги в ldflags.

slibtool еще интересная штука, меньше конфликтует, но не везде проканывает.

показать ответы
0
Автор поста оценил этот комментарий

Нахуя я этот пост открыл?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Чтобы написать что-нибудь и закрыть :D Очевидно же.
2
Автор поста оценил этот комментарий

Уже как полгода использую шланг как основной компилятор на дженту (думал написать статью про подводные камни при настройке и использовании, но как-то по опыту прошлой статьи понял, что гентушников на пикабу маловато будет).
Радует, что package.env со временем худеет и всё больше пакетов поддерживают clang из коробки (сам отправлял пару патчей в ffmpeg и vlc для адекватной поддержки фич clang).
Но и не без косяков со стороны мейнтейнеров. Очень советую следить за qtwebengine, поскольку он не собирается, если  qtcore был собран клангом, но при этом не возвращает ошибку сборки (т.е. portage уверен что qtwebengine установлен). Вот уже три(!!!) минорных версии Qt жду пока эту багу починят (бага #595574 в багзилле дженты, номер баги в Qt где-то потерял).
Ну а кстати по поводу производительности. На синтетических тестах clang генерит более оптимизированный код чем gcc -O3 (по поводу icc не знаю, я эту проприетарщину на работе потыкал и выкинул). Но то синтетика, что там на рабочем окружении будет - не знаю.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Привет, у тебя есть телега или еще какая связь? Просто разбираюсь и есть вопросы.

показать ответы
0
Автор поста оценил этот комментарий

В общем ложная тревога, собираются мультилибы, правда надо не ABI_X86="64", как я раньше делал, чтоб не морочаться, а действительно необходимые: дровишки, зависимости стим лаунчера.


lld и libc++ с 32 не дружат, стим и вышеперечисленные зависимости лучше без libc++ собирать т к требует libstdc++.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

И снова ложная тревога. Нормально все с 32.

0
Автор поста оценил этот комментарий

В общем ложная тревога, собираются мультилибы, правда надо не ABI_X86="64", как я раньше делал, чтоб не морочаться, а действительно необходимые: дровишки, зависимости стим лаунчера.


lld и libc++ с 32 не дружат, стим и вышеперечисленные зависимости лучше без libc++ собирать т к требует libstdc++.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

*ABI_X86="32 64"

0
Автор поста оценил этот комментарий

ну ладно, попробую и я 5 шланг как-нибудь. Если будут проблемы - хоть знать буду, что я не один такой :)


Кстати, стим из какого оверлея? или бинарником из деб. пакета?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

steam-overlay,


На свой страх и риск, сделаем вид, что я к этому не подговаривал=) У 4/5 конечнео есть всякие фичи, в виде прямого lld и прочего, но я пару раз уже умудрялся зафаршмачить их так, что они просто переставали работать. 3.9 в этом плане пока что стабильнее, для повседневности он будет определенно лучше.

0
Автор поста оценил этот комментарий

а пятый шланг это из лайв-ебилда 9999?

у меня до сих пор 3.9.1 стоит со стандартным bfd, так что подсказать врядли что-то смогу..

Но с мультилибом проблем не было, иногда докидываю abi_x86_32 в use флаги для пакетов. Хотелось бы отказаться, да стим требует :(

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

В общем ложная тревога, собираются мультилибы, правда надо не ABI_X86="64", как я раньше делал, чтоб не морочаться, а действительно необходимые: дровишки, зависимости стим лаунчера.


lld и libc++ с 32 не дружат, стим и вышеперечисленные зависимости лучше без libc++ собирать т к требует libstdc++.

показать ответы
0
Автор поста оценил этот комментарий

а пятый шланг это из лайв-ебилда 9999?

у меня до сих пор 3.9.1 стоит со стандартным bfd, так что подсказать врядли что-то смогу..

Но с мультилибом проблем не было, иногда докидываю abi_x86_32 в use флаги для пакетов. Хотелось бы отказаться, да стим требует :(

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

>а пятый шланг это из лайв-ебилда 9999?

Ога, он самый. Я тут с 4 шаманил, но хромиум ни в какую не хотел собираться, а гитовский без косяков все собрал, не только браузер, а вообще все и даже с custom-cflags.


На 3.9 тоже проблем не было, но lld не давал спокойно жить и рискнул. Из 32 зависимостей как раз единственным был стим.


Ладн, поосиляю еще, мб чего да выйдет =)

1
Автор поста оценил этот комментарий
Получается можно default-libcxx из юзов убрать, т к не используется и оставить clang default-compiler-rt gold

агамсь


Я тоже голд поставил, читал про что существует некий lld, но ничего пока конкретного.

я lld у себя еще не пробовал для системы. Потыкал его на работе, они (llvm) относительно недавно (в январе вроде) выкатили его в репу для дебиана. Смысл использовать его мне в том, что он нормально линкует MSVC ABI, чего не умеет ни один другой линкер (ну или я просто не нашел) помимо обычного млекомягкого link.exe. А так вроде как говорят, что lld немного быстрее, чем ld из gcc и gold.


Кстати, по поводу голда. Он тоже не без боли собирает некоторые пакеты, так что будь готов завести еще одно окружение с стандартным bfd. На вики было описано это, если что, проблем быть не должно. Ну и опять - дополнительный гемор, потому что если не соберется пакет - нужно лезть в логи и смотреть кто виноват - clang или gold.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Немного некропостинга, создавать ради такого новую тему не ок а в интернатах пока особо не обсуждают.

Собирал всю систему четвертым и пятым шлангом с lld, из 700 где-то 40, без лто(но на lld не матюгается) из них ~15 с gcc.
Все в общем-то ок, только с мультилиб проблемы, не сталкивался ещё с этим ?
показать ответы
0
Автор поста оценил этот комментарий

Лучше расскажи чем приглашение в консоли раскрасил.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Powerline поставил.

Скачал powerline, powerline-symbols, powerline-fonts с включеным ubuntumono.

После установки в .bashrc прописал путь до скрипта и шрифт в urxvt  поменял на патченый через .Xresources :


URxvt.font: xft:Ubuntu Mono derivative Powerline:regular:size=15

URxvt.boldFont: xft:Ubuntu Mono derivative Powerline:bold:size=15


Поищи на сайте:

http://powerline.readthedocs.io/en/master/installation/linux...

показать ответы
3
Автор поста оценил этот комментарий

ОФФТОП Коли попался живой гентушник. Romchexd, расскажи, что сейчас с гентой происходит? Я им последний раз пользовался почти 10 лет назад. И при очередном выборе дистра для ноута я уже второй раз выбираю арч, хотя так и тянет на генту. Но беглый гуглеж показыает, что генту вики почти мертва и, когда я год назад искал свежую инфу по состоянию дистра, то gentoo.org мне тоже показался немного неживым. Мои впечатления обманчивы?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

Единственное приходит на ум при слове "мертвая" - это стейбл ветка. В то время как все сидели на 4.9 ядре, гента была на 4.4, полторы недели назад только обновился. ffmpeg в той же фряхе 3.2, в стейбл генте 2.8. Но все это можно исправить добавлением ~amd64 для всей ветки или отдельной версии.  UPD  или если охото почувствовать себя молодым и резвым школьником, то можно добавить глобально :D

показать ответы
0
Автор поста оценил этот комментарий

А на своей системе с clang'ом тесты не проводил? Получил какой-то прирост?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Тесты не проводил и не собираюсь т к это всего лишь десктоп и сверх нагрузок тут не будет. Про производительность уже говорил 2 раза.

Автор поста оценил этот комментарий

Я понимаю, когда в 2009 году пихал на безнадёжно устаревшую машину к тому времени Gentoo и усирался за каждый килобайт, чтобы через wine на своём радио поиграть в Fallout 3. НО сейчас нахрена добиваться этой минималистичности?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Не понимаю, о какой минималистичности идет речь? Стоит обычная система, с дефолтным десктопным профилем. Ничего отдельно в юзах не колдую.
Если ты про 700 пакетов, то вначале их 300, и если не ставить всякие гномокеды, то система не жиреет.
0
Автор поста оценил этот комментарий

-O3 тогда ещё глобально добавь. луп-анроллы! фомг оптимайз! да будет генту райс! xD

раскрыть ветку (1)
Автор поста оценил этот комментарий

У меня на gcc и так -O3 глобально, уж сколько лет, брат жив.

1
Автор поста оценил этот комментарий

ну LD у меня тоже не стоит, я так, навскидку сказал, я использую gold.ld как дефолтный на все пакеты, поэтому у меня LD не стоит. Можно и так оставить, дефлотный bfd вполне линкует код из кланга.


CXX="clang++ -stdlib=libc++"


убил бы за такое :) . Надо так:

CXX = "clang++"
CXXFLAGS = "-stdlib=libc++" ну и остальное.

Ну и соответственно остальные флаги по вкусу.

А вообще использовать libc++ как стандартную либу это дело вкуса как по мне. Пока не получится использовать её ВЕЗДЕ и выпилить gcc"шный libstdc++ - придется смешивать их между собой. Как бы вот тоже еще плюс в дженте - приватные зависимоисти линковки подхватятся и все нормально сбилдится, если ты будешь собирать пакет с libstdc++ и линковать его с либой, которая использует libc++ как стандартную либу. Но это еще один гемор, за которым надо следить, поэтому я пока по поводу libc++ не парюсь.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Не надо кровопролития, все ошибки исправлены. Получается можно default-libcxx из юзов убрать, т к не используется и оставить clang default-compiler-rt gold.

upd, хотя пусть будет - есть не просит.

Я тоже голд поставил, читал про что существует некий lld, но ничего пока конкретного.

показать ответы
2
Автор поста оценил этот комментарий

Ну коли такое дело...
- -O3 из CFLAGS убрать в конфиг gcc, для шланга он бессмысленнен.
- в конфиг GCC соответственно добавить AR, NM и RUNLIB родные. Как бы и так нормально, но ИМХО кошерно должно быть полностью родным. Там же в конфиг GCC переписать LFLAGS="" потому что сперва грузится make.conf и потом поверх него - конфиг gcc. Получается что флаги линковки у тебя будут от шланга. Опять таки непонятно, как gcc может себя в ними повести. По-хорошему я себе полностью разделил конфиги и перечислил в них всё (CC, CXX, CFLAGS, CXXFLAGS, LD, LDFLAGS, AR, NM, RANLIB), что бы при необходимости менять было наименее болезненно.
- как написал выше - qtwebengine перепроверить. Потому что потом посыпятся ошибки сборки при его поиске и непонятно будет что не так, потому что портаж будет на 100% уверен что он установлен. Но это вроде как только с ним так, остальные пакеты нормально обрабатывают ошибки сборки и портаж о них в курсе.
- в package.env твой я бы добавил sys-devel/gcc gcc-bfd без указания версии (да у меня по-умолчанию еще и голд линкер стоит, все хочу на шланговский lld пересесть). Что бы не запариваться каждый раз добавлять версии GCC при обновлении.

А так на самом деле добавить нечего. Конфиги у тебя как конфиги, работает - и на том спасибо, как говориться :) Мой package.env на самом деле раза в три больше, но я ленюсь его от старых версий периодически чистить.

раскрыть ветку (1)
Автор поста оценил этот комментарий

CC="gcc"

CXX="g++"

CFLAGS="-march=haswell -O3 "

CXXFLAGS="${CFLAGS}"

LDFLAGS="-Wl,-O1 -Wl,--as-needed"

AR="ar"

NM="nm"

RANLIB="ranlib"


Как-то так, ldflags вроде дефолтные, первое что нагуглилось

По LD не нагуглил ничего адекватного.


И еще, такая штука. Я когда собирал libcxx , то мне посоветовали выставить CXX="clang++ -stdlib=libc++" , делал так ? Хромиум на -stdlib=libc++ матюгнулся правда.

показать ответы
2
Автор поста оценил этот комментарий

Уже как полгода использую шланг как основной компилятор на дженту (думал написать статью про подводные камни при настройке и использовании, но как-то по опыту прошлой статьи понял, что гентушников на пикабу маловато будет).
Радует, что package.env со временем худеет и всё больше пакетов поддерживают clang из коробки (сам отправлял пару патчей в ffmpeg и vlc для адекватной поддержки фич clang).
Но и не без косяков со стороны мейнтейнеров. Очень советую следить за qtwebengine, поскольку он не собирается, если  qtcore был собран клангом, но при этом не возвращает ошибку сборки (т.е. portage уверен что qtwebengine установлен). Вот уже три(!!!) минорных версии Qt жду пока эту багу починят (бага #595574 в багзилле дженты, номер баги в Qt где-то потерял).
Ну а кстати по поводу производительности. На синтетических тестах clang генерит более оптимизированный код чем gcc -O3 (по поводу icc не знаю, я эту проприетарщину на работе потыкал и выкинул). Но то синтетика, что там на рабочем окружении будет - не знаю.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Вот, ты то и нужен. Рассказывай про подводные камни.  Что да как настроил ?   Есть что сказать по моим конфигам,, где что выставить/убрать ?  

показать ответы
1
Автор поста оценил этот комментарий

А с чего бы оно вдруг не завелось то? Нормальный продакшн-компилятор.

Насчёт "более оптимального кода" я бы поспорил - всё ж выходит пока у него более медленный результат, чем у gcc. Но при этом есть очень классная черта - он у себя внутри устроен красиво и понятно. Для контрибуторов нет большого порога вхождения; можно начинать допиливать очень быстро. В отличие от gcc, который наворотил столько, что сейчас немногие девелоперы тянут лямку и пишут его дальше - слишком сложно всё.

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

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

показать ответы
1
Автор поста оценил этот комментарий
Попробуйте ещё интеловский. Интересно, соберётся без патчей?
Ну и он должен по бенчмаркам чувствительно быстрее.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Он вроде как того. Да и пакетов там совсем немного собиралось: всякие bzip2 и наподобие.

Раньше была статья на вики, но даже ее выпилили.

показать ответы
0
Автор поста оценил этот комментарий

А компилятор должен был сильно повлиять на производительность? И не нужно сравнивать *BSD системы и Linux у всех свои приколы

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

Хотелось узнать, будет ли работать вообще. Ведь в линуксе кроме gcc обычно ничего не используется.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества