Open8

servo/mozjs

mikimiki

/src/lib.rs/build/jsapi.rs → (/build.rsbuild_jsapi_bindings内で生成?) /src/jsglue.hpp/mozjs/js/src/jsapi.h (とか) の順番でインクルードしてるっぽい?

mikimiki

/build.rsbuild_jsapi関数内でmakeコマンドを使ってc++ファイルをコンパイルしている?

170-177行目
let result = cmd // makeコマンド
    .args(&["-R", "-f"]) // -R 暗黙のルールをクリア -f ファイルを指定
    .arg(cargo_manifest_dir.join("makefile.cargo")) // ファイル名
    .current_dir(&build_dir) // "出力フォルダ/build" を指定
    .env("SRC_DIR", &cargo_manifest_dir.join("mozjs")) // "/mozjs" をソースに指定
    .env("NO_RUST_PANIC_HOOK", "1")
    .status() // コマンドを実行
    .expect("Failed to run `make`");
mikimiki

/makefile.cargo内188行目と合わせると/mozjs/js/srcにソースファイルがあることになりそう

188行目
JSSRC := '$(SRC_DIR)'/js/src
mikimiki

Cargo.toml

Cargo.toml
[package]
build = "build.rs"

ビルド時に実行するスクリプトファイル

Cargo.toml
[dependencies]
encoding_c = "0.9.6"
encoding_c_mem = "0.2.5"
libc = "0.2"
libz-sys = "1.0"

依存しているクレートとそのバージョン

mikimiki

build.rs

main 関数が実行される

  • 環境変数のセット
  • $OUT_DIR/buildディレクトリが作られる
    ここにcファイルのコンパイル結果が入るはず
  • build_jsapi 関数呼び出し
  • build_jsglue 関数呼び出
  • build_jsapi_bindings 関数呼び出し
  • cargo:rerun-if-changed を設定
    設定したファイルが変更された時、再コンパイルされる
mikimiki

build_jsapi 関数

  • make コマンド
    mozmake $MAKE gmake makeのどれか
  • $OUT_DIR/build/mozjs ディレクトリをビルドする
  • C++ライブラリをリンク
mikimiki

build_jsglue 関数

  • cc
  • $OUT_DIR/build/js/src/js-confdefs.h
  • $OUT_DIR/build/dist/include
  • $OUT_DIR/build/js/src
    たぶん build_jsapi で出力される
  • /src/jsglue.cpp$OUT_DIR/build/glue/jsglue にビルドして出力