2011年08月18日

Androidのツールチェインをソースからビルドする

NDKに含まれているgccなどのツールチェインをソースからリビルドする方法を調べました。



NDKをインストールしたディレクトリの docs/DEVELOPMENT.html にツールチェインをソースからリビルドする方法が書いてあります。

便利なスクリプトが用意されているので、以下の手順でbinutils, gcc, gdbなどNDKについているツールチェイン全てがリビルドされます。

以下はx86_64 Ubuntu 10.04 で行っています。

ソースのダウンロード

$ mkdir workdir
$ cd workdir
$ git clone git://android.git.kernel.org/platform/ndk.git ndk
$ git clone git://android.git.kernel.org/platform/development.git development
$ export NDK=$PWD/ndk
$ echo $NDK
$ $NDK/build/tools/build-platforms.sh 
$ $NDK/build/tools/download-toolchain-sources.sh --package
$ ls /tmp/ndk-koba/android-ndk-toolchain-20110223.tar.bz2 

ビルド

$ time $NDK/build/tools/rebuild-all-prebuilt.sh --toolchain-src-pkg=/tmp/ndk-koba/android-ndk-toolchain-20110223.tar.bz2 
Checking whether the compiler generates 32-bit binaries...no
To follow build in another terminal, please use: tail -F /tmp/ndk-koba/build/log.txt
Building host ndk-stack tool from sources.
Packaging ndk-stack binary (ndk-stack-linux-x86.tar.bz2) ...
Creating sysroot: /tmp/ndk-koba/build/platforms/android-9/arch-arm
Copying android-3 platform files
Copying android-4 platform files
Copying android-5 platform files
Copying android-8 platform files
Copying android-9 platform files
Building arm-linux-androideabi-4.4.3 toolchain... (this can be long)
Packaging arm-linux-androideabi-4.4.3 toolchain (arm-linux-androideabi-4.4.3-linux-x86.tar.bz2) ...
Build arm-linux-androideabi-4.4.3 gdbserver...
Checking whether the compiler generates 32-bit binaries...no
Configure: arm-linux-androideabi-4.4.3 gdbserver-6.6 build.
Building : arm-linux-androideabi-4.4.3 gdbserver.
Install  : arm-linux-androideabi-4.4.3 gdbserver.
Done.
Packaging arm-linux-androideabi-4.4.3 gdbserver (arm-linux-androideabi-4.4.3-gdbserver.tar.bz2) ...
Packaging GNU libsupc++ armeabi libs (gnu-libsupc++-armeabi.tar.bz2) ...
Packaging GNU libsupc++ armeabi-v7a libs (gnu-libsupc++-armeabi-v7a.tar.bz2) ...
Packaging GNU libstdc++ headers (gnu-libstdc++-headers.tar.bz2) ...
Packaging GNU libstdc++ armeabi libs (gnu-libstdc++-libs-armeabi.tar.bz2) ...
Packaging GNU libstdc++ armeabi-v7a libs (gnu-libstdc++-libs-armeabi-v7a.tar.bz2) ...
Building STLport binaries
Copying android-3 platform files
Copying android-4 platform files
Copying android-5 platform files
Copying android-8 platform files
Copying android-9 platform files
Packaging: /tmp/ndk-koba/prebuilt-20110818/stlport-libs-armeabi.tar.bz2
Packaging: /tmp/ndk-koba/prebuilt-20110818/stlport-libs-armeabi-v7a.tar.bz2
Done! See /tmp/ndk-koba/prebuilt-20110818

real	5m20.301s
user	20m2.590s
sys	2m26.440s

ビルドの途中経過は他のターミナルから以下のコマンドで見ることができます。

$ tail -F /tmp/ndk-koba/build/log.txt

これで、binutils, gcc, gdbなどNDKについているツールチェイン全てがリビルドされます。

それらのアーカイブは/tmp/ndk-koba/prebuilt-20110818/ にできました。

ファイルのダウンロードやビルドは全て /tmp/ndk-$USER で行われるので /tmp の容量には余裕が必要です。

 $ ls /tmp/ndk-koba/prebuilt-20110818/
 arm-linux-androideabi-4.4.3-gdbserver.tar.bz2
 arm-linux-androideabi-4.4.3-linux-x86.tar.bz2
 gnu-libstdc++-headers.tar.bz2
 gnu-libstdc++-libs-armeabi.tar.bz2
 gnu-libstdc++-libs-armeabi-v7a.tar.bz2
 gnu-libsupc++-armeabi.tar.bz2
 gnu-libsupc++-armeabi-v7a.tar.bz2
 ndk-stack-linux-x86.tar.bz2
 stlport-libs-armeabi.tar.bz2
 stlport-libs-armeabi-v7a.tar.bz2

わたしの環境ではダウンロードに5分、ビルドに5分くらいでできました。

Windows用のツールチェインのビルド

ここからさらにさきほどのスクリプトに--mingw をつけて実行するとWindows用のツールチェインをクロスビルドすることができます。

$ time $NDK/rebuild-all-prebuilt.sh --mingw --toolchain-src-pkg=/tmp/ndk-koba/android-ndk-toolchain-20110223.tar.bz2 
Checking whether the compiler generates 32-bit binaries...no
To follow build in another terminal, please use: tail -F /tmp/ndk-koba/build/log.txt
Building host ndk-stack tool from sources.
Packaging ndk-stack binary (ndk-stack-windows.tar.bz2) ...
Creating sysroot: /tmp/ndk-koba/build/platforms/android-9/arch-arm
Copying android-3 platform files
Copying android-4 platform files
Copying android-5 platform files
Copying android-8 platform files
Copying android-9 platform files
Building arm-linux-androideabi-4.4.3 toolchain... (this can be long)
Packaging arm-linux-androideabi-4.4.3 toolchain (arm-linux-androideabi-4.4.3-windows.tar.bz2) ...
Skipping gdbserver build (--mingw option being used).
Skipping STLport binaries build (--mingw option being used)
Done! See /tmp/ndk-koba/prebuilt-20110818

real	12m14.069s
user	30m31.210s
sys	4m19.210s

Windows用の実行バイナリだけがビルドされて、実機用のライブラリやgdbserverはさきほどビルドしたものをそのまま使います。

$ ls -lt /tmp/ndk-koba/prebuilt-20110818/
total 34096
-rw-r--r-- 1 koba koba 13761198 Aug 18 14:07 arm-linux-androideabi-4.4.3-windows.tar.bz2
-rw-r--r-- 1 koba koba    66403 Aug 18 13:55 ndk-stack-windows.tar.bz2
-rw-r--r-- 1 koba koba   268388 Aug 18 11:17 stlport-libs-armeabi-v7a.tar.bz2
-rw-r--r-- 1 koba koba   269436 Aug 18 11:17 stlport-libs-armeabi.tar.bz2
-rw-r--r-- 1 koba koba  1384707 Aug 18 11:16 gnu-libstdc++-libs-armeabi-v7a.tar.bz2
-rw-r--r-- 1 koba koba  1379276 Aug 18 11:16 gnu-libstdc++-libs-armeabi.tar.bz2
-rw-r--r-- 1 koba koba   579342 Aug 18 11:16 gnu-libstdc++-headers.tar.bz2
-rw-r--r-- 1 koba koba   275056 Aug 18 11:16 gnu-libsupc++-armeabi-v7a.tar.bz2
-rw-r--r-- 1 koba koba   276337 Aug 18 11:16 gnu-libsupc++-armeabi.tar.bz2
-rw-r--r-- 1 koba koba    78231 Aug 18 11:16 arm-linux-androideabi-4.4.3-gdbserver.tar.bz2
-rw-r--r-- 1 koba koba 16508083 Aug 18 11:16 arm-linux-androideabi-4.4.3-linux-x86.tar.bz2
-rw-r--r-- 1 koba koba    37949 Aug 18 11:11 ndk-stack-linux-x86.tar.bz2


トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード