blob: 1a4491eabfb0ba3b57467b1bdd698645a528c359 [file] [log] [blame]
willy tarreau78345332005-12-18 01:33:16 +01001 -------------------
2 H A - P r o x y
3 How to build it
4 -------------------
Willy Tarreau83b30c12008-05-25 10:32:50 +02005 version 1.3.15
willy tarreau78345332005-12-18 01:33:16 +01006 willy tarreau
Willy Tarreau83b30c12008-05-25 10:32:50 +02007 2008/05/25
willy tarreau78345332005-12-18 01:33:16 +01008
9
10To build haproxy, you will need :
11 - GNU make. Neither Solaris nor OpenBSD's make work with this makefile.
Willy Tarreau83b30c12008-05-25 10:32:50 +020012 However, specific Makefiles for BSD and OSX are provided.
13 - GCC between 2.91 and 4.3. Others may work, but not tested.
willy tarreau78345332005-12-18 01:33:16 +010014 - GNU ld
15
16Also, you might want to build with libpcre support, which will provide a very
17efficient regex implementation and will also fix some badness on Solaris's one.
18
19To build haproxy, you have to choose your target OS amongst the following ones
20and assign it to the TARGET variable :
21
Willy Tarreau83b30c12008-05-25 10:32:50 +020022 - linux22 for Linux 2.2
23 - linux24 for Linux 2.4 and above (default)
24 - linux24e for Linux 2.4 with support for a working epoll (> 0.21)
Willy Tarreau83b30c12008-05-25 10:32:50 +020025 - linux26 for Linux 2.6 and above
26 - solaris for Solaris 8 or 10 (others untested)
27 - freebsd for FreeBSD 5 to 6.2 (others untested)
28 - openbsd for OpenBSD 3.1 to 3.7 (others untested)
Yitzhak Sapir32087312009-06-14 18:27:54 +020029 - cygwin for Cygwin
Willy Tarreau83b30c12008-05-25 10:32:50 +020030 - generic for any other OS.
31 - custom to manually adjust every setting
willy tarreau78345332005-12-18 01:33:16 +010032
33You may also choose your CPU to benefit from some optimizations. This is
34particularly important on UltraSparc machines. For this, you can assign
35one of the following choices to the CPU variable :
36
37 - i686 for intel PentiumPro, Pentium 2 and above, AMD Athlon
38 - i586 for intel Pentium, AMD K6, VIA C3.
39 - ultrasparc : Sun UltraSparc I/II/III/IV processor
40 - generic : any other processor or no specific optimization. (default)
41
Willy Tarreau83b30c12008-05-25 10:32:50 +020042Alternatively, you may just set the CPU_CFLAGS value to the optimal GCC options
43for your platform.
44
Willy Tarreauef7341d2009-04-11 19:45:50 +020045You may want to build specific target binaries which do not match your native
46compiler's target. This is particularly true on 64-bit systems when you want
47to build a 32-bit binary. Use the ARCH variable for this purpose. Right now
48it only knows about a few x86 variants (i386,i486,i586,i686,x86_64) and sets
49-m32/-m64 as well as -march=<arch> accordingly.
50
willy tarreau78345332005-12-18 01:33:16 +010051If your system supports PCRE (Perl Compatible Regular Expressions), then you
52really should build with libpcre which is between 2 and 10 times faster than
53other libc implementations. Regex are used for header processing (deletion,
54rewriting, allow, deny). The only inconvenient of libpcre is that it is not
55yet widely spread, so if you build for other systems, you might get into
56trouble if they don't have the dynamic library. In this situation, you should
57statically link libpcre into haproxy so that it will not be necessary to
Willy Tarreau83b30c12008-05-25 10:32:50 +020058install it on target systems. Available build options for PCRE are :
willy tarreau78345332005-12-18 01:33:16 +010059
Willy Tarreau83b30c12008-05-25 10:32:50 +020060 - USE_PCRE=1 to use libpcre, in whatever form is available on your system
willy tarreau78345332005-12-18 01:33:16 +010061 (shared or static)
62
Willy Tarreau83b30c12008-05-25 10:32:50 +020063 - USE_STATIC_PCRE=1 to use a static version of libpcre even if the dynamic
64 one is available. This will enhance portability.
65
66 - with no option, use your OS libc's standard regex implemntation (default).
67 Warning! group references on Solaris seem broken. Use static-pcre whenever
68 possible.
willy tarreau78345332005-12-18 01:33:16 +010069
70By default, the DEBUG variable is set to '-g' to enable debug symbols. It is
71not wise to disable it on uncommon systems, because it's often the only way to
72get a complete core when you need one. Otherwise, you can set DEBUG to '-s' to
73strip the binary.
74
75For example, I use this to build for Solaris 8 :
76
Willy Tarreau83b30c12008-05-25 10:32:50 +020077 $ make TARGET=solaris CPU=ultrasparc USE_STATIC_PCRE=1
willy tarreau78345332005-12-18 01:33:16 +010078
Willy Tarreau83b30c12008-05-25 10:32:50 +020079And I build it this way on OpenBSD or FreeBSD :
willy tarreaud38e72d2006-03-19 20:56:52 +010080
81 $ make -f Makefile.bsd REGEX=pcre DEBUG= COPTS.generic="-Os -fomit-frame-pointer -mgnu"
82
Willy Tarreauef7341d2009-04-11 19:45:50 +020083In order to build a 32-bit binary on an x86_64 Linux system :
84
85 $ make TARGET=linux26 ARCH=i386
86
willy tarreau78345332005-12-18 01:33:16 +010087If you need to pass other defines, includes, libraries, etc... then please
88check the Makefile to see which ones will be available in your case, and
Willy Tarreau83b30c12008-05-25 10:32:50 +020089use the USE_* variables in the GNU Makefile, or ADDINC, ADDLIB, and DEFINE
90variables in the BSD makefiles.
willy tarreau78345332005-12-18 01:33:16 +010091
Willy Tarreau97ec9692010-01-28 20:52:05 +010092AIX 5.3 is known to work with the generic target. However, for the binary to
93also run on 5.2 or earlier, you need to build with DEFINE="-D_MSGQSUPPORT",
94otherwise __fd_select() will be used while not being present in the libc.
95
willy tarreau78345332005-12-18 01:33:16 +010096-- end