Создание нескольких бэкэндов для Raku не удается - PullRequest
5 голосов
/ 25 апреля 2020

После прочтения README.md в https://github.com/rakudo/rakudo конкретно здесь я рискнул создать несколько бэкэндов для 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

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

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

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

1 Ответ

4 голосов
/ 26 апреля 2020

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


Вы не можете создать изолированный javascript backend. При сборке js бэкэнда вы также должны собрать moar. Таким образом, для сборки javascript backend команда для сборки будет

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

Дополнительные зависимости для сборки javascript backend - это наличие 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 вместо установленного

Несмотря на то, что проблем со сборкой нет 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 связать при создании rakudo !

...