articles/custom-gcc: remove it
- using a custom gcc should be done within poudriere - there is a framework for choosing a ports compiler anyways - this article is incomplete w.r.t. modern gcc verisons - encouraging people to add global options like `mssse3` is dangerous - the original reason to use a custom gcc is gone (our old gcc was outdated)
This commit is contained in:
parent
30f1f1fe82
commit
5ec7a2ea1e
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=46470
7 changed files with 0 additions and 472 deletions
en_US.ISO8859-1/articles
ja_JP.eucJP/articles
ru_RU.KOI8-R/articles
|
@ -9,7 +9,6 @@ SUBDIR+= contributing
|
|||
SUBDIR+= contributing-ports
|
||||
SUBDIR+= contributors
|
||||
SUBDIR+= cups
|
||||
SUBDIR+= custom-gcc
|
||||
SUBDIR+= explaining-bsd
|
||||
SUBDIR+= filtering-bridges
|
||||
SUBDIR+= fonts
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
DOC?= article
|
||||
|
||||
FORMATS?= html
|
||||
WITH_ARTICLE_TOC?= YES
|
||||
|
||||
INSTALL_COMPRESSED?= gz
|
||||
INSTALL_ONLY_COMPRESSED?=
|
||||
|
||||
SRCS= article.xml
|
||||
|
||||
URL_RELPREFIX?= ../../../..
|
||||
DOC_PREFIX?= ${.CURDIR}/../../..
|
||||
|
||||
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
|
|
@ -1,201 +0,0 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
|
||||
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
|
||||
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
|
||||
<info><title>Using newer version of <application>GCC</application> and
|
||||
<application>binutils</application> with the &os; Ports
|
||||
Collection</title>
|
||||
|
||||
|
||||
<author><personname><firstname>Martin</firstname><surname>Matuska</surname></personname><affiliation>
|
||||
<address><email>mm@FreeBSD.org</email></address>
|
||||
</affiliation></author>
|
||||
|
||||
<legalnotice xml:id="trademarks" role="trademarks">
|
||||
&tm-attrib.freebsd;
|
||||
&tm-attrib.general;
|
||||
</legalnotice>
|
||||
|
||||
<copyright>
|
||||
<year>2009</year>
|
||||
<holder>The &os; Documentation Project</holder>
|
||||
</copyright>
|
||||
|
||||
<pubdate>$FreeBSD$</pubdate>
|
||||
|
||||
<releaseinfo>$FreeBSD$</releaseinfo>
|
||||
|
||||
<abstract>
|
||||
<para>This article describes how to use newer versions of the
|
||||
<application>GCC</application> compilers and
|
||||
<application>binutils</application> from the &os; ports tree.
|
||||
Custom <application>GCC</application> configurations are also
|
||||
discussed.</para>
|
||||
</abstract>
|
||||
</info>
|
||||
|
||||
<sect1 xml:id="intro">
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>The default system compiler as of &os; 8.0 is
|
||||
<application>GCC</application> version 4.2.1. In addition, the
|
||||
base system of &os; includes <application>binutils</application>
|
||||
version 2.15. These versions are several years old and lack,
|
||||
among other things, support for recent <acronym>CPU</acronym>
|
||||
instructions like <acronym>SSSE3</acronym>,
|
||||
<acronym>SSE4.1</acronym>, <acronym>SSE4.2</acronym>, etc.
|
||||
Due to licensing issues, new versions of these applications will
|
||||
not be integrated into the base system. Luckily, it is possible
|
||||
to use a newer version of the <application>GCC</application>
|
||||
compiler (e.g. version 4.4) with the help of the &os; ports
|
||||
tree.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="prerequisites">
|
||||
<title>Prerequisites</title>
|
||||
|
||||
<sect2 xml:id="installing-binutils">
|
||||
<title>Installing binutils and gcc</title>
|
||||
|
||||
<para>To make use of all of the new features in the latest
|
||||
<application>GCC</application> versions, the latest version of
|
||||
<application>binutils</application> needs to be installed.
|
||||
Installation of the newer version of
|
||||
<application>binutils</application> is optional; but without it,
|
||||
there will be no support for new <acronym>CPU</acronym>
|
||||
instructions.</para>
|
||||
|
||||
<para>To install the latest available version of
|
||||
<application>binutils</application> using the &os; ports tree,
|
||||
issue the following command:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>pkg install devel/binutils</userinput></screen>
|
||||
|
||||
<para>The &os; ports tree offers several new versions of
|
||||
<application>GCC</application>. The default version is called
|
||||
<package>lang/gcc</package>. Other versions can be found
|
||||
with
|
||||
<screen>&prompt.user; <userinput>pkg search gcc</userinput></screen>
|
||||
</para>
|
||||
|
||||
<para>To install one of the mentioned
|
||||
<application>GCC</application> ports, run:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>pkg install <replaceable>lang/gcc</replaceable></userinput></screen>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="configuring-ports-gcc">
|
||||
<title>Configuring ports for custom version of
|
||||
<application>GCC</application></title>
|
||||
|
||||
<para>Additional system configuration is required in order to use
|
||||
custom version of <application>GCC</application> installed from
|
||||
the &os; ports tree.</para>
|
||||
|
||||
<sect2 xml:id="adjusting-make.conf">
|
||||
<title>Adjusting <filename>make.conf</filename></title>
|
||||
|
||||
<para>Add the following lines to the
|
||||
<filename>/etc/make.conf</filename> file (or modify
|
||||
appropriately):</para>
|
||||
|
||||
<programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
|
||||
CC=gcc44
|
||||
CXX=g++44
|
||||
CPP=cpp44
|
||||
.endif</programlisting>
|
||||
|
||||
<para>Alternatively, it is possible to specify the
|
||||
<envar>${CC}</envar> and <envar>${CPP}</envar> variables
|
||||
manually.</para>
|
||||
|
||||
<note>
|
||||
<para>The examples above are for <application>GCC</application>
|
||||
version 4.4. To use <command>gcc43</command>, replace
|
||||
<literal>"gcc44"</literal> with <literal>"gcc43"</literal> and
|
||||
<literal>"4.4"</literal> with <literal>"4.3"</literal> and so
|
||||
on.</para>
|
||||
</note>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="adjusting-libmap.conf">
|
||||
<title>Adjusting <filename>libmap.conf</filename></title>
|
||||
|
||||
<para>Many of the ports' binaries and libraries link to libgcc_s
|
||||
or libstdc++. The base system already includes these libraries,
|
||||
but from an earlier version of <application>GCC</application>
|
||||
(version 4.2.1). To supply rtld (and ldd) with correct versions,
|
||||
add the following lines to the
|
||||
<filename>/etc/libmap.conf</filename> file (or modify
|
||||
appropriately):</para>
|
||||
|
||||
<programlisting>libgcc_s.so.1 gcc44/libgcc_s.so.1
|
||||
libgomp.so.1 gcc44/libgomp.so.1
|
||||
libobjc.so.3 gcc44/libobjc.so.2
|
||||
libssp.so.0 gcc44/libssp.so.0
|
||||
libstdc++.so.6 gcc44/libstdc++.so.6</programlisting>
|
||||
|
||||
<note>
|
||||
<para>The examples above are for <application>GCC</application>
|
||||
version 4.4. To use <command>gcc43</command>, replace
|
||||
<literal>"gcc44"</literal> with <literal>"gcc43"</literal>
|
||||
and so on. Note also that all of these libraries are fully
|
||||
backwards compatible with base system libraries.</para>
|
||||
</note>
|
||||
|
||||
<warning>
|
||||
<para>Some C++ programs may refuse to work if these libraries
|
||||
are not mapped correctly. If it is not feasible to map them
|
||||
all, it is recommended to map at least libstdc++.so.</para>
|
||||
</warning>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="custom-cflags">
|
||||
<title>Custom <literal>CFLAGS</literal> for the ports tree</title>
|
||||
|
||||
<para>To add custom <literal>CFLAGS</literal> for the ports tree
|
||||
which are unsupported by the base system, adjust the
|
||||
<filename>/etc/make.conf</filename> according to the following
|
||||
example:</para>
|
||||
|
||||
<programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
|
||||
CC=gcc44
|
||||
CXX=g++44
|
||||
CPP=cpp44
|
||||
CFLAGS+=-mssse3
|
||||
.endif</programlisting>
|
||||
|
||||
<para>It is possible to completely replace
|
||||
<literal>CFLAGS</literal> and/or define custom
|
||||
<literal>CPUTYPE</literal> as well. We recommend setting
|
||||
<literal>CPUTYPE</literal> because many ports decide their
|
||||
optimizations flags based on this variable.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="excluding-unbuildable-ports">
|
||||
<title>Excluding ports that do not build with new version of
|
||||
<application>GCC</application></title>
|
||||
|
||||
<para>To exclude ports that have problems with custom version of
|
||||
<application>GCC</application>, adjust the
|
||||
<filename>/etc/make.conf</filename> according to the following
|
||||
example:</para>
|
||||
|
||||
<programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
|
||||
.if empty(.CURDIR:M/usr/ports/net/openldap*)
|
||||
CC=gcc44
|
||||
CXX=g++44
|
||||
CPP=cpp44
|
||||
.endif
|
||||
.endif</programlisting>
|
||||
|
||||
<para>The example above excludes the forced use of
|
||||
<command>gcc</command> 4.4 for the
|
||||
<package>net/openldap</package>* ports. It is
|
||||
also possible to specify more ports on a single line:</para>
|
||||
|
||||
<programlisting>.if empty(.CURDIR:M/usr/ports/net/openldap*) && empty(.CURDIR:M/usr/ports/xxx/yyy) && ...</programlisting>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</article>
|
|
@ -10,7 +10,6 @@ SUBDIR+= contributing
|
|||
#SUBDIR+= contributing-ports
|
||||
SUBDIR+= contributors
|
||||
#SUBDIR+= cups
|
||||
#SUBDIR+= custom-gcc
|
||||
#SUBDIR+= explaining-bsd
|
||||
#SUBDIR+= filtering-bridges
|
||||
SUBDIR+= fonts
|
||||
|
|
|
@ -13,7 +13,6 @@ SUBDIR+= console-server
|
|||
SUBDIR+= contributing
|
||||
#SUBDIR+= contributors
|
||||
SUBDIR+= cups
|
||||
SUBDIR+= custom-gcc
|
||||
SUBDIR+= cvs-freebsd
|
||||
SUBDIR+= explaining-bsd
|
||||
#SUBDIR+= filtering-bridges
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# Original revision: r39631
|
||||
#
|
||||
|
||||
|
||||
DOC?= article
|
||||
|
||||
FORMATS?= html
|
||||
WITH_ARTICLE_TOC?= YES
|
||||
|
||||
INSTALL_COMPRESSED?= gz
|
||||
INSTALL_ONLY_COMPRESSED?=
|
||||
|
||||
SRCS= article.xml
|
||||
|
||||
URL_RELPREFIX?= ../../../..
|
||||
DOC_PREFIX?= ${.CURDIR}/../../..
|
||||
|
||||
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
|
|
@ -1,229 +0,0 @@
|
|||
<?xml version="1.0" encoding="koi8-r"?>
|
||||
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
|
||||
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
|
||||
<!--
|
||||
The FreeBSD Russian Documentation Project
|
||||
$FreeBSD$
|
||||
Original revision: r43184
|
||||
-->
|
||||
<!-- Перевод: Коренко Тарас -->
|
||||
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="ru">
|
||||
<info><title>Использование более новых версий <application>GCC</application>
|
||||
и <application>binutils</application> c коллекцией портов
|
||||
&os;</title>
|
||||
|
||||
|
||||
<author><personname><firstname>Martin</firstname><surname>Matuska</surname></personname><affiliation>
|
||||
<address><email>mm@FreeBSD.org</email></address>
|
||||
</affiliation></author>
|
||||
|
||||
<legalnotice xml:id="trademarks" role="trademarks">
|
||||
&tm-attrib.freebsd;
|
||||
&tm-attrib.general;
|
||||
</legalnotice>
|
||||
|
||||
<copyright>
|
||||
<year>2009</year>
|
||||
<holder>The &os; Documentation Project</holder>
|
||||
</copyright>
|
||||
|
||||
<pubdate>$FreeBSD$</pubdate>
|
||||
|
||||
<releaseinfo>$FreeBSD$</releaseinfo>
|
||||
|
||||
<abstract>
|
||||
<para>В этой статье описано, как использовать более новые версии
|
||||
компиляторов <application>GCC</application> и набора утилит
|
||||
<application>binutils</application> из коллекции портов &os;.
|
||||
Здесь также обсуждаются специализированные конфигурации
|
||||
<application>GCC</application>.</para>
|
||||
</abstract>
|
||||
</info>
|
||||
|
||||
<sect1 xml:id="intro">
|
||||
<title>Предисловие</title>
|
||||
|
||||
<para>Компилятор, поставляемый с &os; 8.0, — это
|
||||
<application>GCC</application> версии 4.2.1. В базовую систему
|
||||
&os; включены <application>binutils</application> версии
|
||||
2.15. Это довольно-таки старые версии, и в них, между прочим,
|
||||
отсутствует поддержка новых инструкций <acronym>CPU</acronym>, таких
|
||||
как <acronym>SSSE3</acronym>, <acronym>SSE4.1</acronym>,
|
||||
<acronym>SSE4.2</acronym> и т.п. Ввиду лицензионных ограничений,
|
||||
новые версии этих приложений не будут включены в базовую систему.
|
||||
К счастью, есть возможность использовать более новую версию компилятора
|
||||
<application>GCC</application> (например, версию 4.4)
|
||||
установив его из коллекции портов &os;.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="prerequisites">
|
||||
<title>Подготовка</title>
|
||||
|
||||
<sect2 xml:id="installing-binutils">
|
||||
<title>Установка binutils из портов</title>
|
||||
|
||||
<para>Чтобы задействовать все новые функциональные возможности
|
||||
последней версии <application>GCC</application>, желательна установка
|
||||
наиболее новой версии <application>binutils</application>. Это
|
||||
не является обязательным, но без обновления
|
||||
<application>binutils</application> вы не получите поддержку
|
||||
новых инструкций <acronym>CPU</acronym>.</para>
|
||||
|
||||
<para>Для того, чтоб установить наиболее новую версию
|
||||
<application>binutils</application> используя коллекцию портов
|
||||
&os;, выполните следующую команду:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /usr/ports/devel/binutils && make install</userinput></screen>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="installing-gcc">
|
||||
<title>Установка GCC из портов</title>
|
||||
|
||||
<para>
|
||||
В коллекции портов &os; можно найти несколько новых версий
|
||||
<application>GCC</application>. В нашем примере мы устанавливаем
|
||||
стабильную версию 4.4. Однако, возможно установить предыдущую
|
||||
или более новую (развивающуюся) версию (например:
|
||||
<package>lang/gcc43</package> или
|
||||
<package>lang/gcc45</package>).</para>
|
||||
|
||||
<para>Для установки одного из вышеупомянутых портов
|
||||
<application>GCC</application>, наберите следующую команду:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /usr/ports/lang/<replaceable>gcc44</replaceable> && make install</userinput></screen>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="configuring-ports-gcc">
|
||||
<title>Настройка портов на использование требуемой
|
||||
версии <application>GCC</application></title>
|
||||
|
||||
<para>Для использования требуемой версии <application>GCC</application>,
|
||||
установленной из коллекции портов &os;, требуется дополнительная
|
||||
конфигурация системы.</para>
|
||||
|
||||
<sect2 xml:id="adjusting-make.conf">
|
||||
<title>Изменения в <filename>make.conf</filename></title>
|
||||
|
||||
<para>Добавьте следующие строки в <filename>/etc/make.conf</filename>
|
||||
(или исправьте существующие):</para>
|
||||
|
||||
<programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
|
||||
CC=gcc44
|
||||
CXX=g++44
|
||||
CPP=cpp44
|
||||
.endif</programlisting>
|
||||
|
||||
<para>В качестве альтернативы, можно установить вручную переменные
|
||||
окружения <envar>${CC}</envar> и <envar>${CPP}</envar>.</para>
|
||||
|
||||
<note>
|
||||
<para>Примеры, приведённые выше, сделаны для
|
||||
<application>GCC</application> версии 4.4. Для того, чтобы
|
||||
использовать <command>gcc43</command>, замените
|
||||
<literal>"gcc44"</literal> на <literal>"gcc43"</literal> и
|
||||
<literal>"4.4"</literal> на <literal>"4.3"</literal>
|
||||
и т.п.</para>
|
||||
</note>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="adjusting-libmap.conf">
|
||||
<title>Исправления в <filename>libmap.conf</filename></title>
|
||||
|
||||
<para>Многие установленные из портов приложения и библиотеки
|
||||
скомпонованы с libgcc_s или libstdc++. В базовую систему уже
|
||||
включены эти библиотеки, но от более старой версии
|
||||
<application>GCC</application> (версии 4.2.1). Чтобы предоставить
|
||||
rltd (и ldd) правильные версии, добавьте следующие записи к
|
||||
<filename>/etc/libmap.conf</filename> (или измените
|
||||
существующие):</para>
|
||||
|
||||
<programlisting>libgcc_s.so.1 gcc44/libgcc_s.so.1
|
||||
libgomp.so.1 gcc44/libgomp.so.1
|
||||
libobjc.so.3 gcc44/libobjc.so.2
|
||||
libssp.so.0 gcc44/libssp.so.0
|
||||
libstdc++.so.6 gcc44/libstdc++.so.6</programlisting>
|
||||
|
||||
<note>
|
||||
<para>Пример выше приведен для <application>GCC</application>
|
||||
версии 4.4. Если вы используете <command>gcc43</command>,
|
||||
замените <literal>"gcc44"</literal> на <literal>"gcc43"</literal>
|
||||
и т.д. Следует отметить, что все вышеупомянутые библиотеки
|
||||
обратно совместимы с библиотеками, поставляемыми с базовой
|
||||
системой.</para>
|
||||
</note>
|
||||
|
||||
<warning>
|
||||
<para>Некоторые C++ программы могут перестать работать, если
|
||||
отсутствует корректная компоновка этих библиотек. Если невозможно
|
||||
скомпоновать их все, рекомендуется сделать это по крайней мере
|
||||
для libstdc++.so.</para>
|
||||
</warning>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="custom-cflags">
|
||||
<title>Специальные установки <literal>CFLAGS</literal> для коллекции
|
||||
портов</title>
|
||||
|
||||
<para>Для портов, не поддерживающих специальные установки
|
||||
<literal>CFLAGS</literal>, исправьте
|
||||
<filename>/etc/make.conf</filename> согласно следующему примеру:</para>
|
||||
|
||||
<programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
|
||||
CC=gcc44
|
||||
CXX=g++44
|
||||
CPP=cpp44
|
||||
CFLAGS+=-mssse3
|
||||
.endif</programlisting>
|
||||
|
||||
<para>Возможно заменить полностью <literal>CFLAGS</literal> и/или
|
||||
определить <literal>CPUTYPE</literal>. Мы рекомендуем устанавливать
|
||||
<literal>CPUTYPE</literal> так как во многих портах флаги оптимизации
|
||||
выбираются, базируясь на значении этой переменной.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="excluding-unbuildable-ports">
|
||||
<title>Исключение портов, которые не собираются с новой версией
|
||||
<application>GCC</application></title>
|
||||
|
||||
<para>Для того, чтобы исключить порты, которые не собираются со
|
||||
специальной версией <application>GCC</application>, исправьте
|
||||
<filename>/etc/make.conf</filename> согласно следующему
|
||||
примеру:</para>
|
||||
|
||||
<programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
|
||||
.if empty(.CURDIR:M/usr/ports/net/openldap*)
|
||||
CC=gcc44
|
||||
CXX=g++44
|
||||
CPP=cpp44
|
||||
.endif
|
||||
.endif</programlisting>
|
||||
|
||||
<para>Пример, приведённый выше, отменяет принудительное использование
|
||||
<command>gcc</command> 4.4 для портов
|
||||
<package>net/openldap</package>*. Также
|
||||
возможно указать больше портов в одной строке:</para>
|
||||
|
||||
<programlisting>.if empty(.CURDIR:M/usr/ports/net/openldap*) && empty(.CURDIR:M/usr/ports/xxx/yyy) && ...</programlisting>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="performance-imparct">
|
||||
<title>Влияние на производительность исполняемых файлов</title>
|
||||
|
||||
<para>Использование <application>GCC</application> версии 4.4 с
|
||||
разрешенным набором инструкций <acronym>SSSE3</acronym>
|
||||
(если они поддерживаются <acronym>CPU</acronym>) может дать до 10%
|
||||
увеличения средней производительности исполняемых файлов. В некоторых
|
||||
тестах прирост производительности превышал 20% (например, в обработке
|
||||
мультимедийных данных).</para>
|
||||
|
||||
<para>В таблице, размещенной на <uri xlink:href="http://people.freebsd.org/~mm/benchmarks/perlbench/">http://people.freebsd.org/~mm/benchmarks/perlbench/</uri>,
|
||||
показано сравнение <application>GCC</application> в настоящее время
|
||||
включенного в базу &os;, <application>GCC</application> версии 4.3 и
|
||||
<application>GCC</application> версии 4.4 с различными комбинациями
|
||||
<literal>CFLAGS</literal>. Для сравнений производительности
|
||||
использовался тестовый пакет perlbench.</para>
|
||||
|
||||
</sect1>
|
||||
</article>
|
Loading…
Reference in a new issue