8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MacでクロスコンパイラGCCをビルドする

Last updated at Posted at 2017-03-11

#動機
自作OSの独自の実行形式をサポートするためにリンカスクリプトを作成する必要があったが、MacのデフォルトのGCC(clang)・ldは、リンカスクリプト指定オプション-Tを受け付けていなかった。そこで、リンカスクリプトを受け付けてくれるクロスコンパイラのGCCをビルドしてみることにした。

#環境
Max OS X El Capitan(10.11.2)
macOS Sierra(10.12.3)

#手順

# GMP、MPFR、MPC をインストール
brew install gmp
brew install mpfr
brew install libmpc

# MacデフォルトのGCC(clang)によるビルドはサポートされてないらしいので、非LLVMなGCCをインストールする
brew install gcc

# 環境変数の設定
export CC=/usr/local/bin/gcc-5 # ↑の手順でinstallしたGCCのパス
export LD=/usr/local/bin/gcc-5

export PREFIX="/usr/local/i386elfgcc"
export TARGET=i386-elf
export PATH="$PREFIX/bin:$PATH"

# binutilsのインストール
mkdir /tmp/src
cd /tmp/src
curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.28.tar.gz
tar xf binutils-2.28.tar.gz
mkdir binutils-build
cd binutils-build
../binutils-2.28/configure --target=$TARGET --enable-interwork --enable-multilib --disable-nls --disable-werror --prefix=$PREFIX 2>&1 | tee configure.log
sudo make all install 2>&1 | tee make.log

# OSXデフォルトのlibiconvは古すぎてGCCのビルドでこけたので、最新版をインストールする
cd /tmp/src
curl -O https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar xf libiconv-1.15.tar.gz
cd libiconv-1.15
./configure -prefix=/usr/local
make
make install

# クロスコンパイラなGCCをビルド
# バージョンは特にこだわりがなかったので、homebrewで入れたGCCのバージョンに合わせた
cd /tmp/src
curl -O https://ftp.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.bz2
tar xf gcc-5.3.0.tar.bz2
mkdir gcc-build
cd gcc-build
../gcc-5.3.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --disable-libssp --enable-languages=c --without-headers --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpfr=/usr/local --with-libiconv-prefix=/usr/local
make all-gcc 
make all-target-libgcc 
sudo make install-gcc 
sudo make install-target-libgcc

# /usr/local/i386elfgcc/bin配下にGCCがインストールされている
# 念のためバージョン確認
/usr/local/i386elfgcc/bin/i386-elf-gcc -v

これでGCCに-Tオプションを渡せるようになった。

#参考
http://stackoverflow.com/questions/25634708/gnu-linker-equivalent-command-in-os-x
http://wiki.osdev.org/GCC_Cross-Compiler#OS_X_Users
http://lv4.hateblo.jp/entry/20130704/1372943744

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?