<sect1 id="ch05-gcc-pass1">
<!--
<title>Installing GCC-&gcc-version; - Pass 1</title>
-->
<title>GCC-&gcc-version; のインストール 第１段階</title>
<?dbhtml filename="gcc-pass1.html" dir="chapter05"?>

<!--
<screen>Estimated build time:           &gcc-time-tools-pass1;
Estimated required disk space:  &gcc-compsize-tools-pass1;</screen>
-->
<screen>推定構築時間:           &gcc-time-tools-pass1;
推定必要ディスクスペース:  &gcc-compsize-tools-pass1;</screen>

&aa-gcc-shortdesc;
&aa-gcc-dep;

<sect2><title>&nbsp;</title><para>&nbsp;</para></sect2>

<sect2>
<!--
<title>Installation of GCC</title>
-->
<title>GCC のインストール</title>

<!--
<para>Unpack only the GCC-core tarball, as we won't be needing a C++ compiler
for the moment.</para>
-->
<para>さしあたりは C++ コンパイラを必要としないので、GCC-core の tarball を解凍するだけにしておきます。</para>

<!--
<note><para>Even though GCC is an important toolchain package, we are not
going to run the test suite at this early stage. First, the test suite framework
is not yet in place and second, the programs from this first pass will soon be
overwritten by those installed in the second pass.</para></note>
-->
<note><para>GCC が重要な toolchain パッケージであっても、初期段階ではテストスイートを実行するつもりはありません。
まず、テストスイートがテストする範囲がまだ適当ではありませんし、二つ目の理由は、第 1 段階でのプログラムはすぐにその第 2 段階インストールで上書きされてしまうからです。</para></note>

<!--
<para>This package is known to behave badly when you have changed its
default optimization flags (including the -march and -mcpu options).
Therefore, if you have defined any environment variables that override
default optimizations, such as CFLAGS and CXXFLAGS, we recommend unsetting
or modifying them when building GCC.</para>
-->
<para>このパッケージはデフォルト最適化フラグ（ -march と -mcpu オプションを含む）を変更するとおかしなふるまいをすると知られています。
ですから、たとえば CFLAGS や CXXFLAGS のような、デフォルトの最適化を書きかえるような何かの環境変数を定義したなら、GCC を構築する時に、その設定を解除するか、修正するようお勧めします。</para>

<!--
<para>The GCC documentation recommends building GCC outside of the source
directory in a dedicated build directory:</para>
-->
<para>GCC の文書は、ソースディレクトリとは別の構築専用ディレクトリでコンパイルするよう勧めています。</para>

<screen><userinput>mkdir ../gcc-build
cd ../gcc-build</userinput></screen>

<!--
<para>Prepare GCC for compilation:</para>
-->
<para>それでは コンパイルのために GCC を準備します。</para>

<screen><userinput>../gcc-&gcc-version;/configure --prefix=/tools \
&nbsp;&nbsp;&nbsp;&nbsp;--with-local-prefix=/tools \
&nbsp;&nbsp;&nbsp;&nbsp;--disable-nls --enable-shared \
&nbsp;&nbsp;&nbsp;&nbsp;--enable-languages=c</userinput></screen>

<!--
<para>The meaning of the configure options:</para>
-->
<para>コンフィグオプションの意味</para>

<itemizedlist>
<!--
<listitem><para><userinput>&#045;&#045;with-local-prefix=/tools</userinput>:  The
purpose of this switch is to remove <filename>/usr/local/include</filename>
from <userinput>gcc</userinput>'s include search path. This is not absolutely
essential; however, we want to try to minimize the influence of the host
system, thus making this a sensible thing to do.</para></listitem>
-->
<listitem><para><userinput>--with-local-prefix=/tools</userinput>: このスイッチの目的は <userinput>gcc</userinput> の include 検索パスから、<filename>/usr/local/include</filename> を除外することです。
これは必須ではありませんが、ホストシステムへの影響を最小限にしたいので、このようにすることには意味があります。</para></listitem>

<!--
<listitem><para><userinput>&#045;&#045;enable-shared</userinput>: This switch may
seem counter-intuitive at first. But using it allows the building of
<filename>libgcc_s.so.1</filename> and <filename>libgcc_eh.a</filename>, and
having <filename>libgcc_eh.a</filename> available ensures that the configure
script for Glibc (the next package we compile) produces the proper results.
Note that the <userinput>gcc</userinput> binaries will still be linked
statically, as this is controlled by the <userinput>-static</userinput>
value of BOOT_LDFLAGS further on.</para></listitem>
-->
<listitem><para><userinput>--enable-shared</userinput>: このスイッチは、初めピンとこないかもしれません。
しかしこれを使うと、<filename>libgcc_s.so.1</filename> と <filename>libgcc_eh.a</filename> の構築を許可し、さらに使える <filename>libgcc_eh.a</filename> を持っているということは、Glibc （次にコンパイルするパッケージ）に関する設定スクリプトが適切な結果になるのを確実にします。
<userinput>gcc</userinput> のバイナリ類は、さらに BOOT_FLAGS の <userinput>-static</userinput> 値で制御されるので、今まで通り静的にリンクされることに注意してください。</para></listitem>

<!--
<listitem><para><userinput>&#045;&#045;enable-languages=c</userinput>: This option
ensures that only the C compiler is built. The option is only needed when you
have downloaded and unpacked the full GCC tarball.</para></listitem>
-->
<listitem><para><userinput>--enable-languages=c</userinput>: このオプションは C コンパイラだけが構築されるようにします。
このオプションは、GCC tarball をすべてダウンロードして解凍した時にだけ必要になります。</para></listitem>
</itemizedlist>

<!--
<para>Continue with compiling the package:</para>
-->
<para>パッケージのコンパイルを続けます。</para>

<screen><userinput>make BOOT_LDFLAGS="-static" bootstrap</userinput></screen>

<!--
<para>The meaning of the make parameters:</para>
-->
<para>make パラメータの意味</para>

<itemizedlist>
<!--
<listitem><para><userinput>BOOT_LDFLAGS="-static"</userinput>: This tells
GCC to link its programs statically.</para></listitem>
-->
<listitem><para><userinput>BOOT_LDFLAGS="-static"</userinput>: これは GCC にそのプログラムを静的にリンクすることを伝えます。</para></listitem>

<!--
<listitem><para><userinput>bootstrap</userinput>: This target doesn't just
compile GCC, but compiles it several times. It uses the programs compiled in
a first round to compile itself a second time, and then again a third time.
It then compares these second and third compiles to make sure it can
reproduce itself flawlessly, which most probably means that it was
compiled correctly.</para></listitem>
-->
<listitem><para><userinput>bootstrap</userinput>: このターゲットは、GCC をただコンパイルするだけではなく、何度かコンパイルします。
最初にコンパイルしたプログラムそのものを 2 回目のコンパイルに使い、さらに 3 回目にも使います。それから、同じものをきちんと再生成できるのを確かめるために、2 回目と 3 回目のコンパイルを比較します。
完全に再生成しているということは、たぶん正しくコンパイルされということになります。</para></listitem>
</itemizedlist>

<!--
<para>And install the package:</para>
-->
<para>それではパッケージをインストールします。</para>

<screen><userinput>make install</userinput></screen>

<!--
<para>As a finishing touch we'll create the <filename
class="symlink">/tools/bin/cc</filename> symlink. Many programs and
scripts run <userinput>cc</userinput> instead of <userinput>gcc</userinput>,
a thing meant to keep programs generic and therefore usable on all kinds of
Unix systems. Not everybody has the GNU C compiler installed. Simply running
<userinput>cc</userinput> leaves the system administrator free to decide what
C compiler to install, as long as there's a symlink pointing to it:</para>
-->
<para>仕上げに <filename class="symlink">/tools/bin/cc</filename> のシンボリックリンクを作成します。
多くのプログラムやスクリプトが <userinput>gcc</userinput> の代わりに <userinput>cc</userinput> を使うというのは、プログラムに一般性を持たせるということですから、すべての Unix システムで使えるということです。
すべての人が GNU C コンパイラをインストールしているわけではありません。
単に、<userinput>cc</userinput> を使っておくことで、それに対してシンボリックリンクさえ作れば、システム管理者がどの C コンパイラをインストールするかについては制約が無くなります。</para>

<screen><userinput>ln -sf gcc /tools/bin/cc</userinput></screen>

</sect2>

</sect1>

