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の利用の際に問題になるので、何か手を打つ必要がある。

  1. Python3系をアンインストールする
  2. 呼び出されるpythonをすげ替える

Python3をアンインストールするのは何だか癪に障るので、ここでは案2を選択する。

ようはemcc.bat(他のbatでも同じ)を起動した際に、Emscriptenpythonを見に行けば良いので、emcc.batの置いてあるフォルダの位置に「python.bat」を作って以下の様に設定してあげる事で、擬似的に差し替えることにした。根本的な解決にはなっていないが、これでvs-toolは動くし、自分で使う分には問題ないので良しとした。

公式ページには「python2」を作ってウンタラカンタラ書いているが、Windowsでemcc.batを使っている場合は多分機能しない(未確認)