https://github.com/rakudo/rakudo でREADME.md
を読んだ後、具体的には here で、rakudoの複数のバックエンドを構築することに取り組みました。
そのために64ビットのUbuntu 20.04を使用しました。最初にインストールした
build essential
、libencode-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バックエンドですか? ALL
はmoar
、jvm
、Javascript
バックエンドを意味しますか?
@ugexeで指摘されているように、コマンドに--gen-moar
がありませんでした。
将来の参考のために、Rakudo
をビルドしようと繰り返し試みた後に学んだことを文書化します。
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-m
、rakudo-gdb-m
、rakudo-valgrind-m
、rakudo-lldb-m
、およびjvm
バックエンド用のrakudo-j
、rakudo-debug-j
が表示されます。
孤立したJavaScriptバックエンドを構築することはできません。 js
バックエンドをビルドするとき moar
もビルドする必要があります 。したがって、JavaScriptバックエンドをビルドするには、ビルドするコマンドは次のようになります。
Perl Configure.pl --prefix=/usr --gen-moar --backends=moar,js --relocatable
javascript
バックエンドをビルドするための追加の依存関係は、nodejs
、g++
、および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
は確かにmoar
、jvm
、js
バックエンドを意味することを学びました。これは、コマンドを実行すると確認されます
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バックエンドを正常に構築できた場合、moar
、jvm
、javascript
のすべてのバックエンドを構築できると確信しています。
したがって、ここに残された問題は、rakudoの構築中にnpmリンクする方法です。誰かの専門家の助けがこの問題を解決することを願っています。