web-dev-qa-db-ja.com

Rakuの複数のバックエンドの構築が失敗する

https://github.com/rakudo/rakudoREADME.mdを読んだ後、具体的には here で、rakudoの複数のバックエンドを構築することに取り組みました。

そのために64ビットのUbuntu 20.04を使用しました。最初にインストールした

  • build essentiallibencode-Perl
  • default-jdkは、rakudoをコンパイルするためのマシンを準備します。

リポジトリのクローンを作成した後、Perl Configure.pl --backends=moar,jvm --prefix=/usrコマンドを実行すると、次のエラーが発生します。

root@1145eac1ed77:/rakudo# Perl Configure.pl --backends=moar,jvm --prefix=/usr
No pre-existing installed file found at /usr/bin/nqp-m
No pre-existing installed file found at /usr/bin/nqp-j
No pre-existing installed file found at /usr/bin/nqp-m
No pre-existing installed file found at /usr/bin/nqp-j
Use of uninitialized value $str in substitution (s///) at /rakudo/3rdparty/nqp-configure/lib/NQP/Config.pm line 1420.
Use of uninitialized value $str in substitution (s///) at /rakudo/3rdparty/nqp-configure/lib/NQP/Config.pm line 1421.
Use of uninitialized value in concatenation (.) or string at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 361.
Use of uninitialized value in quotemeta at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 371.
Use of uninitialized value in substitution (s///) at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 371.
Use of uninitialized value in substitution (s///) at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 371.
Use of uninitialized value in quotemeta at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 373.
Use of uninitialized value in sprintf at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 414.
Redundant argument in sprintf at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 414.
Use of uninitialized value in concatenation (.) or string at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 423.
Use of uninitialized value in concatenation (.) or string at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 423.
Using /usr/bin/nqp-m (version  / MoarVM ).
Use of uninitialized value in sprintf at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 428.
Redundant argument in sprintf at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 428.
===SORRY!===
  jvm::runtime.jars value not available from /usr/bin/nqp-j --show-config.

  To automatically clone (git) and build a copy of NQP 2020.02.1-154-ga7b0b7be2,
  try re-running Configure.pl with the '--gen-moar' option.
  Or, use '--prefix=' to explicitly specify the path where the NQP and MoarVM
  executables can be found that are use to build Rakudo. at /rakudo/3rdparty/nqp-configure/lib/NQP/Config.pm line 192.
 at /rakudo/3rdparty/nqp-configure/lib/NQP/Config.pm line 34.
        NQP::Config::__ANON__("===SORRY!===\x{a}  jvm::runtime.jars value not available from /us"...) called at /rakudo/3rdparty/nqp-configure/lib/NQP/Config.pm line 192
        NQP::Config::sorry(NQP::Config::Rakudo=HASH(0x55e4cb9c5258), "jvm::runtime.jars value not available from /usr/bin/nqp-j --s"..., "\x{a}To automatically clone (git) and build a copy of NQP 2020.02"..., "try re-running Configure.pl with the '--gen-moar' option.", "Or, use '--prefix=' to explicitly specify the path where the "..., "executables can be found that are use to build Rakudo.") called at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 576
        NQP::Config::Rakudo::post_active_backends(NQP::Config::Rakudo=HASH(0x55e4cb9c5258)) called at /rakudo/3rdparty/nqp-configure/lib/NQP/Config.pm line 660
        NQP::Config::configure_active_backends(NQP::Config::Rakudo=HASH(0x55e4cb9c5258)) called at /rakudo/tools/lib/NQP/Config/Rakudo.pm line 473
        NQP::Config::Rakudo::configure_active_backends(NQP::Config::Rakudo=HASH(0x55e4cb9c5258)) called at Configure.pl line 102

どうすれば修正できますか?

Perl Configure.pl --backends=ALLコマンドのALLが何を指しているのか疑問に思いました。

プロジェクトがありました(まだそこに統合されていると思います)Rakudo.jshere および here =。これはJavascriptバックエンドですか? ALLmoarjvmJavascriptバックエンドを意味しますか?

6
Suman Khanal

@ugexeで指摘されているように、コマンドに--gen-moarがありませんでした。

将来の参考のために、Rakudoをビルドしようと繰り返し試みた後に学んだことを文書化します。

MoarおよびJVMバックエンド


moarおよびjvmバックエンドを構築するには、依存関係が必要です

apt-get install -y gcc \
        libc6-dev \
        libencode-Perl \
        wget \
        libzstd-dev \
        default-jdk \
        make

そして、コマンドを実行します

Perl Configure.pl --prefix=/usr --gen-moar --backends=moar,jvm --relocatable

構築するため。ビルドが成功すると、moarバックエンド用のrakudo-mrakudo-gdb-mrakudo-valgrind-mrakudo-lldb-m、およびjvmバックエンド用のrakudo-jrakudo-debug-jが表示されます。

JavaScriptとMoarのバックエンド


孤立したJavaScriptバックエンドを構築することはできません。 jsバックエンドをビルドするとき moarもビルドする必要があります 。したがって、JavaScriptバックエンドをビルドするには、ビルドするコマンドは次のようになります。

Perl Configure.pl --prefix=/usr --gen-moar --backends=moar,js --relocatable

javascriptバックエンドをビルドするための追加の依存関係は、nodejsg++、およびnpmの可用性です。

apt-get install gcc g++ \
        libc6-dev \
        libencode-Perl \
        wget \
        libzstd-dev \
        nodejs \
        npm \
        make

しかし、javascriptバックエンドの構築中に、次のエラーが発生しました。

'/usr/bin/Perl' tools/build/npm-install-or-link.pl . src/vm/js/nqp-runtime nqp-runtime 
Can't exec "npm": No such file or directory at tools/build/npm-install-or-link.pl line 18.
=== SORRY! === `npm install /rakudo/nqp/src/vm/js/nqp-runtime` failed with exit code -1 (72057594037927935)
make: *** [Makefile:852: js-deps] Error 255

検索 はそれを明らかにします

Nqp-jsを開発している場合は、-linkオプションを渡して、nqp-runtimeをインストールする代わりにリンクするように設定することができます。

孤立したNQPをビルドしても問題はありません。 rakudoのビルドを自動化しながらnpmリンクする方法がわかりません。

すべてのバックエンド


ALLは確かにmoarjvmjsバックエンドを意味することを学びました。これは、コマンドを実行すると確認されます

Perl Configure.pl --prefix=/usr --gen-moar --backends=ALL --relocatable

端末で次のように実行されていることがわかります。

/usr/bin/Perl Configure.pl --prefix=/usr --make-install --git-protocol=https --relocatable --no-ignore-errors --silent-build --no-force-rebuild --backends=moar,jvm,js --gen-moar

これの依存関係は

apt-get install gcc g++ \
        libc6-dev \
        libencode-Perl \
        wget \
        libzstd-dev \
        default-jdk \
        nodejs \
        npm \
        make

上記のnpm linkの問題を解決することでJavascriptバックエンドを正常に構築できた場合、moarjvmjavascriptのすべてのバックエンドを構築できると確信しています。

したがって、ここに残された問題は、rakudoの構築中にnpmリンクする方法です。誰かの専門家の助けがこの問題を解決することを願っています。

7
Suman Khanal