Spec-Zone.ru › Perl 5.36

perlqnx

СОДЕРЖАНИЕ

  • ИМЯ
  • ОПИСАНИЕ
    • Необходимое программное обеспечение для компиляции Perl на QNX4
    • Нерешённые проблемы с Perl на QNX4
    • Вспомогательные файлы QNX
    • Нерешённые проблемы с Perl под QNX6
    • Кросс-компиляция
      • Настройка среды кросс-компиляции
      • Подготовка целевой системы
      • Вызов Configure
  • АВТОР

ИМЯ

perlqnx - Perl версия 5 на QNX

ОПИСАНИЕ

Начиная с perl5.7.2 все тесты проходят под:

QNX 4.24G
Watcom 10.6 with Beta/970211.wcc.update.tar.F
socket3r.lib Nov21 1996.

Начиная с perl5.8.1 по крайней мере один тест всё ещё не проходит.

Некоторые тесты могут жаловаться при известных обстоятельствах.

См. ниже и hints/qnx.sh для получения дополнительной информации.

Под QNX 6.2.0 всё ещё несколько тестов не проходят. См. ниже и hints/qnx.sh для получения дополнительной информации.

Необходимое программное обеспечение для компиляции Perl на QNX4

Как и во многих портах unix, этот зависит от нескольких "стандартных" утилит unix, которые не обязательно являются стандартными для QNX4.

/bin/sh

Этот активно используется Configure и затем самим perl. Версия QNX4 подойдёт, но Configure откажется от 16-битной версии, поэтому если вы используете QNX 4.22, свяжите /bin/sh с /bin32/ksh

ar

Это стандартный unix-строитель библиотек. Мы используем wlib. С Watcom 10.6, когда wlib связан как "ar", он ведёт себя как ar и всё в порядке. В версии 9.5 требуется обертка. Одна включена в ../qnx

nm

Этот используется (необязательно) configure для вывода содержимого библиотек. Я сгенерирую функцию обертки на лету в каталоге UU.

cpp

Configure и perl нуждаются в способе вызова препроцессора C. Я создал простую оболочку для cc, которая делает нужное. Без этого Configure создаст свою собственную оболочку, которая работает, но она не обрабатывает некоторые аргументы командной строки, которые perl ей передаст.

make

Вам действительно нужен GNU make для компиляции. GNU make поставляется по умолчанию с QNX 4.23, но его можно получить из quics для более ранних версий.

Нерешённые проблемы с Perl на QNX4

Поддержка динамически связанных библиотек отсутствует в QNX4.

Если вы хотите скомпилировать с расширением Socket, вам нужен набор инструментов TCP/IP, и вам нужно убедиться, что -lsocket находит правильную копию socket3r.lib. Имейте в виду, что компилятор Watcom поставляется со служебной версией socket3r.lib, которая имеет очень мало функциональности. Также имейте в виду порядок, в котором wlink ищет каталоги библиотек. У вас может быть /usr/lib/socket3r.lib, указывающая на правильную библиотеку, но wlink может выбрать /usr/watcom/10.6/usr/lib/socket3r.lib вместо этого. Убедитесь, что оба указывают на правильную библиотеку, то есть /usr/tcptk/current/usr/lib/socket3r.lib.

Следующие тесты могут сообщать об ошибках под QNX4:

dist/Cwd/Cwd.t будет жаловаться, если `pwd` и cwd не дают одинаковые результаты. cwd вызывает `fullpath -t`, поэтому если вы cd `fullpath -t` перед запуском теста, он пройдёт.

lib/File/Find/taint.t будет жаловаться, если '.' находится в вашей переменной среды PATH. Тест PATH срабатывает, потому что cwd вызывает `fullpath -t`.

ext/IO/lib/IO/t/io_sock.t: Подтесты 14 и 22 пропущены из-за того, что функция чтения неблокирующего статуса сокета не реализована в TCP/IP QNX. Это было сообщено QNX, и это может работать с более поздними версиями TCP/IP.

t/io/tell.t: Подтест 27 не проходит. Мы всё ещё исследуем это.

Вспомогательные файлы QNX

Файлы в каталоге "qnx" являются:

qnx/ar

Скрипт, эмулирующий стандартную unix-утилиту архивирования (библиотеки). В Watcom 10.6 ar связан с wlib и предоставляет ожидаемый интерфейс. В Watcom 9.5 требуется функция обертки. Эта функция довольно грубая, но оказалась достаточной для компиляции perl.

qnx/cpp

Скрипт, предоставляющий функциональность препроцессора C. Configure может создать аналогичную оболочку, но она не обрабатывает все параметры командной строки, которые perl ей передаёт. Это можно разумно поместить в /usr/local/bin.

Нерешённые проблемы с Perl под QNX6

Следующие тесты всё ещё не проходят для Perl 5.8.1 под QNX 6.2.0:

op/sprintf.........................FAILED at test 91
lib/Benchmark......................FAILED at test 26

Это связано с ошибкой в функции printf библиотеки C. printf("'%e'", 0. ) производит '0.000000e+0', но ANSI требует '0.000000e+00'. QNX признала ошибку.

Кросс-компиляция

Perl поддерживает кросс-компиляцию для QNX NTO через Native Development Kit (NDK) для Blackberry 10. Это означает, что вы можете кросс-компилировать как для ARM, так и для x86 версий платформы.

Настройка среды кросс-компиляции

Вы можете загрузить NDK с http://developer.blackberry.com/native/downloads/.

См. http://developer.blackberry.com/native/documentation/cascades/getting_started/setting_up.html для инструкций по подготовке вашего устройства перед попыткой чего-либо ещё.

После установки NDK и настройки вашего устройства всё, что остаётся сделать, это настройка устройства и среды кросс-компиляции. Blackberry предоставляет скрипт, bbndk-env.sh (иногда называемый чем-то вроде bbndk-env_10_1_0_4828.sh), который можно использовать для этого. Однако есть небольшая загвоздка: скрипт изменяет PATH таким образом, что 'gcc' или 'ar' указывают на их эквиваленты кросс-компиляции, что нарушает процесс сборки.

Поэтому вместо этого вы захотите сделать что-то вроде этого:

$ orig_path=$PATH
$ source $location_of_bbndk/bbndk-env*.sh
$ export PATH="$orig_path:$PATH"

Помимо помещения кросс-компилятора и остальной части инструментария в вашу переменную среды PATH, это также предоставит переменную QNX_TARGET, которую мы передадим Configure через -Dsysroot.

Подготовка целевой системы

Весьма вероятно, что целевая система не имеет готового /tmp, поэтому, как правило, безопаснее сделать что-то вроде этого:

$ ssh $TARGETUSER@$TARGETHOST 'rm -rf perl; mkdir perl; mkdir perl/tmp'
$ export TARGETDIR=`ssh $TARGETUSER@$TARGETHOST pwd`/perl
$ export TARGETENV="export TMPDIR=$TARGETDIR/tmp; "

Позже мы передадим это Configure через -Dtargetenv

Вызов Configure

Если вы нацеливаетесь на устройство ARM (в настоящее время это включает в себя подавляющее большинство телефонов и планшетов), вы захотите передать -Dcc=arm-unknown-nto-qnx8.0.0eabi-gcc в Configure. В качестве альтернативы, если вы нацеливаетесь на x86-устройство или используете симулятор, предоставленный в NDK, вы должны указать -Dcc=ntox86-gcc вместо этого.

Пример вызова Configure выглядит примерно так:

./Configure -des -Dusecrosscompile \
    -Dsysroot=$QNX_TARGET          \
    -Dtargetdir=$TARGETDIR         \
    -Dtargetenv="$TARGETENV"       \
    -Dcc=ntox86-gcc                \
    -Dtarghost=... # Usual cross-compilation options

АВТОР

Norton T. Allen (allen@huarp.harvard.edu)

© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.36.0/perlqnx

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API