ネイティブ クライアント向けのビルド システム
Native Client SDK のどのバージョンも、特定のビルド システムを必須としません。SCons、GNU Make、CMake、または単にシェル スクリプトを使用することはいつでも可能です。別の言い方をすれば、gcc と GNU ツールチェーンに基づくコンパイラとツールは、開発者が使用することを決定したビルド システムから独立しています。
ただし、ネイティブ クライアント SDK の Pepper バージョン 17 までは、SDK のサンプルには SCons のビルド ファイルが付属しており、SCons は SDK に含まれていました。Pepper 18 以降では、これは当てはまりません。代わりに、サンプル用に提供されているビルド ファイルは、GNU Make 用の Makefile です。
Pepper 18 バージョンの SDKのリリース ノートも参照してください。
クロスコンパイル
SDK で提供されるツールは現在、32 ビット x86 および 64 ビット x86 アーキテクチャをサポートしています。Native Client モジュールはクライアント上 (つまり、ブラウザー内) で実行されるため、Web サーバーのプラットフォームは重要ではありません。これは、ユーザーのシステムと開発者のシステムという 2 つのシステムを考慮する必要があることを意味します。
ユーザーのシステムでは、Chrome がページ内でネイティブ クライアント モジュールを検出すると、そのクライアントのブラウザーに適した実行可能ファイル (.nexe ファイル) をフェッチします。したがって、64 ビット Windows のユーザーがページにアクセスすると、64 ビット バイナリが取得されます。ユーザーが 32 ビット Mac を使用している場合は、32 ビット バイナリが取得されます。例外もありますが、以下で個別に扱います。Chrome は、マニフェスト ファイルから 32 ビットおよび 64 ビットの .nex の名前を決定します。マニフェスト ファイルの説明と例については、Native Client SDK サイト (www.GoNaCl.com) を参照してください。
開発者は、開発に使用するオペレーティング システムやアーキテクチャに関係なく、32 ビットと 64 ビットの両方の実行可能ファイルを作成できます (作成する必要があります)。Pepper 18 の examples/ ディレクトリで「make」を実行し、発行されたコマンドを調べると、これを行う方法を確認するのに便利な方法です。たとえば、「make hello_world_glibc」の出力の一部は次のようになります。
i686-nacl-gcc -o hello_world_x86_32.nexe hello_world.c -m32 -O0 -g -pthread -O0 -g -Wno-long-long -Wall -lppapi
と
i686-nacl-gcc -o hello_world_x86_64.nexe hello_world.c -m64 -O0 -g -pthread -O0 -g -Wno-long-long -Wall -lppapi
最初の行は 32 ビットの .nexe を生成します。2 行目は 64 ビットの .nexe を生成します。重要なフラグは、アーキテクチャを指定する -m32/-m64 です。常に両方をビルドして、32 ビット マシンと 64 ビット マシンの両方のクライアントがアプリを使用できるようにします。
長期的には、展開形式は 1 つだけで済み、ARM は直接サポートされるアーキテクチャとして追加されます。詳細については、Portable Native Clientプロジェクトを参照してください。
32/64 ビットに対するブラウザとクライアントのアーキテクチャの特定の一致を次に示します。
- Mac OS (32 ビットおよび 64 ビット) -> 32 ビット .nexe (Chrome は 32 ビット)
- Windows (32 ビット) -> 32 ビット .nexe
- Windows (64 ビット) -> 64 ビット .nexe (Chrome は 32 ビットですが、64 ビットのブローカー プロセスを開始します)
- Linux (32 ビット) -> 32 ビット .nexe
- Linux (64 ビット) -> 32 ビット Chrome は 32 ビットの .nexe をフェッチします。64 ビット Chrome は 64 ビット .nexe をフェッチします
したがって、一般的なルールとして、Chrome は自身のビット年齢に一致する .nexe を取得します。ただし、Chrome 自体が 32 ビットであるにもかかわらず 64 ビットの .nexe を取得する 64 ビット Windows を除きます。