Closed8

Windows 11 ARM (Snapdragon X) でHaxe/JS開発環境を構築する

terurouterurou

Windows版のHaxeコンパイラのARMバイナリがまだ存在しないので、WSL 2に引きこもる方針で構築していく。

Linuxのディストリビューションは無難にUbuntuにする。ARM環境なのでパッケージマネージャーありきで環境を作る方針に。

terurouterurou

とりあえずWSL2 Ubuntuをインストール。

$ wsl --install Ubuntu

若干先回りだが、Microsoft LearnのWSL + VS Codeの解説で wgetca-certificates を入れろと書いてあるので、入れておく。 https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-vscode

$ sudo apt-get install wget ca-certificates

.wslconfig は特に設定していない。WSLでメモリー周りの設定をしないとメモリを食いつぶすという情報は結構あるのだが、この記事を書いてる時点のWSL最新版 2.2.4.0 の時点では、 メモリの自動開放がデフォルト有効に変わった などの状況変化があるため、当面は設定せずに様子を見てみる。

Ubuntu aptのミラーサーバーを変更していないが、どうやらarm64のミラーはほとんど存在しないらしい。一応、こういう情報もあるにはある。

https://x.com/Cememer_Sweet/status/1811971800299110895

terurouterurou

WSL2 Ubuntuに最新版のHaxeをインストール。

$ sudo add-apt-repository ppa:haxe/releases -y
$ sudo apt-get update
$ sudo apt-get install haxe -y
$ mkdir ~/haxelib && haxelib setup ~/haxelib

https://haxe.org/download/linux/ に書いてある手順の通り。

terurouterurou

VS CodeのWSL + Haxe環境をセットアップをしつつ、並行して動作確認していく。

VS Codeのインストール。

$ winget install Microsoft.VisualStudioCode --override '/SILENT /mergetasks="!runcode,addcontextmenufiles,addcontextmenufolders"'

VS Code拡張 Remote Development をインストール。

$ code --install-extension ms-vscode-remote.vscode-remote-extensionpack

VS Codeを起動してWSLと接続する。
コマンドパレット Ctrl + Shirt +P から WSL: Connect to WSL を実行する。

VS CodeがWSLに接続されている状態で、Haxe関係のVS Code拡張をインストールする。これはVS CodeのExtensionsパネルからインストールしたので、コマンドから入るのかよくわからない…。

Haxe拡張はWSL側にインストールされている必要がある。VS Code上でこんな感じになってることを確認する。

VS Codeのターミナルから、動作検証で使うHaxeプロジェクト用のディレクトリを作成する(別にこの操作はWSLのターミナルで操作してもいい)。

$ mkdir test

VS Codeのコマンドパレットで WSL: Open Folder in WSL...を選択して、作成したディレクトリを選択する。

VS Code上で、次のように Main.hxbuild.hxml を作成する。

Main.hx

function main() {
    trace("hello WSL");   
}

build.hxml

--main Main
--interp

Haxe拡張がちゃんと動いていれば、この時点でVS Code側にプロジェクトが認識されているはず。

念のため、VS Codeのターミナル上で動作検証用のコードが動作するか確認する。

$ haxe build.hxml
Main.hx:2: hello
terurouterurou

Node.jsはNVSからインストールする。NVS のREADMEに書いてある通りの手順でセットアップする。

NVSのインストール

$ export NVS_HOME="$HOME/.nvs"
$ git clone https://github.com/jasongin/nvs "$NVS_HOME"
$ . "$NVS_HOME/nvs.sh" install

Node.js LTSバージョンのインストール

$ nvs add lts
$ nvs use lts
$ nvs link lts

動作確認

$ node -v

あとは必要に応じて、yarnやpnpmなどを追加でインストールする。

terurouterurou

WSLからgitのhttps認証をうまくやれるように設定する。

基本的には https://github.com/git-ecosystem/git-credential-manager/blob/main/docs/wsl.md#configuring-wsl-without-git-for-windows の手順通り。

まず、WSLではなくホスト側でgitをインストールする。

$ winget install Git.Git

Windows側でWSLの環境変数を設定する。

$ SETX WSLENV %WSLENV%:GIT_EXEC_PATH/wp

WSL側の .gitconfigcredential.helper の設定を追加する。git v2.39.0 以上の時は次のパスでよいらしいが、バージョンによって度々変更されてるらしいので、 設定する際は Microsoft Learnの手順 も確認したほうが良い。

$ git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"

Azure DevOpsを使ってる場合は、次も追加で設定する。

$ git config --global credential.https://dev.azure.com.useHttpPath true

これでWSL内から git clone した際に、Windows側の git-credential-manager が呼び出されるようになる。

terurouterurou

Git LFSを有効化する(使ってない場合は不要)。

$ sudo apt-get install git-lfs
$ git lfs install
terurouterurou

これで自分が使う範囲での基本的なHaxe/JS開発環境は構築できたので、手元の実プロジェクトをビルドしてみて、Snapdragon Xがどれぐらいのパフォーマンスを出すのか確認してみる。

  • Lenovo Yoga Slim 7x Gen 9 (Snapdragon X Elite X1E-78-100, RAM 32GB)
    • Minisforum UM790 PRO (Ryzen 7840HS, RAM64GB) と比較
  • Haxe/JS + esbuild + playwrightなプロジェクトのビルド~ユニットテストを実行

という感じの検証をしてみた。

雰囲気的には、パフォーマンス差がほぼない…。若干、Spapdragon Xの方が速いのでは…?

  • Snapdragon X Elite X1E-78-100の方がRyzen 7840HSよりも3-4%程度速い?
  • Playwrightを使ったテストでは若干Ryzen 7840HSの方が速い?
    • ただし、Ryzen 7840HSで使った方はWindowsネイティブで動かしてるのに対して、Snapdragon XはWSL2の上で動かしているので、そちらの影響も影響があるかも。

という感じだった。

CPU Monkey等のベンチマーク収集サイトでもほぼ同等という結果が出ているので、その通りという感じ。1世代古いとはいえエアフローがちゃんとしてる54WクラスのRyzenと、薄型ラップトップに組み込まれているTDP 23WクラスのSpapdragon X Eliteの最下位モデルが同等とは…。

ちなみにゲームが動くかも確認してみたが、

  • DMM Game Playerのウマ娘 : 動作しない(プロセスは立ち上がってはいるが…)
  • Steam版ウイニングポスト 10 2024 : ゲームプレイに支障がないレベルで動作

という感じだった。ゲーム主体でSnapdragon Xを使うことはないと思うが、参考程度に。

このスクラップは2ヶ月前にクローズされました