WinCE Perl EVC4 support
authorDaniel Dragan <bulk88@hotmail.com>
Tue, 22 Oct 2013 01:59:32 +0000 (21:59 -0400)
committerSteve Hay <steve.m.hay@googlemail.com>
Tue, 22 Oct 2013 07:18:04 +0000 (08:18 +0100)
- CCTYPE has always been empty string in Makefile.ce, makedef.pl does not
  complain about this, but it is a bug, so fix it

- create a profile for a EVC4 arm build

- put -GS- and -GL flags into compiler version specific defs so VC6 era
  EVC4 will work

- don't delete ..\lib\Config.pm, it was made by win32/Makefile, for a
  Desktop Perl, deleting this breaks miniperl when it loads its pure perl
  modules for cross MakeMaker module building, and requires rebuilding the
  Desktop Perl so miniperl works again. CE Perl has its Config.pm in the
  xlib\$(MACHINE) dir

win32/Makefile.ce

index 4ac1e49..a6f57aa 100644 (file)
@@ -57,6 +57,15 @@ NOOP    = @echo
 # keep this untouched!
 NULL      =
 
+#
+# uncomment exactly one of the following
+#
+# Embedded Visual C++ 4 and older
+CCTYPE         = MSVC60
+# Smart Devices for Visual C++ 2005 (aka Visual C++ 8.x) (full version)
+#CCTYPE                = MSVC80
+# Smart Devices for Visual C++ 2008 (aka Visual C++ 9.x) (full version)
+#CCTYPE                = MSVC90
 
 #CFG=DEBUG
 CFG=RELEASE
@@ -76,6 +85,7 @@ MACHINE=wince-arm-hpc-wce300
 #MACHINE=wince-sh3-palm-wce211
 #MACHINE=wince-x86em-palm-wce211
 #MACHINE=wince-x86-hpc-wce300
+#MACHINE=wince-arm-pocket-wce400
 !endif
 
 # set this to your email address
@@ -348,11 +358,31 @@ STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
 !endif
 
+!if "$(MACHINE)" == "wince-arm-pocket-wce400"
+#CC         = clarm.exe #set in WCEARMV4.BAT
+ARCH       = ARM
+CPU        = ARM
+TARGETCPU  = ARM
+CEVersion  = 400
+#OSVERSION  = WCE300 #set in WCEARMV4.BAT
+PLATFORM   = MS Pocket PC
+MCFLAGS    = -D ARM -D arm -D _ARM_ -D _arm_ -DPROCESSOR_ARM \
+             -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
+             -I $(CELIBDLLDIR)\inc
+MACH       = -machine:arm
+SUBSYS     = -subsystem:windowsce,4.00
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release
+LDLIBPATH  = -libpath:$(CELIBPATH)
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
+!endif
+
+
 ######################################################################
 # common section
 
 CEDEFS    = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \
-            $(MCFLAGS) -D PERL -GS-
+            $(MCFLAGS) -D PERL
 
 CECFLAGS  = $(CEDEFS) -Zi
 
@@ -365,9 +395,16 @@ CECFLAGS  = $(CECFLAGS) -Od
 # Also the dll cannot be loaded by perl.exe...
 !if "$(CPU)" == "SH3"
 !else
-CECFLAGS  = $(CECFLAGS) -O1 -GL
+CECFLAGS  = $(CECFLAGS) -O1
 !endif
-
+!  IF "$(CCTYPE)" != "MSVC60"
+#turn on LTCG optimization for CCs that have it
+CECFLAGS       = $(CECFLAGS) -GL
+!  ENDIF
+!  IF "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC90"
+#no stack security cookie for CCs where its on by default
+CECFLAGS       = $(CECFLAGS) -GS-
+!  ENDIF
 !endif
 
 RCDEFS    = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \
@@ -508,6 +545,11 @@ CFLAGS             = -nologo -GF -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
 
 LINK_FLAGS     = -nologo -debug -opt:ref,icf -machine:$(PROCESSOR_ARCHITECTURE)
 
+!if "$(CFG)" == "RELEASE" && "$(CCTYPE)" != "MSVC60"
+#see matching flag in CECFLAGS
+LINK_FLAGS     = $(LINK_FLAGS) -ltcg
+!endif
+
 OBJOUT_FLAG    = -Fo
 EXEOUT_FLAG    = -Fe
 
@@ -798,7 +840,7 @@ clean: Extensions_clean
   -@$(DEL) .\$(MACHINE)\*.lib
         -@$(DEL) .\$(MACHINE)\*.exp
         -@$(DEL) .\$(MACHINE)\*.pdb
-  -@$(DEL) ..\Cross\config-$(MACHINE).sh ..\lib\Config.pm
+  -@$(DEL) ..\Cross\config-$(MACHINE).sh
         -if exist ..\xlib rmdir /s /q ..\xlib
         -if exist .\$(MACHINE) rmdir /s /q .\$(MACHINE)
   -@$(DEL) config.h xconfig.h perl.res