1# perl makefile for wince
2#
3# Time-stamp: <26/10/01 15:10:06 keuchel@keuchelnt>
4
5SRCDIR     = ..
6PV         = 58
7INST_VER   = 5.8.8
8
9# INSTALL_ROOT specifies a path where this perl will be installed on CE device
10INSTALL_ROOT=/netzwerk/sprache/perl
11INST_TOP=$(INSTALL_ROOT)
12INST_VER=
13
14# PERLCEDIR shoud be set to current directory
15PERLCEDIR  = H:\src\wince\perl\wince
16
17# WCEROOT is a directory where Windows CE Tools was installed
18WCEROOT    = D:\Windows CE Tools
19
20# HPERL stands for host perl, which is perl on local desktop machine
21# which is usually ..\miniperl.exe
22#HPERL     = N:\Programme\perl\bin\perl.exe
23HPERL = $(MAKEDIR)\..\miniperl.exe
24
25CEPATH     = D:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN
26CELIBDLLDIR  = h:\src\wince\celib-palm-3.0
27CECONSOLEDIR = h:\src\wince\w32console
28
29# specify following options to build perl on local machine, by MSVC
30MSVCDIR         = D:\MSVStudio\VC98
31CCHOME		= $(MSVCDIR)
32CCINCDIR	= $(CCHOME)\include
33CCLIBDIR	= $(CCHOME)\lib
34
35# Only for WIN2000
36#YES        = /y
37COPY       = copy $(YES)
38XCOPY      = xcopy $(YES) /f /r /i /d
39RCOPY	   = xcopy $(YES) /f /r /i /e /d
40
41# cecopy program. Make shure it is in your path, as well as cemkdir, cedel
42CECOPY     = cecopy
43
44#
45# Comment out next assign to disable perl's I/O subsystem and use compiler's
46# stdio for IO - depending on your compiler vendor and run time library you may
47# then get a number of fails from make test i.e. bugs - complain to them not us ;-).
48# You will also be unable to take full advantage of perl5.8's support for multiple
49# encodings and may see lower IO performance. You have been warned.
50USE_PERLIO	= define
51
52#
53# set this if you wish to use perl's malloc
54# This will make perl run few times faster
55# WARNING: Turning this on/off WILL break binary compatibility with extensions
56# you may have compiled with/without it.
57#
58PERL_MALLOC	= define
59
60
61NOOP	   = @echo
62# keep this untouched!
63NULL	   =
64
65
66#CFG=DEBUG
67CFG=RELEASE
68
69!if "$(MACHINE)" == ""
70MACHINE=wince-arm-hpc-wce300
71#MACHINE=wince-arm-hpc-wce211
72#MACHINE=wince-sh3-hpc-wce211
73#MACHINE=wince-mips-hpc-wce211
74#MACHINE=wince-sh3-hpc-wce200
75#MACHINE=wince-mips-hpc-wce200
76#MACHINE=wince-arm-pocket-wce300
77#MACHINE=wince-mips-pocket-wce300
78#MACHINE=wince-sh3-pocket-wce300
79#MACHINE=wince-x86em-pocket-wce300
80#MACHINE=wince-mips-palm-wce211
81#MACHINE=wince-sh3-palm-wce211
82#MACHINE=wince-x86em-palm-wce211
83!endif
84
85# set this to your email address
86#
87#EMAIL		=
88
89##################### CHANGE THESE ONLY IF YOU MUST #####################
90
91######################################################################
92# machines
93
94!if "$(MACHINE)" == "wince-sh3-hpc-wce211"
95CC         = shcl.exe
96ARCH       = SH3
97CPU        = SH3
98TARGETCPU  = SH3
99CEVersion  = 211
100OSVERSION  = WCE211
101PLATFORM   = MS HPC Pro
102MCFLAGS    = -MDd -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \
103             -I $(CELIBDLLDIR)\inc
104SUBSYS	   = -subsystem:windowsce,2.11
105CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
106LDLIBPATH  = -libpath:$(CELIBPATH)
107STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
108             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
109!endif
110
111!if "$(MACHINE)" == "wince-mips-hpc-wce211"
112CC         = clmips.exe
113ARCH       = MIPS
114CPU        = MIPS
115TARGETCPU  = MIPS
116CEVersion  = 211
117OSVERSION  = WCE211
118PLATFORM   = MS HPC Pro
119MCFLAGS    = -D _MT -D _DLL \
120             -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
121             -D PALM_SIZE \
122             -I $(CELIBDLLDIR)\inc
123SUBSYS	   = -subsystem:windowsce,2.11
124CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
125LDLIBPATH  = -libpath:$(CELIBPATH)
126STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
127             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
128!endif
129
130!if "$(MACHINE)" == "wince-mips-hpc-wce200"
131CC         = clmips.exe
132ARCH       = MIPS
133CPU        = MIPS
134TARGETCPU  = MIPS
135CEVersion  = 200
136OSVERSION  = WCE200
137PLATFORM   = MS HPC
138# MUST USE -MD to get the right FPE stuff...
139MCFLAGS    = -D _MT -D _DLL -MD \
140             -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
141             -D PALM_SIZE \
142             -I $(CELIBDLLDIR)\inc
143SUBSYS	   = -subsystem:windowsce,2.00
144CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
145LDLIBPATH  = -libpath:$(CELIBPATH)
146STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
147             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
148!endif
149
150!if "$(MACHINE)" == "wince-sh3-hpc-wce200"
151CC         = shcl.exe
152ARCH       = SH3
153CPU        = SH3
154TARGETCPU  = SH3
155CEVersion  = 200
156OSVERSION  = WCE200
157PLATFORM   = MS HPC
158# MUST USE -MD to get the right FPE stuff...
159MCFLAGS    = -D _MT -D _DLL -MD \
160             -D SH3 -D sh3 -D _SH3_ -D _sh3_ -D SHx -DPROCESSOR_SH3 \
161             -D PALM_SIZE \
162             -I $(CELIBDLLDIR)\inc
163SUBSYS	   = -subsystem:windowsce,2.00
164CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
165LDLIBPATH  = -libpath:$(CELIBPATH)
166STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
167             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
168!endif
169
170!if "$(MACHINE)" == "wince-arm-hpc-wce211"
171CC         = clarm.exe
172ARCH       = ARM
173CPU        = ARM
174TARGETCPU  = ARM
175CEVersion  = 211
176OSVERSION  = WCE211
177PLATFORM   = MS HPC Pro
178MCFLAGS    = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \
179             -DPROCESSOR_ARM -DPALM_SIZE \
180             -I $(CELIBDLLDIR)\inc
181SUBSYS	   = -subsystem:windowsce,2.11
182CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
183LDLIBPATH  = -libpath:$(CELIBPATH)
184STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
185             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
186!endif
187
188!if "$(MACHINE)" == "wince-arm-hpc-wce300"
189CC         = clarm.exe
190ARCH       = ARM
191CPU        = ARM
192TARGETCPU  = ARM
193CEVersion  = 300
194OSVERSION  = WCE300
195#PLATFORM   = HPC2000
196MCFLAGS    = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \
197             -DPROCESSOR_ARM -DPALM_SIZE \
198             -I $(CELIBDLLDIR)\inc
199SUBSYS	   = -subsystem:windowsce,3.00
200CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
201LDLIBPATH  = -libpath:$(CELIBPATH)
202STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
203             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
204!endif
205
206!if "$(MACHINE)" == "wince-mips-palm-wce211"
207CC         = clmips.exe
208ARCH       = MIPS
209CPU        = MIPS
210TARGETCPU  = MIPS
211CEVersion  = 211
212OSVERSION  = WCE211
213PLATFORM   = MS Palm Size PC
214MCFLAGS    = -DMIPS -D_MIPS_ -DPROCESSOR_MIPS -D PALM_SIZE -D _DLL -D _MT \
215             -I $(CELIBDLLDIR)\inc
216SUBSYS	   = -subsystem:windowsce,2.11
217CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
218LDLIBPATH  = -libpath:$(CELIBPATH)
219STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
220             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
221!endif
222
223!if "$(MACHINE)" == "wince-sh3-palm-wce211"
224CC         = shcl.exe
225ARCH       = SH3
226CPU        = SH3
227TARGETCPU  = SH3
228CEVersion  = 211
229OSVERSION  = WCE211
230PLATFORM   = MS Palm Size PC
231MCFLAGS    = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \
232             -I $(CELIBDLLDIR)\inc
233SUBSYS	   = -subsystem:windowsce,2.11
234CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
235LDLIBPATH  = -libpath:$(CELIBPATH)
236STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
237             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
238!endif
239
240!if "$(MACHINE)" == "wince-x86em-palm-wce211"
241CC         = cl.exe
242ARCH       = X86EM
243CPU        = X86
244TARGETCPU  = X86
245CEVersion  = 211
246OSVERSION  = WCE211
247PLATFORM   = MS Palm Size PC
248MCFLAGS    = -MDd -DX86 -D_X86_ -DPROCESSOR_X86 \
249             -D_WIN32_WCE_EMULATION -DPALM_SIZE \
250             -I $(CELIBDLLDIR)\inc
251MACH       = -machine:x86
252SUBSYS     = -subsystem:windows
253CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
254LDLIBPATH  = -libpath:$(CELIBPATH)
255STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
256             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
257!endif
258
259!if "$(MACHINE)" == "wince-x86em-pocket-wce300"
260CC         = cl.exe
261ARCH       = X86EM
262CPU        = X86
263TARGETCPU  = X86
264CEVersion  = 300
265OSVERSION  = WCE300
266PLATFORM   = MS Pocket PC
267MCFLAGS    = -DX86 -D_X86_ -DPROCESSOR_X86 -D _MT -D _DLL \
268             -D_WIN32_WCE_EMULATION -DPALM_SIZE -DPOCKET_SIZE \
269             -I $(CELIBDLLDIR)\inc
270MACH       = -machine:x86
271SUBSYS     = -subsystem:windows
272CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
273LDLIBPATH  = -libpath:$(CELIBPATH)
274STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
275             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
276!endif
277
278!if "$(MACHINE)" == "wince-mips-pocket-wce300"
279CC         = clmips.exe
280ARCH       = MIPS
281CPU        = MIPS
282TARGETCPU  = MIPS
283CEVersion  = 300
284OSVERSION  = WCE300
285PLATFORM   = MS Pocket PC
286MCFLAGS    = -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
287             -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
288             -I $(CELIBDLLDIR)\inc
289MACH       = -machine:mips
290SUBSYS     = -subsystem:windowsce,3.00
291CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
292#STDLIBPATH = $(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(CPU)
293LDLIBPATH  = -libpath:$(CELIBPATH)
294#"-libpath:$(STDLIBPATH)"
295STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
296             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
297!endif
298
299!if "$(MACHINE)" == "wince-sh3-pocket-wce300"
300CC         = shcl.exe
301ARCH       = SH3
302CPU        = SH3
303TARGETCPU  = SH3
304CEVersion  = 300
305OSVERSION  = WCE300
306PLATFORM   = MS Pocket PC
307MCFLAGS    = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 \
308             -DPALM_SIZE -DPOCKET_SIZE \
309             -I $(CELIBDLLDIR)\inc
310MACH       = -machine:sh3
311SUBSYS     = -subsystem:windowsce,3.00
312CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
313LDLIBPATH  = -libpath:$(CELIBPATH)
314STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
315             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
316!endif
317
318!if "$(MACHINE)" == "wince-arm-pocket-wce300"
319CC         = clarm.exe
320ARCH       = ARM
321CPU        = ARM
322TARGETCPU  = ARM
323CEVersion  = 300
324OSVERSION  = WCE300
325PLATFORM   = MS Pocket PC
326MCFLAGS    = -D ARM -D arm -D _ARM_ -D _arm_ -DPROCESSOR_ARM \
327             -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
328             -I $(CELIBDLLDIR)\inc
329MACH       = -machine:arm
330SUBSYS     = -subsystem:windowsce,3.00
331CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
332LDLIBPATH  = -libpath:$(CELIBPATH)
333STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
334             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
335!endif
336
337######################################################################
338# common section
339
340CEDEFS    = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \
341            $(MCFLAGS) -D PERL
342
343#CEDEFS    = $(CEDEFS) -DDEBUGGING_OPS
344
345CECFLAGS  = $(CEDEFS)
346
347!if "$(CFG)" == "DEBUG"
348CECFLAGS  = $(CECFLAGS) -Zi -Od
349!endif
350
351!if "$(CFG)" == "RELEASE"
352# -O2 and -Ot give internal compiler error in perl.c and lexer.
353# Also the dll cannot be loaded by perl.exe...
354!if "$(CPU)" == "SH3"
355!else
356CECFLAGS  = $(CECFLAGS) -O2 -Ot
357!endif
358
359!endif
360
361RCDEFS    = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \
362            /d _WIN32_WCE=$(CEVersion)
363
364PATH=$(CEPATH);$(PATH)
365
366INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include
367LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH)
368
369######################################################################
370
371!message
372!message Compiling for $(MACHINE)
373!message LIB=$(LIB)
374!message INCLUDE=$(INCLUDE)
375!message PATH=$(CEPATH)
376!message
377
378######################################################################
379#
380# Additional compiler flags can be specified here.
381#
382
383BUILDOPT	= $(BUILDOPT) $(CECFLAGS)
384
385
386!IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
387D_CRYPT		= undef
388!ELSE
389D_CRYPT		= define
390CRYPT_FLAG	= -DHAVE_DES_FCRYPT
391!ENDIF
392
393!IF "$(PERL_MALLOC)" == ""
394PERL_MALLOC	= undef
395!ENDIF
396
397!IF "$(USE_5005THREADS)" == ""
398USE_5005THREADS	= undef
399!ENDIF
400
401!IF "$(USE_5005THREADS)" == "define"
402USE_ITHREADS	= undef
403!ENDIF
404
405!IF "$(USE_MULTI)" == ""
406USE_MULTI	= undef
407!ENDIF
408
409!IF "$(USE_ITHREADS)" == ""
410USE_ITHREADS	= undef
411!ENDIF
412
413!IF "$(USE_IMP_SYS)" == ""
414USE_IMP_SYS	= undef
415!ENDIF
416
417!IF "$(USE_PERLIO)" == ""
418USE_PERLIO	= undef
419!ENDIF
420
421!IF "$(USE_PERLCRT)" == ""
422USE_PERLCRT	= undef
423!ENDIF
424
425!IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)" == "defineundefundef"
426USE_MULTI	= define
427!ENDIF
428
429!IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef"
430USE_MULTI	= define
431USE_5005THREADS	= undef
432!ENDIF
433
434!IF "$(USE_MULTI)$(USE_5005THREADS)" != "undefundef"
435BUILDOPT	= $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
436!ENDIF
437
438!IF "$(USE_IMP_SYS)" != "undef"
439BUILDOPT	= $(BUILDOPT) -DPERL_IMPLICIT_SYS
440!ENDIF
441
442!IF "$(USE_PERLIO)" == "define"
443BUILDOPT	= $(BUILDOPT) -DUSE_PERLIO
444!ENDIF
445
446!IF "$(CROSS_NAME)" == ""
447CROSS_NAME	= $(MACHINE)
448!ENDIF
449
450# new option - automatically defined in perl.h...
451#BUILDOPT        = $(BUILDOPT) -DUSE_ENVIRON_ARRAY
452
453PROCESSOR_ARCHITECTURE = $(TARGETCPU)
454ARCHNAME	= $(PLATFORM)-$(OSVERSION)-$(PROCESSOR_ARCHITECTURE)
455ARCHDIR		= ..\lib\$(ARCHNAME)
456COREDIR		= ..\lib\CORE
457XCOREDIR	= ..\xlib\$(CROSS_NAME)\CORE
458AUTODIR		= ..\lib\auto
459LIBDIR		= ..\lib
460EXTDIR		= ..\ext
461PODDIR		= ..\pod
462EXTUTILSDIR	= $(LIBDIR)\ExtUtils
463
464LINK32		= link
465LIB32		= $(LINK32) -lib
466RSC		= rc
467
468INCLUDES	= -I.\include -I..\win32\include -I. -I..
469DEFINES		= -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) $(CECFLAGS)
470LOCDEFS		= -DPERLDLL -DPERL_CORE
471CXX_FLAG	= -TP
472
473PERLEXE_RES	= perl.res
474PERLDLL_RES	=
475
476!if "$(CFG)" == "RELEASE"
477CELIB           = celib.lib
478!endif
479
480!if "$(CFG)" == "DEBUG"
481CELIB           = celib.lib
482!endif
483
484CELIBS          = -nodefaultlib \
485                  winsock.lib $(CELIB) coredll.lib
486
487!if $(CEVersion) > 200
488CELIBS          = $(CELIBS) corelibc.lib
489!else
490CELIBS          = $(CELIBS) msvcrt.lib
491!endif
492
493LIBBASEFILES	= $(CRYPT_LIB) $(CELIBS)
494
495LIBFILES	= $(LIBBASEFILES) $(LIBC)
496
497CFLAGS		= -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
498		$(PCHFLAGS) $(OPTIMIZE)
499
500LINK_FLAGS	= -nologo -machine:$(PROCESSOR_ARCHITECTURE)
501
502!if "$(CFG)" == "DEBUG"
503LINK_FLAGS      = $(LINK_FLAGS) -debug:full -pdb:none
504!else
505LINK_FLAGS      = $(LINK_FLAGS) -release
506!endif
507
508OBJOUT_FLAG	= -Fo
509EXEOUT_FLAG	= -Fe
510
511CFLAGS_O	= $(CFLAGS) $(BUILDOPT)
512
513o = .obj
514
515#
516# Rules
517#
518
519.SUFFIXES : .c $(o) .dll .lib .exe .rc .res
520
521.c$(o):
522	$(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
523
524.y.c:
525	$(NOOP)
526
527$(o).dll:
528	$(LINK32) -dll $(SUBSYS) $(LDLIBPATH) \
529            -implib:$(*B).lib -def:$(*B).def \
530	    -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
531
532.rc.res:
533	$(RSC) -i.. $<
534
535# This must be relative to ../lib/CORE, else the ext dll build fails...
536PERLIMPLIB_EXP	= ..\..\..\xlib\$(CROSS_NAME)\CORE\perl$(PV).lib
537PERLIMPLIB	= $(PERLCEDIR)\$(MACHINE)\perl$(PV).lib
538PERLDLL		= $(MACHINE)\perl$(PV).dll
539
540DLLDIR          = $(MACHINE)\dll
541PERLEXE		= $(MACHINE)\perl.exe
542
543CONFIGPM	= ..\xlib\$(CROSS_NAME)\Config.pm
544MINIMOD		= ..\lib\ExtUtils\Miniperl.pm
545
546# Nominate a target which causes extensions to be re-built
547# This used to be $(PERLEXE), but at worst it is the .dll that they depend
548# on and really only the interface - i.e. the .def file used to export symbols
549# from the .dll
550PERLDEP		= perldll.def
551
552MAKE		= nmake -nologo
553
554CFGSH_TMPL	= config.ce
555CFGH_TMPL	= config_H.ce
556
557#
558# filenames given to xsubpp must have forward slashes (since it puts
559# full pathnames in #line strings)
560XSUBPP		= $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) ..\$(EXTUTILSDIR)\xsubpp \
561		-C++ -prototypes
562
563MICROCORE_SRC	=		\
564		..\av.c		\
565		..\deb.c	\
566		..\doio.c	\
567		..\doop.c	\
568		..\dump.c	\
569		..\globals.c	\
570		..\gv.c		\
571		..\hv.c		\
572		..\mg.c		\
573		..\op.c		\
574		..\pad.c	\
575		..\perl.c	\
576		..\perlapi.c	\
577		..\perly.c	\
578		..\pp.c		\
579		..\pp_ctl.c	\
580		..\pp_hot.c	\
581		..\pp_pack.c	\
582		..\pp_sort.c	\
583		..\pp_sys.c	\
584		..\reentr.c	\
585		..\regcomp.c	\
586		..\regexec.c	\
587		..\run.c	\
588		..\scope.c	\
589		..\sv.c		\
590		..\taint.c	\
591		..\toke.c	\
592		..\universal.c	\
593		..\utf8.c	\
594		..\util.c	\
595		..\xsutils.c
596
597EXTRACORE_SRC	= $(EXTRACORE_SRC) perllib.c
598
599!IF "$(PERL_MALLOC)" == "define"
600EXTRACORE_SRC	= $(EXTRACORE_SRC) ..\malloc.c
601!ENDIF
602
603EXTRACORE_SRC	= $(EXTRACORE_SRC) ..\perlio.c .\win32io.c
604
605WIN32_SRC	=		\
606		.\wince.c	\
607		.\wincesck.c	\
608		.\win32thread.c
609
610!IF "$(CRYPT_SRC)" != ""
611WIN32_SRC	= $(WIN32_SRC) .\$(CRYPT_SRC)
612!ENDIF
613
614DLL_SRC		= $(DYNALOADER).c
615
616CORE_NOCFG_H	=		\
617		..\av.h		\
618		..\cop.h	\
619		..\cv.h		\
620		..\dosish.h	\
621		..\embed.h	\
622		..\form.h	\
623		..\gv.h		\
624		..\handy.h	\
625		..\hv.h		\
626		..\iperlsys.h	\
627		..\mg.h		\
628		..\nostdio.h	\
629		..\op.h		\
630		..\opcode.h	\
631		..\perl.h	\
632		..\perlapi.h	\
633		..\perlsdio.h	\
634		..\perlsfio.h	\
635		..\perly.h	\
636		..\pp.h		\
637		..\proto.h	\
638		..\regexp.h	\
639		..\scope.h	\
640		..\sv.h		\
641		..\thread.h	\
642		..\unixish.h	\
643		..\utf8.h	\
644		..\util.h	\
645		..\warnings.h	\
646		..\XSUB.h	\
647		..\EXTERN.h	\
648		..\perlvars.h	\
649		..\intrpvar.h	\
650		..\thrdvar.h	\
651		.\include\dirent.h	\
652		.\include\netdb.h	\
653		.\include\sys\socket.h	\
654		.\win32.h
655
656CORE_H		= $(CORE_NOCFG_H) .\config.h
657
658MICROCORE_OBJ	= $(MICROCORE_SRC:.c=.obj)
659CORE_OBJ	= $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj)
660WIN32_OBJ	= $(WIN32_SRC:.c=.obj)
661#WIN32_OBJ	= $(WIN32_OBJ:.\=.\$(DLLDIR)\)
662MINICORE_OBJ	= $(MICROCORE_OBJ:..\=.\$(DLLDIR)\)	\
663		  $(MINIDIR)\miniperlmain$(o)	\
664		  $(MINIDIR)\perlio$(o)
665MINIWIN32_OBJ	= $(WIN32_OBJ:.\=.\$(DLLDIR)\)
666MINI_OBJ	= $(MINICORE_OBJ) $(MINIWIN32_OBJ)
667DLL_OBJ		= $(DLL_SRC:.c=.obj)
668X2P_OBJ		= $(X2P_SRC:.c=.obj)
669
670PERLDLL_OBJ	= $(CORE_OBJ)
671PERLEXE_OBJ	= perlmain$(o)
672
673PERLDLL_OBJ	= $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
674#PERLEXE_OBJ	= $(PERLEXE_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
675
676!IF "$(USE_SETARGV)" != ""
677SETARGV_OBJ	= setargv$(o)
678!ENDIF
679
680DYNAMIC_EXT	= Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \
681		Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \
682		Sys/Hostname
683
684STATIC_EXT	= DynaLoader
685
686DYNALOADER	= $(EXTDIR)\DynaLoader\DynaLoader
687
688ERRNO_PM	= $(LIBDIR)\Errno.pm
689
690
691EXTENSION_PM	=		\
692		$(ERRNO_PM)
693
694POD2HTML	= $(PODDIR)\pod2html
695POD2MAN		= $(PODDIR)\pod2man
696POD2LATEX	= $(PODDIR)\pod2latex
697POD2TEXT	= $(PODDIR)\pod2text
698
699CFG_VARS = \
700 "INST_DRV=$(INST_DRV)" \
701 "INST_TOP=$(INST_TOP)" \
702 "INST_VER=$(INST_VER)" \
703 "INST_ARCH=$(INST_ARCH)" \
704 "archname=$(ARCHNAME)" \
705 "CC=$(CC)" \
706 "ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \
707 "cf_by=Rainer Keuchel" \
708 "cf_email=$(EMAIL)" \
709 "d_crypt=$(D_CRYPT)" \
710 "d_mymalloc=$(PERL_MALLOC)" \
711 "libs=$(LIBFILES)" \
712 "incpath=$(CCINCDIR)" \
713 "libperl=$(PERLIMPLIB_EXP)" \
714 "libpth=$(LIBPATH)" \
715 "libc=$(LIBC)" \
716 "make=nmake" \
717 "static_ext=$(STATIC_EXT)" \
718 "dynamic_ext=$(DYNAMIC_EXT)" \
719 "use5005threads=$(USE_5005THREADS)" \
720 "useithreads=$(USE_ITHREADS)" \
721 "usethreads=$(USE_5005THREADS)" \
722 "usemultiplicity=$(USE_MULTI)" \
723 "useperlio=$(USE_PERLIO)" \
724 "LINK_FLAGS=$(LDLIBPATH) $(LINK_FLAGS) $(SUBSYS)" \
725 "optimize=$(OPTIMIZE)"
726
727#
728# Top targets
729#
730
731all: hostminiperl $(MINIMOD) $(CONFIGPM) $(PERLEXE) Extensions
732
733$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
734
735$(CONFIGPM): .\config.h ..\config.sh ..\minimod.pl
736	cd .. && $(HPERL) configpm --cross=$(CROSS_NAME) --no-glossary
737	-mkdir $(XCOREDIR)
738	$(XCOPY) ..\*.h $(XCOREDIR)\*.*
739	$(XCOPY) ..\*.inc $(XCOREDIR)\*.*
740	$(XCOPY) *.h $(XCOREDIR)\*.*
741	$(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
742	$(RCOPY) include $(XCOREDIR)\*.*
743	$(XCOPY) ..\win32\include $(XCOREDIR)\*.*
744	-$(HPERL) -I..\lib -MCross=$(CROSS_NAME) config_h.PL "INST_VER=$(INST_VER)" "CORE_DIR=$(XCOREDIR)"
745	if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM)
746
747.\config.h:
748	-del /f config.h
749	copy config_H.ce config.h
750
751..\config.sh: config.ce config_sh.PL
752	$(HPERL) -I..\lib -I..\win32 config_sh.PL $(CFG_VARS) config.ce > ..\config.sh
753
754$(MINIMOD) : ..\minimod.pl
755	cd .. && $(HPERL) minimod.pl > lib\ExtUtils\Miniperl.pm
756
757perlmain.c : runperl.c
758	$(COPY) runperl.c perlmain.c
759
760$(DYNALOADER).c: $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
761	if not exist $(AUTODIR) mkdir $(AUTODIR)
762	cd $(EXTDIR)\$(*B)
763	$(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) $(*B)_pm.PL
764	$(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) XSLoader_pm.PL
765	cd ..\..\wince
766	$(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
767	$(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)
768	cd $(EXTDIR)\$(*B)
769	$(XSUBPP) dl_win32.xs > $(*B).c
770	cd ..\..\wince
771
772$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
773	$(COPY) dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
774
775#----------------------------------------------------------------------------------
776NOT_COMPILE_EXT =
777!if "$(MACHINE)" == "wince-sh3-palm-wce211"
778NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
779!endif
780!if "$(MACHINE)" == "wince-mips-palm-wce211"
781NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
782!endif
783
784Extensions: ..\win32\buildext.pl $(PERLDEP) $(CONFIGPM)
785	$(HPERL) -I..\lib -I..\win32 -MCross=$(CROSS_NAME) ..\win32\buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) \
786	!POSIX $(NOT_COMPILE_EXT)
787
788Extensions_clean:
789	-if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean
790
791#----------------------------------------------------------------------------------
792
793$(PERLEXE_RES): perl.rc perl.ico
794	rc $(RCDEFS) perl.rc
795
796clean:
797	-rm -f $(MACHINE)/dll/*
798	-rm -f $(MACHINE)/*.obj
799	-rm -f $(MACHINE)/*.exe
800	-rm -f $(MACHINE)/*.dll
801	-rm -f $(MACHINE)/*.lib
802	-rm -f ../config.sh ../lib/Config.pm
803	-rm -f config.h perl.res
804
805XDLLOBJS = \
806$(DLLDIR)\av.obj \
807$(DLLDIR)\deb.obj \
808$(DLLDIR)\doio.obj \
809$(DLLDIR)\doop.obj \
810$(DLLDIR)\dump.obj \
811$(DLLDIR)\globals.obj \
812$(DLLDIR)\gv.obj \
813$(DLLDIR)\hv.obj \
814$(DLLDIR)\locale.obj \
815$(DLLDIR)\mg.obj \
816$(DLLDIR)\numeric.obj \
817$(DLLDIR)\op.obj \
818$(DLLDIR)\pad.obj \
819$(DLLDIR)\perl.obj \
820$(DLLDIR)\perlapi.obj \
821$(DLLDIR)\perlio.obj \
822$(DLLDIR)\perly.obj \
823$(DLLDIR)\pp.obj \
824$(DLLDIR)\pp_ctl.obj \
825$(DLLDIR)\pp_hot.obj \
826$(DLLDIR)\pp_pack.obj \
827$(DLLDIR)\pp_sort.obj \
828$(DLLDIR)\pp_sys.obj \
829$(DLLDIR)\reentr.obj \
830$(DLLDIR)\regcomp.obj \
831$(DLLDIR)\regexec.obj \
832$(DLLDIR)\run.obj \
833$(DLLDIR)\scope.obj \
834$(DLLDIR)\sv.obj \
835$(DLLDIR)\taint.obj \
836$(DLLDIR)\toke.obj \
837$(DLLDIR)\universal.obj \
838$(DLLDIR)\utf8.obj \
839$(DLLDIR)\util.obj \
840$(DLLDIR)\win32thread.obj \
841$(DLLDIR)\wince.obj \
842$(DLLDIR)\win32io.obj \
843$(DLLDIR)\wincesck.obj \
844$(DLLDIR)\xsutils.obj \
845$(DLLDIR)\perllib.obj \
846$(DLLDIR)\DynaLoader.obj
847!IF "$(PERL_MALLOC)" == "define"
848XDLLOBJS	= $(XDLLOBJS) $(DLLDIR)\malloc.obj
849!ENDIF
850!IF "$(CRYPT_SRC)" != ""
851XDLLOBJS	= $(XDLLOBJS) $(DLLDIR)\fcrypt.obj
852!ENDIF
853
854{$(SRCDIR)}.c{$(DLLDIR)}.obj:
855    $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $<
856
857# compiler explains that it will optimize toke.c if we'll give it an
858# option -QMOb<num> with num>=4178
859$(DLLDIR)\toke.obj:
860    $(CC) -c $(CFLAGS_O) -QMOb9000 -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ ..\toke.c
861
862{$(SRCDIR)/wince}.c{$(DLLDIR)}.obj:
863    $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $<
864
865# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
866# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
867!IF "$(USE_IMP_SYS)" == "define"
868$(DLLDIR)\perllib$(o)	: perllib.c .\perlhost.h .\vdir.h .\vmem.h
869	$(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
870	rem (frustrated) mv perllib.obj $(DLLDIR)
871!ENDIF
872
873perldll.def : $(HPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl
874	$(HPERL) -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
875	    CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) > perldll.def
876
877$(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES)
878	$(LINK32) -dll -def:perldll.def -out:$@ \
879                  $(SUBSYS) $(LDLIBPATH) \
880		  $(LINK_FLAGS) $(LIBFILES) \
881		  $(XDLLOBJS) $(PERLDLL_RES)
882
883$(DLLDIR) :
884	if not exist "$(DLLDIR)" mkdir "$(DLLDIR)"
885
886$(DLLDIR)\DynaLoader.obj: $(EXTDIR)\DynaLoader\DynaLoader.c
887    $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ \
888          $(EXTDIR)\DynaLoader\DynaLoader.c
889
890XPERLEXEOBJS = \
891$(MACHINE)\perlmain.obj
892
893$(PERLEXE) : $(PERLDLL) $(CONFIGPM) $(XPERLEXEOBJS) $(PERLEXE_RES) $(STARTOBJS)
894	$(XCOPY) $(MACHINE)\*.lib $(XCOREDIR)
895	$(LINK32) $(SUBSYS) $(LDLIBPATH) \
896            -entry:wWinMainCRTStartup \
897            -out:$(MACHINE)\perl.exe \
898            -stack:0x100000 $(LINK_FLAGS) $(STARTOBJS) $(XPERLEXEOBJS) \
899            $(PERLIMPLIB) $(PERLEXE_RES) $(LIBFILES)
900
901$(MACHINE)\perlmain.obj : perlmain.c
902	$(CC) $(CFLAGS_O) -UPERLDLL -Fo$(MACHINE)\ -c perlmain.c
903
904iodll:     $(IO_DLL)
905socketdll: $(SOCKET_DLL)
906dumperdll: $(DUMPER_DLL)
907
908dlls: socketdll iodll dumperdll
909	-xmkdir -p $(MACHINE)/lib/auto/IO
910	cp ../lib/auto/IO/IO.bs $(MACHINE)/lib/auto/IO
911	cp ../lib/auto/IO/IO.dll $(MACHINE)/lib/auto/IO
912	-xmkdir $(MACHINE)/lib/auto/Socket
913	cp ../lib/auto/Socket/Socket.bs $(MACHINE)/lib/auto/Socket
914	cp ../lib/auto/Socket/Socket.dll $(MACHINE)/lib/auto/Socket
915	-xmkdir -p $(MACHINE)/lib/auto/Data/Dumper
916	cp ../lib/auto/Data/Dumper/Dumper.bs $(MACHINE)/lib/auto/Data/Dumper
917	cp ../lib/auto/Data/Dumper/Dumper.dll $(MACHINE)/lib/auto/Data/Dumper
918
919makedist: all dlls
920	$(COPY) $(CELIBPATH)\celib.dll $(MACHINE)
921	cp perl.txt $(MACHINE)
922	cp registry.bat $(MACHINE)
923	cp ../lib/Config.pm $(MACHINE)/lib
924	cd $(MACHINE)
925	rm -f perl-$(MACHINE).tar.gz
926	sh -c "tar cf perl-$(MACHINE).tar *.exe *.dll *.txt *.bat lib"
927	gzip -9 perl-$(MACHINE).tar
928	mv perl-$(MACHINE).tar.gz h:/freenet/new
929	cd ..
930
931!if "$(MACHINE)" == "wince-arm-hpc-wce300"
932install: all
933	$(CECOPY) pc:$(MACHINE)/perl.exe ce:$(INSTALL_ROOT)/bin
934	$(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:$(INSTALL_ROOT)/bin
935install_dlls: dlls
936	$(CECOPY) pc:../lib/auto/IO/io.dll ce:$(INSTALL_ROOT)/lib/auto/IO/io.dll
937!else
938install: all
939	-cemkdir "$(INSTALL_ROOT)"
940	-cemkdir "$(INSTALL_ROOT)\bin"
941	-cemkdir "$(INSTALL_ROOT)\lib"
942	$(CECOPY) "pc:$(MACHINE)/perl.exe" "ce:$(INSTALL_ROOT)/bin"
943	$(CECOPY) "pc:$(MACHINE)/perl$(PV).dll" "ce:$(INSTALL_ROOT)/bin"
944	$(CECOPY) "pc:../xlib/$(CROSS_NAME)/Config.pm" "ce:$(INSTALL_ROOT)/lib"
945!endif
946
947dist: all
948	$(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME)
949
950zipdist: all
951	$(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME)
952	$(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip
953
954zip:
955	$(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip
956
957perl.ico:
958	$(HPERL) makeico.pl
959
960hostminiperl: ..\miniperl.exe
961
962..\miniperl.exe:
963	cd ../win32
964	set PATH=$(CCHOME)\bin;$(PATH)
965	$(MAKE) -f Makefile "CCHOME=$(MSVCDIR)" "CCINCDIR=$(CCHOME)\include" "CCLIBDIR=$(CCHOME)\lib" "INCLUDE=$(CCHOME)\include" "LIB=$(CCHOME)\lib" "LINK_FLAGS=" .\config.h ..\miniperl.exe
966	cd ../wince
967
968host-install:
969	perl -MConfig -MExtUtils::Install -we "install({'../lib/CORE', qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)/CORE#},1)"
970	perl -MConfig -MExtUtils::Install -we "install({'../xlib/$(CROSS_NAME)', qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)#},1)"
971	perl -MConfig -MFile::Copy -we "copy qq#./$(MACHINE)/perl$(PV).lib#, qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)/CORE#"
972	perl -MConfig -MFile::Copy -we "copy qq#../lib/Cross.pm#, qq#$$Config{installprefixexp}/lib#"
973	perl -MConfig -we "system qq#perl -pi.bak -we \"s{((arch^|priv)libexp)='.*'}{\$$1='# . \
974	 quotemeta($$Config{installprefixexp}) . \
975	 qq#/xlib/$(CROSS_NAME)'}\" $$Config{installprefixexp}/xlib/$(CROSS_NAME)/Config.pm#"
976