66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								# Building
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For Windows systems, LibreSSL supports the mingw-w64 toolchain, which can use
							 | 
						||
| 
								 | 
							
								GCC or Clang as the compiler. Contrary to its name, mingw-w64 supports both
							 | 
						||
| 
								 | 
							
								32-bit and 64-bit build environments. If your project already uses mingw-w64,
							 | 
						||
| 
								 | 
							
								then LibreSSL should integrate very nicely. Old versions of the mingw-w64
							 | 
						||
| 
								 | 
							
								toolchain, such as the one packaged with Ubuntu 12.04, may have trouble
							 | 
						||
| 
								 | 
							
								building LibreSSL. Please try it with a recent toolchain if you encounter
							 | 
						||
| 
								 | 
							
								troubles. Cygwin provides an easy method of installing the latest mingw-w64
							 | 
						||
| 
								 | 
							
								cross compilers on Windows.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To configure and build LibreSSL for a 32-bit system, use the following
							 | 
						||
| 
								 | 
							
								build steps:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 CC=i686-w64-mingw32-gcc CPPFLAGS=-D__MINGW_USE_VC2005_COMPAT \
							 | 
						||
| 
								 | 
							
								 ./configure --host=i686-w64-mingw32
							 | 
						||
| 
								 | 
							
								 make
							 | 
						||
| 
								 | 
							
								 make check
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For 64-bit builds, use these instead:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 CC=x86_64-w64-mingw32-gcc ./configure --host=x86_64-w64-mingw32
							 | 
						||
| 
								 | 
							
								 make
							 | 
						||
| 
								 | 
							
								 make check
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Why the -D__MINGW_USE_VC2005_COMPAT flag on 32-bit systems?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								An ABI change introduced with Microsoft Visual C++ 2005 (also known as
							 | 
						||
| 
								 | 
							
								Visual C++ 8.0) switched time_t from 32-bit to 64-bit. It is important to
							 | 
						||
| 
								 | 
							
								build LibreSSL with 64-bit time_t whenever possible, because 32-bit time_t
							 | 
						||
| 
								 | 
							
								is unable to represent times past 2038 (this is commonly known as the
							 | 
						||
| 
								 | 
							
								Y2K38 problem).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If LibreSSL is built with 32-bit time_t, when verifying a certificate whose
							 | 
						||
| 
								 | 
							
								expiry date is set past 19 January 2038, it will be unable to tell if the
							 | 
						||
| 
								 | 
							
								certificate has expired or not, and thus take the safe stance and reject it.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In order to avoid this, you need to build LibreSSL (and everything that links
							 | 
						||
| 
								 | 
							
								with it) with the -D__MINGW_USE_VC2005_COMPAT flag. This tells mingw-w64 to
							 | 
						||
| 
								 | 
							
								use the new ABI.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								64-bit systems always have a 64-bit time_t and are not affected by this
							 | 
						||
| 
								 | 
							
								problem.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Using Libressl with Visual Studio
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A script for generating ready-to-use .DLL and static .LIB files is included in
							 | 
						||
| 
								 | 
							
								the source repository at
							 | 
						||
| 
								 | 
							
								https://github.com/libressl-portable/portable/blob/master/dist-win.sh
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This script uses mingw-w64 to build LibreSSL and then uses Visual Studio tools
							 | 
						||
| 
								 | 
							
								to generate compatible library import files ready-to-use with Visual
							 | 
						||
| 
								 | 
							
								Studio projects. Static and dynamic libraries are included. The script uses
							 | 
						||
| 
								 | 
							
								cv2pdb to generate Visual Studio and windbg compatible debug files. cv2pdb is a
							 | 
						||
| 
								 | 
							
								tool developed for the D language and can be found here:
							 | 
						||
| 
								 | 
							
								https://github.com/rainers/cv2pdb
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Pre-built Windows binaries are available with LibreSSL releases if you do not
							 | 
						||
| 
								 | 
							
								have a mingw-w64 build environment. Mingw-w64 code is largely, but not 100%,
							 | 
						||
| 
								 | 
							
								compatible with code built from Visual Studio. Notably, FILE * pointers cannot
							 | 
						||
| 
								 | 
							
								be shared between code built for Mingw-w64 and Visual Studio.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								As of LibreSSL 2.2.2, Visual Studio Native builds can be produced using CMake.
							 | 
						||
| 
								 | 
							
								This produces ABI-compatible libraries for linking with native code generated
							 | 
						||
| 
								 | 
							
								by Visual Studio.
							 |