LINUX.ORG.RU

Сборка Chromium с помощью clang

 , ,


0

2

Хочу сэкономить расход памяти на сборке сабжа ( и не только) за счет Thin LTO, которое есть в clang. Указываю ебилду окружение для сборки как сказано в https://wiki.gentoo.org/wiki/Clang, но портаж упорно продолжает использовать для сборки gcc. Когда же устанавливаю компиляторы глобально через CC(X), сборка падает из-за ошибок в опциях компилятора.

Хромого вообще реально собрать clang'ом и как теперь правильно это делать?

Всем спасибо.

Если что, собираю в tmpfs на Рязани 2700, оперативной памяти 16 Гб, zram использую.

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

Да, видимо не без оснований. Хочу повторить их опыт, может реально быстрее будет собирать 16 Гб памяти отжирает и еще 12 Гб в свопе, слыханное ли дело?.

LongLiveUbuntu ★★★★★
() автор топика

Хромого вообще реально собрать clang’ом и как теперь правильно это делать?

Да. На FreeBSD так и делаем: portmaster www/chromium.

iZEN ★★★★★
()

вот и дожили. firefox не собирается gcc, а cromium clang’ом. когда то было наоборот…

eternal_sorrow ★★★★★
()

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

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Да, видимо не без оснований.

Эти основания - не твои основания. Там тупо бугурт от gpl.

Хочу повторить их опыт, может реально быстрее будет собирать

Не будет. gcc на много быстрее, во многих случаях даже в разы.

слыханное ли дело?

Ну а зачем покупать кукурузу с огрызком памяти? Ты там потом ещё узнаешь - почему на нормальных платформах память чуть пошире.

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

К тому же, зачем ты собираешь хром в tmpfs не имея памяти? Да ещё и с кукурузнымlto, которое(впрочем любое) генерирует гигов 6-8 объектников?

Это C++, это не бездарный маздай. tmpfs ничего не даёт. Да ещё и своп.

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

tosol4152
()

Когда я последний раз бенчил сборку хрома шлангом - он без проблем собирался шлангом через env.

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

tosol4152
()

Много воды и помноженное на 0 фактических данных.

Хочу сэкономить расход памяти на сборке сабжа ( и не только) за счет Thin LTO, которое есть в clang.

Что за бред. Если хочешь сэкономить вообще выключай lto.

Указываю ебилду окружение для сборки как сказано в https://wiki.gentoo.org/wiki/Clang

Не надо рассказывать сказки. Показывай что конкретно сделал: make.conf, env/*, package.env и тд и тп.

собираю в tmpfs

5+ гигов в пустую.

zram

не нужен.

16 Гб

Держи карман шире. Тем более если в 16 потоков собираешь.

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

собираю в tmpfs

5+ гигов в пустую

+++

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

Без zram у меня просто кончается память и своп, приехали. Я проверял. Не ожидал, что сабж станет таким жирным.

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

Я проверял.

Давай, ты покажешь, при каких реальных условиях ты проверял.

Без zram у меня просто кончается память и своп

А zram тут причем?

Чтобы стало больше свопа, в любом случае надо увеличить своп (охренеть!).

Zram - никаким боком не swap. Чтобы zram стал swap’ом, надо сделать больше действий, чем включить zswap. При забивании памяти, zram начинает чудить особенно в комбинации с обычным свопом.

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

Давай, ты покажешь, при каких реальных условиях ты проверял.

tmpfs /var/tmp/portage tmpfs size=14G 0 0

В /etc/portage/make.conf
MAKEOPTS="-j17"

Дальше emerge -av chromium и ждём.

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

Ура, наконец-то что-то правдоподобное. Вывод swapon и free, не нужен, я ж телепат, сам догадаюсь.

tmpfs /var/tmp/portage tmpfs size=14G 0 0

Самое бесполезное для портажа. Разве что для «экономистов» ресурса ssd.

Максимум выиграешь 3% времени. Но потеряешь 5 гигов от 16, что примерно 30% оперативной(!) памяти для данных, лежащих мертвым грузом. «Экономист».

MAKEOPTS="-j17"

(Рассказ от первого лица) У меня не хватает памяти, загружу-ка я на все 146% виртуальных(!) ядер, при этом каждый процесс может сожрать 4+ гига памяти. Я же «экономист». Загружать только реальные(!) ядра особенно для задач, загружающих память - это для лохов.

Про clang тоже сам догадаюсь.

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

tmpfs /var/tmp/portage tmpfs size=14G 0 0

Если уж прям чешется и хочется куда-нибудь запихнуть zram, то можно /var/tmp/portage запихнуть в zram, отформатировав например в f2fs (по моим тестам самая быстрая для zram).

anonymous
()

Хромого вообще реально собрать clang’ом и как теперь правильно это делать?

В Debian Chromium 83.0.4103.116-1 собирают успешно:

# output compiler information
clang++ --version
clang version 9.0.1-12 
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

https://buildd.debian.org/status/fetch.php?pkg=chromium&arch=amd64&ver=83.0.4103.116-1&stamp=1592938226&raw=1

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

Можно реально работающий рецепт для Gentoo? Ибо тот, что в их wiki, не работает.

Приеду домой, сброшу содержимое всех нужных конфигов.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu
/var/tmp/portage tmpfs size=14G
MAKEOPTS="-j17"

и он ещё хочет в tmpfs компилять. Ну-ну.. Даже если брать по самому скромному, для нетяжелых пакетов (а хромой к ним не относится) каждому потоку вынь да положь 2 Гига минимум.

Хорошо если с j5 или j6 проскочит трюк.

А с j17 tmpfs нужно далеко за 30 гигов, никак не 14

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

У меня размер свап = размер оперативной памяти

Тебе нельзя помочь. Ноль информации.

В последних версиях для сборки хромиума добавили CHROMIUM_FORCE_CLANG=[yes|no]. Вдруг поможет.

Хотя врядли, у тебя там бардак из вольной интепретации «рекомендаций» из разных источников разной степени сомнительности, вдобавок искаженный кривизной рук.

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

А вот и «рекомендации» от авторитетных 5-звездочных для 5-звездочных

$ emerge -pv www-client/ungoogled-chromium

These are the packages that would be merged, in order:

Calculating dependencies... done!

emerge: there are no ebuilds to satisfy "www-client/ungoogled-chromium".
anonymous
()
Ответ на: комментарий от Chord

Послал, так, послал.

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

Отличная «рекомендация».

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

Смотри. Согласно статье в wiki.gentoo.org о Clang в /etc/portage/compiler-clang прописано:

CC="clang"
 2 CCX="clang++"
 3 CFLAGS="${CFLAGS} -flto=thin"
 4 CXXFLAGS="${CFLAGS}"
 5 LDFLAGS="-Wl,-O2 -Wl,--as-needed"
 6 AR="llvm-ar"
 7 NM="llvm-nm"
 8 RANLIB="llvm-ranlib"

В /etc/portage/package.env/chromium указано

www-client/chromium compiler-clang

Содержимое /etc/portage/make.conf:

ACCEPT_LICENSE="*"
ACCEPT_KEYWORDS="~amd64"
CFLAGS="-march=znver1 -O2 -pipe"
CXXFLAGS="${CFLAGS}"
INPUT_DEVICES="evdev"
VIDEO_CARDS="nvidia"
LINGUAS="ru ru_RU"
L10N="${LINGUAS}"
MAKEOPTS="-j17"
PORTAGE_NICENESS = 0
USE="bash-completion mp3 pulseaudio qt5 symlink wavpack -fortran -qt4
      -systemd -systemd-units -wayland -gpm"
DISTDIR="/home/aspnet"
PYTHON_TARGETS="python3_7 python3_8"
GENTOO_MIRRORS="https://mirror.yandex.ru/gentoo-distfiles/ http://gentoo.mirr  ors.ovh.net/gentoo-distfiles/ https://ftp-stud.hs-esslingen.de/pub/Mirrors/gentoo/ http://gentoo.bloodhost.ru/ https://gentoo.wheel.sk/"
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sha sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3"

Он еще и собирает отчаянно медленно, особенно ближе к концу, так что я надеюсь хоть немного ускорить по ресурсам это дело.

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

2 CCX="clang++"

Что такое CCX? Опечатка?

Давай, ты будешь копировать сюда нормальный выхлоп, а не этот нумерованный список.

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

/etc/portage/env/compiler-clang конечно же.

cat /etc/portage/env/compiler-clang 
CC="clang"
CCX="clang++"
CFLAGS="${CFLAGS} -flto=thin"
CXXFLAGS="${CFLAGS}"
LDFLAGS="-Wl,-O2 -Wl,--as-needed"
AR="llvm-ar"
NM="llvm-nm"
RANLIB="llvm-ranlib"
LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

CCX=«clang++»

CCX - это уже тенденция. Правильно так:

CXX="clang++"

CFLAGS=«${CFLAGS} -flto=thin»

Насколько помню, для хромиума всякие хитрые флаги навроде -flto=thin отбрасываются. Так что зря стараешься. Хотя USE=custom-cflags может помочь.

И если clang, то оно само собирается с LTO.

LDFLAGS=«-Wl,-O2 -Wl,–as-needed»

Ненужно, смотри выше.

AR=«llvm-ar»

NM=«llvm-nm»

RANLIB=«llvm-ranlib»

Ненужно.

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

/etc/portage/make.conf:

PORTAGE_NICENESS = 0

Пробелы сам вставил, или так и было?

DISTDIR="/home/aspnet"

Это шутка?

PYTHON_TARGETS="python3_7 python3_8"

Одного питона недостаточно?

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

Пробелы сам вставил, или так и было?

Уже не помню. Это древний конфиг, я там только march поменял.

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

В сухом остатке достаточно

$ cat /etc/portage/env/clang 
CC="clang"
CXX="clang++"

Ипать я рукосуй. Спасибо )

Как в воду глядел

у тебя там бардак из вольной интепретации «рекомендаций» из разных источников разной степени сомнительности, вдобавок искаженный кривизной рук.

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

Это шутка?

Нет, одно время писал на Mono для чего завел отдельного юзера. Каталог остался, вот я в него пакеты и складываю.

Одного питона недостаточно?

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

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

Хотя параметры в make.conf те же

Это уже неважно. Тут надо смотреть df -h /var/tmp/portage, zramctl, swapon, free

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

Что именно интересует в swapon? Запустить его с параметром --verbose?

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

Вот выхлоп zramctl:

den@zuiho ~ $ zramctl 
NAME       ALGORITHM DISKSIZE  DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram1 zstd            2G  1,3M 62,8K  280K      16 /tmp
/dev/zram0 zstd          7,8G    1G  258M  276M      16 [SWAP]

Выхлоп df -h /var/tmp/portage

Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
tmpfs               14G         6,4G  7,7G           46% /var/tmp/portage

Выхлоп free -m:

             total        used        free      shared  buff/cache   available
Mem:          16018        4092        5131        5510        6794        6078
Swap:         24564        1039       23525

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

tmpfs 14G 6,4G 7,7G 46% /var/tmp/portage

/dev/zram1 zstd 2G 1,3M 62,8K 280K 16 /tmp

И это тоже ожидал: /tmp в zram (интересно, что за фс), зато /var/tmp/portage в tmpfs.

/dev/zram0 zstd 7,8G 1G 258M 276M 16 [SWAP]

8 гигов в zram + 16 на диске. Тоже ожидаемо.

Не, ну а шо, никто не запрещает - каждый теребонькает, как хочет. Главное, это делать в наморднике, как рекомендует ВОЗ (это еще один авторитетный рекомендатор)

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

часа за три

Отсутствие результата - тоже результат.

Люди меньше чем час собирают. В некоторых бенчмарках есть сборка хромиума, для твоей рязани 2700 - 4400 секунд, что примерно 1 час 15 минут.

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

До этого оно почти сутки собиралось. Так что ускорение налицо. Сделаю точный замер времени с помощью time.

для твоей рязани 2700 - 4400 секунд, что примерно 1 час 15 минут.

Можно ссылку на источник? Хочу посмотреть подробнее.

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