This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cargo cult 5.8.5 upgrade
[perl5.git] / wince / Makefile.ce
1 # perl makefile for wince
2 #
3 # Time-stamp: <26/10/01 15:10:06 keuchel@keuchelnt>
4
5 SRCDIR     = ..
6 PV         = 58
7 INST_VER   = 5.8.5
8
9 # INSTALL_ROOT specifies a path where this perl will be installed on CE device
10 INSTALL_ROOT=/netzwerk/sprache/perl
11 INST_TOP=$(INSTALL_ROOT)
12 INST_VER=
13
14 # PERLCEDIR shoud be set to current directory
15 PERLCEDIR  = H:\src\wince\perl\wince
16
17 # WCEROOT is a directory where Windows CE Tools was installed
18 WCEROOT    = 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
23 HPERL = $(MAKEDIR)\..\miniperl.exe
24
25 CEPATH     = D:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN
26 CELIBDLLDIR  = h:\src\wince\celib-palm-3.0
27 CECONSOLEDIR = h:\src\wince\w32console
28
29 # specify following options to build perl on local machine, by MSVC
30 MSVCDIR         = D:\MSVStudio\VC98
31 CCHOME          = $(MSVCDIR)
32 CCINCDIR        = $(CCHOME)\include
33 CCLIBDIR        = $(CCHOME)\lib
34
35 # Only for WIN2000
36 #YES        = /y
37 COPY       = copy $(YES)
38 XCOPY      = xcopy $(YES) /f /r /i /d
39 RCOPY      = xcopy $(YES) /f /r /i /e /d
40
41 # cecopy program. Make shure it is in your path, as well as cemkdir, cedel
42 CECOPY     = 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.
50 USE_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 #
58 PERL_MALLOC     = define
59
60
61 NOOP       = @echo
62 # keep this untouched!
63 NULL       =
64
65
66 #CFG=DEBUG
67 CFG=RELEASE
68
69 !if "$(MACHINE)" == ""
70 MACHINE=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"
95 CC         = shcl.exe
96 ARCH       = SH3
97 CPU        = SH3
98 TARGETCPU  = SH3
99 CEVersion  = 211
100 OSVERSION  = WCE211
101 PLATFORM   = MS HPC Pro
102 MCFLAGS    = -MDd -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \
103              -I $(CELIBDLLDIR)\inc
104 SUBSYS     = -subsystem:windowsce,2.11
105 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
106 LDLIBPATH  = -libpath:$(CELIBPATH)
107 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
108              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
109 !endif
110
111 !if "$(MACHINE)" == "wince-mips-hpc-wce211"
112 CC         = clmips.exe
113 ARCH       = MIPS
114 CPU        = MIPS
115 TARGETCPU  = MIPS
116 CEVersion  = 211
117 OSVERSION  = WCE211
118 PLATFORM   = MS HPC Pro
119 MCFLAGS    = -D _MT -D _DLL \
120              -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
121              -D PALM_SIZE \
122              -I $(CELIBDLLDIR)\inc
123 SUBSYS     = -subsystem:windowsce,2.11
124 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
125 LDLIBPATH  = -libpath:$(CELIBPATH)
126 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
127              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
128 !endif
129
130 !if "$(MACHINE)" == "wince-mips-hpc-wce200"
131 CC         = clmips.exe
132 ARCH       = MIPS
133 CPU        = MIPS
134 TARGETCPU  = MIPS
135 CEVersion  = 200
136 OSVERSION  = WCE200
137 PLATFORM   = MS HPC
138 # MUST USE -MD to get the right FPE stuff...
139 MCFLAGS    = -D _MT -D _DLL -MD \
140              -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
141              -D PALM_SIZE \
142              -I $(CELIBDLLDIR)\inc
143 SUBSYS     = -subsystem:windowsce,2.00
144 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
145 LDLIBPATH  = -libpath:$(CELIBPATH)
146 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
147              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
148 !endif
149
150 !if "$(MACHINE)" == "wince-sh3-hpc-wce200"
151 CC         = shcl.exe
152 ARCH       = SH3
153 CPU        = SH3
154 TARGETCPU  = SH3
155 CEVersion  = 200
156 OSVERSION  = WCE200
157 PLATFORM   = MS HPC
158 # MUST USE -MD to get the right FPE stuff...
159 MCFLAGS    = -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
163 SUBSYS     = -subsystem:windowsce,2.00
164 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
165 LDLIBPATH  = -libpath:$(CELIBPATH)
166 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
167              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
168 !endif
169
170 !if "$(MACHINE)" == "wince-arm-hpc-wce211"
171 CC         = clarm.exe
172 ARCH       = ARM
173 CPU        = ARM
174 TARGETCPU  = ARM
175 CEVersion  = 211
176 OSVERSION  = WCE211
177 PLATFORM   = MS HPC Pro
178 MCFLAGS    = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \
179              -DPROCESSOR_ARM -DPALM_SIZE \
180              -I $(CELIBDLLDIR)\inc
181 SUBSYS     = -subsystem:windowsce,2.11
182 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
183 LDLIBPATH  = -libpath:$(CELIBPATH)
184 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
185              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
186 !endif
187
188 !if "$(MACHINE)" == "wince-arm-hpc-wce300"
189 CC         = clarm.exe
190 ARCH       = ARM
191 CPU        = ARM
192 TARGETCPU  = ARM
193 CEVersion  = 300
194 OSVERSION  = WCE300
195 #PLATFORM   = HPC2000
196 MCFLAGS    = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \
197              -DPROCESSOR_ARM -DPALM_SIZE \
198              -I $(CELIBDLLDIR)\inc
199 SUBSYS     = -subsystem:windowsce,3.00
200 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
201 LDLIBPATH  = -libpath:$(CELIBPATH)
202 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
203              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
204 !endif
205
206 !if "$(MACHINE)" == "wince-mips-palm-wce211"
207 CC         = clmips.exe
208 ARCH       = MIPS
209 CPU        = MIPS
210 TARGETCPU  = MIPS
211 CEVersion  = 211
212 OSVERSION  = WCE211
213 PLATFORM   = MS Palm Size PC
214 MCFLAGS    = -DMIPS -D_MIPS_ -DPROCESSOR_MIPS -D PALM_SIZE -D _DLL -D _MT \
215              -I $(CELIBDLLDIR)\inc
216 SUBSYS     = -subsystem:windowsce,2.11
217 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
218 LDLIBPATH  = -libpath:$(CELIBPATH)
219 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
220              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
221 !endif
222
223 !if "$(MACHINE)" == "wince-sh3-palm-wce211"
224 CC         = shcl.exe
225 ARCH       = SH3
226 CPU        = SH3
227 TARGETCPU  = SH3
228 CEVersion  = 211
229 OSVERSION  = WCE211
230 PLATFORM   = MS Palm Size PC
231 MCFLAGS    = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \
232              -I $(CELIBDLLDIR)\inc
233 SUBSYS     = -subsystem:windowsce,2.11
234 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
235 LDLIBPATH  = -libpath:$(CELIBPATH)
236 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
237              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
238 !endif
239
240 !if "$(MACHINE)" == "wince-x86em-palm-wce211"
241 CC         = cl.exe
242 ARCH       = X86EM
243 CPU        = X86
244 TARGETCPU  = X86
245 CEVersion  = 211
246 OSVERSION  = WCE211
247 PLATFORM   = MS Palm Size PC
248 MCFLAGS    = -MDd -DX86 -D_X86_ -DPROCESSOR_X86 \
249              -D_WIN32_WCE_EMULATION -DPALM_SIZE \
250              -I $(CELIBDLLDIR)\inc
251 MACH       = -machine:x86
252 SUBSYS     = -subsystem:windows
253 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
254 LDLIBPATH  = -libpath:$(CELIBPATH)
255 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
256              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
257 !endif
258
259 !if "$(MACHINE)" == "wince-x86em-pocket-wce300"
260 CC         = cl.exe
261 ARCH       = X86EM
262 CPU        = X86
263 TARGETCPU  = X86
264 CEVersion  = 300
265 OSVERSION  = WCE300
266 PLATFORM   = MS Pocket PC
267 MCFLAGS    = -DX86 -D_X86_ -DPROCESSOR_X86 -D _MT -D _DLL \
268              -D_WIN32_WCE_EMULATION -DPALM_SIZE -DPOCKET_SIZE \
269              -I $(CELIBDLLDIR)\inc 
270 MACH       = -machine:x86
271 SUBSYS     = -subsystem:windows
272 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
273 LDLIBPATH  = -libpath:$(CELIBPATH)
274 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
275              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
276 !endif
277
278 !if "$(MACHINE)" == "wince-mips-pocket-wce300"
279 CC         = clmips.exe
280 ARCH       = MIPS
281 CPU        = MIPS
282 TARGETCPU  = MIPS
283 CEVersion  = 300
284 OSVERSION  = WCE300
285 PLATFORM   = MS Pocket PC
286 MCFLAGS    = -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
287              -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
288              -I $(CELIBDLLDIR)\inc 
289 MACH       = -machine:mips
290 SUBSYS     = -subsystem:windowsce,3.00
291 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
292 #STDLIBPATH = $(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(CPU)
293 LDLIBPATH  = -libpath:$(CELIBPATH)
294 #"-libpath:$(STDLIBPATH)"
295 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
296              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
297 !endif
298
299 !if "$(MACHINE)" == "wince-sh3-pocket-wce300"
300 CC         = shcl.exe
301 ARCH       = SH3
302 CPU        = SH3
303 TARGETCPU  = SH3
304 CEVersion  = 300
305 OSVERSION  = WCE300
306 PLATFORM   = MS Pocket PC
307 MCFLAGS    = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 \
308              -DPALM_SIZE -DPOCKET_SIZE \
309              -I $(CELIBDLLDIR)\inc 
310 MACH       = -machine:sh3
311 SUBSYS     = -subsystem:windowsce,3.00
312 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
313 LDLIBPATH  = -libpath:$(CELIBPATH)
314 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
315              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
316 !endif
317
318 !if "$(MACHINE)" == "wince-arm-pocket-wce300"
319 CC         = clarm.exe
320 ARCH       = ARM
321 CPU        = ARM
322 TARGETCPU  = ARM
323 CEVersion  = 300
324 OSVERSION  = WCE300
325 PLATFORM   = MS Pocket PC
326 MCFLAGS    = -D ARM -D arm -D _ARM_ -D _arm_ -DPROCESSOR_ARM \
327              -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
328              -I $(CELIBDLLDIR)\inc 
329 MACH       = -machine:arm
330 SUBSYS     = -subsystem:windowsce,3.00
331 CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
332 LDLIBPATH  = -libpath:$(CELIBPATH)
333 STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
334              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
335 !endif
336
337 ######################################################################
338 # common section
339
340 CEDEFS    = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \
341             $(MCFLAGS) -D PERL
342
343 #CEDEFS    = $(CEDEFS) -DDEBUGGING_OPS
344
345 CECFLAGS  = $(CEDEFS)
346
347 !if "$(CFG)" == "DEBUG"
348 CECFLAGS  = $(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
356 CECFLAGS  = $(CECFLAGS) -O2 -Ot
357 !endif
358
359 !endif
360
361 RCDEFS    = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \
362             /d _WIN32_WCE=$(CEVersion)
363
364 PATH=$(CEPATH);$(PATH)
365
366 INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include
367 LIB=$(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
383 BUILDOPT        = $(BUILDOPT) $(CECFLAGS)
384
385
386 !IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
387 D_CRYPT         = undef
388 !ELSE
389 D_CRYPT         = define
390 CRYPT_FLAG      = -DHAVE_DES_FCRYPT
391 !ENDIF
392
393 !IF "$(PERL_MALLOC)" == ""
394 PERL_MALLOC     = undef
395 !ENDIF
396
397 !IF "$(USE_5005THREADS)" == ""
398 USE_5005THREADS = undef
399 !ENDIF
400
401 !IF "$(USE_5005THREADS)" == "define"
402 USE_ITHREADS    = undef
403 !ENDIF
404
405 !IF "$(USE_MULTI)" == ""
406 USE_MULTI       = undef
407 !ENDIF
408
409 !IF "$(USE_ITHREADS)" == ""
410 USE_ITHREADS    = undef
411 !ENDIF
412
413 !IF "$(USE_IMP_SYS)" == ""
414 USE_IMP_SYS     = undef
415 !ENDIF
416
417 !IF "$(USE_PERLIO)" == ""
418 USE_PERLIO      = undef
419 !ENDIF
420
421 !IF "$(USE_PERLCRT)" == ""
422 USE_PERLCRT     = undef
423 !ENDIF
424
425 !IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)" == "defineundefundef"
426 USE_MULTI       = define
427 !ENDIF
428
429 !IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef"
430 USE_MULTI       = define
431 USE_5005THREADS = undef
432 !ENDIF
433
434 !IF "$(USE_MULTI)$(USE_5005THREADS)" != "undefundef"
435 BUILDOPT        = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
436 !ENDIF
437
438 !IF "$(USE_IMP_SYS)" != "undef"
439 BUILDOPT        = $(BUILDOPT) -DPERL_IMPLICIT_SYS
440 !ENDIF
441
442 !IF "$(USE_PERLIO)" == "define"
443 BUILDOPT        = $(BUILDOPT) -DUSE_PERLIO
444 !ENDIF
445
446 !IF "$(CROSS_NAME)" == ""
447 CROSS_NAME      = $(MACHINE)
448 !ENDIF
449
450 # new option - automatically defined in perl.h...
451 #BUILDOPT        = $(BUILDOPT) -DUSE_ENVIRON_ARRAY
452
453 PROCESSOR_ARCHITECTURE = $(TARGETCPU)
454 ARCHNAME        = $(PLATFORM)-$(OSVERSION)-$(PROCESSOR_ARCHITECTURE)
455 ARCHDIR         = ..\lib\$(ARCHNAME)
456 COREDIR         = ..\lib\CORE
457 XCOREDIR        = ..\xlib\$(CROSS_NAME)\CORE
458 AUTODIR         = ..\lib\auto
459 LIBDIR          = ..\lib
460 EXTDIR          = ..\ext
461 PODDIR          = ..\pod
462 EXTUTILSDIR     = $(LIBDIR)\ExtUtils
463
464 LINK32          = link
465 LIB32           = $(LINK32) -lib
466 RSC             = rc
467
468 INCLUDES        = -I.\include -I..\win32\include -I. -I..
469 DEFINES         = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) $(CECFLAGS)
470 LOCDEFS         = -DPERLDLL -DPERL_CORE
471 CXX_FLAG        = -TP
472
473 PERLEXE_RES     = perl.res
474 PERLDLL_RES     =
475
476 !if "$(CFG)" == "RELEASE"
477 CELIB           = celib.lib
478 !endif
479
480 !if "$(CFG)" == "DEBUG"
481 CELIB           = celib.lib
482 !endif
483
484 CELIBS          = -nodefaultlib \
485                   winsock.lib $(CELIB) coredll.lib
486
487 !if $(CEVersion) > 200
488 CELIBS          = $(CELIBS) corelibc.lib 
489 !else
490 CELIBS          = $(CELIBS) msvcrt.lib 
491 !endif
492
493 LIBBASEFILES    = $(CRYPT_LIB) $(CELIBS)
494
495 LIBFILES        = $(LIBBASEFILES) $(LIBC)
496
497 CFLAGS          = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
498                 $(PCHFLAGS) $(OPTIMIZE)
499
500 LINK_FLAGS      = -nologo -machine:$(PROCESSOR_ARCHITECTURE)
501
502 !if "$(CFG)" == "DEBUG"
503 LINK_FLAGS      = $(LINK_FLAGS) -debug:full -pdb:none 
504 !else
505 LINK_FLAGS      = $(LINK_FLAGS) -release 
506 !endif
507
508 OBJOUT_FLAG     = -Fo
509 EXEOUT_FLAG     = -Fe
510
511 CFLAGS_O        = $(CFLAGS) $(BUILDOPT)
512
513 o = .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...
536 PERLIMPLIB_EXP  = ..\..\..\xlib\$(CROSS_NAME)\CORE\perl$(PV).lib
537 PERLIMPLIB      = $(PERLCEDIR)\$(MACHINE)\perl$(PV).lib
538 PERLDLL         = $(MACHINE)\perl$(PV).dll
539
540 DLLDIR          = $(MACHINE)\dll
541 PERLEXE         = $(MACHINE)\perl.exe
542
543 CONFIGPM        = ..\xlib\$(CROSS_NAME)\Config.pm
544 MINIMOD         = ..\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
550 PERLDEP         = perldll.def
551
552 MAKE            = nmake -nologo
553
554 CFGSH_TMPL      = config.ce
555 CFGH_TMPL       = config_H.ce
556
557 #
558 # filenames given to xsubpp must have forward slashes (since it puts
559 # full pathnames in #line strings)
560 XSUBPP          = $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) ..\$(EXTUTILSDIR)\xsubpp \
561                 -C++ -prototypes
562
563 MICROCORE_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
597 EXTRACORE_SRC   = $(EXTRACORE_SRC) perllib.c
598
599 !IF "$(PERL_MALLOC)" == "define"
600 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\malloc.c
601 !ENDIF
602
603 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\perlio.c .\win32io.c
604
605 WIN32_SRC       =               \
606                 .\wince.c       \
607                 .\wincesck.c    \
608                 .\win32thread.c 
609
610 !IF "$(CRYPT_SRC)" != ""
611 WIN32_SRC       = $(WIN32_SRC) .\$(CRYPT_SRC)
612 !ENDIF
613
614 DLL_SRC         = $(DYNALOADER).c
615
616 CORE_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
656 CORE_H          = $(CORE_NOCFG_H) .\config.h
657
658 MICROCORE_OBJ   = $(MICROCORE_SRC:.c=.obj)
659 CORE_OBJ        = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj)
660 WIN32_OBJ       = $(WIN32_SRC:.c=.obj)
661 #WIN32_OBJ      = $(WIN32_OBJ:.\=.\$(DLLDIR)\)
662 MINICORE_OBJ    = $(MICROCORE_OBJ:..\=.\$(DLLDIR)\)     \
663                   $(MINIDIR)\miniperlmain$(o)   \
664                   $(MINIDIR)\perlio$(o)
665 MINIWIN32_OBJ   = $(WIN32_OBJ:.\=.\$(DLLDIR)\)
666 MINI_OBJ        = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
667 DLL_OBJ         = $(DLL_SRC:.c=.obj)
668 X2P_OBJ         = $(X2P_SRC:.c=.obj)
669
670 PERLDLL_OBJ     = $(CORE_OBJ)
671 PERLEXE_OBJ     = perlmain$(o)
672
673 PERLDLL_OBJ     = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
674 #PERLEXE_OBJ    = $(PERLEXE_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
675
676 !IF "$(USE_SETARGV)" != ""
677 SETARGV_OBJ     = setargv$(o)
678 !ENDIF
679
680 DYNAMIC_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
684 STATIC_EXT      = DynaLoader
685
686 DYNALOADER      = $(EXTDIR)\DynaLoader\DynaLoader
687
688 ERRNO_PM        = $(LIBDIR)\Errno.pm
689
690
691 EXTENSION_PM    =               \
692                 $(ERRNO_PM)
693
694 POD2HTML        = $(PODDIR)\pod2html
695 POD2MAN         = $(PODDIR)\pod2man
696 POD2LATEX       = $(PODDIR)\pod2latex
697 POD2TEXT        = $(PODDIR)\pod2text
698
699 CFG_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
731 all: 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
757 perlmain.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 #----------------------------------------------------------------------------------
776 NOT_COMPILE_EXT =
777 !if "$(MACHINE)" == "wince-sh3-palm-wce211"
778 NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
779 !endif
780 !if "$(MACHINE)" == "wince-mips-palm-wce211"
781 NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
782 !endif
783
784 Extensions: ..\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
788 Extensions_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
796 clean: 
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
805 XDLLOBJS = \
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"
848 XDLLOBJS        = $(XDLLOBJS) $(DLLDIR)\malloc.obj
849 !ENDIF
850 !IF "$(CRYPT_SRC)" != ""
851 XDLLOBJS        = $(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
873 perldll.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
890 XPERLEXEOBJS = \
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
904 iodll:     $(IO_DLL)
905 socketdll: $(SOCKET_DLL)
906 dumperdll: $(DUMPER_DLL)
907
908 dlls: 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
919 makedist: 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"
932 install: all
933         $(CECOPY) pc:$(MACHINE)/perl.exe ce:$(INSTALL_ROOT)/bin
934         $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:$(INSTALL_ROOT)/bin
935 install_dlls: dlls
936         $(CECOPY) pc:../lib/auto/IO/io.dll ce:$(INSTALL_ROOT)/lib/auto/IO/io.dll
937 !else
938 install: 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
947 dist: all
948         $(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME)
949
950 zipdist: 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
954 zip:
955         $(HPERL) -I..\lib -MCross=$(CROSS_NAME) makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip
956
957 perl.ico:
958         $(HPERL) makeico.pl
959
960 hostminiperl: ..\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
968 host-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#"