1# wce.mak for stunnel.exe by Michal Trojnara 1998-2021 2# with help of Pierre Delaage <delaage.pierre@free.fr> 3# pdelaage 20140610 : added UNICODE optional FLAG, always ACTIVE on WCE because of poor ANSI support 4# pdelaage 20140610 : added _WIN32_WCE flag for RC compilation, to preprocess out "HELP" unsupported menu flag on WCE 5# pdelaage 20140610 : ws2 lib is required to get WSAGetLastError routine (absent from winsock lib) 6# pdelaage 20140610 : /Dx86 flag required for X86/Emulator targets, to get proper definition for InterlockedExchange 7# pdelaage 20140610 : /MT flag is NON-SENSE for X86-WCE platforms, it is only meaningful for X86-W32-Desktop. 8# for X86-WCE targets, although compiler "cl.exe" is REALLY the same as desktop W32 VS6 C++ compiler, 9# the MT flags relating to LIBCMT is useless BECAUSE LIBCMT does NOT exist on WCE. No msvcrt on WCE either... 10 11# pdelaage 20140610 : Note on /MC flag 12# For other targets than X86/Emulator, /MC flag is redundant with "/nodefaultlib coredll.lib corelibc.lib" LD lib list. 13# For << X86 / Emulator >> target, as the cl.exe compiler IS the SAME as the standard VS6.0 C++ compiler for Desktop Pentium processor, 14# /MC flag is in fact NOT existing, thus requiring an explicit linking with core libs by using : 15# /NODEFAULTLIB coredll.lib corelibc.lib, 16# something that is correct for any WCE target, X86 and other, and leading /MC flag to be useless ALSO for other target than X86. 17 18 19# 20# DEFAULTLIB management: only 2 are necessary 21# defaultlibS, as given for CLxxx in the MS doc, ARE WRONG 22 23# !!!!!!!!!!!!!! 24# CUSTOMIZE THIS according to your wcecompat and openssl directories 25# !!!!!!!!!!!!!! 26 27# Modify this to point to your actual openssl compile directory 28# (You did already compile openssl, didn't you???) 29SSLDIR=C:\Users\pdelaage\Dvts\Contrib\openssl 30 31# Note that we currently use a multi-target customized version of legacy Essemer/wcecompat lib 32COMPATDIR=C:\Users\pdelaage\Dvts\Contrib\wcecompat\v12\patched3emu 33 34WCEVER=420 35 36# !!!!!!!!!!!!!!!!!! 37# END CUSTOMIZATION 38# !!!!!!!!!!!!!!!!!! 39 40!IF "$(TARGETCPU)"=="X86" 41WCETARGETCPU=_X86_ 42LDTARGETCPU=X86 43#pdelaage 20140621 /Dx86 for inline defs of InterlockedExchange inline in winbase.h; no more /MT 44MORECFLAGS=/Dx86 45 46# TODO: continue list for other targets : see wcecompat/wcedefs.mak for a good ref. 47# see also openssl/util/pl/vc-32.pl, also link /? 48# for LDTARGETCPU: /MACHINE:{AM33|ARM|IA64|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|MIPSR41XX|SH3|SH3DSP|SH4|SH5|THUMB|X86} 49# see wce/include/winnt.h for other "target architecture" flag 50 51!ELSEIF "$(TARGETCPU)"=="emulator" 52WCETARGETCPU=_X86_ 53LDTARGETCPU=X86 54#pdelaage 20140621 /Dx86 for inline defs of InterlockedExchange inline in winbase.h; no more /MT 55MORECFLAGS=/Dx86 56 57!ELSEIF "$(TARGETCPU)"=="MIPS16" || "$(TARGETCPU)"=="MIPSII" || "$(TARGETCPU)"=="MIPSII_FP" || "$(TARGETCPU)"=="MIPSIV" || "$(TARGETCPU)"=="MIPSIV_FP" 58WCETARGETCPU=_MIPS_ 59LDTARGETCPU=MIPS 60#pdelaage 20140621 no more /MC required 61MORECFLAGS=/DMIPS 62 63!ELSEIF "$(TARGETCPU)"=="SH3" || "$(TARGETCPU)"=="SH4" 64WCETARGETCPU=SHx 65LDTARGETCPU=$(TARGETCPU) 66#pdelaage 20140621 no more /MC required 67MORECFLAGS= 68 69!ELSE 70# default is ARM ! 71# !IF "$(TARGETCPU)"=="ARMV4" || "$(TARGETCPU)"=="ARMV4I" || "$(TARGETCPU)"=="ARMV4T" 72# the following flag is required by (eg) winnt.h, and is different from targetcpu (armV4) 73WCETARGETCPU=ARM 74LDTARGETCPU=ARM 75#pdelaage 20140621 no more /MC required 76MORECFLAGS= 77!ENDIF 78 79# ceutilsdir probably useless (nb : were tools from essemer; but ms delivers a cecopy anyway, see ms dld site) 80CEUTILSDIR=..\..\ceutils 81# "ce:" is not a correct location , but we never "make install" 82DSTDIR=ce:\stunnel 83# use MS env vars, as in wcecompat and openssl makefiles 84SDKDIR=$(SDKROOT)\$(OSVERSION)\$(PLATFORM) 85INCLUDES=-I$(SSLDIR)\inc32 -I$(COMPATDIR)\include -I"$(SDKDIR)\include\$(TARGETCPU)" 86# for X86 and other it appears that /MC or /ML flags are absurd, 87# we always have to override runtime lib list to coredll and corelibc 88#LIBS=/NODEFAULTLIB winsock.lib wcecompatex.lib libeay32.lib ssleay32.lib coredll.lib corelibc.lib 89LIBS=/NODEFAULTLIB ws2.lib wcecompatex.lib libeay32.lib ssleay32.lib coredll.lib corelibc.lib 90 91DEFINES=/DHOST=\"$(TARGETCPU)-WCE-eVC-$(WCEVER)\" 92# pdelaage 20140610 added unicode flag : ALWAYS ACTIVE on WCE, because of poor ANSI support by the MS SDK 93UNICODEFLAGS=/DUNICODE -D_UNICODE 94# /O1 /Oi more correct vs MS doc 95CFLAGS=/nologo $(MORECFLAGS) /O1 /Oi /W3 /WX /GF /Gy $(DEFINES) /D$(WCETARGETCPU) /D$(TARGETCPU) /DUNDER_CE=$(WCEVER) /D_WIN32_WCE=$(WCEVER) $(UNICODEFLAGS) $(INCLUDES) 96# pdelaage 20140610 : RC compilation requires D_WIN32_WCE flag to comment out unsupported "HELP" flag in menu definition, in resources.rc file 97RFLAGS=$(DEFINES) /D_WIN32_WCE=$(WCEVER) $(INCLUDES) 98 99# LDFLAGS: since openssl >> 098a (eg 098h) out32dll is out32dll_targetCPU for WCE 100# delaage added $(TARGETCPU) in legacy Essemer/wcecompat libpath 101# to ease multitarget compilation without recompiling everything 102# this customized version is available on: 103# http://delaage.pierre.free.fr/contrib/wcecompat/wcecompat12_patched.zip 104 105LDFLAGS=/nologo /subsystem:windowsce,3.00 /machine:$(LDTARGETCPU) /libpath:"$(SDKDIR)\lib\$(TARGETCPU)" /libpath:"$(COMPATDIR)\lib\$(TARGETCPU)" /libpath:"$(SSLDIR)\out32dll_$(TARGETCPU)" 106 107# Multi-target support for stunnel 108 109SRC=..\src 110OBJROOT=..\obj 111OBJ=$(OBJROOT)\$(TARGETCPU) 112BINROOT=..\bin 113BIN=$(BINROOT)\$(TARGETCPU) 114 115OBJS=$(OBJ)\stunnel.obj $(OBJ)\ssl.obj $(OBJ)\ctx.obj $(OBJ)\verify.obj \ 116 $(OBJ)\file.obj $(OBJ)\client.obj $(OBJ)\protocol.obj $(OBJ)\sthreads.obj \ 117 $(OBJ)\log.obj $(OBJ)\options.obj $(OBJ)\network.obj $(OBJ)\resolver.obj \ 118 $(OBJ)\str.obj $(OBJ)\tls.obj $(OBJ)\fd.obj $(OBJ)\dhparam.obj \ 119 $(OBJ)\cron.obj 120 121GUIOBJS=$(OBJ)\ui_win_gui.obj $(OBJ)\resources.res 122CLIOBJS=$(OBJ)\ui_win_cli.obj 123 124{$(SRC)\}.c{$(OBJ)\}.obj: 125 $(CC) $(CFLAGS) -Fo$@ -c $< 126 127{$(SRC)\}.cpp{$(OBJ)\}.obj: 128 $(CC) $(CFLAGS) -Fo$@ -c $< 129 130{$(SRC)\}.rc{$(OBJ)\}.res: 131 $(RC) $(RFLAGS) -fo$@ -r $< 132 133all: makedirs $(BIN)\stunnel.exe $(BIN)\tstunnel.exe 134 135makedirs: 136 -@ IF NOT EXIST $(OBJROOT) mkdir $(OBJROOT) >NUL 2>&1 137 -@ IF NOT EXIST $(OBJ) mkdir $(OBJ) >NUL 2>&1 138 -@ IF NOT EXIST $(BINROOT) mkdir $(BINROOT) >NUL 2>&1 139 -@ IF NOT EXIST $(BIN) mkdir $(BIN) >NUL 2>&1 140 141$(BIN)\stunnel.exe:$(OBJS) $(GUIOBJS) 142 link $(LDFLAGS) /out:$(BIN)\stunnel.exe $(LIBS) commctrl.lib $** 143 144$(BIN)\tstunnel.exe:$(OBJS) $(CLIOBJS) 145 link $(LDFLAGS) /out:$(BIN)\tstunnel.exe $(LIBS) $** 146 147$(OBJ)\resources.res: $(SRC)\resources.rc $(SRC)\resources.h $(SRC)\version.h 148$(OBJ)\ui_win_gui.obj: $(SRC)\ui_win_gui.c $(SRC)\version.h 149$(OBJ)\stunnel.obj: $(SRC)\stunnel.c $(SRC)\version.h 150 151# now list of openssl dll has more files, 152# but we do not use "make install" for stunnel 153# ceutils come from essemer/wcecompat website 154# some tools can be found at MS website 155# TODO: update all this ceutils stuff, or suppress it 156 157install: stunnel.exe tstunnel.exe 158 $(CEUTILSDIR)\cemkdir $(DSTDIR) || echo Directory exists? 159 $(CEUTILSDIR)\cecopy stunnel.exe $(DSTDIR) 160 $(CEUTILSDIR)\cecopy tstunnel.exe $(DSTDIR) 161 $(CEUTILSDIR)\cecopy $(SSLDIR)\out32dll_$(TARGETCPU)\libeay32.dll $(DSTDIR) 162 $(CEUTILSDIR)\cecopy $(SSLDIR)\out32dll_$(TARGETCPU)\ssleay32.dll $(DSTDIR) 163 164clean: 165 -@ IF NOT "$(TARGETCPU)"=="" del $(OBJS) $(GUIOBJS) $(CLIOBJS) $(BIN)\stunnel.exe $(BIN)\tstunnel.exe >NUL 2>&1 166 -@ IF NOT "$(TARGETCPU)"=="" rmdir $(OBJ) >NUL 2>&1 167 -@ IF NOT "$(TARGETCPU)"=="" rmdir $(BIN) >NUL 2>&1 168