2011年12月18日日曜日

Native Client SDK のセットアップでハマった

2011年10月 に Native Client SDK version 1.0 がリリースされました。
1.0 になる前までは、windows 用のインストーラーもあったのですが、
現在はない模様。

英語がよくわからないので、今まで避けてましたが備忘録がてら、
セットアップしていきたいと思います。
(環境:Windows7 SP1 64bit)

事前準備
Native Client では、Python が必要になりますので、Python を使える環境にしておく必要があります。
Python のバージョンは、2.6 または 2.7 です。

ダウンロード
こちらの Native Client 公式ページより、nacl_sdk.zip をダウンロードします。
ダウンロードしたら、好きな場所に解凍します。ここが NACL_SDK_ROOT になります。
ここでは、 C ドライブ直下に置きます。(c:\nacl_sdk)

naclsdk.bat list を実行
手順に従い、コマンドプロンプトを開いて先程解凍した nacl_sdk ディレクトリに移動します。
そこで、"naclsdk.bat list" を実行します。
すると、以下のように出力されました。
>cd nacl_sdk
>naclsdk.bat list
Available bundles:
  sdk_tools
    description: Native Client SDK Tools, revision 1.12
    stability: stable
    recommended: yes
    version: 1
    revision: 12
  gdb_builds
    description: gdb (Gnu Debugger) build for debugging x86-64 binary from win64
 host
    stability: beta
    recommended: no
    version: 0
    revision: 1
  pepper_14
    description: Chrome 14 bundle, revision 1052
    stability: post_stable
    recommended: no
    version: 14
    revision: 1052
  pepper_15
    description: Chrome 15 bundle, revision 1239
    stability: stable
    recommended: yes
    version: 15
    revision: 1239
  pepper_16
    description: Chrome 16 bundle, revision 1397
    stability: beta
    recommended: no
    version: 16
    revision: 1397
  pepper_17
    description: Chrome 17 bundle, revision 112997
    stability: dev
    recommended: no
    version: 17
    revision: 112997

Currently installed bundles:
公式の説明と微妙に違いますが、バージョンが違うだけのようなので気にせず進みます。

update
続いて、"naclsdk.bat update" を実行しろとあるので、実行します。
>naclsdk.bat update
Downloading http://commondatastorage.googleapis.com/nativeclient-mirror/nacl/nac
l_sdk/1.12/sdk_tools.tgz
|================================================|
..................................................
Updating bundle sdk_tools to version 1, revision 12
Downloading http://commondatastorage.googleapis.com/nativeclient-mirror/nacl/nac
l_sdk/pepper_15_1239/naclsdk_win.exe
|================================================|
..................................................
Updating bundle pepper_15 to version 15, revision 1239
Abnormal program termination: [Errno 2] No such file or directory
Run again in debug mode (-d option) for stack trace.
なんかエラーが…
debug mode (-d option) を試してみろとのことなので、
naclsdk.bat ファイルの
python %SDK_TOOLS%\sdk_update.py %*
のところに、 "-d" を加えて実行します。

Traceback (most recent call last):
  File "c:\nacl_sdk\sdk_tools\sdk_update.py", line 1145, in 
    return_value = main(sys.argv[1:])
  File "c:\nacl_sdk\sdk_tools\sdk_update.py", line 1137, in main
    InvokeCommand(args)
  File "c:\nacl_sdk\sdk_tools\sdk_update.py", line 1126, in InvokeCommand
    command(options, args[1:])
  File "c:\nacl_sdk\sdk_tools\sdk_update.py", line 1031, in Update
    UpdateBundle()
  File "c:\nacl_sdk\sdk_tools\sdk_update.py", line 1014, in UpdateBundle
    RenameDir(bundle_update_path, bundle_path)
  File "c:\nacl_sdk\sdk_tools\sdk_update.py", line 284, in RenameDir
    raise err
OSError: [Errno 2] No such file or directory
どうやら、リネームで失敗しているようです。
もう少し追って見ると、インストーラーにインストールディレクトリを指定しているのですが、
なぜかデフォルトにインストールされているようです。
そのため、リネーム対象のパスがなくて失敗していました。

さらに、追ってみましょう。
そもそもインストール使用としているディレクトリはどこなのか。それを調べました。
/cygdrive/c/nacl_sdk/pepper_15_update
。。。

準備はしっかりと
原因は、cygwin版の Python が Windows版の Python より呼び出し優先が高くなっていたからでした。
環境変数を Windows版の Python が前になるようにして、実行。

>naclsdk.bat update
Downloading http://commondatastorage.googleapis.com/nativeclient-mirror/nacl/nac
l_sdk/1.12/sdk_tools.tgz
|================================================|
..................................................
Updating bundle sdk_tools to version 1, revision 12
Downloading http://commondatastorage.googleapis.com/nativeclient-mirror/nacl/nac
l_sdk/pepper_15_1239/naclsdk_win.exe
|================================================|
..................................................
Updating bundle pepper_15 to version 15, revision 1239
Downloading http://commondatastorage.googleapis.com/nativeclient-mirror/nacl/nac
l_sdk/pepper_16_1398/naclsdk_win.exe
|================================================|
..................................................
Updating bundle pepper_16 to version 16, revision 1398

今度はちゃんといけた模様。
c:\nacl_sdk を確認してみると、pepper_15 と pepper_16 がありました。

サンプルのビルド
環境変数に NACL_SDK_ROOT を追加します。
パスは今回の場合、c:\nacl_sdk です。
あとは、c:\nacl_sdk\pepper_15\example\scons.bat を実行するだけです。
※Windows版 python が使われるようにしてください。

C:\nacl_sdk\pepper_15\examples>set NACL_SDK_ROOT=c:\nacl_sdk

C:\nacl_sdk\pepper_15\examples>scons.bat
scons: Reading SConscript files ...
---------------------------------------------------------------
+  Project "geturl" is using NaCl platform "pepper_15", toolchain "newlib"
---------------------------------------------------------------

---------------------------------------------------------------
+  Project "hello_world" is using NaCl platform "pepper_15", toolchain "newlib"
---------------------------------------------------------------

---------------------------------------------------------------
+  Project "hello_world" is using NaCl platform "pepper_15", toolchain "newlib"
---------------------------------------------------------------

---------------------------------------------------------------
+  Project "input_events" is using NaCl platform "pepper_15", toolchain "newlib"

---------------------------------------------------------------

---------------------------------------------------------------
+  Project "load_progress" is using NaCl platform "pepper_15", toolchain "newlib
"
---------------------------------------------------------------

---------------------------------------------------------------
+  Project "pi_generator" is using NaCl platform "pepper_15", toolchain "newlib"

---------------------------------------------------------------

---------------------------------------------------------------
+  Project "pong" is using NaCl platform "pepper_15", toolchain "newlib"
---------------------------------------------------------------

---------------------------------------------------------------
+  Project "sine_synth" is using NaCl platform "pepper_15", toolchain "newlib"
---------------------------------------------------------------

---------------------------------------------------------------
+  Project "tumbler" is using NaCl platform "pepper_15", toolchain "newlib"
---------------------------------------------------------------

scons: done reading SConscript files.
scons: Building targets ...

.
.
.

scons: done building targets.

ビルドができたら実行してみます。
  1. ローカルサーバーを立ち上げる
    c:\nacl_sdk\pepper_15\example\httpd.cmd を実行します。
    INFO:root:Starting local server on port 5103
    INFO:root:To shut down send http://localhost:5103?quit=1
  2. ページにアクセスする
    Chrome を起動して、http://localhost:5103 にアクセスすると、
    Native Client Examples ってページが開きます。
    そこに各サンプルへのリンクがあります。

  3. 確認終了
    確認し終わったら、http://localhost:5103?quit=1 にアクセスします。
    しばらくすると、コンソールウィンドウが勝手に閉じます。
version 1.0 になって、サンプルも増えたようです。
これを参考に、いろいろ遊んでみたいなぁと思ってます。

0 件のコメント:

コメントを投稿