💍

Onyx をソースからビルド

2024/01/04に公開

先に結論

git clone してきて ↓ でいけた。あくまで自分の環境では。

source ./settings.sh && ONYX_RUNTIME_LIBRARY=ovmwasm ./build.sh compile install

Onyx のインストール

https://zenn.dev/hatappo/articles/f1ecb49715ea6c

上の記事では https://get.onyxlang.io に置かれているインストールスクリプトを使ってインストールした[1]

Onyx をソースからビルド

この記事ではソースからビルドする。手順は https://onyxlang.io/docs/install#source に載っている。

git clone https://github.com/onyx-lang/onyx
cd ./onyx
source settings.sh
./build.sh compile

libwasmer.a というアセンブリファイルがないというエラーになる。

$ ./build.sh compile                             
Compiling onyx
clang: error: no such file or directory: '~/.wasmer/lib/libwasmer.a'

libwasmer.a はヘッドレスの軽量 wasmer コンパイラらしいけどどうやってインストールするのかわからない。

とりあえず build.sh を読むと ONYX_RUNTIME_LIBRARY 環境変数の値によって、コンパイラでビルドするかインタプリタでビルドするか分岐しているっぽい様子が伺える。

./build.sh
compile_all() {
    if [ "$ONYX_RUNTIME_LIBRARY" = "ovmwasm" ]; then
        cd interpreter
        ./build.sh $1
        cd ..
    fi

    cd compiler
    ./build.sh $1
    cd ..

    if [ ! -z ${ONYX_RUNTIME_LIBRARY+x} ]; then
        cd runtime
        ./build.sh $1
        cd ..
    fi
}
./compiler/build.sh
    case "${ONYX_RUNTIME_LIBRARY}" in
        ovmwasm)
            LIBS="../shared/lib/$ONYX_ARCH/lib/libovmwasm.a $LIBS"
            FLAGS="$FLAGS -DUSE_OVM_DEBUGGER"
            ;;

        wasmer)
            LIBS="$(wasmer config --libdir)/libwasmer.a $LIBS"
            ;;

        # Used by MacOS ARM64 cross compilation
        wasmer-custom)
            LIBS="$WASMER_LIB_PATH/libwasmer.a $LIBS"
            ;;

        *)
            echo "Unknown WebAssembly runtime '$ONYX_RUNTIME_LIBRARY'. Aborting.";
            exit 1
            ;;
    esac

ONYX_RUNTIME_LIBRARY="ovmwasm"[2] でビルドすれば libwasmer.a は不要そう。この設定は、ビルド手順の途中で読み込んでいる ./settings.sh のなかでもコメントアウトで書いてある。

$ ONYX_RUNTIME_LIBRARY=ovmwasm ./build.sh compile
Compiling ovmwasm to ../shared/lib/darwin_arm64/lib/libovmwasm.a
Compiling onyx
Compiling onyx_runtime.dylib

./compiler/onyx にバイナリがビルドされる。

$ ./compiler/onyx version                        
Onyx toolchain version v0.1.8
Built on Wed Jan  3 08:21:31 2024
Runtime: ovmwasm

インストール

$ ./build.sh install
Installing on 'Darwin ...(省略)... arm64'
Installing core libs
Installing core tools
Installing runtime library
Installing to $HOME/.onyx

適宜 $HOME/.onyx/bin にパスを通すなりすればOK。

ビルド時間

だいたい7秒前後。

$ time /bin/bash -c 'source ./settings.sh && ONYX_RUNTIME_LIBRARY=ovmwasm ./build.sh compile install'
# ...(省略)...
/bin/bash -c   6.53s user 0.95s system 85% cpu 8.712 total

まとめ

libwasmer.a がなくてエラーになるので ovmwasm でビルドしたら一応ビルドできた。

うーん、、 wasmer 自体をもっと勉強しようと思いました。

その他参考

脚注
  1. この URL は https://github.com/onyx-lang/onyx リポジトリの dev ブランチの bin/install.sh にリダイレクトされる。自分が確認したときは、このファイル自体に masterdev の間でとくに差分はなかった。 ↩︎

  2. ovm は Onyx Virtual Machine の略で、wasm や wasmer とは異なる Onyx 独自の処理系なのだと思う。ovm は wasmer より少し遅く、しかしデバッグ実行が使える。 ↩︎

Discussion