Emscriptenのインストール
インストール
基本的には以下のページを見ながら進めていった。
https://github.com/kripken/emscripten/wiki/Emscripten-SDK
今回はPortableSDKパッケージからインストールしてみた。
PortableSDKパッケージにはパッケージ管理ユーティリティ「emsdk」が含まれており、これを利用する事でEmscriptenの開発環境を構成する事が出来る。
まずはupdateコマンドでパッケージの一覧を取得する。
>emsdk update
emsdk updateを2回呼ばないと、64bit版が出てこない不思議。
次にlistコマンドで利用可能なパッケージを確認。
>emsdk list The following individual tools exist: clang-3.2-32bit node-0.10.17-32bit python-2.7.5.1-32bit git-1.8.3 emscripten-1.5.6 emscripten-incoming emscripten-master vs-tool-0.9.0 vs-tool-0.9.1 The following Emscripten SDK versions are available: sdk-1.5.6-32bit The items marked with * are activated for the current user.
SDKのバージョンが判ったら、sdkをinstallする。
sdkをインストールすると、必要なパッケージが勝手にinstallされる。yumとかaptとかそういう感じ。
>emsdk install sdk-1.5.6-32bit
最新版をインストールする場合は以下のようにする。
>emsdk install latest
複数のVerをインストールして、切り替えることが出来る様になっており、Activateと呼ばれる作業をする事で利用するVerを指定する。
最新版を有効にする場合は以下のようにする。もちろんVerを指定しても良い。
>emsdk activate latest
activateコマンドでemscripten-incoming等の、Githubで提供されているリポジトリを指定出来るが「emsdk activate emscripten-incoming」とすると、確かにemscripten-incomingはアクティブになるが、必要なモジュールがアクティブにならず、環境変数が不完全な物となってしまう。
なので、emscripten-incomingを使いたい場合は以下のようにする。
emsdkスクリプトに対して、以下の様なPatchを当てる。
Before
def compatible_with_this_os(self): if hasattr(self, 'os'): if (WINDOWS and 'win' in self.os) or (LINUX and 'linux' in self.os) or (OSX and 'osx' in self.os): return True else: return False if OSX and hasattr(self, 'osx_url'): return True if WINDOWS and (hasattr(self, 'windows_url') or hasattr(self, 'windows_install_path')): return True if LINUX or OSX and hasattr(self, 'unix_url'): return True return hasattr(self, 'url')
After
def compatible_with_this_os(self): if self.id == "sdk": if hasattr(self, 'os'): if (WINDOWS and 'win' in self.os) or (LINUX and 'linux' in self.os) or (OSX and 'osx' in self.os): return True else: return False else: return True if OSX and hasattr(self, 'osx_url'): return True if WINDOWS and (hasattr(self, 'windows_url') or hasattr(self, 'windows_install_path')): return True if LINUX or OSX and hasattr(self, 'unix_url'): return True
上記のPatchを当てる事で、listコマンドのSDKに一覧にIncomingを用いたSDKが現れる。
下記の様にSDKをアクティブ化する。
>emsdk install sdk-incoming-32bit >emsdk activate sdk-incoming-32bit
incomiingを利用する際には、ensdkは内部でgitを使いリポジトリをダウンロードしてくるが、リポジトリのURLがgit://で始まっており、Firewallの中にいる場合はダウンロード出来ない場合がある。
その場合は、emsdk_manifest.jsonの中身のURLのgit://をhttp://に書き換えた後、emsdkのgitコマンドを定義している箇所を書き換える。(コメントアウトしている所を切り替える)
Before
def GIT(): global warnonce_git_not_found # git = 'git/1.8.3/bin/bin/git.exe' git = 'git/1.8.3/cmd/git.exe'
After
def GIT(): global warnonce_git_not_found git = 'git/1.8.3/bin/bin/git.exe' # git = 'git/1.8.3/cmd/git.exe'
これは、cmd/git.exeではhttp://プロトコルでのアクセスに必要なcurlコマンドが見当たらずダウンロード出来ないのに対して、bin/git.exeでは同一フォルダにcurlが含まれているのでダウンロード出来る様になる。もちろん別の解決方法もあると思う。
もしもっと良い解決策があれば教えてほしい。
ちなみに、emsdkと打つと利用可能なコマンドの一覧が表示されるが、中には隠しコマンドもある。
>emsdk construct_env
emsdk_set_envを作る際に利用されるコマンドで、Pathの指定等が確認できる…が意味があるかは…
ちなみに、emsdkを利用してインストールすると、Pythonやらnode.jsやらはSDKインストールの過程で一緒にインストールされるが
すでにPython 3系がインストールされている場合は注意が必要で、VisualStudio(with vs-tool)を利用してビルドする際に、ビルド出来ない問題に遭遇する。
これはemcc.batの中で「python emcc」と書いているのが原因で、本来であればEmscriptenをインストールした時のPythonを使って欲しいのに、環境変数のPathから引っ張ってくるpythonを使ってしまう。
ちなみに、emcmdpromptから起動したプロンプトでは、起動時にPathの設定を行うので、既にインストールされているPythonのPathを隠してしまうので問題なくemcc.batは動く。
だが、この後で出てくるvs-toolを使ったEmscriptenの利用の際に問題になるので、何か手を打つ必要がある。
- Python3系をアンインストールする
- 呼び出されるpythonをすげ替える
Python3をアンインストールするのは何だか癪に障るので、ここでは案2を選択する。
ようはemcc.bat(他のbatでも同じ)を起動した際に、Emscriptenのpythonを見に行けば良いので、emcc.batの置いてあるフォルダの位置に「python.bat」を作って以下の様に設定してあげる事で、擬似的に差し替えることにした。根本的な解決にはなっていないが、これでvs-toolは動くし、自分で使う分には問題ないので良しとした。
公式ページには「python2」を作ってウンタラカンタラ書いているが、Windowsでemcc.batを使っている場合は多分機能しない(未確認)