Не удалось создать несколько бэкендов для Raku

Прочитав README.md на https://github.com/rakudo/rakudo, в частности здесь, я рискнул создать несколько бэкэндов для rakudo.

Для этого я использовал 64-битную Ubuntu 20.04. Сначала я установил

  • build essential, libencode-perl
  • default-jdk для подготовки машины к составлению ракудо.

После клонирования репо, когда я запускаю команду 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

Как это исправить?

Мне было интересно, что означает ALL в команде perl Configure.pl --backends=ALL.

Был проект (я думаю, он все еще объединен в мастер) Rakudo.js здесь и здесь . Это бэкэнд Javascript? Это ALL означает moar, jvm и Javascript бэкэнды?


person Suman Khanal    schedule 25.04.2020    source источник
comment
Вы не сделали —gen-nqp или —gen-moar, как в сообщении об ошибке, прямо указывающем, что вам нужно сделать, например, moarvm еще не установлен   -  person ugexe    schedule 26.04.2020


Ответы (1)


Как указал @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

для строительства. После успешной сборки вы получите rakudo-m, rakudo-gdb-m, rakudo-valgrind-m, rakudo-lldb-m для moar бэкэнда и rakudo-j, rakudo-debug-j для jvm бэкэнда.

Бэкенды Javascript и Moar


Вы не можете создать изолированную внутреннюю часть 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 проблем нет. Я не уверен, как использовать ссылку npm при автоматизации сборки rakudo.

ВСЕ бэкенды


Я узнал, что 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

Если бэкэнд Javascript может быть успешно построен путем решения npm link проблемы, описанной выше, я уверен, что все бэкенды: moar, jvm и javascript могут быть построены.

Таким образом, остается вопрос: как установить npm-ссылку при создании ракудо. Надеюсь, чья-то помощь специалистов решит эту проблему.

person Suman Khanal    schedule 26.04.2020
comment
Спасибо, что подробно описали свой прогресс. Таким образом, проблема заключается в том, как использовать npm-ссылку при создании ракудо! Хотя я почти ничего не знаю об этом, мне кажется, что было бы хорошо, если бы вы написали другой SO, который фокусируется на этой конкретной проблеме (возможно, со ссылкой на этот ответ или исходный вопрос). Если вы решили проблему с тех пор, как последний раз редактировали этот ответ, вы можете написать это как ответ. - person raiph; 03.05.2020
comment
@raiph Хотя я разобрался с moarvm и jvm бэкэндом, мне все еще не удалось собрать rakudo с javascript бэкэндом. Так что проблема решена лишь частично. - person Suman Khanal; 04.05.2020
comment
Тогда мне кажется, что было бы здорово, если бы вы опубликовали еще один SO, сосредоточенный на том, что не решено. Даже если какое-то время на него не будет ответов, я думаю, это лучше, чем вопрос, который будет несколько скрыт в конце вашего ответа. TIA, если у вас есть время, опубликовать его как отдельный вопрос. - person raiph; 04.05.2020
comment
@raiph Конечно, опубликует еще одну SO по созданию javascript бэкэнда. - person Suman Khanal; 14.05.2020