Apple M1版 MacでEmscripten SDK 設置問題


問題点

Apple M1 搭載のモデル(Mac Mini)で、Emscripten SDKのインストールに問題。

EMSDKをダウンロードし、

% ./emsdk install latest

Error: No tool or SDK found by name 'sdk-releases-upstream-4764c5c323a474f7ba28ae991b0c9024fccca43c-64bit'.

の問題があり、そこでソースからのインストールを試みました。

% ./emsdk install sdk-upstream-master-64bit



Done installing tool 'llvm-git-master-64bit'.
Manifest error: No tool by name 'node-12.18.1-64bit' found! This may indicate an internal SDK error!
Traceback (most recent call last):
File "/Users/<ユーザー名>/emsdk/./emsdk.py", line 3082, in
sys.exit(main())
File "/Users/<ユーザー名>/emsdk/./emsdk.py", line 3062, in main
success = tool.install()
File "/Users/<ユーザー名>/emsdk/./emsdk.py", line 1840, in install
return self.install_sdk()
File "/Users/<ユーザー名>/emsdk/./emsdk.py", line 1851, in install_sdk
success = tool.install()
AttributeError: 'NoneType' object has no attribute 'install'

LLVMまではインストールできたが、Nodeの設置に問題があるということで、emsdk_manifest.jsonを見るとその記述があり、スキップさせてみましたが、後でNodeがないとエラーが出ました。

それから、この記事に辿り着き、問題は(とりあえず)解決しました。
https://github.com/emscripten-core/emsdk/issues/671

解決方法

① ダウンロードしたemsdkフォルダ内、emsdk.pyの112行目を以下に修正。
machine = 'x86_64'

② Terminal を、Rosettaを使用して開くようにする
ユーティリティ → ターミナル を右クリック → 情報を見る → 一般情報内の → 「Rosettaを使用して開く」

③ この後、もう一度SDKのインストールを試みる
% ./emsdk install sdk-upstream-master-64bit

④ Activateする
% ./emsdk activate sdk-upstream-master-64bit

  • インストール完了後、emscriptenへのPATH登録は必要です。
  • 参考にしました記事にもあるように、あくまでこれはビルド過程を固定させて通しているだけですし、本質的なサポートが必要でしょうね。

環境

以下、自分の環境になります。
私はNodeのバージョンをnvmで修正しましたので12.18.1になっていますが、最新のバージョンでも今回の問題では大丈夫ではないかと思います。

a. Homebrew
% brew --version
Homebrew 2.7.7

b. Node
% nvm --version
0.37.2

% node --version
v12.18.1

c. Python
% pyenv --version
pyenv 1.2.22

% python --version
Python 3.9.1

d. XCODE
% xcodebuild -version
Xcode 12.3
Build version 12C33

e. GIT
% git --version
git version 2.30.0

f. Make
% make --version
GNU Make 3.81

g. CMake
% cmake --version
cmake version 3.19.3