воскресенье, 29 мая 2011 г.

Сборка FreeBSD-9 с помощью Clang

Clang является фронэндом к LVM и призван заменить gcc в базовой системе. Сейчас же по умолчанию сборка как системы, так и портов ведется с помощью далеко не самой свежей версии gcc.

Согласно http://wiki.freebsd.org/BuildingFreeBSDWithClang для переключения на clang нужно прописать в /etc/make.conf
.if !defined(CC) || ${CC} == "cc"
CC=clang
.endif
.if !defined(CXX) || ${CXX} == "c++"
CXX=clang++
.endif
.if !defined(CPP) || ${CPP} == "cpp"
CPP=clang -E
.endif
# Don't die on warnings
NO_WERROR=
WERROR=
# Don't forget this when using Jails!
NO_FSCHG=
 Однако, это имеет побочный эффект в виде использования clang в том числе и для сборки портов. Если это не то, что нам нужно, немного подправим конфиг, добавив дополнительное условие:

.if empty(.CURDIR:M/usr/ports/*)
.if !defined(CC) || ${CC} == "cc"
CC=clang
.endif
.if !defined(CXX) || ${CXX} == "c++"
CXX=clang++
.endif
.if !defined(CPP) || ${CPP} == "cpp"
CPP=clang -E
.endif
.endif
Таким образом clang будет использоваться только если текущая директория не начинается с /usr/ports

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

  1. а почему побочный? помоему нормально ошибок не было.

    ОтветитьУдалить
    Ответы
    1. попробуйте собрать php5-redis, например

      Удалить
  2. # World + Kernel (ccache + clang_3.1)
    .if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*)) && !defined(NOCCACHE)
    CC:=${CC:C,^cc,/usr/local/libexec/ccache/world/clang,1}
    CXX:=${CXX:C,^c\+\+,/usr/local/libexec/ccache/world/clang++,1}
    CPP=/usr/bin/clang-cpp
    ## Don't die on warnings
    NO_WERROR=
    WERROR=
    .endif

    # MAKE Ports clang_3.1
    .if ( !empty(.CURDIR:M/usr/ports/*) \
    && empty(.CURDIR:M/usr/ports/databases/mariadb*) && empty(.CURDIR:M/usr/ports/sysutils/ipmitool*) \
    )
    CC=clang
    CXX=clang++
    CPP=clang-cpp
    ## Don't die on warnings
    NO_WERROR=
    WERROR=
    # Don't forget this when using Jails! #-NO_FSCHG=
    .endif

    ОтветитьУдалить