LINUX.ORG.RU

Wyrmtail: GNU/Linux на основе компиляторов LLVM


0

1

Всем привет, наверное многие в курсе про попытки Apple и проекта FreeBSD избавиться от GCC из-за его лицензионной «неугодности» BSD-like проектам, собственно так появились llvm ( http://llvm.org ) , а также компиляторы на ее основе - llvm-gcc (основан на GCC 4.2.1 , но использует кодогенерацию через механизмы llvm) , dragonegg (благодаря плагин-ориентированной архитектуре возможна замена кодогенерирующей машины GCC, на llvm) , а также самостоятельный компилятор без заимствования частей GCC - clang, собственно последний и является главной надеждой БСДэшников и яблочников, наверное весьма резонен вопрос, а насколько вообще возможна полноценная замена GCC всеми этими альтернативами? На него я и попыталась ответить своим экспериментом.

Wyrmtail (по-русски - драконий хвост) основаная на билд-системе ~86 ветки Gentoo Linux бинарная сборка GNU/Linux (в отличие от Apple,BSD я попыталась собрать именно GNU userland, несмотря на то, что как раз GNU программы собирались хуже всего), в качестве компиляторов для 550 пакетов системы ( 80 world, 50 system, остальные по зависимостям) были использованы Clang 2.0 (llvm 2.8svn), Clang 1.1 (llvm 2.7) ( около 400 пакетов ) . DragonEgg ( пакеты сета @system , большая часть GNU проблемных пакетов, около 100 пакетов), llvm-gcc (llvm 2.7), отдельные пакеты были собраны GCC 4.5.1pre (порядка 20 несобираемых llvm компиляторами, либо вызывающие ошибки в самой llvm , либо вызывающие ICE в парсере компилятора, либо наиболее частой ошибкой явилась обработка inline asm включений, которые часто вызывали ошибку из за недостатка регистров в llvm)

«дистрибутиву» я пока уделила порядка 12 часов, большую часть из которых составила сборка, система базируется на EGlibc 2.11.1 патчсете debian sid-2, саму libc собрать llvm не удалось из за отсутствия поддержки unwind и интенсивного использования asm inlines.

Если у кого-нибудь возникнет желание потестировать сборку, я готова выложить Gentoo stage4 .tgz, как дистрибутив все пока очень сильно недопилено и требует вмешательств по настройке системы, тем не менее оно грузится и работает, вот сейчас прямо с вирмтэйла и пишу, в качестве основного DE - Gnome (gnome-light)

//ps: впрочем, если даже никому дела до тестирования не будет ( а судя по первым комментариям ниже так оно и есть ) , пусть тема считается новостью об успешной сборке GNU/Linux с помощью llvm компиляторов.

★★★★★

да, я ни коим образом не позиционирую _это_ как дистрибутив общего пользования, хотя конечно хотела бы довести его до общедоступного для тестирования состояния , пока только stage4 образ, это скорее эксперимент и своего рода proof of concept того что можно обойтись без GCC , даже в построении дистрибутива GNU/Linux, не говоря уже о *BSD или операционной системе от Apple


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

Sylvia ★★★★★ ()

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

Хорошо, когда человека штырит. Даже завидно.

thesis ★★★★★ ()

Сильви, отлично!
Выложи куда-нибудь на посмотреть

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

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

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

>>stage 4 надо полагать это архив с системой.

ну, это в виндовом смысле образ :-) я хотел написать «срез»

кинуть его в /wyrmtail

и чрутаться из initrd

Lockywolf ★★★ ()

пару общих бенчмарков, если можно - интересно, есть ли какой-то практический смысл от всего этого

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

обязательно выложу, но т.к. gnome из за Gentoo Bugs #282061 #279555
выглядит достаточно малопрезентабельно (не работает менюшка, llvm тут непричем), то соберу еще lxde с компизом,

с ФФ получилось совсем нехорошо, собрался он только llvm-gcc , причем так, что при запуске не рисует интерфейс, виноват не FF а cairo, llvm его не может нормально собрать, так что ФФ будет официальный бинарник, хотела бы llvm-ский, но не судьба, а свой PGOшный с официальным брендингом класть не могу , т.к. лицензия на торговые марки мозиллы не позволяет, GCC тоже пришлось пост-фактум пересобирать, из за того что у меня ICC собраны были его некоторые части, да, GCC собран GCC, хотя бутстрап llvm-gcc , binutils - llvm-gcc


Sylvia ★★★★★ ()

Это или очень смелый шаг в будущее, или хотя бы попытка избавиться от противоречивого прошлого. Удачи и терпения!

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

>не работает менюшка
Это известный баг. Слышал что в стейбле все работает

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

>>Вот Вам делать нечего. Время на личную жизнь хоть остаётся?

а зачем? зачем выделять на нее время, если ее нет?

а без шуток, есть и на нее время. мы все можем.

так что ФФ будет официальный бинарник

А Кайро тоже официальный?

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

Тебе не положить на него? мы же для личного пользования, а не для распространения.

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

увы некоторые вещи пришлось все же собирать GCC, но их мало, подробно писала в juick, сейчас перепост сделаю

# @Sylvia:
я пересобрала @system набор с dragonegg, не собрались — perl, consolekit, policykit, gawk, groff, ncurses, libxml2, libxslt
#749636/28 с desq, 1 день назад

# @Sylvia:
собрала xorg, не собрались — pixman, xorg-server, большинство драйверов видеокарт , mesa
#749636/38 с desq, 1 день назад

Тебе не положить на него? мы же для личного пользования, а не для распространения.


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


PPS: compiz кстати клангом собрался, stage4 будет завтра наверное)
хочется исправить некоторые бяки и ШГ по умолчанию... и ФФ пересоберу с системным cairo, а то внутренний у него старый и с клангом глючащий

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

Лучше допили или gcc-config или сделай eselect, который бы позволял компиляторы переключать.

Gorthauer ★★★★★ ()

Всё бы ничего, но вот linux... Он вроде намертво завязан на gcc и менять что-то похоже не собираются. А Qt b boost пробовала собирать?

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

от сборки qt меня остановил тот факт что вышла 4.6.3 ) вручную собирать не охота , да и с qt проблем не ожидаю особенно, там давно присутствует конфигурация для llvm-gcc, если только clang )
boost недавно собрали клангом, вообщем пока эти зависимости не востребованы...

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

>но вот linux... Он вроде намертво завязан на gcc

если имеется ввиду ядро - да, если userspace - я собственно доказала обратное, от не так сильно завязан на GCC как это можно себе представить, хотя кросс-платформенные вещи вообще хорошо собираются, Gtk/Gnome на ура просто

Sylvia ★★★★★ ()

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


http://narod.ru/disk/21718204000/wyrmtail.tgz.html
стейж 4 образ. гентушникам конечно будет проще,
потому что этапы будут похожи на обычную установку генты по хэндбуку
Как это ставить:

прежде всего убедиться что процессор поддерживает SSE2 , это все что Pentium4 и выше.

1) загружаем любой линукс, готовим раздел диска, распакованый образ занимает 1.3 Gb , плюс резервное место на данные, если развертывать портеж - больше

2) распаковываем stage4
cd /install_target
tar -xvpf wyrmtail.tgz


3) ядра нет, поэтому используете то, что у вас есть, можно таким вариантом -
/lib/modules/ /lib/firmware скопировать можно в /install_target/lib/modules и firmware соответственно
добавляете еще один пункт в меню grub или lilo с соответствующим параметром root=

4) ставите пароль для root
chroot /install_target /bin/bash
passwd root

если случайно забудете это сделать - там стоит пароль «ysera» (без кавычек)


5) загружаетесь, создаете пользовательский аккаунт (если надо) через useradd

6) startx , если от root , то лучше взять подготовленный xinitrc

cp /etc/skel/.xinitrc ~

там настроена загрузка lxde, переключалку в lxde я не нашла, поэтому на русский переключать кнопкой win левой

другие варианты которые можно прописать в .xinitrc -
gnome-session
compiz-manager
для GNOME из-за названой выше баги требуется удалить меню приложения с панели и добавить заново (баг Gentoo)


7) если требуется развертывание портежа
cd /usr
sh restore-portage.sh

скачает и распакует свежий снапшот с яндексового зеркала

8) компилятором по умолчанию в make.conf прописан clang / clang++

если что-то с ним собираться не будет - можно указать
CC=gcc
CXX=g++
тем не менее это все еще будет не GCC , а Dragonegg (управляется враппером, подробности см в /etc/fgcc.conf)

чтобы собрать что-то GCC

CC=/usr/GCC_4.5/bin/cc CXX=/usr/GCC_4.5/bin/c++ emerge -va package


примечание - портеж свято верит (сделана иньекция в базу пакетов)
что установлены binutils 2.20.1-r1 , gcc 4.4.3-rчего-то-там, glibc 2.11.2 в стандартных им местах, маску я не ставила, но возможно в относительно скором будущем это все захочет обновиться

binutils собраны llvm-gcc и установлены в отдельном префиксе, в /usr/bin накиданы симлинки
gcc установлен в /usr/GCC_4.5 , там же лежит и плагин dragonegg к нему, /usr/bin/gcc является враппером (конфиг в /etc/fgcc.conf)
возможен вызов gcc как wyrmtail и wyrmtail++
glibc заменена на eglibc (ручная замена)
clang можно найти в /usr/local/llvm-dev , симлинки clang и clang++ лежат в /usr/local/bin

вот наверное все.. естественно никаких удобств и гарантий, просто proof of concept того , что можно собрать GNU/Linux практически целиком c помощью llvm, за исключением лишь очень небольшого числа пакетов. Интересно будет увидеть тут отзывы и сообщения о пойманныз глюках.

Sylvia ★★★★★ ()

Жаль сейчас не до этого. Обязательно потестировал бы.
PS: Надо было бы Алкснису man gcc читать... Сейчас был бы на ЛОРе в авторитете. :D

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

>я пересобрала @system набор с dragonegg, не собрались — perl, consolekit, policykit, gawk, groff, ncurses, libxml2, libxslt

собрала xorg, не собрались — pixman, xorg-server, большинство драйверов видеокарт , mesa

хорошо бы теперь ещё со всем этим разобраться и баги развесить в соответствующие багтрекеры, тогда эта работа будет иметь смысл.

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

Сильви, а если допилить скрипт от icc? тогда по-хорошему можно будет удобно управлять компиляторами и флагами

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

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

а если брать сборку всего и вся icc - результат конечно может быть весьма неплох, но с точки зрения легальности это потребует коммерческую версию icc

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

да, спасибо, не очень хотела читать эту «простыню» в багзилле, наверное надо тренироваться вычитывать сразу важные моменты, пропуская выяснение обстоятельств )

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

>собирает обьектный файл gcc, в том случае если его не собрал первый компилятор?

Не, там принудительно указывается какой компилятор для какого пакета использовать (packages.icc, packages.icc-cflags)

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

я подумала про тот скрипт которым умельцы собирали ядро с помощью icc )
могу заархивировать то что у меня есть и выложить, там просто на bash'e
мне KRoN73 выкладывал на paste.[org]

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

Мне бы подарили клавиатуру с отдельной кнопкой Wyrmкакеготам? :)

Набирать то всё равно приходится. А вдруг ты пьян, устал, забыл.

Название дистрибутива должно звучать как выстрел, как марш к победе. Поглядите: Debian, Ubuntu!

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

>Набирать то всё равно приходится

Я к тому, что тогда бы Wyrm тебя бы не удивлял. Ну, или лет 5 назад - Lineage II. Там тоже Вирмы были :)

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

Мы же желаем всеобщей удачи Silvy, а не только набрать в пользователи поклонников того, о чём в приличном обществе и говорить не принято? :)

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

Так мы и в эксперименте желаем вам полной удачи. А в эксперименте тоже, чем больше мышек, тем больше информации от их писка.

Это не критика, это просто пожелание, мы вам верим.

anonymous ()

Кто-нибудь протестировал сборку?
А то самому лень как-то качать и ставить.

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

я ни коим образом не пытаюсь это продвинуть в широкое использование это эксперимент и не более.

just for fun?)

Годный получился уродец. Жаль, проц у меня Intel P3...)))

jeuta ★★★★ ()
Ответ на: Есть в планах? от iZEN

ядро не собирается ни в каком виде, llvm-gcc тоже, вызывает ошибки llvm, если только собирать смесью gcc (критичные части + то-что соберется ) , драйвера - clang

Sylvia ★★★★★ ()

Почему бы не рассказать об этом на каком-нибудь слэшдоте?

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

anonymous ()

А свой антивирус, броузер и офис будут?

Hokum ☆☆☆☆ ()
Ответ на: комментарий от RUSDACent

не, ну а что, форкнуть, сделать ребрендинг и рекопирайтинг - и будет, наконец, lorlinux

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