Happy My Life

日常とか技術とか

chromiumソースコード斜め読み(Portable Native Client編)

Portable Native Client(以下pnaclと表記)が正式に公開されたということで、chromiumChromeOSS実装)のソースコードをpnacl周りを中心に斜め読みした結果をまとめてみました。とりあえずchromiumのソースコードをダウンロード、ビルドしながら読んでいくと理解が深まるかと。

ここでは、Ubuntu 12.04(64bit)上で試行錯誤した結果を元に書いてみます。この文章は憶測等も含まれています。

pnaclのいろいろ

平たく言うと、gccやclangのpnacl対応版を利用してx86、ARMといったネイティブコードに変換してます。pnacl対応版の実行ファイルの拡張子は、.nexeで、elfっぽい感じのフォーマットではないかと思います。対応しているアーキテクチャは、x86, x86_64, MIPS32, ARMです。

ここからは、LLVM関連に話を絞って書いていきます(LLVMがメインで使われていると思ってたので)

pnaclで利用するコマンドは、src/native_client/toolchain/pnalc_linux_x86/bin64ディレクトリ以下にあります。pnacl-clang(pnaclに対応したC/C++フロントエンド), pnacl-clang++などなど。ビットコードを利用して何かできるような雰囲気もあるので、C/C++に限らずLLVMのフロントエンドが利用できる言語であれば、pnaclで使えないこともないかなー、という印象を持ちました。

pnacl関連のソースコードは、src/native_client, src/native_client_sdkディレクトリという、そのものズバリなディレクトリ名がありますので、それらを中心に見ていけば解析できるでしょう。またpnacl関連を利用したチュートリアルが、src/native_client_sdk/src/getting_startedディレクトリにあるので、pnaclを利用したソフトウェアを初めて開発する場合は、これらのソースコードも見ていけばよいでしょう。

ちなみに、pnaclのコアとなるファイル(pnacl-clangファイルとか)が格納されるディレクトリは、src/native_client/pnaclディレクトリなのですが、chroniumのソースコードのダウンロード直後は、ここには元となるソースコードはほとんど含まれていません。別途ダウンロードする必要があります。ソースコードのダウンロード、テストも含めて全部行うには、「./build.sh all」とコマンド実行することで、LLVM/clangなどのソースコードのダウンロードとビルドが開始されます。

あとは何か気づいたことがあったら追記します。