пятница, 10 августа 2012 г.

Как я пытался собрать gentoo при помощи clang.

Недавно случайно убил систему и под такое дело решил немого поэксперементировать. Сразу оговорюсь, что на практике менять системный компилятор не особо нужно, но если Ваши части тела жаждут приключений - это то, что Вы искали.
В принципе, сделать это не очень сложно. Для начала надо поставить сам компилятор и плагин для gcc:
$ emerge clang dragonegg

Причём  надо помнить, что dragonegg собрается только начиная с gcc-4.6.

Далее модифицируем /etc/make.conf:
CC="/usr/bin/clang"
CXX="/usr/bin/clang++"

CFLAGS="-O2 -pipe -march=native
-fplugin=/usr/lib/llvm/dragonegg.so
"

Далее надо пересобрать glibc и binutils. Проблема в том, что их, как и ещё несколько пакетов, нельзя собрать clang. Т.е. их в любом случае придётся собирать gcc. Чтобы упростить этот процесс нужно создать файл
/etc/portage/env/gcc:
CC=gcc
CXX=g++

CFLAGS="${CFLAGS} -fplugin=/usr/lib/llvm/dragonegg.so"
CXXFLAGS="${CFLAGS} -fplugin=/usr/lib/llvm/dragonegg.so"
И теперь можно в файл /etc/portage/package.env помещать пакеты, указвая необходимое им окружение. Я приведу весь файл, чтобы можно было заранее знать, к чему готовиться.
/etc/portage/package.env:
sys-boot/grub gcc
sys-libs/glibc gcc
sys-devel/binutils gcc
dev-libs/libffi gcc
sys-apps/which gcc
dev-libs/elfutils gcc
sys-libs/gpm gcc
dev-libs/openssl gcc
sys-apps/busybox gcc
sys-fs/e2fsprogs gcc
sys-devel/dragonegg gcc
dev-libs/libgcrypt gcc
x11-apps/luit gcc
net-print/cups gcc
x11-base/xorg-x11 gcc
x11-base/xorg-server gcc
media-sound/wavpack gcc
app-crypt/gnupg gcc
media-video/ffmpeg gcc
dev-lang/R gcc
kde-base/kdelibs gcc
media-gfx/sam2p gcc
app-text/recode gcc
Интересно здесь то, что часть приведённых пактов отказывается компилироваться на стадии конфигурирования (kdelibs), часть падает с линковкой (уже не помню), часть падает во время работы (xorg-server).

Особенно обидно, что kdelibs так и не удалось собрать ни clang ни gcc. Поэтому эксперимент признан неудачным и я пойду откатываться на gcc.

2 комментария:

  1. Постоянно юзаю clang, поскольку дома - Macintosh, сразу виден заметный рост скорости компиляции по сравнению со стариком gcc.

    А в нашу систему портеджей Homebrew уже переведено множество вещей из ваших линуксов, вот только вчера пересобирал clangом mc & dia :)

    ОтветитьУдалить
    Ответы
    1. То, что mc и dia соберутся я особо не сомневаюсь ) Не собираются как раз в основном сильно ГНУтые вещи. Хотя, мне говорили, что в протах БСД иксы уже пофиксили, да и ядро недавно представляли собранное clang. Так что когда основные проблемы решат может быть и полностью перейду.

      * А вот gcc сейчас на кресты перейдёт, помолодеет лет на 10 и тоже будет летать :)

      Удалить