Страница 1 из 1

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-04-23 0:40:11
iZEN
Приветствую.

На досуге пробую собрать FreeBSD 11-STABLE с помощью установленного из портов GCC 6.3 и 7-devel.
Конфигурация сорцов (/etc/src.conf):

Код: Выделить всё

WITHOUT_AMD=true
WITHOUT_ASSERT_DEBUG=true
WITHOUT_ATM=true
WITHOUT_BHYVE=true
WITHOUT_BLUETOOTH=true
WITH_BSD_GREP=true
WITHOUT_BSNMP=true
WITHOUT_CLANG=true
WITHOUT_DEBUG=true
WITHOUT_DMAGENT=true
WITHOUT_EXAMPLES=true
WITHOUT_FLOPPY=true
WITHOUT_FORMAT_EXTENSIONS=true
WITHOUT_GAMES=true
WITHOUT_GDB=true
WITHOUT_HYPERV=true
WITHOUT_HTML=true
WITHOUT_IPFILTER=true
WITHOUT_IPFW=true
WITHOUT_IPX=true
WITHOUT_IPX_SUPPORT=true
WITHOUT_KDUMP=true
WITHOUT_LDNS=true
WITHOUT_LIB32=true
WITHOUT_LLDB=true
WITHOUT_LOCATE=true
WITHOUT_LPR=true
WITHOUT_MAIL=true
WITHOUT_MAILWRAPPER=true
WITHOUT_NDIS=true
WITHOUT_NETGRAPH=true
WITHOUT_NETGRAPH_SUPPORT=true
WITHOUT_PPP=true
WITHOUT_PROFILE=true
WITHOUT_SENDMAIL=true
WITH_SVN=true
WITHOUT_TALK=true
WITHOUT_TELNET=true
WITHOUT_TESTS=true
WITHOUT_UNBOUND=true
WITHOUT_WIRELESS=true
Конфигурация сборочного инструмента (/etc/make.conf):

Код: Выделить всё

KERNCONF=COMP
MAKE_JOBS_NUMBER=5
WITHOUT_DEBUG=true
# This setting to build world without -Werror:
NO_WERROR=
# This setting to build kernel without -Werror:
WERROR=
CC=/usr/local/bin/gcc7
CXX=/usr/local/bin/g++7
CPP=/usr/local/bin/cpp7
DEFAULT_VERSIONS=perl5=5.24 ruby=2.4 tcltk=8.6
Подстановка библиотек (/etc/libmap.conf):

Код: Выделить всё

# $FreeBSD: stable/11/etc/libmap.conf 253853 2013-08-01 05:50:42Z jlh $
includedir /usr/local/etc/libmap.d
libgcc_s.so.1   gcc7/libgcc_s.so.1
libgomp.so.1    gcc7/libgomp.so.1
libobjc.so.3    gcc7/libobjc.so.4
libssp.so.0     gcc7/libssp.so.0
libstdc++.so.6  gcc7/libstdc++.so.6
В такой конфигурации GCC сами себя пересобирают и переустанавливаются.
Но make buildworld пишет ошибки, которые при использовании системного LLVM/Clang не выявляются. Одни я исправил. К другим не пойму, как подступиться.
Вот эти:

Код: Выделить всё

In file included from /usr/src/lib/libc/iconv/__iconv.c:31:0:
/usr/src/lib/libc/iconv/iconv-internal.h:35:48: error: unknown type name '__iconv_bool'; did you mean 'iconv_t'?
 int __bsd___iconv_get_list(char ***, size_t *, __iconv_bool);
                                                ^~~~~~~~~~~~
                                                iconv_t
/usr/src/lib/libc/iconv/__iconv.c:34:1: warning: no previous prototype for '__iconv' [-Wmissing-prototypes]
 __iconv(iconv_t a, char **b, size_t *c, char **d,
 ^~~~~~~
*** Error code 1

Stop.
make[1]: stopped in /usr/src/lib/libc_nonshared
*** Error code 1
и

Код: Выделить всё

/usr/local/bin/gcc7 -O2 -pipe   -DSHELL -I. -I/usr/src/bin/sh -DNDEBUG -g -MD  -MF.depend.expand.o -MTexpand.o -std=gnu99 -fstack-protector-strong -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -Wno-error=unused-function -Wno-error=enum-compare -Wno-error=logical-not-parentheses -Wno-error=bool-compare -Wno-error=uninitialized -Wno-error=array-bounds -Wno-error=clobbered -Wno-error=cast-align -Wno-error=extra -Wno-error=attributes -Wno-error=inline -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=strict-aliasing -Wno-error=address     -c /usr/src/bin/sh/expand.c -o expand.o
/usr/local/bin/gcc7 -O2 -pipe   -DSHELL -I. -I/usr/src/bin/sh -DNDEBUG -g -MD  -MF.depend.histedit.o -MThistedit.o -std=gnu99 -fstack-protector-strong -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -Wno-error=unused-function -Wno-error=enum-compare -Wno-error=logical-not-parentheses -Wno-error=bool-compare -Wno-error=uninitialized -Wno-error=array-bounds -Wno-error=clobbered -Wno-error=cast-align -Wno-error=extra -Wno-error=attributes -Wno-error=inline -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=strict-aliasing -Wno-error=address     -c /usr/src/bin/sh/histedit.c -o histedit.o
/usr/src/bin/sh/histedit.c: In function 'histedit':
/usr/src/bin/sh/histedit.c:127:9: error: '_el_fn_sh_complete' undeclared (first use in this function); did you mean '_el_fn_complete'?
         _el_fn_sh_complete);
         ^~~~~~~~~~~~~~~~~~
         _el_fn_complete
/usr/src/bin/sh/histedit.c:127:9: note: each undeclared identifier is reported only once for each function it appears in
*** Error code 1
Кому удалась сборка GNU-компилятором?

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-04-23 16:04:18
guest
На куя?

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-04-24 10:12:55
iZEN
Интересно же, сможет ли система собираться альтернативным набором компиляторов C/C++.

Пока что добился того, что система собралась с GCC 4.2.1, но ядро, собранное GCC7 останавливает загрузку на определении ATA-устройств - пришлось использовать ядро, собранное Clang'ом. После прогрузки гибрида X'ы не стартовали, пересборка портов натыкается на отсутствующую libc+.

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-04-24 12:29:48
Neus
:st: :cz2:

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-04-24 13:30:29
guest
iZEN писал(а):Интересно же, сможет ли система собираться альтернативным набором компиляторов C/C++.

Пока что добился того, что система собралась с GCC 4.2.1, но ядро, собранное GCC7 останавливает загрузку на определении ATA-устройств - пришлось использовать ядро, собранное Clang'ом. После прогрузки гибрида X'ы не стартовали, пересборка портов натыкается на отсутствующую libc+.
Никогда не сталкивались с теорией построения компилятора? (на спецухах ВМК, системотехники и еще ряде - должен
был быть такой курс, лет 30-40 назад был)

Можно открыть для себя много нового... И тогда быстро избавитесь от верхней каши...

ps. Даже в документации к развертыванию GCC руками, много полезного написано, в том числе и про linker.
pps. Играться в сборку ОС и Ядра - можно, нкто не запрещает, но не понимая что делают компилятор
и линковщик и КАК ОНИ это делают, заниматься сборкой можно долго и безрезультатно,особливо ЯДРА.

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-04-24 18:32:08
iZEN
Несколько лет назад пробовал переводить FreeBSD с GCC 4.2.1 на GCC 4.6. Вполне неплохо работало.

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 11:16:13
hizel
передергиваешь на компиляцию - заведи себе генту

>сорцов

пфф

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 13:38:38
iZEN
Не надо меня учить, что мне делать. FreeBSD до некоторых пор собиралась компилятором GCC из портов, а с развитием LLVM/Clang в некоторых местах вдруг перестала. Это разве не говорит о том, что разработчики всё больше ориентируются на конкретный тип компилятора, на его побочные эффекты и перестают следить за чистотой и стандартностью кода?

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 13:51:08
hizel
не видел конец твоей партянки, понятно, ты промахнулся мимо багзилы

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 14:36:45
guest
iZEN писал(а):Не надо меня учить, что мне делать. FreeBSD до некоторых пор собиралась компилятором GCC из портов, а с развитием LLVM/Clang в некоторых местах вдруг перестала. Это разве не говорит о том, что разработчики всё больше ориентируются на конкретный тип компилятора, на его побочные эффекты и перестают следить за чистотой и стандартностью кода?
мусье явно что-то путает, если опустить тип лицензионности, clang гораздо строже парсит исходники
в отличие от gcc, и точнее и понятней указывает на возможные ошибки.

неудивительно что целый ряд linux дистрибутивов уже несколько лет чистит код
используя clang/llvm, некоторые уже используют как альтернативный компилятор
с прицелом на будущий переход.

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 15:48:37
hizel
>lang гораздо строже парсит исходники в отличие от gcc

пруфцы покажете?

> точнее и понятней указывает на возможные ошибки.

завезли начиная с gcc 5.x такое же как в clang

>неудивительно что целый ряд linux дистрибутивов уже несколько лет чистит код используя clang/llvm

это какие?

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 17:30:16
guest
hizel писал(а):>lang гораздо строже парсит исходники в отличие от gcc

пруфцы покажете?
порты - хоть обсобирайтесь и обсмотритесь
> точнее и понятней указывает на возможные ошибки.

завезли начиная с gcc 5.x такое же как в clang
Андерсен?
>неудивительно что целый ряд linux дистрибутивов уже несколько лет чистит код используя clang/llvm

это какие?
gentoo, debian - достаточно?

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 18:52:57
hizel
понятно, ананимус опять обосрался

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-08 19:42:47
guest
hizel писал(а):понятно, ананимус опять обосрался
продолжай в лошадки играть

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-13 7:49:26
ultimo
Зачем ядро на gcc собирать если на кленг все стабильно работает?
Только вот некоторые порты все еще приходится на gcc собирать.

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-13 13:41:42
iZEN
Вы правда не понимаете, зачем?

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-13 18:05:15
мимоходом
iZEN писал(а):Вы правда не понимаете, зачем?
интересно узнать?

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-13 18:57:28
iZEN
У меня есть потребность проверить, сможет ли система быть отвязана от конкретного компилятора и будет ли при этом она работоспособна. Если у вас какие-то проблемы личного характера с восприятием этой потребности или какие-то фанатично-идеологические "скрепы души", прошу, не засоряйте тему обозначением своего мнения — меня оно не интересует. Меня интересует чисто техническая возможность откомпилировать систему последними версиями компиляторов GCC.

GCC 6.3 или GCC 7.x в качестве системного компилятора

Добавлено: 2017-05-13 21:41:22
мимоходом
iZEN писал(а): Меня интересует чисто техническая возможность откомпилировать систему последними версиями компиляторов GCC.
понято.