LINUX.ORG.RU
ФорумTalks

FreeBSD меняет компилятор по-умолчанию на Clang

 , ,


0

3

Теперь Clang будет компилятором не только для базовой системы, но и для портов!

Brooks Davis: Clang will become the default compiler for x86 architectures on 2012-11-04

Наиболее резонные возражения:

1) Doug Barton As of last week, 4,680 ports out of 23,857 failed to build with clang on 9-amd64. That's almost a 20% failure rate. Until we have better support for either building ports with clang, or have better support for the idea of a «ports compiler,» this change is premature.

2) Konstantin Belousov My POV is that suggesting to 'fix remaining ports to work with clang' is just a nonsense. You are proposing to fork the development of all the programs which do not compile with clang. Often, upstream developers do not care about clang at all since it not being default compiler in Debian/Fedora/Whatever Linux. The project simply do not have resources to maintain the fork of 20K programs.

Upd: В число несобираемых Clang портов входит GCC, который в старые времена собирался почти ЛЮБЫМ ANSI C компилятором.



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

Там практически весь более-менее сложный и популярный софт!

ой да ладно

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

Такой апстрим может заниматься только созданием говнософта

Кстати, прикольно шлангом баги ловить:

http://pointyhat-west.isc.freebsd.org/errorlogs/amd64-errorlogs/e.9-exp-clang...

open-vm-tools:

Making all in hgfsServer
/bin/sh ../../libtool --tag=CC    --mode=compile clang -DPACKAGE_NAME=\"open-vm-tools\" -DPACKAGE_TARNAME=\"open-vm-tools\" -DPACKAGE_VERSION=\"8.6.0\" -DPACKAGE_STRING=\"open-vm-tools\ 8.6.0\" -DPACKAGE_BUGREPORT=\"open-vm-tools-devel@lists.sourceforge.net\" -DPACKAGE_URL=\"\" -DPACKAGE=\"open-vm-tools\" -DVERSION=\"8.6.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_DLOPEN=1 -DNO_PROCPS=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_WCHAR_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_USER_H=1 -DHAVE__BOOL=1 -DHAVE_STRUCT_STAT_ST_RDEV=1 -DTIME_WITH_SYS_TIME=1 -I.    -I/work/a/ports/emulators/open-vm-tools/work/open-vm-tools-8.6.0-425873/lib/include -I/work/a/ports/emulators/open-vm-tools/work/open-vm-tools-8.6.0-425873/lib/include  -DUSING_AUTOCONF=1 -DOPEN_VM_TOOLS -I/usr/local/include  -I/usr/local/include -D_REENTRANT  -I/usr/local/include  -DUSE_ICU -DVMX86_TOOLS -DNO_CORE_ICU -DVMTOOLS_USE_GLIB -I/usr/local/include/glib-2.0 -O2 -pipe -fno-strict-aliasing -Wall -Werror -Wno-pointer-sign -Wno-unused-value -fno-strict-aliasing -Wno-unknown-pragmas -Wno-uninitialized -Wno-unused-but-set-variable -MT hgfsServer.lo -MD -MP -MF .deps/hgfsServer.Tpo -c -o hgfsServer.lo hgfsServer.c
libtool: compile:  clang -DPACKAGE_NAME=\"open-vm-tools\" -DPACKAGE_TARNAME=\"open-vm-tools\" -DPACKAGE_VERSION=\"8.6.0\" "-DPACKAGE_STRING=\"open-vm-tools 8.6.0\"" -DPACKAGE_BUGREPORT=\"open-vm-tools-devel@lists.sourceforge.net\" -DPACKAGE_URL=\"\" -DPACKAGE=\"open-vm-tools\" -DVERSION=\"8.6.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_DLOPEN=1 -DNO_PROCPS=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_WCHAR_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_USER_H=1 -DHAVE__BOOL=1 -DHAVE_STRUCT_STAT_ST_RDEV=1 -DTIME_WITH_SYS_TIME=1 -I. -I/work/a/ports/emulators/open-vm-tools/work/open-vm-tools-8.6.0-425873/lib/include -I/work/a/ports/emulators/open-vm-tools/work/open-vm-tools-8.6.0-425873/lib/include -DUSING_AUTOCONF=1 -DOPEN_VM_TOOLS -I/usr/local/include -I/usr/local/include -D_REENTRANT -I/usr/local/include -DUSE_ICU -DVMX86_TOOLS -DNO_CORE_ICU -DVMTOOLS_USE_GLIB -I/usr/local/include/glib-2.0 -O2 -pipe -fno-strict-aliasing -Wall -Werror -Wno-pointer-sign -Wno-unused-value -fno-strict-aliasing -Wno-unknown-pragmas -Wno-uninitialized -Wno-unused-but-set-variable -MT hgfsServer.lo -MD -MP -MF .deps/hgfsServer.Tpo -c hgfsServer.c  -fPIC -DPIC -o .libs/hgfsServer.o
hgfsServer.c:3560:19: error: comparison of unsigned expression < 0 is always false [-Werror,-Wtautological-compare]
   if (pathLength < 0 || pathLength >= sizeof p.mountPoint) {
       ~~~~~~~~~~ ^ ~
1 error generated.
*** Error code 1

Вот вопрос возникает - А зачем ЭТО сравнение вообще написано??

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

Пофиксисли (почти):

http://lists.freebsd.org/pipermail/freebsd-toolchain/2012-September/000465.html

And, some small but annoying things left with clang, like ABI change
requiring 16-byte stack alignment on i386, but lets ignore this until
two big issues are resolved.

Thank you for pointing this out. This is, in my opinion, one of the strongest reasons to switch to clang. We can go, fix issues or report we find upstream and then import newer clang. Unlike with gcc.

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

Вот вопрос возникает - А зачем ЭТО сравнение вообще написано??

вероятно раньше pathLength был signed

wota ★★
()
Ответ на: комментарий от sergv
primegaps.c:7:1: error: 'main' must return 'int'
void main()
^
1 error generated.

Сдаётся они тупо запустили компиляцию, что бы позырить, что будет. Пока мантейнер пакета (ну или разработчик) не почешутся - пакет будет в списке «не собирается clang». Могли бы и опциями поиграться. Тем более, что файл *.с

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

Для этого нужно принести жертву? Ок, фрисбд вполне сгодится, её не жалко.

а боги не обидятся, что им труп в жертву принесли?

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

Ну... За одно и на бздшников кара падет. Может начнут поклоняться Патрику.

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

Кстати, прикольно шлангом баги ловить:

GCC тоже ловит ситуацию сравнения unsigned c 0.

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

А труп еще продолжается шевелиться...

Это всего лишь опарыши.

AiFiLTr0 ★★★★★
()
Последнее исправление: AiFiLTr0 (всего исправлений: 1)

В число несобираемых Clang портов входит GCC, который в старые времена собирался почти ЛЮБЫМ ANSI C компилятором.

Это не соответствует действительности. Системный Clang собирает GCC 4.6.4.

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

Я не понял, почему не использовать оба компилятора, на выбор? Плюсы такого подхода очевидны.

Так и делаю.

> cat /etc/make.conf
#2012-09-11
KERNCONF=ROXY
WRKDIRPREFIX=/usr/obj
MAKE_JOBS_NUMBER=4
.if   ${.CURDIR:M/usr/ports/www/libxul*} \
   || ${.CURDIR:M/usr/ports/audio/wavpack*} \
   || ${.CURDIR:M/usr/ports/audio/libaacplus*} \
   || ${.CURDIR:M/usr/ports/mail/thunderbird*} \
   || ${.CURDIR:M/usr/ports/graphics/agg*} \
   || ${.CURDIR:M/usr/ports/x11/slim*} \
   || ${.CURDIR:M/usr/ports/graphics/gnash*} \
   || ${.CURDIR:M/usr/ports/sysutils/cdrtools*}
CC=/usr/bin/gcc
CXX=/usr/bin/g++
CPP=/usr/bin/gcpp
.endif
LOADER_ZFS_SUPPORT=true
LOCALIZED_LANG=ru
WITH_LCD_FILTERING=true
WITH_XFT=true
WITHOUT_TTF_BYTECODE_ENABLED=false
WITH_TTF_BYTECODE_ENABLED=true
WITH_MSWINDOWS_LICENSE=true
WITH_VPX=true
WITH_A4SIZE=true
WITHOUT_DEBUG=true
WITHOUT_NOUVEAU=true
WITHOUT_MYSQL=true
WITHOUT_NAUTILUS=true
# Keep ruby 1.9 as default version.
RUBY_DEFAULT_VER=1.9
# added by use.perl 2012-06-12 20:19:53
PERL_VERSION=5.12.4

> cc --version
FreeBSD clang version 3.1 (branches/release_31 156863) 20120523
Target: x86_64-unknown-freebsd9.0
Thread model: posix

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

Я не понял, почему не использовать оба компилятора, на выбор? Плюсы такого подхода очевидны.

Так и делаю. <skip>

.if   ${.CURDIR:M/usr/ports/www/libxul*} \
   || ${.CURDIR:M/usr/ports/audio/wavpack*} \
   || ${.CURDIR:M/usr/ports/audio/libaacplus*} \
   || ${.CURDIR:M/usr/ports/mail/thunderbird*} \
   || ${.CURDIR:M/usr/ports/graphics/agg*} \
   || ${.CURDIR:M/usr/ports/x11/slim*} \
   || ${.CURDIR:M/usr/ports/graphics/gnash*} \
   || ${.CURDIR:M/usr/ports/sysutils/cdrtools*}
CC=/usr/bin/gcc
CXX=/usr/bin/g++
CPP=/usr/bin/gcpp
.endif

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

Он, кстати, судя по треду в freebsd-ports@ и будет. Только вот пока что-то не очень понятно, когда и какой.

sergv
() автор топика

Мда… Судя по возражениям, у FreeBSD core team отъехала коллективная крыша… Вовремя я свалил на линукс.

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

нене, люминиевую. Хотя видел железные лопаты, которые при втыкании в землю сгибались буквой зю НОВЫЕ - армия, чо, там всё такое.

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

Там GCC 4.2 и GCC 4.4 не собираются. Они уже давно не нужны для сборки приложений и объявлены DEPRECATED в коллекции портов. Chromium требует для сборки либо Clang, либо GCC 4.6+.

Я успешно собирал из портов с помощью системного Clang 3.1 пакеты gcc46 4.6.4.20120831, gcc47 4.7.2.20120908, gcc48 4.8.0.20120902.

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

В портах должен быть четкий механизм выбора компилятора!!!

А он и есть — для некоторых программ для сборки тянется набор компиляторов GCC 4.6, собирается, ставится, после чего порт программы им компилируется и тоже ставится. Если указана опция удалять средства сборки, то поставленный GCC удаляется.

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

А он и есть — для некоторых программ для сборки тянется набор компиляторов GCC 4.6, собирается, ставится, после чего порт программы им компилируется и тоже ставится. Если указана опция удалять средства сборки, то поставленный GCC удаляется.

Ну вот если ты ужо такой умный стал и даже ".if ... .endif" освоил, то почему вот это все вот так вот скопом таскается?

LOCALIZED_LANG=ru
WITH_LCD_FILTERING=true
WITH_XFT=true
WITHOUT_TTF_BYTECODE_ENABLED=false
WITH_TTF_BYTECODE_ENABLED=true
WITH_MSWINDOWS_LICENSE=true
WITH_VPX=true
WITH_A4SIZE=true
WITHOUT_DEBUG=true
WITHOUT_NOUVEAU=true
WITHOUT_MYSQL=true
WITHOUT_NAUTILUS=true

Да, и WITH/WITHOUT, кстати, тоже DEPRECATED. Нужно использовать новый OPTIONS фреймворк (поищи HEADSUP в списке рассылки).

sergv
() автор топика

Перл собирается под Clang и это главное :)

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

Да, и WITH/WITHOUT, кстати, тоже DEPRECATED. Нужно использовать новый OPTIONS фреймворк (поищи HEADSUP в списке рассылки).

Во всех портах в Makefile до сих пор есть условия сборки зависимотей с переменными условия через WITH_* и WITHOUT_*.

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

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

Во всех портах в Makefile до сих пор есть условия сборки зависимотей с переменными условия через WITH_* и WITHOUT_*.

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

На, неуч, просвещайся:

http://wiki.freebsd.org/Ports/Options/OptionsNG

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

WITH_*/WITHOUT_* до сих пор работают. И я не собираюсь от этого средства управлением сборкой и зависимостями отказываться, пока их не выкинут из портов.

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