状況

macportsでとあるソフトウェアをインストールしようとした際に、依存関係(の依存関係(の依存関係…))によりrustがインストールされる途中でエラーが出てビルドが止まってしまって、お目当てのソフトがインストールできない。私自身はいまのところRustを使った開発とかはしていないのでRustのパフォーマンスはベストでなくてもいいが、とりあえずrustのビルドが正常に終わってもらわないと困る。さぁ、バービブ1!

テスト環境

    • macOS 12.6.2 Monterey

 

    • Mac mini (M1, 2020) Apple M1

 

    • macports-2.8.0

 

    rust @1.66.1_0

症状

-vオプションつきでビルドしてみる。

% port -v build rust 
--->  Computing dependencies for rust.
--->  Building rust
...
(途中省略)
...
<jemalloc>: Error allocating TSD
rustc exited with signal: 6 (SIGABRT)

command did not execute successfully: "(macportsのディレクトリ名)/var/macports/build/...(途中略).../rust/work/cargo-1.65.0-x86_64-apple-darwin/cargo/bin/cargo" "build" "--target" "x86_64-apple-darwin" "-Zcheck-cfg=names,values,output" "-Zbinary-dep-depinfo" "-j" "8" "-v" "-v" "--release" "--features" "panic-unwind backtrace" "--manifest-path" "(macportsのディレクトリ名)/var/macports/build/...(途中略).../rust/work/rustc-1.66.1-src/library/test/Cargo.toml" "--message-format" "json-render-diagnostics"
expected success, got: exit status: 101

というところで、cargoなるものを実行しようとしてランタイムエラーが出ている模様。jemallocというのがキーワードの様。

対処

Portfileを見ると、なんだか怪しそうな設定がある。Googleで調べてもこのへんで苦労している人がいる模様。

if { ${os.platform} eq "darwin" && ${os.major} > 14 } {
    configure.args-append   --set=rust.jemalloc
    if { ${os.arch} eq "arm" } {
        # specify the number of significant virtual address bits in jmalloc
        # the configure script calls cpuid, but it does not work properly on Rosetta 2
        # see https://github.com/jemalloc/jemalloc/issues/1997#issuecomment-1041589117
        build.env.x86_64-append JEMALLOC_SYS_WITH_LG_VADDR=48
    }
}

今のところRustのメモリアロケータにこだわりはないので、ここをざっくりコメントアウトしたら、一応ビルドは正常終了して、依存関係が満たされてお目当てのソフトウェアがインストールできたのだっ2!

--- ${macports_root}/var/macports/sources/rsync.macports.org/macports/release/tarballs/ports/lang/rust/Portfile.orig  2023-01-18 16:26:12.000000000 +0900
+++ ${macports_root}/var/macports/sources/rsync.macports.org/macports/release/tarballs/ports/lang/rust/Portfile       2023-01-18 19:06:01.000000000 +0900
@@ -137,15 +137,15 @@ configure.args-append       --disable-co
 if { ${os.platform} eq "darwin" && ${os.major} < 9 } {
     configure.args-append   --disable-rpath
 }
-if { ${os.platform} eq "darwin" && ${os.major} > 14 } {
-    configure.args-append   --set=rust.jemalloc
-    if { ${os.arch} eq "arm" } {
-        # specify the number of significant virtual address bits in jmalloc
-        # the configure script calls cpuid, but it does not work properly on Rosetta 2
-        # see https://github.com/jemalloc/jemalloc/issues/1997#issuecomment-1041589117
-        build.env.x86_64-append JEMALLOC_SYS_WITH_LG_VADDR=48
-    }
-}
+# if { ${os.platform} eq "darwin" && ${os.major} > 14 } {
+#     configure.args-append   --set=rust.jemalloc
+#     if { ${os.arch} eq "arm" } {
+#         # specify the number of significant virtual address bits in jmalloc
+#         # the configure script calls cpuid, but it does not work properly on Rosetta 2
+#         # see https://github.com/jemalloc/jemalloc/issues/1997#issuecomment-1041589117
+#         build.env.x86_64-append JEMALLOC_SYS_WITH_LG_VADDR=48
+#     }
+# }
 
 foreach arch ${muniversal.architectures} {
     set platform            [option triplet.${arch}]
バービブとは ↩

…のだっ! ↩

bannerAds