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 подписчиков

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

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

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

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

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

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

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

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

Даров

E1Dorado я в телеге

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

Пиши лучше на гентушную вики, там гентушники толпами ходят.

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

а толку? там уже всё и так написано на самом деле :)

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

Ну и норм тогда, на вики есть, значит найдут.

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

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

раскрыть ветку (16)
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 на самом деле раза в три больше, но я ленюсь его от старых версий периодически чистить.

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

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++ матюгнулся правда.

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

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


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


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

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

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

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

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

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

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

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

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

агамсь


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

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


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

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

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

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

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

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

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

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

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

ну дык. Не хухры-мухры :)

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

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

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

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

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

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

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

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


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


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

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

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


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

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

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


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

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

*ABI_X86="32 64"

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

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

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества