X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/464a08e7ffded0873dfb1539fceae173c22a1090..521aa9ac9d163b537d772e3e0de4add0df35ca80:/README.ce diff --git a/README.ce b/README.ce index a5d54a0..fdf636f 100644 --- a/README.ce +++ b/README.ce @@ -8,6 +8,16 @@ perlce - Perl for WinCE =head1 Building Perl for WinCE +=head2 WARNING + +B<< Much of this document has become very out of date and needs updating, +rewriting or deleting. The build process was overhauled during the 5.19 +development track and the current instructions as of that time are given +in L; the previous build instructions, which +are largely superseded but may still contain some useful information, are +left in L but really need removing after anything +of use has been extracted from them. >> + =head2 DESCRIPTION This file gives the instructions for building Perl5.8 and above for @@ -20,43 +30,174 @@ software is distributed. =item * -C is built. This is a single executable (without DLL), intended +F is built. This is a single executable (without DLL), intended to run on Win32, and it will facilitate remaining build process; all binaries built after it are foreign and should not run locally. -C is built using C<./win32/Makefile>; this is part of normal +F is built using F<./win32/Makefile>; this is part of normal build process invoked as dependency from wince/Makefile.ce =item * -After C is built, C is invoked to create right C +After F is built, F is invoked to create right F in right place and its corresponding Cross.pm. -Unlike Win32 build, miniperl will not have C of host within reach; -it rather will use C from within cross-compilation directories. +Unlike Win32 build, miniperl will not have F of host within reach; +it rather will use F from within cross-compilation directories. -File C is dead simple: for given cross-architecture places in @INC -a path where perl modules are, and right C in that place. +File F is dead simple: for given cross-architecture places in @INC +a path where perl modules are, and right F in that place. That said, C should report an error, because -it can not find C. If it does not give an error -- wrong C +it can not find F. If it does not give an error -- wrong F is substituted, and resulting binaries will be a mess. C should run okay, and it will provide right -C for further compilations. +F for further compilations. =item * -During extensions build phase, a script C<./win32/buldext.pl> is invoked, -which in turn steps in C<./ext> subdirectories and performs a build of +During extensions build phase, a script F<./win32/buildext.pl> is invoked, +which in turn steps in F<./ext> subdirectories and performs a build of each extension in turn. -All invokes of C are provided with C<-MCross> so to enable cross- +All invokes of F are provided with C<-MCross> so to enable cross- compile. =back -=head2 BUILD +=head2 CURRENT BUILD INSTRUCTIONS + +(These instructions assume the host is 32-bit Windows. If you're on 64-bit +Windows then change "C:\Program Files" to "C:\Program Files (x86)" throughout.) + +1. Install EVC4 from + + http://download.microsoft.com/download/c/3/f/c3f8b58b-9753-4c2e-8b96-2dfe3476a2f7/eVC4.exe + +Use the key mentioned at + + http://download.cnet.com/Microsoft-eMbedded-Visual-C/3000-2212_4-10108490.html?tag=bc + +The installer is ancient and has a few bugs on the paths it uses. You +will have to fix them later. Basically, some things go into "C:/Program +Files/Windows CE Tools", others go into "C:/Windows CE Tools" regardless +of the path you gave to the installer (the default will be "C:/Windows +CE Tools"). Reboots will be required for the installer to proceed. Also +.c and .h associations with Visual Studio might get overridden when +installing EVC4. You have been warned. + +2. Download celib from GitHub (using "Download ZIP") at + + https://github.com/bulk88/celib + +Extract it to a spaceless path but not into the perl build source. +I call this directory "celib-palm-3.0" but in the GitHub +snapshot it will be called "celib-master". Make a copy of the +"wince-arm-pocket-wce300-release" folder and rename the copy to +"wince-arm-pocket-wce400". This is a hack so we can build a CE 4.0 +binary by linking in CE 3.0 ARM asm; the linker doesn't care. Windows +Mobile/WinCE are backwards compatible with machine code like Desktop Windows. + +3. Download console-1.3-src.tar.gz from + + http://sourceforge.net/projects/perlce/files/PerlCE%20support%20files/console/ + +Extract it to a spaceless path but not into the perl build source. +Don't extract it into the same directory as celib. Make a copy of the +"wince-arm-pocket-wce300" folder and rename the copy to +"wince-arm-pocket-wce400". This is a hack so we can build a CE 4.0 +binary by linking in CE 3.0 ARM asm; the linker doesn't care. Windows +Mobile/WinCE are backwards compatible with machine code like Desktop Windows. + +4. Open a command prompt, run your regular batch file to set the environment +for desktop Visual C building, goto the perl source directory, cd into win32/, +fill out Makefile, and do a "nmake all" to build a Desktop Perl. + +5. Open win32/Makefile.ce in a text editor and do something similar to the +following patch. + + -CELIBDLLDIR = h:\src\wince\celib-palm-3.0 + -CECONSOLEDIR = h:\src\wince\w32console + +CELIBDLLDIR = C:\sources\celib-palm-3.0 + +CECONSOLEDIR = C:\sources\w32console + +Also change + + !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 + +to + + !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 + +so wince-arm-pocket-wce400 is the MACHINE type. + +6. Use a text editor to open "C:\Program Files\Microsoft eMbedded C++ +4.0\EVC\WCE400\BIN\WCEARMV4.BAT". Look for + + if "%SDKROOT%"=="" set SDKROOT=... + +On a new install it is "C:\Windows CE Tools". Goto +"C:\Windows CE Tools" in a file manager and see if "C:\Windows CE +Tools\wce400\STANDARDSDK\Include\Armv4" exists on your disk. If not +the SDKROOT need to be changed to "C:\Program Files\Windows CE Tools". + +Goto celib-palm-3.0\inc\cewin32.h, search for + + typedef struct _ABC { + +and uncomment the struct. + +7. Open another command prompt, ensure PLATFORM is not set to anything +already unless you know what you're doing (so that the correct default +value is set by the next command), and run "C:\Program Files\Microsoft +eMbedded C++ 4.0\EVC\WCE400\BIN\WCEARMV4.BAT" + +8. In the WinCE command prompt you made with WCEARMV4.BAT, goto the perl +source directory, cd into win32/ and run "nmake -f Makefile.ce". + +9. The ARM perl interpreter (perl519.dll and perl.exe) will be in something +like "C:\perl519\src\win32\wince-arm-pocket-wce400", with the XS DLLs in +"C:\perl519\src\xlib\wince-arm-hpc-wce400\auto". + +To prove success on the host machine, run +"dumpbin /headers wince-arm-pocket-wce400\perl.exe" from the win32/ folder +and look for "machine (ARM)" in the FILE HEADER VALUES and +"subsystem (Windows CE GUI)" in the OPTIONAL HEADER VALUES. + +=head2 OLD BUILD INSTRUCTIONS This section describes the steps to be performed to build PerlCE. You may find additional information about building perl for WinCE @@ -83,10 +224,10 @@ L =head3 Make -Normally you only need to edit C<./win32/ce-helpers/compile.bat> +Normally you only need to edit F<./win32/ce-helpers/compile.bat> to reflect your system and run it. -File C<./win32/ce-helpers/compile.bat> is actually a wrapper to call +File F<./win32/ce-helpers/compile.bat> is actually a wrapper to call C with appropriate parameters and it accepts extra parameters and forwards them to C command as additional arguments. You should pass target this way. @@ -95,9 +236,9 @@ To prepare distribution you need to do following: =over 4 -=item * go to C<./win32> subdirectory +=item * go to F<./win32> subdirectory -=item * edit file C<./win32/ce-helpers/compile.bat> +=item * edit file F<./win32/ce-helpers/compile.bat> =item * run compile.bat @@ -107,7 +248,7 @@ To prepare distribution you need to do following: =back -C has C macro, and it is used further to refer to +F has C macro, and it is used further to refer to your cross-compilation scheme. You could assign a name to it, but this is not necessary, because by default it is assigned after your machine configuration name, such as "wince-sh3-hpc-wce211", and this is enough @@ -115,13 +256,15 @@ to distinguish different builds at the same time. This option could be handy for several different builds on same platform to perform, say, threaded build. In a following example we assume that all required environment variables are set properly for C cross-compiler (a special -*.bat file could fit perfectly to this purpose) and your C +*.bat file could fit perfectly to this purpose) and your F has proper "MACHINE" parameter set, to, say, C. 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 + 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 If all goes okay and no errors during a build, you'll get two independent distributions: C and C. @@ -130,10 +273,10 @@ Target C prepares distribution file set. Target C performs same as C but additionally compresses distribution files into zip archive. -NOTE: during a build there could be created a number (or one) of C -for cross-compilation ("foreign" C) and those are hidden inside -C<../xlib/$(CROSS_NAME)> with other auxiliary files, but, and this is important to -note, there should be B C for host miniperl. +NOTE: during a build there could be created a number (or one) of F +for cross-compilation ("foreign" F) and those are hidden inside +F<../xlib/$(CROSS_NAME)> with other auxiliary files, but, and this is important to +note, there should be B F for host miniperl. If you'll get an error that perl could not find Config.pm somewhere in building process this means something went wrong. Most probably you forgot to specify a cross-compilation when invoking miniperl.exe to Makefile.PL @@ -158,16 +301,16 @@ F mailing list. PerlCE is currently linked with a simple console window, so it also works on non-hpc devices. -The simple stdio implementation creates the files C, -C and C, so you might examine them if your +The simple stdio implementation creates the files F, +F and F, so you might examine them if your console has only a limited number of cols. When exitcode is non-zero, a message box appears, otherwise the console closes, so you might have to catch an exit with status 0 in your program to see any output. -stdout/stderr now go into the files C and -C +stdout/stderr now go into the files F and +F PerlIDE is handy to deal with perlce. @@ -196,7 +339,7 @@ Semi-list for executables. =item UNIXROOTPATH -- Root for accessing some special files, i.e. C, C. +- Root for accessing some special files, i.e. F, F. =item ROWS/COLS @@ -218,7 +361,7 @@ or via the PerlIDE. =head2 REGISTRY To start perl by clicking on a perl source file, you have -to make the according entries in HKCR (see C). +to make the according entries in HKCR (see F). cereg.exe (which must be executed on a desktop pc with ActiveSync) is reported not to work on some devices. You have to create the registry entries by hand using a @@ -271,21 +414,21 @@ The port for Win32 was used as a reference. =item 5.6.0 Initial port of perl to WinCE. It was performed in separate directory -named C. This port was based on contents of C<./win32> directory. -C was not built, user must have HOST perl and properly edit -C to reflect this. +named F. This port was based on contents of F<./win32> directory. +F was not built, user must have HOST perl and properly edit +F to reflect this. =item 5.8.0 -wince port was kept in the same C<./wince> directory, and C +wince port was kept in the same F<./wince> directory, and F was used to invoke native compiler to create HOST miniperl, which then facilitates cross-compiling process. Extension building support was added. =item 5.9.4 -Two directories C<./win32> and C<./wince> were merged, so perlce build -process comes in C<./win32> directory. +Two directories F<./win32> and F<./wince> were merged, so perlce build +process comes in F<./win32> directory. =back @@ -303,4 +446,8 @@ Many thanks and obligations to Rainer! made further support of WinCE port. +=item Daniel Dragan + +updated the build process during the 5.19 development track. + =back