perlce
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- Компиляция Perl для WinCE
- Использование Perl на WinCE
- БЛАГОДАРНОСТИ
- История порта WinCE
- АВТОРЫ
НАЗВАНИЕ
perlce - Perl для WinCE
Компиляция Perl для WinCE
ПРЕДУПРЕЖДЕНИЕ
Большая часть этого документа устарела и нуждается в обновлении, переписывании или удалении. Процесс сборки был переработан во время разработки 5.19, и текущие инструкции на этот момент приведены в "ИНСТРУКЦИИ ПО ТЕКУЩЕЙ КОМПИЛЯЦИИ"; предыдущие инструкции по сборке в значительной степени устарели, но могут содержать некоторую полезную информацию, и они оставлены в "ИНСТРУКЦИИ ПО ПРЕЖНЕЙ КОМПИЛЯЦИИ", но после извлечения из них любой полезной информации их следует удалить.
ОПИСАНИЕ
В этом файле содержатся инструкции по компиляции Perl5.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 (используя "Download 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, используя ссылку на ассемблер ARM CE 3.0; линковщик не заботится об этом. Windows Mobile/WinCE совместимы в обратном порядке с машинным кодом, как и Desktop 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, используя ссылку на ассемблер ARM CE 3.0; линковщик не заботится об этом. Windows Mobile/WinCE совместимы в обратном порядке с машинным кодом, как и Desktop 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 был типом MACHINE.
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.
ИНСТРУКЦИИ ПО ПРЕЖНЕЙ КОМПИЛЯЦИИ
Этот раздел описывает шаги, которые нужно выполнить для сборки PerlCE. Дополнительную информацию о сборке Perl для WinCE вы можете найти на сайте http://perlce.sourceforge.net и некоторые предварительно скомпилированные двоичные файлы.
Инструменты и SDK
Для компиляции вам потребуются следующие инструменты:
-
Microsoft Embedded Visual Tools
-
Microsoft Visual C++
-
Исходные коды celib от Рейнера Кехеля
-
Исходные коды console от Рейнера Кехеля
Необходимые исходные файлы можно загрузить на сайте 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) вместе с другими вспомогательными файлами, но, что важно отметить, для хост-miniperl не должно быть Config.pm. Если во время процесса сборки вы получите ошибку о том, что 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, поэтому вы можете просмотреть их, если ваша консоль имеет ограниченное количество столбцов.
Если exitcode не равен нулю, появляется сообщение в диалоговом окне, в противном случае консоль закрывается, поэтому вам может потребоваться поймать выход с кодом 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).
Если вы обнаружили ошибки или программа не работает на вашем устройстве, отправьте письмо по указанному ниже адресу. Пожалуйста, укажите подробности о вашем устройстве (процессор, версия ce, тип устройства (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.28.3/perlce