]>
Commit | Line | Data |
---|---|---|
4109b97c RE |
1 | |
2 | INSTALLATION ON THE WIN32 PLATFORM | |
3 | ---------------------------------- | |
5c00879e | 4 | |
4109b97c RE |
5 | Heres a few comments about building OpenSSL in Windows environments. Most of |
6 | this is tested on Win32 but it may also work in Win 3.1 with some | |
7 | modification. See the end of this file for Eric's original comments. | |
5c00879e | 8 | |
982baa7b | 9 | You need Perl for Win32 (available from http://www.activestate.com/ActivePerl) |
31a674d8 | 10 | and one of the following C compilers: |
06c68491 | 11 | |
31a674d8 UM |
12 | * Visual C++ |
13 | * Borland C | |
14 | * GNU C (Mingw32 or Cygwin32) | |
5c00879e | 15 | |
4109b97c RE |
16 | If you are compiling from a tarball or a CVS snapshot then the Win32 files |
17 | may well be not up to date. This may mean that some "tweaking" is required to | |
18 | get it all to work. See the trouble shooting section later on for if (when?) | |
19 | it goes wrong. | |
5c00879e | 20 | |
31a674d8 UM |
21 | Visual C++ |
22 | ---------- | |
5c00879e | 23 | |
31a674d8 | 24 | Firstly you should run Configure and build the Win32 Makefiles: |
5c00879e | 25 | |
31a674d8 | 26 | > perl Configure VC-WIN32 |
4109b97c | 27 | > ms\do_ms |
5c00879e | 28 | |
4109b97c RE |
29 | If you get errors about things not having numbers assigned then check the |
30 | troubleshooting section: you probably wont be able to compile it as it | |
31 | stands. | |
5c00879e | 32 | |
4109b97c | 33 | Then from the VC++ environment at a prompt do: |
5c00879e | 34 | |
4109b97c | 35 | > nmake -f ms\ntdll.mak |
5c00879e | 36 | |
4109b97c RE |
37 | If all is well it should compile and you will have some DLLs and executables |
38 | in out32dll. If you want to try the tests then do: | |
39 | ||
40 | > cd out32dll | |
41 | > ..\ms\test | |
5c00879e | 42 | |
31a674d8 UM |
43 | Tweaks: |
44 | ||
45 | There are various changes you can make to the Win32 compile environment. If | |
46 | you have the MASM assembler 'ml' then you can try the assembly language code. | |
47 | To do this remove the 'no-asm' part from do_ms.bat. You can also add 'debug' | |
48 | here to make a debugging version of the library. | |
49 | ||
50 | The default Win32 environment is to leave out any Windows NT specific | |
51 | features. | |
52 | ||
53 | If you want to enable the NT specific features of OpenSSL (currently only the | |
54 | logging BIO) follow the instructions above but call the batch file do_nt.bat | |
55 | instead of do_ms.bat. | |
56 | ||
57 | You can also build a static version of the library using the Makefile | |
58 | ms\nt.mak | |
59 | ||
60 | Borland C++ builder 3 and 4 | |
61 | --------------------------- | |
62 | ||
63 | * Setup PATH. First must be GNU make then bcb4/bin | |
64 | ||
65 | * Run ms\bcb4.bat | |
66 | ||
67 | * Run make: | |
68 | > make -f bcb.mak | |
69 | ||
70 | GNU C (Mingw32) | |
71 | --------------- | |
72 | ||
73 | To build OpenSSL, you need the Mingw32 package and GNU make. | |
74 | ||
7d5d27b9 | 75 | * Compiler installation: |
fb3214f9 | 76 | |
7d5d27b9 UM |
77 | Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/ |
78 | mingw32/egcs-1.1.2/egcs-1.1.2-mingw32.zip>. GNU make is at | |
79 | <ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32/binaries/ | |
80 | make-3.76.1.zip>. Install both of them in C:\egcs-1.1.2 and run | |
81 | C:\egcs-1.1.2\mingw32.bat to set the PATH. | |
31a674d8 | 82 | |
7d5d27b9 | 83 | * Compile OpenSSL: |
31a674d8 | 84 | |
31ff97b2 UM |
85 | > perl Configure Mingw32 |
86 | > ms\mw.bat | |
31a674d8 | 87 | |
7d5d27b9 | 88 | This will create the library and binaries in out. |
31a674d8 | 89 | |
7d5d27b9 UM |
90 | libcrypto.a and libssl.a are the static libraries. To use the DLLs, |
91 | link with libeay32.a and libssl32.a instead. | |
31a674d8 | 92 | |
7d5d27b9 UM |
93 | See troubleshooting if you get error messages about functions not having |
94 | a number assigned. | |
31a674d8 | 95 | |
7d5d27b9 | 96 | * You can now try the tests: |
31a674d8 UM |
97 | |
98 | > cd out | |
99 | > ..\ms\test | |
100 | ||
4109b97c RE |
101 | Troubleshooting |
102 | --------------- | |
5c00879e | 103 | |
4109b97c RE |
104 | Since the Win32 build is only occasionally tested it may not always compile |
105 | cleanly. If you get an error about functions not having numbers assigned | |
106 | when you run ms\do_ms then this means the Win32 ordinal files are not up to | |
107 | date. You can do: | |
5c00879e | 108 | |
4109b97c | 109 | > perl util\mkdef.pl crypto ssl update |
5c00879e | 110 | |
4109b97c RE |
111 | then ms\do_ms should not give a warning any more. However the numbers that |
112 | get assigned by this technique may not match those that eventually get | |
113 | assigned in the CVS tree: so anything linked against this version of the | |
114 | library may need to be recompiled. | |
5c00879e | 115 | |
4109b97c RE |
116 | If you get errors about unresolved externals then this means that either you |
117 | didn't read the note above about functions not having numbers assigned or | |
118 | someone forgot to add a function to the header file. | |
5c00879e | 119 | |
4109b97c | 120 | In this latter case check out the header file to see if the function is |
a5ab0532 | 121 | defined in the header file. |
5c00879e | 122 | |
4109b97c | 123 | If you get warnings in the code then the compilation will halt. |
5c00879e | 124 | |
4109b97c RE |
125 | The default Makefile for Win32 halts whenever any warnings occur. Since VC++ |
126 | has its own ideas about warnings which don't always match up to other | |
127 | environments this can happen. The best fix is to edit the file with the | |
128 | warning in and fix it. Alternatively you can turn off the halt on warnings by | |
129 | editing the CFLAG line in the Makefile and deleting the /WX option. | |
5c00879e | 130 | |
4109b97c RE |
131 | You might get compilation errors. Again you will have to fix these or report |
132 | them. | |
5c00879e | 133 | |
4109b97c RE |
134 | One final comment about compiling applications linked to the OpenSSL library. |
135 | If you don't use the multithreaded DLL runtime library (/MD option) your | |
136 | program will almost certainly crash: see the original SSLeay description | |
137 | below for more details. | |
5c00879e | 138 | |
5c00879e | 139 | -------------------------------------------------------------------------------- |
4109b97c | 140 | The orignal Windows build instructions from SSLeay follow. |
a5ab0532 DSH |
141 | Note: some of this may be out of date and no longer applicable. In particular |
142 | the Crypto_malloc_init() comment appears to be wrong: you always need to use | |
143 | the same runtime library as the DLL itself. | |
5c00879e DSH |
144 | -------------------------------------------------------------------------------- |
145 | ||
d02b48c6 RE |
146 | The Microsoft World. |
147 | ||
148 | The good news, to build SSLeay for the Microsft World | |
149 | ||
150 | Windows 3.1 DLL's | |
151 | perl Configure VC-WIN16 | |
152 | nmake -f ms\w31dll.mak | |
153 | ||
154 | Windows NT/95 DLL's | |
155 | perl Configure VC-WIN32 | |
156 | nmake -f ms\ntdll.mak | |
157 | ||
158 | Now the bad news | |
159 | All builds were done using Microsofts Visual C++ 1.52c and [45].x. | |
160 | If you are a borland person, you are probably going to have to help me | |
161 | finish the stuff in util/pl/BC*pl | |
162 | ||
163 | All builds were made under Windows NT - this means long filenames, so | |
164 | you may have problems under Windows 3.1 but probably not under 95. | |
165 | ||
166 | Because file pointers don't work in DLL's under Windows 3.1 (well at | |
167 | least stdin/stdout don't and I don't like having to differentiate | |
168 | between these and other file pointers), I now use the BIO file-pointer | |
169 | module, which needs to be linked into your application. You can either | |
170 | use the memory buffer BIO for IO, or compile bss_file.c into your | |
171 | application, it is in the apps directory and is just a copy of | |
172 | crypto/buffer/bss_file.c with #define APPS_WIN16 added. | |
173 | I have not yet automated the makefile to automatically copy it into 'out' | |
174 | for a win 3.1 build.... | |
175 | ||
176 | All callbacks passed into SSLeay for Windows 3.1 need to be of type | |
177 | _far _loadds. | |
178 | ||
179 | I don't support building with the pascal calling convention. | |
180 | ||
181 | The DLL and static builds are large memory model. | |
182 | ||
183 | To build static libraries for NT/95 or win 3.1 | |
184 | ||
185 | perl util/mk1mf.pl VC-WIN32 > mf-stat.nt | |
186 | perl util/mk1mf.pl VC-WIN16 > mf-stat.w31 | |
187 | for DLL's | |
188 | perl util/mk1mf.pl dll VC-WIN32 > mf-dll.nt | |
189 | perl util/mk1mf.pl dll VC-WIN16 > mf-dll.w31 | |
190 | ||
191 | Again you will notice that if you dont have perl, you cannot do this. | |
192 | ||
193 | Now the next importaint issue. Running Configure! | |
194 | I have small assember code files for critical big number library operation | |
195 | in crypto/bn/asm. There is, asm code, object files and uuencode | |
196 | object files. They are | |
197 | x86nt32.asm - 32bit flat memory model assember - suitable Win32 | |
198 | x86w16.asm - 16bit assember - used in the msdos build. | |
199 | x86w32.asm - 32bit assember, win 3.1 segments, used for win16 build. | |
200 | ||
201 | If you feel compelled to build the 16bit maths routines in the windows 3.1 | |
202 | build, | |
203 | perl Configure VC-W31-16 | |
204 | perl util/mk1mf.pl dll VC-W31-16 > mf-dll.w31 | |
205 | ||
206 | If you hate assember and don't want anything to do with it, | |
207 | perl util/mk1mf.pl no-asm VC-WIN16 > mf-dll.w31 | |
208 | will work for any of the makefile generations. | |
209 | ||
210 | There are more options to mk1mf.pl but these all leave the temporary | |
211 | files in 'tmp' and the output files in 'out' by default. | |
212 | ||
213 | The NT build is done for console mode. | |
214 | ||
215 | The Windows 3.1 version of SSLeay uses quickwin, the interface is ugly | |
216 | but it is better than nothing. If you want ugly, try doing anything | |
217 | that involves getting a password. I decided to be ugly instead of | |
218 | echoing characters. For Windows 3.1 I would just sugest using the | |
219 | msdos version of the ssleay application for command line work. | |
220 | The QuickWin build is primarily for testing. | |
221 | ||
222 | For both NT and Windows 3.1, I have not written the code so that | |
223 | s_client, s_server can take input from the keyboard. You can happily | |
224 | start applications up in separate windows, watch them handshake, and then sit | |
225 | there for-ever. I have not had the time to get this working, and I've | |
226 | been able to test things from a unix box to the NT box :-). | |
227 | Try running ssleay s_server on the windows box | |
228 | (with either -cert ../apps/server.pem -www) | |
229 | and run ssleay s_time from another window. | |
230 | This often stuffs up on Windows 3.1, but I'm not worried since this is | |
231 | probably a problem with my demo applications, not the libraries. | |
232 | ||
233 | After a build of one of the version of microsoft SSLeay, | |
234 | 'cd ms' and then run 'test'. This should check everything out and | |
235 | even does a trial run of generating certificates. | |
236 | 'test.bat' requires that perl be install, you be in the ms directory | |
237 | (not the test directory, thats for unix so stay out :-) and that the | |
238 | build output directory be ../out | |
239 | ||
240 | On a last note, you will probably get division by zero errors and | |
241 | stuff after a build. This is due to your own inability to follow | |
242 | instructions :-). | |
243 | ||
244 | The reasons for the problem is probably one of the following. | |
245 | ||
246 | 1) You did not run Configure. This is critical for windows 3.1 when | |
247 | using assember. The values in crypto/bn/bn.h must match the | |
248 | ones requred for the assember code. (remember that if you | |
249 | edit crypto/bn/bn.h by hand, it will be clobered the next time | |
250 | you run Configure by the contents of crypto/bn/bn.org). | |
251 | SSLeay version -o will list the compile options. | |
252 | For VC-WIN32 you need bn(64,32) or bn(32,32) | |
253 | For VC-W31-32/VC-WIN16 you need bn(32,32) | |
254 | For VC-W31-16 you need bn(32,16) or bn(16,16) | |
255 | For VC-MSDOS you need bn(32,16) or bn(16,16). | |
256 | ||
257 | The first number will be 2 times bigger than the second if | |
258 | BN_LLONG is defined in bn.h and the size of the second number | |
259 | depends on the 'bits' defined at the start of bn.h. Have a | |
260 | look, it's all reasonably clear. | |
261 | If you want to start messing with 8 bit builds and things like | |
262 | that, build without the assember by re-generating a makefile | |
263 | via 'perl util/mk1mf.pl no-asm'. | |
264 | 2) You tried to build under MS-DOS or Windows 3.1 using the /G3 | |
265 | option. Don't. It is buggy (thats why you just got that | |
266 | error) and unless you want to work out which optimising flag | |
267 | to turn off, I'm not going to help you :-). I also noticed | |
268 | that code often ran slower when compiled with /G3. | |
269 | 3) Under NT/95, malloc goes stupid. You are probably linking with | |
270 | the wrong library, there are problems if you mix the threaded | |
271 | and non-threaded libraries (due to the DLL being staticly | |
272 | linked with one and the applicaion using another. | |
273 | ||
274 | Well hopefully thats most of the MS issues handled, see you in ssl-users :-). | |
275 | ||
276 | eric 30-Aug-1996 | |
277 | ||
278 | SSLeay 0.6.5 | |
279 | For Windows 95/NT, add CRYPTO_malloc_init() to your program before any | |
280 | calls to the SSLeay libraries. This function will insert callbacks so that | |
281 | the SSLeay libraries will use the same malloc(), free() and realloc() as | |
282 | your application so 'problem 3)' mentioned above will go away. | |
283 | ||
284 | There is now DES assember for Windows NT/95. The file is | |
285 | crypto/des/asm/win32.asm and replaces crypto/des/des_enc.c in the build. | |
286 | ||
287 | There is also Blowfish assember for Windows NT/95. The file is | |
288 | crypto/bf/asm/win32.asm and replaces crypto/bf/bf_enc.c in the build. | |
289 | ||
290 | eric 25-Jun-1997 | |
291 |