Spec-Zone.ru › Perl 5.28

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`, поэтому если вы переходите в каталог с помощью `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–2020 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.28.3/perlqnx

Spec-Zone.ru

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