xref: /minix3/crypto/external/bsd/openssl/dist/INSTALL.W32 (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc
2*ebfedea0SLionel Sambuc INSTALLATION ON THE WIN32 PLATFORM
3*ebfedea0SLionel Sambuc ----------------------------------
4*ebfedea0SLionel Sambuc
5*ebfedea0SLionel Sambuc [Instructions for building for Windows CE can be found in INSTALL.WCE]
6*ebfedea0SLionel Sambuc [Instructions for building for Win64 can be found in INSTALL.W64]
7*ebfedea0SLionel Sambuc
8*ebfedea0SLionel Sambuc Here are a few comments about building OpenSSL for Win32 environments,
9*ebfedea0SLionel Sambuc such as Windows NT and Windows 9x. It should be noted though that
10*ebfedea0SLionel Sambuc Windows 9x are not ordinarily tested. Its mention merely means that we
11*ebfedea0SLionel Sambuc attempt to maintain certain programming discipline and pay attention
12*ebfedea0SLionel Sambuc to backward compatibility issues, in other words it's kind of expected
13*ebfedea0SLionel Sambuc to work on Windows 9x, but no regression tests are actually performed.
14*ebfedea0SLionel Sambuc
15*ebfedea0SLionel Sambuc On additional note newer OpenSSL versions are compiled and linked with
16*ebfedea0SLionel Sambuc Winsock 2. This means that minimum OS requirement was elevated to NT 4
17*ebfedea0SLionel Sambuc and Windows 98 [there is Winsock 2 update for Windows 95 though].
18*ebfedea0SLionel Sambuc
19*ebfedea0SLionel Sambuc - you need Perl for Win32.  Unless you will build on Cygwin, you will need
20*ebfedea0SLionel Sambuc   ActiveState Perl, available from http://www.activestate.com/ActivePerl.
21*ebfedea0SLionel Sambuc
22*ebfedea0SLionel Sambuc - one of the following C compilers:
23*ebfedea0SLionel Sambuc
24*ebfedea0SLionel Sambuc  * Visual C++
25*ebfedea0SLionel Sambuc  * Borland C
26*ebfedea0SLionel Sambuc  * GNU C (Cygwin or MinGW)
27*ebfedea0SLionel Sambuc
28*ebfedea0SLionel Sambuc- Netwide Assembler, a.k.a. NASM, available from http://nasm.sourceforge.net/
29*ebfedea0SLionel Sambuc  is required if you intend to utilize assembler modules. Note that NASM
30*ebfedea0SLionel Sambuc  is now the only supported assembler.
31*ebfedea0SLionel Sambuc
32*ebfedea0SLionel Sambuc If you are compiling from a tarball or a Git snapshot then the Win32 files
33*ebfedea0SLionel Sambuc may well be not up to date. This may mean that some "tweaking" is required to
34*ebfedea0SLionel Sambuc get it all to work. See the trouble shooting section later on for if (when?)
35*ebfedea0SLionel Sambuc it goes wrong.
36*ebfedea0SLionel Sambuc
37*ebfedea0SLionel Sambuc Visual C++
38*ebfedea0SLionel Sambuc ----------
39*ebfedea0SLionel Sambuc
40*ebfedea0SLionel Sambuc If you want to compile in the assembly language routines with Visual
41*ebfedea0SLionel Sambuc C++, then you will need already mentioned Netwide Assembler binary,
42*ebfedea0SLionel Sambuc nasmw.exe or nasm.exe, to be available on your %PATH%.
43*ebfedea0SLionel Sambuc
44*ebfedea0SLionel Sambuc Firstly you should run Configure with platform VC-WIN32:
45*ebfedea0SLionel Sambuc
46*ebfedea0SLionel Sambuc > perl Configure VC-WIN32 --prefix=c:\some\openssl\dir
47*ebfedea0SLionel Sambuc
48*ebfedea0SLionel Sambuc Where the prefix argument specifies where OpenSSL will be installed to.
49*ebfedea0SLionel Sambuc
50*ebfedea0SLionel Sambuc Next you need to build the Makefiles and optionally the assembly
51*ebfedea0SLionel Sambuc language files:
52*ebfedea0SLionel Sambuc
53*ebfedea0SLionel Sambuc - If you are using NASM then run:
54*ebfedea0SLionel Sambuc
55*ebfedea0SLionel Sambuc   > ms\do_nasm
56*ebfedea0SLionel Sambuc
57*ebfedea0SLionel Sambuc - If you don't want to use the assembly language files at all then run:
58*ebfedea0SLionel Sambuc
59*ebfedea0SLionel Sambuc   > perl Configure VC-WIN32 no-asm --prefix=c:/some/openssl/dir
60*ebfedea0SLionel Sambuc   > ms\do_ms
61*ebfedea0SLionel Sambuc
62*ebfedea0SLionel Sambuc If you get errors about things not having numbers assigned then check the
63*ebfedea0SLionel Sambuc troubleshooting section: you probably won't be able to compile it as it
64*ebfedea0SLionel Sambuc stands.
65*ebfedea0SLionel Sambuc
66*ebfedea0SLionel Sambuc Then from the VC++ environment at a prompt do:
67*ebfedea0SLionel Sambuc
68*ebfedea0SLionel Sambuc > nmake -f ms\ntdll.mak
69*ebfedea0SLionel Sambuc
70*ebfedea0SLionel Sambuc If all is well it should compile and you will have some DLLs and
71*ebfedea0SLionel Sambuc executables in out32dll. If you want to try the tests then do:
72*ebfedea0SLionel Sambuc
73*ebfedea0SLionel Sambuc > nmake -f ms\ntdll.mak test
74*ebfedea0SLionel Sambuc
75*ebfedea0SLionel Sambuc
76*ebfedea0SLionel Sambuc To install OpenSSL to the specified location do:
77*ebfedea0SLionel Sambuc
78*ebfedea0SLionel Sambuc > nmake -f ms\ntdll.mak install
79*ebfedea0SLionel Sambuc
80*ebfedea0SLionel Sambuc Tweaks:
81*ebfedea0SLionel Sambuc
82*ebfedea0SLionel Sambuc There are various changes you can make to the Win32 compile
83*ebfedea0SLionel Sambuc environment. By default the library is not compiled with debugging
84*ebfedea0SLionel Sambuc symbols. If you use the platform debug-VC-WIN32 instead of VC-WIN32
85*ebfedea0SLionel Sambuc then debugging symbols will be compiled in.
86*ebfedea0SLionel Sambuc
87*ebfedea0SLionel Sambuc By default in 1.0.0 OpenSSL will compile builtin ENGINES into the
88*ebfedea0SLionel Sambuc separate shared librariesy. If you specify the "enable-static-engine"
89*ebfedea0SLionel Sambuc option on the command line to Configure the shared library build
90*ebfedea0SLionel Sambuc (ms\ntdll.mak) will compile the engines into libeay32.dll instead.
91*ebfedea0SLionel Sambuc
92*ebfedea0SLionel Sambuc The default Win32 environment is to leave out any Windows NT specific
93*ebfedea0SLionel Sambuc features.
94*ebfedea0SLionel Sambuc
95*ebfedea0SLionel Sambuc If you want to enable the NT specific features of OpenSSL (currently
96*ebfedea0SLionel Sambuc only the logging BIO) follow the instructions above but call the batch
97*ebfedea0SLionel Sambuc file do_nt.bat instead of do_ms.bat.
98*ebfedea0SLionel Sambuc
99*ebfedea0SLionel Sambuc You can also build a static version of the library using the Makefile
100*ebfedea0SLionel Sambuc ms\nt.mak
101*ebfedea0SLionel Sambuc
102*ebfedea0SLionel Sambuc
103*ebfedea0SLionel Sambuc Borland C++ builder 5
104*ebfedea0SLionel Sambuc ---------------------
105*ebfedea0SLionel Sambuc
106*ebfedea0SLionel Sambuc * Configure for building with Borland Builder:
107*ebfedea0SLionel Sambuc   > perl Configure BC-32
108*ebfedea0SLionel Sambuc
109*ebfedea0SLionel Sambuc * Create the appropriate makefile
110*ebfedea0SLionel Sambuc   > ms\do_nasm
111*ebfedea0SLionel Sambuc
112*ebfedea0SLionel Sambuc * Build
113*ebfedea0SLionel Sambuc   > make -f ms\bcb.mak
114*ebfedea0SLionel Sambuc
115*ebfedea0SLionel Sambuc Borland C++ builder 3 and 4
116*ebfedea0SLionel Sambuc ---------------------------
117*ebfedea0SLionel Sambuc
118*ebfedea0SLionel Sambuc * Setup PATH. First must be GNU make then bcb4/bin
119*ebfedea0SLionel Sambuc
120*ebfedea0SLionel Sambuc * Run ms\bcb4.bat
121*ebfedea0SLionel Sambuc
122*ebfedea0SLionel Sambuc * Run make:
123*ebfedea0SLionel Sambuc   > make -f bcb.mak
124*ebfedea0SLionel Sambuc
125*ebfedea0SLionel Sambuc GNU C (Cygwin)
126*ebfedea0SLionel Sambuc --------------
127*ebfedea0SLionel Sambuc
128*ebfedea0SLionel Sambuc Cygwin implements a Posix/Unix runtime system (cygwin1.dll) on top of
129*ebfedea0SLionel Sambuc Win32 subsystem and provides a bash shell and GNU tools environment.
130*ebfedea0SLionel Sambuc Consequently, a make of OpenSSL with Cygwin is virtually identical to
131*ebfedea0SLionel Sambuc Unix procedure. It is also possible to create Win32 binaries that only
132*ebfedea0SLionel Sambuc use the Microsoft C runtime system (msvcrt.dll or crtdll.dll) using
133*ebfedea0SLionel Sambuc MinGW. MinGW can be used in the Cygwin development environment or in a
134*ebfedea0SLionel Sambuc standalone setup as described in the following section.
135*ebfedea0SLionel Sambuc
136*ebfedea0SLionel Sambuc To build OpenSSL using Cygwin:
137*ebfedea0SLionel Sambuc
138*ebfedea0SLionel Sambuc * Install Cygwin (see http://cygwin.com/)
139*ebfedea0SLionel Sambuc
140*ebfedea0SLionel Sambuc * Install Perl and ensure it is in the path. Both Cygwin perl
141*ebfedea0SLionel Sambuc   (5.6.1-2 or newer) and ActivePerl work.
142*ebfedea0SLionel Sambuc
143*ebfedea0SLionel Sambuc * Run the Cygwin bash shell
144*ebfedea0SLionel Sambuc
145*ebfedea0SLionel Sambuc * $ tar zxvf openssl-x.x.x.tar.gz
146*ebfedea0SLionel Sambuc   $ cd openssl-x.x.x
147*ebfedea0SLionel Sambuc
148*ebfedea0SLionel Sambuc   To build the Cygwin version of OpenSSL:
149*ebfedea0SLionel Sambuc
150*ebfedea0SLionel Sambuc   $ ./config
151*ebfedea0SLionel Sambuc   [...]
152*ebfedea0SLionel Sambuc   $ make
153*ebfedea0SLionel Sambuc   [...]
154*ebfedea0SLionel Sambuc   $ make test
155*ebfedea0SLionel Sambuc   $ make install
156*ebfedea0SLionel Sambuc
157*ebfedea0SLionel Sambuc   This will create a default install in /usr/local/ssl.
158*ebfedea0SLionel Sambuc
159*ebfedea0SLionel Sambuc   To build the MinGW version (native Windows) in Cygwin:
160*ebfedea0SLionel Sambuc
161*ebfedea0SLionel Sambuc   $ ./Configure mingw
162*ebfedea0SLionel Sambuc   [...]
163*ebfedea0SLionel Sambuc   $ make
164*ebfedea0SLionel Sambuc   [...]
165*ebfedea0SLionel Sambuc   $ make test
166*ebfedea0SLionel Sambuc   $ make install
167*ebfedea0SLionel Sambuc
168*ebfedea0SLionel Sambuc Cygwin Notes:
169*ebfedea0SLionel Sambuc
170*ebfedea0SLionel Sambuc "make test" and normal file operations may fail in directories
171*ebfedea0SLionel Sambuc mounted as text (i.e. mount -t c:\somewhere /home) due to Cygwin
172*ebfedea0SLionel Sambuc stripping of carriage returns. To avoid this ensure that a binary
173*ebfedea0SLionel Sambuc mount is used, e.g. mount -b c:\somewhere /home.
174*ebfedea0SLionel Sambuc
175*ebfedea0SLionel Sambuc "bc" is not provided in older Cygwin distribution.  This causes a
176*ebfedea0SLionel Sambuc non-fatal error in "make test" but is otherwise harmless.  If
177*ebfedea0SLionel Sambuc desired and needed, GNU bc can be built with Cygwin without change.
178*ebfedea0SLionel Sambuc
179*ebfedea0SLionel Sambuc GNU C (MinGW/MSYS)
180*ebfedea0SLionel Sambuc -------------
181*ebfedea0SLionel Sambuc
182*ebfedea0SLionel Sambuc * Compiler and shell environment installation:
183*ebfedea0SLionel Sambuc
184*ebfedea0SLionel Sambuc   MinGW and MSYS are available from http://www.mingw.org/, both are
185*ebfedea0SLionel Sambuc   required. Run the installers and do whatever magic they say it takes
186*ebfedea0SLionel Sambuc   to start MSYS bash shell with GNU tools on its PATH.
187*ebfedea0SLionel Sambuc
188*ebfedea0SLionel Sambuc   N.B. Since source tar-ball can contain symbolic links, it's essential
189*ebfedea0SLionel Sambuc   that you use accompanying MSYS tar to unpack the source. It will
190*ebfedea0SLionel Sambuc   either handle them in one way or another or fail to extract them,
191*ebfedea0SLionel Sambuc   which does the trick too. Latter means that you may safely ignore all
192*ebfedea0SLionel Sambuc   "cannot create symlink" messages, as they will be "re-created" at
193*ebfedea0SLionel Sambuc   configure stage by copying corresponding files. Alternative programs
194*ebfedea0SLionel Sambuc   were observed to create empty files instead, which results in build
195*ebfedea0SLionel Sambuc   failure.
196*ebfedea0SLionel Sambuc
197*ebfedea0SLionel Sambuc * Compile OpenSSL:
198*ebfedea0SLionel Sambuc
199*ebfedea0SLionel Sambuc   $ ./config
200*ebfedea0SLionel Sambuc   [...]
201*ebfedea0SLionel Sambuc   $ make
202*ebfedea0SLionel Sambuc   [...]
203*ebfedea0SLionel Sambuc   $ make test
204*ebfedea0SLionel Sambuc
205*ebfedea0SLionel Sambuc   This will create the library and binaries in root source directory
206*ebfedea0SLionel Sambuc   and openssl.exe application in apps directory.
207*ebfedea0SLionel Sambuc
208*ebfedea0SLionel Sambuc   It is also possible to cross-compile it on Linux by configuring
209*ebfedea0SLionel Sambuc   with './Configure --cross-compile-prefix=i386-mingw32- mingw ...'.
210*ebfedea0SLionel Sambuc   'make test' is naturally not applicable then.
211*ebfedea0SLionel Sambuc
212*ebfedea0SLionel Sambuc   libcrypto.a and libssl.a are the static libraries. To use the DLLs,
213*ebfedea0SLionel Sambuc   link with libeay32.a and libssl32.a instead.
214*ebfedea0SLionel Sambuc
215*ebfedea0SLionel Sambuc   See troubleshooting if you get error messages about functions not
216*ebfedea0SLionel Sambuc   having a number assigned.
217*ebfedea0SLionel Sambuc
218*ebfedea0SLionel Sambuc Installation
219*ebfedea0SLionel Sambuc ------------
220*ebfedea0SLionel Sambuc
221*ebfedea0SLionel Sambuc If you used the Cygwin procedure above, you have already installed and
222*ebfedea0SLionel Sambuc can skip this section.  For all other procedures, there's currently no real
223*ebfedea0SLionel Sambuc installation procedure for Win32.  There are, however, some suggestions:
224*ebfedea0SLionel Sambuc
225*ebfedea0SLionel Sambuc    - do nothing.  The include files are found in the inc32/ subdirectory,
226*ebfedea0SLionel Sambuc      all binaries are found in out32dll/ or out32/ depending if you built
227*ebfedea0SLionel Sambuc      dynamic or static libraries.
228*ebfedea0SLionel Sambuc
229*ebfedea0SLionel Sambuc    - do as is written in INSTALL.Win32 that comes with modssl:
230*ebfedea0SLionel Sambuc
231*ebfedea0SLionel Sambuc	$ md c:\openssl
232*ebfedea0SLionel Sambuc	$ md c:\openssl\bin
233*ebfedea0SLionel Sambuc	$ md c:\openssl\lib
234*ebfedea0SLionel Sambuc	$ md c:\openssl\include
235*ebfedea0SLionel Sambuc	$ md c:\openssl\include\openssl
236*ebfedea0SLionel Sambuc	$ copy /b inc32\openssl\*       c:\openssl\include\openssl
237*ebfedea0SLionel Sambuc	$ copy /b out32dll\ssleay32.lib c:\openssl\lib
238*ebfedea0SLionel Sambuc	$ copy /b out32dll\libeay32.lib c:\openssl\lib
239*ebfedea0SLionel Sambuc	$ copy /b out32dll\ssleay32.dll c:\openssl\bin
240*ebfedea0SLionel Sambuc	$ copy /b out32dll\libeay32.dll c:\openssl\bin
241*ebfedea0SLionel Sambuc	$ copy /b out32dll\openssl.exe  c:\openssl\bin
242*ebfedea0SLionel Sambuc
243*ebfedea0SLionel Sambuc      Of course, you can choose another device than c:.  C: is used here
244*ebfedea0SLionel Sambuc      because that's usually the first (and often only) harddisk device.
245*ebfedea0SLionel Sambuc      Note: in the modssl INSTALL.Win32, p: is used rather than c:.
246*ebfedea0SLionel Sambuc
247*ebfedea0SLionel Sambuc
248*ebfedea0SLionel Sambuc Troubleshooting
249*ebfedea0SLionel Sambuc ---------------
250*ebfedea0SLionel Sambuc
251*ebfedea0SLionel Sambuc Since the Win32 build is only occasionally tested it may not always compile
252*ebfedea0SLionel Sambuc cleanly.  If you get an error about functions not having numbers assigned
253*ebfedea0SLionel Sambuc when you run ms\do_ms then this means the Win32 ordinal files are not up to
254*ebfedea0SLionel Sambuc date. You can do:
255*ebfedea0SLionel Sambuc
256*ebfedea0SLionel Sambuc > perl util\mkdef.pl crypto ssl update
257*ebfedea0SLionel Sambuc
258*ebfedea0SLionel Sambuc then ms\do_XXX should not give a warning any more. However the numbers that
259*ebfedea0SLionel Sambuc get assigned by this technique may not match those that eventually get
260*ebfedea0SLionel Sambuc assigned in the Git tree: so anything linked against this version of the
261*ebfedea0SLionel Sambuc library may need to be recompiled.
262*ebfedea0SLionel Sambuc
263*ebfedea0SLionel Sambuc If you get errors about unresolved symbols there are several possible
264*ebfedea0SLionel Sambuc causes.
265*ebfedea0SLionel Sambuc
266*ebfedea0SLionel Sambuc If this happens when the DLL is being linked and you have disabled some
267*ebfedea0SLionel Sambuc ciphers then it is possible the DEF file generator hasn't removed all
268*ebfedea0SLionel Sambuc the disabled symbols: the easiest solution is to edit the DEF files manually
269*ebfedea0SLionel Sambuc to delete them. The DEF files are ms\libeay32.def ms\ssleay32.def.
270*ebfedea0SLionel Sambuc
271*ebfedea0SLionel Sambuc Another cause is if you missed or ignored the errors about missing numbers
272*ebfedea0SLionel Sambuc mentioned above.
273*ebfedea0SLionel Sambuc
274*ebfedea0SLionel Sambuc If you get warnings in the code then the compilation will halt.
275*ebfedea0SLionel Sambuc
276*ebfedea0SLionel Sambuc The default Makefile for Win32 halts whenever any warnings occur. Since VC++
277*ebfedea0SLionel Sambuc has its own ideas about warnings which don't always match up to other
278*ebfedea0SLionel Sambuc environments this can happen. The best fix is to edit the file with the
279*ebfedea0SLionel Sambuc warning in and fix it. Alternatively you can turn off the halt on warnings by
280*ebfedea0SLionel Sambuc editing the CFLAG line in the Makefile and deleting the /WX option.
281*ebfedea0SLionel Sambuc
282*ebfedea0SLionel Sambuc You might get compilation errors. Again you will have to fix these or report
283*ebfedea0SLionel Sambuc them.
284*ebfedea0SLionel Sambuc
285*ebfedea0SLionel Sambuc One final comment about compiling applications linked to the OpenSSL library.
286*ebfedea0SLionel Sambuc If you don't use the multithreaded DLL runtime library (/MD option) your
287*ebfedea0SLionel Sambuc program will almost certainly crash because malloc gets confused -- the
288*ebfedea0SLionel Sambuc OpenSSL DLLs are statically linked to one version, the application must
289*ebfedea0SLionel Sambuc not use a different one.  You might be able to work around such problems
290*ebfedea0SLionel Sambuc by adding CRYPTO_malloc_init() to your program before any calls to the
291*ebfedea0SLionel Sambuc OpenSSL libraries: This tells the OpenSSL libraries to use the same
292*ebfedea0SLionel Sambuc malloc(), free() and realloc() as the application.  However there are many
293*ebfedea0SLionel Sambuc standard library functions used by OpenSSL that call malloc() internally
294*ebfedea0SLionel Sambuc (e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
295*ebfedea0SLionel Sambuc rely on CRYPTO_malloc_init() solving your problem, and you should
296*ebfedea0SLionel Sambuc consistently use the multithreaded library.
297*ebfedea0SLionel Sambuc
298*ebfedea0SLionel Sambuc Linking your application
299*ebfedea0SLionel Sambuc ------------------------
300*ebfedea0SLionel Sambuc
301*ebfedea0SLionel Sambuc If you link with static OpenSSL libraries [those built with ms/nt.mak],
302*ebfedea0SLionel Sambuc then you're expected to additionally link your application with
303*ebfedea0SLionel Sambuc WS2_32.LIB, ADVAPI32.LIB, GDI32.LIB and USER32.LIB. Those developing
304*ebfedea0SLionel Sambuc non-interactive service applications might feel concerned about linking
305*ebfedea0SLionel Sambuc with the latter two, as they are justly associated with interactive
306*ebfedea0SLionel Sambuc desktop, which is not available to service processes. The toolkit is
307*ebfedea0SLionel Sambuc designed to detect in which context it's currently executed, GUI,
308*ebfedea0SLionel Sambuc console app or service, and act accordingly, namely whether or not to
309*ebfedea0SLionel Sambuc actually make GUI calls. Additionally those who wish to
310*ebfedea0SLionel Sambuc /DELAYLOAD:GDI32.DLL and /DELAYLOAD:USER32.DLL and actually keep them
311*ebfedea0SLionel Sambuc off service process should consider implementing and exporting from
312*ebfedea0SLionel Sambuc .exe image in question own _OPENSSL_isservice not relying on USER32.DLL.
313*ebfedea0SLionel Sambuc E.g., on Windows Vista and later you could:
314*ebfedea0SLionel Sambuc
315*ebfedea0SLionel Sambuc	__declspec(dllexport) __cdecl BOOL _OPENSSL_isservice(void)
316*ebfedea0SLionel Sambuc	{   DWORD sess;
317*ebfedea0SLionel Sambuc	    if (ProcessIdToSessionId(GetCurrentProcessId(),&sess))
318*ebfedea0SLionel Sambuc	        return sess==0;
319*ebfedea0SLionel Sambuc	    return FALSE;
320*ebfedea0SLionel Sambuc	}
321*ebfedea0SLionel Sambuc
322*ebfedea0SLionel Sambuc If you link with OpenSSL .DLLs, then you're expected to include into
323*ebfedea0SLionel Sambuc your application code small "shim" snippet, which provides glue between
324*ebfedea0SLionel Sambuc OpenSSL BIO layer and your compiler run-time. Look up OPENSSL_Applink
325*ebfedea0SLionel Sambuc reference page for further details.
326