summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorDaniel Dragan <bulk88@hotmail.com>2013-01-30 18:44:50 -0500
committerKarl Williamson <public@khwilliamson.com>2013-03-12 22:20:13 -0600
commit61b311ca7a099d3f94a7ae94452bbdd59acb5c57 (patch)
treed45dd8d7a7ad8c92f8d5f33f5dc1c9c25faa7f20 /win32
parentbcd0b0c96c2e965b19018c437e5ee85ca9e1f0cf (diff)
downloadperl-61b311ca7a099d3f94a7ae94452bbdd59acb5c57.tar.gz
restore building perl5**.dll and perl.exe on WinCE
extension building problems remain but the 2 above files will build be built for WinCE with the following 3 commands, replace the folder name with what you selected for $(MACHINE) in makefile.ce nmake all nmake -f makefile.ce wince-x86-hpc-wce300\perl517.dll nmake -f makefile.ce wince-x86-hpc-wce300\perl.exe makefile.ce: - -debug:full and -pdb:none are obsolete compiler flags, and add -opt:ref:icf, to sync eVC makefile with modern VC's makefile - create a shortcut for easily creating preprocessed (.i) files for debugging on the command line - add new interp .c files that were added over the years - the Dynaloader build process for Win32 was drastically changed in commit 281da5eaa8 , fix to reflect this, a "nmake all" on the Win32 build will create the correct dynaloader .c files for the ce makefile to use later - nothing depended on .\xconfig.h in the ce makefile, so there was an error that it was missing, fix that - rebase the CE perl5**.dll to same as on Win32 makefile, makes debugging/diassembly much easier when the dll is not relocated at runtime - config.sh seems to be a win32 build file, while the script configpm wants a .sh file in \Cross, so change config.sh dependency to that win32/Makefile: - add a preprocess target to easily create .i files for debugging by hand makedef.pl: - read the comments in the script - config.h is Win32 file, not a WinCE file, so use xconfig.h when under WinCE lib/.gitignore - Cross.pm is made during the build process, it shouldn't ever be commited win32/.gitignore - xconfig.h is made during the build process, it shouldn't ever be commited win32/wince.c - identifier isnan is defed to _isnan somewhere, this created an infinite loop when CE perl was run
Diffstat (limited to 'win32')
-rw-r--r--win32/.gitignore1
-rw-r--r--win32/Makefile3
-rw-r--r--win32/Makefile.ce62
-rw-r--r--win32/wince.c6
4 files changed, 42 insertions, 30 deletions
diff --git a/win32/.gitignore b/win32/.gitignore
index e9422f2757..fd84848207 100644
--- a/win32/.gitignore
+++ b/win32/.gitignore
@@ -1,4 +1,5 @@
/config.h
+/xconfig.h
/config.w32
/perl.base
bin/*.bat
diff --git a/win32/Makefile b/win32/Makefile
index 99986caabf..5c0be56933 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -520,6 +520,9 @@ o = .obj
.c$(o):
$(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
+.c.i:
+ $(CC) -c -I$(<D) $(CFLAGS_O) -P $(OBJOUT_FLAG)$@ $<
+
.y.c:
$(NOOP)
diff --git a/win32/Makefile.ce b/win32/Makefile.ce
index 8de0d3ef43..9013eb86c9 100644
--- a/win32/Makefile.ce
+++ b/win32/Makefile.ce
@@ -81,6 +81,7 @@ MACHINE=wince-arm-hpc-wce300
#MACHINE=wince-mips-palm-wce211
#MACHINE=wince-sh3-palm-wce211
#MACHINE=wince-x86em-palm-wce211
+#MACHINE=wince-x86-hpc-wce300
!endif
# set this to your email address
@@ -335,6 +336,24 @@ STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
$(CECONSOLEDIR)/$(MACHINE)/w32console.obj
!endif
+!if "$(MACHINE)" == "wince-x86-hpc-wce300"
+CC = cl.exe
+ARCH = X86EM
+CPU = X86
+TARGETCPU = X86
+CEVersion = 400
+OSVERSION = WCE400
+PLATFORM = MS Pocket PC
+MCFLAGS = -DX86 -D_X86_ -Dx86 -DPROCESSOR_X86 -D _MT -D _DLL \
+ -DPALM_SIZE -DPOCKET_SIZE -I $(CELIBDLLDIR)\inc
+MACH = -machine:IX86
+SUBSYS = -subsystem:windowsce,2.0
+CELIBPATH = $(CELIBDLLDIR)\wince-x86-hpc-wce300-release
+LDLIBPATH = -libpath:$(CELIBPATH)
+STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
+ $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
+!endif
+
######################################################################
# common section
@@ -362,6 +381,9 @@ RCDEFS = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \
PATH=$(CEPATH);$(PATH)
+# attention, for eVC 4, these paths are not generated correctly since the
+# WinCE SDK is organized differently from eVC 3, replace the next 2 macros
+# with absolute paths to the correct directories on your system
INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include
LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH)
@@ -471,8 +493,9 @@ CELIB = celib.lib
CELIB = celib.lib
!endif
+#use ws2.lib instead of winsock.lib for WSAGetLastError
CELIBS = -nodefaultlib \
- winsock.lib $(CELIB) coredll.lib
+ ws2.lib $(CELIB) coredll.lib
!if $(CEVersion) > 200
CELIBS = $(CELIBS) corelibc.lib
@@ -487,10 +510,10 @@ LIBFILES = $(LIBBASEFILES) $(LIBC)
CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
$(PCHFLAGS) $(OPTIMIZE)
-LINK_FLAGS = -nologo -machine:$(PROCESSOR_ARCHITECTURE)
+LINK_FLAGS = -nologo -opt:ref,icf -machine:$(PROCESSOR_ARCHITECTURE)
!if "$(CFG)" == "DEBUG"
-LINK_FLAGS = $(LINK_FLAGS) -debug:full -pdb:none
+LINK_FLAGS = $(LINK_FLAGS) -debug
!else
LINK_FLAGS = $(LINK_FLAGS) -release
!endif
@@ -511,6 +534,9 @@ o = .obj
.c$(o):
$(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
+.c.i:
+ $(CC) -c -I$(<D) $(CFLAGS_O) -P $(OBJOUT_FLAG)$@ $<
+
.y.c:
$(NOOP)
@@ -571,8 +597,11 @@ MICROCORE_SRC = \
..\gv.c \
..\mro.c \
..\hv.c \
+ ..\locale.c \
..\keywords.c \
+ ..\mathoms.c \
..\mg.c \
+ ..\numeric.c \
..\op.c \
..\pad.c \
..\perl.c \
@@ -613,8 +642,6 @@ WIN32_SRC = \
WIN32_SRC = $(WIN32_SRC) .\$(CRYPT_SRC)
!ENDIF
-DLL_SRC = $(DYNALOADER).c
-
CORE_NOCFG_H = \
..\av.h \
..\cop.h \
@@ -712,7 +739,7 @@ all: hostminiperl $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) MakePPPort E
$(DYNALOADER)$(o) : $(DYNALOADER).c xconfig.h $(EXTDIR)\DynaLoader\dlutils.c
-$(CONFIGPM) : $(HPERL) ..\config.sh config_h.PL ..\minimod.pl
+$(CONFIGPM) : $(HPERL) ..\Cross\config-$(MACHINE).sh config_h.PL ..\minimod.pl
cd .. && $(HPERL) -Ilib configpm --cross=$(CROSS_NAME) --no-glossary
-mkdir $(XCOREDIR)
$(XCOPY) ..\*.h $(XCOREDIR)\*.*
@@ -727,25 +754,12 @@ $(CONFIGPM) : $(HPERL) ..\config.sh config_h.PL ..\minimod.pl
-$(HPERL) -I..\lib $(ICWD) -MCross=$(CROSS_NAME) config_h.PL "INST_VER=$(INST_VER)" "CORE_DIR=$(XCOREDIR)" "CONFIG_H=xconfig.h"
$(XCOPY) xconfig.h $(XCOREDIR)\config.h
-..\config.sh: config.ce config_sh.PL
- $(HPERL) -I..\lib -I. config_sh.PL $(CFG_VARS) config.ce > ..\config.sh
+..\Cross\config-$(MACHINE).sh: config.ce config_sh.PL
+ $(HPERL) -I..\lib -I. config_sh.PL $(CFG_VARS) config.ce > ..\Cross\config-$(MACHINE).sh
$(MINIMOD) : ..\minimod.pl
cd .. && $(HPERL) minimod.pl > lib\ExtUtils\Miniperl.pm
-$(DYNALOADER).c: $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
- if not exist $(AUTODIR) mkdir $(AUTODIR)
- cd $(EXTDIR)\$(*B)
- $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) $(*B)_pm.PL
- cd ..\..\win32
- $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
- cd $(EXTDIR)\$(*B)
- $(XSUBPP) dl_win32.xs > $(*B).c
- cd ..\..\win32
-
-$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
- $(COPY) dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
-
MakePPPort: $(MINIPERL) $(CONFIGPM)
$(HPERL) -I..\lib -MCross=$(CROSS_NAME) ..\mkppport
@@ -779,7 +793,7 @@ clean:
-rm -f $(MACHINE)/*.exe
-rm -f $(MACHINE)/*.dll
-rm -f $(MACHINE)/*.lib
- -rm -f ../config.sh ../lib/Config.pm
+ -rm -f ..\Cross\config-$(MACHINE).sh ../lib/Config.pm
-rm -f config.h xconfig.h perl.res
-rm -f ../t/test_state
@@ -853,13 +867,13 @@ $(DLLDIR)\perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
rem (frustrated) mv perllib.obj $(DLLDIR)
!ENDIF
-perldll.def : $(HPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl
+perldll.def : $(HPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl .\xconfig.h
$(HPERL) -I..\lib -MCross create_perllibst_h.pl
$(HPERL) -I..\lib -MCross -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) TARG_DIR=..\ > perldll.def
$(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES)
- $(LINK32) -dll -def:perldll.def -out:$@ \
+ $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ \
$(SUBSYS) $(LDLIBPATH) \
$(LINK_FLAGS) $(LIBFILES) \
$(XDLLOBJS) $(PERLDLL_RES)
diff --git a/win32/wince.c b/win32/wince.c
index b4fc96c1ff..a1e810d82a 100644
--- a/win32/wince.c
+++ b/win32/wince.c
@@ -2778,12 +2778,6 @@ getcwd(char *buf, size_t size)
return xcegetcwd(buf, size);
}
-int
-isnan(double d)
-{
- return _isnan(d);
-}
-
DllExport PerlIO*
win32_popenlist(const char *mode, IV narg, SV **args)