A Way of Code

興味の赴くままに書き綴っていきます。

Mac OS X Lion + Xcode 4.2.1環境にLLVM-GCCではないGCC 4.2.1 (Apple build 5666.3) をインストールする

Xcode 4.2からgccがバンドルされなくなりました。ここで言っているgccはllvm-gccではない、legacyでrealでnativeなgccです。
以前のバージョンのXcodeからgccを引っこ抜いてくるかとも思ったのですが、Appleオープンソースサイトを漁っているとgccが置いてあるではありませんか!
http://opensource.apple.com/release/developer-tools-41/
gcc-5666.3

環境

Mac OS X 10.7.2
Xcode 4.2.1

インストール

誰かインストールした人はいないかとgcc-5666.3でググると、以下のページが引っかかりました。
http://caiustheory.com/install-gcc-421-apple-build-56663-with-xcode-42
# osx-gcc-installerというのもあるようですが、Xcodeのアンインストールを要求してくるので使わないでおきました。

ビルド

早速ビルド&インストールしてみます。

cd /private/tmp
curl -kLO http://opensource.apple.com/tarballs/gcc/gcc-5666.3.tar.gz
tar zxvf gcc-5666.3.tar.gz
cd gcc-5666.3
mkdir -p build/obj build/dst build/sym
sudo gnumake install RC_OS=macos RC_ARCHS='i386 x86_64' TARGETS='i386 x86_64' SRCROOT=`pwd` OBJROOT=`pwd`/build/obj DSTROOT=`pwd`/build/dst SYMROOT=`pwd`/build/sym
sudo ditto build/dst /

作業ディレクトリを/private/tmpにしていますが、このディレクトリ内にあるものは次回再起動後に自動で削除されるので、ソースを残しておきたい場合はtar.gzファイルを別のディレクトリに展開するといいでしょう。
gnumakeコマンドを実行している箇所はsudoで実行しておかないと、インストールスクリプトの最後でroot/wheelへの権限変更ができなくなり、手動で権限変更する羽目になります。
DSTROOTはいきなり / (ルート)を指定しても良いのですが、何が配置されるか分からなかったので、一旦build/dstに生成してからルートにコピーするようにしています。

生成されるファイル

↓生成されるファイルです。

./Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.DeveloperTools.docset/Contents/Resources/Documents/documentation/DeveloperTools/gcc-4.2.1/cpp/Argument-Prescan.html
(中略)
./Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.DeveloperTools.docset/Contents/Resources/Documents/documentation/DeveloperTools/gcc-4.2.1/gccint/Working-with-declarations.html
./usr/bin/c++-4.2
./usr/bin/cpp-4.2
./usr/bin/g++-4.2
./usr/bin/gcc-4.2
./usr/bin/gcov-4.2
./usr/bin/i686-apple-darwin11-cpp-4.2.1
./usr/bin/i686-apple-darwin11-g++-4.2.1
./usr/bin/i686-apple-darwin11-gcc-4.2.1
./usr/include/gcc/darwin/4.2/float.h
./usr/include/gcc/darwin/4.2/ppc_intrinsics.h
./usr/include/gcc/darwin/4.2/stdarg.h
./usr/include/gcc/darwin/4.2/varargs.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/crt3.o
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/ammintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/decfloat.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/emmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/fenv.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/float.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/iso646.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/limits.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/mm3dnow.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/mm_malloc.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/mmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/nmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/omp.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/pmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/README
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/smmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/stdarg.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/stdbool.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/stddef.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/syslimits.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/tgmath.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/tmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/unwind.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/varargs.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/include/xmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/gsyslimits.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/ammintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/decfloat.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/emmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/float.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/iso646.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/limits.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/mm3dnow.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/mm_malloc.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/mmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/nmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/pmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/README
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/smmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/stdarg.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/stdbool.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/stddef.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/tgmath.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/tmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/unwind.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/varargs.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/include/xmmintrin.h
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/macro_list
./usr/lib/gcc/i686-apple-darwin11/4.2.1/install-tools/mkheaders.conf
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libcc_kext.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libgcc.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libgcc_eh.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libgcc_static.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libgcov.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libgomp.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libgomp.spec
./usr/lib/gcc/i686-apple-darwin11/4.2.1/libstdc++.dylib
./usr/lib/gcc/i686-apple-darwin11/4.2.1/x86_64/crt3.o
./usr/lib/gcc/i686-apple-darwin11/4.2.1/x86_64/libgcc.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/x86_64/libgcc_eh.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/x86_64/libgcov.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/x86_64/libgomp.a
./usr/lib/gcc/i686-apple-darwin11/4.2.1/x86_64/libgomp.spec
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/cc1
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/cc1obj
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/cc1objplus
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/cc1plus
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/collect2
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/install-tools/fixinc.sh
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/install-tools/fixincl
./usr/libexec/gcc/i686-apple-darwin11/4.2.1/install-tools/mkheaders
./usr/share/man/man1/c++-4.2.1
./usr/share/man/man1/cpp-4.2.1
./usr/share/man/man1/g++-4.2.1
./usr/share/man/man1/gcc-4.2.1
./usr/share/man/man1/gcov-4.2.1
./usr/share/man/man1/i686-apple-darwin11-cpp-4.2.1.1
./usr/share/man/man1/i686-apple-darwin11-g++-4.2.1.1
./usr/share/man/man1/i686-apple-darwin11-gcc-4.2.1.1

Formulaを作ってhomebrewで管理しようとも思ったのですが、Appleビルドなので/usr直下にインストールされても気にしない(・ε・)

確認

$ /usr/bin/gcc-4.2 --version
i686-apple-darwin11-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

llvmじゃないので安心して眠れます。