LS-GL用セルフコンパイル環境(gcc)を構築

以前(id:NeoCat:20070819)構築した、LS-GL用のクロスコンパイル環境を使って、LS-GL本体で動作するセルフコンパイル環境を作りました。やはりネイティブ環境でしかビルドできないソフトもあるので。
BUFFALO LS-400GL ギガビット LAN接続HDD LinkStation
やり方は以下の通り。

1. 環境設定とソースコードのインストー

まずは、id:NeoCat:20071020 の最初に書いたように、環境変数を設定しておきます。
そうしておいて、バッファローから送ってもらったLS-GLソースコードCDから、binutils-2.17pre-1.src.rpmgcc-2005q3-2.src.rpmをインストール。ユーザ権限でコンパイルできるよう、所有者をかえておきます。

% sudo rpm -ivh binutils-2.17pre-1.src.rpm gcc-2005q3-2.src.rpm
% sudo chown -R NeoCat /usr/local/src/redhat/*

2. binutilsのビルド

configure & make & make install。クロスコンパイル環境にObjective-Cが含まれていないためか、途中で「Objective-Cはサポートされていません」といってエラーになってしまうため、Objective-Cと思われるファイルを取り除いてビルドする必要がありました。一時的にDesktopにインストールし、後でアーカイブします。

% cd /usr/local/src/redhat/SOURCE/
% tar jxf binutils-2.17pre.tar.bz2
% cd binutils-2.17pre
% ./configure --build=powerpc-apple-darwin8.10.0 \
   --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi
% make
(「Objective-Cはサポートされていない」というエラーになる)
% cd gprof
% mkdir m
% mv *.m m
% cd ..
% make
% make install DESTDIR=~/Desktop/packages

3. gccのビルド

こちらも、基本はconfigure & make & make install。ただし、libibertyのincludeファイルのパス解決に問題があるようで、includeディレクトリのシンボリックリンクを作ってあげる必要があります。

% cd /usr/local/src/redhat/SOURCE/
% tar jxf gcc-2005q3.tar.bz2
% cd gcc-2005q3
% ./configure --enable-languages=c,c++ --build=powerpc-apple-darwin8.10.0 \
    --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi \
    --disable-sanity-checks --disable-libstdcxx-pch --disable-multilib --disable-nls \
    --enable-shared --enable-c99 --enable-long-long --enable-__cxa_atexit \
    --enable-threads=posix --with-cpu=arm926ej-s --with-gnu-ld --with-gnu-as
% make
(../include/xregex.h がないと言って止まる)
% cd build-powerpc-apple-darwin8.10.0/
% ln -s ../include .
% cd ..
% make
(再び../include/xregex.h がないと言って止まる)
% cd arm-none-linux-gnueabi
% ln -s ../include .
% cd ..
% make
% make install DESTDIR=~/Desktop/packages

4 アーカイブ作成

作ったものの所有者をroot:wheelにした上で、tarで固めます。ついでに、glibc-develのrpmをほどいてtarで固め直しておきます。

% cd ~/Desktop/packges
% chown -R root:wheel usr
% tar czf ../gcc-2005q3-2-arm-none-linux-gnueabi.tar.gz usr
% cd ..
% sudo rpm -ivh --force --ignoreos --ignorearch --relocate /=${HOME}/Desktop/ \
    glibc-devel-arm_trg-2005q3-2.arm.rpm
% cd ~/Desktop
% tar czf glibc-devel-arm_trg-2005q3-2.tar.gz usr

5 インストー

作った2つのアーカイブLS-GLにscp等でコピーし、rootでログインし、"-C /"オプション付きで展開します。なお、/usr/local/ 内のファイルを一部上書きしてしまうので、事前にバックアップしておきましょう。

これで、何かコンパイルしてみて、無事動けば成功です。

% zed test.c
#include <stdio.h>
#include <stdlib.h>
main() {
    printf("Hello,World!\n");
    exit(0);
}
(^Jで保存)
% gcc test.c
% ./a.out
Hello,World!
%

めでたしめでたし。