perlce
СОДЕРЖАНИЕ
ИМЯ
perlce - Perl для WinCE
Компиляция Perl для WinCE
ПРЕДУПРЕЖДЕНИЕ
Большая часть этого документа устарела и требует обновления, переписывания или удаления. Процесс сборки был переработан во время разработки версии 5.19, и текущие инструкции на тот момент приведены в "ТЕКУЩИХ ИНСТРУКЦИЯХ ПО СБОРКЕ"; предыдущие инструкции по сборке, которые в значительной степени устарели, но могут содержать некоторую полезную информацию, оставлены в "СТАРЫХ ИНСТРУКЦИЯХ ПО СБОРКЕ", но действительно нуждаются в удалении после извлечения любой полезной информации.
ОПИСАНИЕ
В этом файле приведены инструкции по сборке Perl 5.8 и выше для WinCE. Пожалуйста, ознакомьтесь с условиями распространения этого программного обеспечения.
Общие пояснения по кросс-компиляции WinCE
-
Строится miniperl. Это единственный исполняемый файл (без DLL), предназначенный для работы на Win32, и он будет облегчать оставшийся процесс сборки; все скомпилированные двоичные файлы после него являются сторонними и не должны запускаться локально.
miniperl компилируется с помощью ./win32/Makefile; это часть обычного процесса сборки, вызываемого как зависимость от wince/Makefile.ce
-
После компиляции miniperl вызывается configpm для создания нужного Config.pm в нужном месте и соответствующего Cross.pm.
В отличие от сборки Win32, miniperl не будет иметь Config.pm хоста в пределах досягаемости; вместо этого он будет использовать Config.pm изнутри каталогов кросс-компиляции.
Файл Cross.pm очень прост: для данного кросс-архитектурного места в @INC путь, где находятся модули Perl, и правильный Config.pm в этом месте.
При этом
miniperl -Ilib -MConfig -we 1должен сообщить об ошибке, потому что он не может найти Config.pm. Если он не выдаёт ошибку — подставляется неправильный Config.pm, и полученные двоичные файлы будут некорректными.miniperl -MCross -MConfig -we 1должен работать нормально, и он предоставит правильный Config.pm для дальнейшей компиляции. -
Во время этапа сборки расширений вызывается скрипт ./win32/buildext.pl, который, в свою очередь, входит в подкаталоги ./ext и выполняет сборку каждого расширения по очереди.
Все вызовы Makefile.PL предоставляются с
-MCrossдля включения кросс-компиляции.
ТЕКУЩИЕ ИНСТРУКЦИИ ПО СБОРКЕ
(Эти инструкции предполагают, что хост — 32-разрядная Windows. Если вы используете 64-разрядную Windows, то замените "C:\Program Files" на "C:\Program Files (x86)" во всех местах.)
1. Установите EVC4 из
http://download.microsoft.com/download/c/3/f/c3f8b58b-9753-4c2e-8b96-2dfe3476a2f7/eVC4.exe Используйте указанный ключ на
http://download.cnet.com/Microsoft-eMbedded-Visual-C/3000-2212_4-10108490.html?tag=bc Инсталлятор старый и имеет несколько ошибок в пути. Вам придется исправить их позже. В основном, некоторые вещи попадают в "C:/Program Files/Windows CE Tools", другие в "C:/Windows CE Tools", независимо от пути, указанного установщику (по умолчанию будет "C:/Windows CE Tools"). Для продолжения установки потребуется перезагрузка. Также, при установке EVC4 могут быть перезаписаны ассоциации .c и .h с Visual Studio. Предупрежден — значит вооружен.
2. Загрузите celib с GitHub (используя "Скачать ZIP") по адресу
https://github.com/bulk88/celib Распакуйте его в путь без пробелов, но не в исходный код Perl. Я называю этот каталог "celib-palm-3.0", но в снимке GitHub он будет называться "celib-master". Создайте копию папки "wince-arm-pocket-wce300-release" и переименуйте копию в "wince-arm-pocket-wce400". Это хак, чтобы мы могли скомпилировать двоичный файл CE 4.0, связав asm ARM CE 3.0; линкер не обращает внимания. Windows Mobile/WinCE совместимы с машинным кодом, как и настольные Windows.
3. Загрузите console-1.3-src.tar.gz по адресу
http://sourceforge.net/projects/perlce/files/PerlCE%20support%20files/console/ Распакуйте его в путь без пробелов, но не в исходный код Perl. Не распаковывайте его в ту же папку, что и celib. Создайте копию папки "wince-arm-pocket-wce300" и переименуйте копию в "wince-arm-pocket-wce400". Это хак, чтобы мы могли скомпилировать двоичный файл CE 4.0, связав asm ARM CE 3.0; линкер не обращает внимания. Windows Mobile/WinCE совместимы с машинным кодом, как и настольные Windows.
4. Откройте командную строку, выполните свою обычную командную строку для установки среды для настольной компиляции Visual C, перейдите в каталог исходных кодов Perl, перейдите в win32/, заполните Makefile и выполните "nmake all" для компиляции настольного Perl.
5. Откройте win32/Makefile.ce в текстовом редакторе и выполните что-то подобное следующей правке.
-CELIBDLLDIR = h:\src\wince\celib-palm-3.0
-CECONSOLEDIR = h:\src\wince\w32console
+CELIBDLLDIR = C:\sources\celib-palm-3.0
+CECONSOLEDIR = C:\sources\w32console Также измените
!if "$(MACHINE)" == ""
MACHINE=wince-arm-hpc-wce300
#MACHINE=wince-arm-hpc-wce211
#MACHINE=wince-sh3-hpc-wce211
#MACHINE=wince-mips-hpc-wce211
#MACHINE=wince-sh3-hpc-wce200
#MACHINE=wince-mips-hpc-wce200
#MACHINE=wince-arm-pocket-wce300
#MACHINE=wince-mips-pocket-wce300
#MACHINE=wince-sh3-pocket-wce300
#MACHINE=wince-x86em-pocket-wce300
#MACHINE=wince-mips-palm-wce211
#MACHINE=wince-sh3-palm-wce211
#MACHINE=wince-x86em-palm-wce211
#MACHINE=wince-x86-hpc-wce300
#MACHINE=wince-arm-pocket-wce400
!endif на
!if "$(MACHINE)" == ""
#MACHINE=wince-arm-hpc-wce300
#MACHINE=wince-arm-hpc-wce211
#MACHINE=wince-sh3-hpc-wce211
#MACHINE=wince-mips-hpc-wce211
#MACHINE=wince-sh3-hpc-wce200
#MACHINE=wince-mips-hpc-wce200
#MACHINE=wince-arm-pocket-wce300
#MACHINE=wince-mips-pocket-wce300
#MACHINE=wince-sh3-pocket-wce300
#MACHINE=wince-x86em-pocket-wce300
#MACHINE=wince-mips-palm-wce211
#MACHINE=wince-sh3-palm-wce211
#MACHINE=wince-x86em-palm-wce211
#MACHINE=wince-x86-hpc-wce300
MACHINE=wince-arm-pocket-wce400
!endif , чтобы wince-arm-pocket-wce400 был типом MACHINA.
6. Используйте текстовый редактор, чтобы открыть "C:\Program Files\Microsoft eMbedded C++ 4.0\EVC\WCE400\BIN\WCEARMV4.BAT". Поищите
if "%SDKROOT%"=="" set SDKROOT=... В новой установке это "C:\Windows CE Tools". Перейдите в "C:\Windows CE Tools" в проводнике файлов и проверьте, существует ли "C:\Windows CE Tools\wce400\STANDARDSDK\Include\Armv4" на вашем диске. Если нет, SDKROOT нужно изменить на "C:\Program Files\Windows CE Tools".
Перейдите в celib-palm-3.0\inc\cewin32.h, найдите
typedef struct _ABC { и раскомментируйте структуру.
7. Откройте другую командную строку, убедитесь, что PLATFORM не назначено ничему, если вы не знаете, что делаете (чтобы правильное значение по умолчанию устанавливалось следующей командой), и выполните "C:\Program Files\Microsoft eMbedded C++ 4.0\EVC\WCE400\BIN\WCEARMV4.BAT"
8. В командной строке WinCE, созданной с помощью WCEARMV4.BAT, перейдите в каталог исходных кодов Perl, перейдите в win32/ и выполните "nmake -f Makefile.ce".
9. Интерпретатор Perl для ARM (perl519.dll и perl.exe) будет находиться где-то в "C:\perl519\src\win32\wince-arm-pocket-wce400", а DLL XS в "C:\perl519\src\xlib\wince-arm-hpc-wce400\auto".
Для проверки успешности на компьютере-хосте выполните "dumpbin /headers wince-arm-pocket-wce400\perl.exe" из папки win32/ и найдите "machine (ARM)" в значении FILE HEADER и "subsystem (Windows CE GUI)" в значении OPTIONAL HEADER VALUES.
СТАРЫЕ ИНСТРУКЦИИ ПО СБОРКЕ
Этот раздел описывает шаги, которые необходимо выполнить для сборки PerlCE. Дополнительную информацию о сборке perl для WinCE можно найти на сайте http://perlce.sourceforge.net и некоторых предварительно собранных двоичных файлах.
Инструменты и SDK
Для компиляции вам понадобится следующее:
-
Microsoft Embedded Visual Tools
-
Microsoft Visual C++
-
Исходные коды celib от Рейнера Кёхеля
-
Исходные коды консоли от Рейнера Кёхеля
Необходимые исходные файлы можно загрузить по адресу http://perlce.sourceforge.net
Make
Обычно вам нужно только отредактировать ./win32/ce-helpers/compile.bat, чтобы отразить вашу систему, и запустить его.
Файл ./win32/ce-helpers/compile.bat фактически является оболочкой для вызова nmake -f makefile.ce с соответствующими параметрами, и он принимает дополнительные параметры и передает их команде nmake в качестве дополнительных аргументов. Вы должны передать цель таким образом.
Для подготовки дистрибутива вам необходимо сделать следующее:
-
перейдите в подкаталог ./win32
-
отредактируйте файл ./win32/ce-helpers/compile.bat
-
запустите compile.bat
-
запустите compile.bat dist
Makefile.ce имеет макрос CROSS_NAME, и он используется далее для ссылки на вашу схему кросс-компиляции. Вы можете назначить ему имя, но это необязательно, потому что по умолчанию ему присваивается имя после имени вашей конфигурации машины, например, "wince-sh3-hpc-wce211", и этого достаточно для различения различных сборок в одно и то же время. Этот параметр может быть полезен для нескольких различных сборок на одной платформе для выполнения, например, многопотоковой сборки. В следующем примере мы предполагаем, что все необходимые переменные среды правильно установлены для кросс-компилятора C (специальный файл *.bat идеально подойдет для этой цели) и в вашем compile.bat правильно установлен параметр "MACHINE", например, wince-mips-pocket-wce300.
compile.bat
compile.bat dist
compile.bat CROSS_NAME=mips-wce300-thr "USE_ITHREADS=define" ^
"USE_IMP_SYS=define" "USE_MULTI=define"
compile.bat CROSS_NAME=mips-wce300-thr "USE_ITHREADS=define" ^
"USE_IMP_SYS=define" "USE_MULTI=define" dist Если всё пройдёт успешно и не будет ошибок при сборке, вы получите два независимых дистрибутива: wince-mips-pocket-wce300 и mips-wce300-thr.
Цель dist подготавливает набор файлов дистрибутива. Цель zipdist выполняет то же самое, что и dist, но дополнительно сжимает файлы дистрибутива в архив zip.
ПРИМЕЧАНИЕ: во время сборки может быть создано несколько (или одно) Config.pm для кросс-компиляции («сторонние» Config.pm), и они скрываются внутри ../xlib/$(CROSS_NAME) вместе с другими вспомогательными файлами, но, и это важно, не должно быть Config.pm для хост-miniperl. Если во время процесса сборки появится ошибка, что perl не может найти Config.pm где-то, это означает, что что-то пошло не так. Скорее всего, вы забыли указать кросс-компиляцию при вызове miniperl.exe к Makefile.PL. При компиляции расширения для кросс-компиляции ваша команда должна выглядеть следующим образом:
..\miniperl.exe -I..\lib -MCross=mips-wce300-thr Makefile.PL или просто
..\miniperl.exe -I..\lib -MCross Makefile.PL для ссылки на последнюю созданную кросс-компиляцию.
Все вопросы, связанные со сборкой для устройств WinCE, можно задать на почтовом списке perlce-user@lists.sourceforge.net.
Использование Perl на WinCE
ОПИСАНИЕ
PerlCE в настоящее время связан с простым окном консоли, поэтому он также работает на устройствах, не являющихся HPC.
Простая реализация stdio создаёт файлы stdin.txt, stdout.txt и stderr.txt, поэтому вы можете их проверить, если у вашей консоли ограниченное число столбцов.
Если код возврата не равен нулю, появляется сообщение в диалоговом окне, в противном случае консоль закрывается, поэтому вам может потребоваться перехватить выход с кодом 0 в вашей программе, чтобы увидеть любой вывод.
stdout/stderr теперь записываются в файлы /perl-stdout.txt и /perl-stderr.txt.
PerlIDE удобен для работы с perlce.
ОГРАНИЧЕНИЯ
Нет функций fork(), pipe(), popen() и т. п.
ОКРУЖЕНИЕ
Все переменные окружения должны храниться в HKLM\Environment в виде строк. Они считываются при запуске процесса.
- PERL5LIB
-
Обычный путь к библиотекам Perl (список, разделённый символами «;»).
- PATH
-
Список исполняемых файлов (разделённый символами «;»).
- TMP
-
- Временная директория.
- UNIXROOTPATH
-
- Корневой каталог для доступа к некоторым специальным файлам, например, /dev/null, /etc/services.
- ROWS/COLS
-
- Строки/столбцы для консоли.
- HOME
-
- Домашняя директория.
- CONSOLEFONTSIZE
-
- Размер шрифта консоли.
Вы можете установить эти значения с помощью cereg.exe, редактора реестра (удаленного) или через PerlIDE.
РЕЕСТР
Чтобы запустить perl двойным щелчком по файлу исходного кода perl, необходимо создать соответствующие записи в HKCR (см. ce-helpers/wince-reg.bat). Сообщается, что cereg.exe (который необходимо выполнить на настольном ПК с ActiveSync) не работает на некоторых устройствах. Вам необходимо создать записи реестра вручную с помощью редактора реестра.
XS
Встроенные методы Win32:
newXS("Win32::GetCwd", w32_GetCwd, file);
newXS("Win32::SetCwd", w32_SetCwd, file);
newXS("Win32::GetTickCount", w32_GetTickCount, file);
newXS("Win32::GetOSVersion", w32_GetOSVersion, file);
newXS("Win32::IsWinNT", w32_IsWinNT, file);
newXS("Win32::IsWin95", w32_IsWin95, file);
newXS("Win32::IsWinCE", w32_IsWinCE, file);
newXS("Win32::CopyFile", w32_CopyFile, file);
newXS("Win32::Sleep", w32_Sleep, file);
newXS("Win32::MessageBox", w32_MessageBox, file);
newXS("Win32::GetPowerStatus", w32_GetPowerStatus, file);
newXS("Win32::GetOemInfo", w32_GetOemInfo, file);
newXS("Win32::ShellEx", w32_ShellEx, file); ОШИБКИ
Открытие файлов для чтения и записи в настоящее время не поддерживается, если они используют stdio (обычные дескрипторы файлов perl).
Если вы обнаружите ошибки или если это не работает на вашем устройстве, отправьте письмо по адресу ниже. Пожалуйста, укажите подробную информацию о вашем устройстве (процессор, версия ОС, тип устройства (hpc/palm/pocket)) и дату скачиваемых файлов.
УСТАНОВКА
В настоящее время инструкции по установке находятся по адресу http://perlce.sourceforge.net/.
После установки и тестирования процессы стабилизируются, информация станет более точной.
БЛАГОДАРНОСТИ
В качестве эталона использовался порт для Win32.
История порта WinCE
- 5.6.0
-
Изначальный порт perl для WinCE. Он был выполнен в отдельной директории под названием wince. Этот порт был основан на содержимом директории ./win32. miniperl не был скомпилирован, пользователю необходимо иметь HOST perl и правильно отредактировать makefile.ce, чтобы отразить это.
- 5.8.0
-
Порт WinCE сохранялся в той же директории ./wince, и wince/Makefile.ce использовался для вызова системного компилятора, чтобы создать HOST miniperl, который затем облегчает процесс кросс-компиляции. Добавлена поддержка сборки расширений.
- 5.9.4
-
Две директории ./win32 и ./wince были объединены, поэтому процесс сборки perlce выполняется в директории ./win32.
АВТОРЫ
- Rainer Keuchel <coyxc@rainer-keuchel.de>
-
предоставил начальный порт Perl, который, похоже, является наиболее важной работой, поскольку это был прорыв в переносе Perl. Большое спасибо и признательность Райнеру!
- Vadim Konovalov
-
обеспечил дальнейшую поддержку порта WinCE.
- Daniel Dragan
-
обновил процесс сборки во время разработки версии 5.19.
© 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.30.3/perlce