blob: 63d7c676462323897e9d94b19959253d9d6e4bdc [file] [log] [blame]
Willy Tarreau7f332732018-12-16 22:27:15 +01001Installation instructions for HAProxy
2=====================================
3
Willy Tarreau975908c2020-11-05 17:00:07 +01004HAProxy 2.3 is a stable version, which means that it will get fixes for bugs as
5they are discovered till around Q1 2022 and should not receive new features.
6This version is mostly suited at experienced users who are willing to quickly
7follow updates. New users are encouraged to use long term supported versions
8such as the ones provided by their software vendor or Linux distribution, as
9such versions require far less common updates. If for any reason you'd prefer
10a different version than the one packaged for your system, you want to be
11certain to have all the fixes or to get some commercial support, other choices
12are available at https://www.haproxy.com/.
Willy Tarreau7f332732018-12-16 22:27:15 +010013
14
15Areas covered in this document
16==============================
17
181) Quick build & install
192) Basic principles
203) Build environment
214) Dependencies
225) Advanced build options
236) How to install HAProxy
24
25
261) Quick build & install
27========================
28
29If you've already built HAProxy and are just looking for a quick reminder, here
30are a few build examples :
31
32 - recent Linux system with all options, make and install :
33 $ make clean
Willy Tarreaud254aa82019-06-14 18:40:48 +020034 $ make -j $(nproc) TARGET=linux-glibc \
Willy Tarreau7f332732018-12-16 22:27:15 +010035 USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1
36 $ sudo make install
37
38 - FreeBSD and OpenBSD, build with all options :
39 $ gmake -j 4 TARGET=freebsd USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 USE_PCRE=1
40
41 - embedded Linux, build using a cross-compiler :
Willy Tarreaud254aa82019-06-14 18:40:48 +020042 $ make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_SLZ=1 USE_PCRE=1 \
43 CC=/opt/cross/gcc730-arm/bin/gcc ADDLIB=-latomic
Willy Tarreau7f332732018-12-16 22:27:15 +010044
45 - Build with static PCRE on Solaris / UltraSPARC :
46 $ make TARGET=solaris CPU=ultrasparc USE_STATIC_PCRE=1
47
48For more advanced build options or if a command above reports an error, please
49read the following sections.
50
51
522) Basic principles
53===================
54
55HAProxy uses a single GNU Makefile which supports options on the command line,
56so that there is no need to hack a "configure" file to work on your system. The
57makefile totally supports parallel build using "make -j <jobs>" where <jobs>
58matches the number of usable processors, which on some platforms is returned by
59the "nproc" utility. The explanations below may occasionally refer to some
60options, usually in the form "name=value", which have to be passed to the
61command line. This means that the option has to be passed after the "make"
62command. For example :
63
64 $ make -j $(nproc) TARGET=generic USE_GZIP=1
65
66One required option is TARGET, it must be set to a target platform name, which
67provides a number of presets. The list of known platforms is displayed when no
68target is specified. It is not strictly required to use the exact target, you
69can use a relatively similar one and adjust specific variables by hand.
70
71Most configuration variables are in fact booleans. Some options are detected and
72enabled by default if available on the target platform. This is the case for all
73those named "USE_<feature>". These booleans are enabled by "USE_<feature>=1"
74and are disabled by "USE_<feature>=" (with no value). The last occurrence on the
75command line overrides any previous one. Example :
76
77 $ make TARGET=generic USE_THREAD=
78
79In case of error or missing TARGET, a help screen is displayed. It is also
80possible to display a list of all known options using "make help".
81
82
833) Build environment
84====================
85
86HAProxy requires a working GCC or Clang toolchain and GNU make :
87
88 - GNU make >= 3.80. Note that neither Solaris nor OpenBSD's make work with
89 the GNU Makefile. If you get many syntax errors when running "make", you
90 may want to retry with "gmake" which is the name commonly used for GNU make
91 on BSD systems.
92
Willy Tarreau4ced4bd2020-07-07 16:17:00 +020093 - GCC >= 3.4 (up to 10.1 tested). Older versions can be made to work with a
Willy Tarreau7f332732018-12-16 22:27:15 +010094 few minor adaptations if really needed. Newer versions may sometimes break
95 due to compiler regressions or behaviour changes. The version shipped with
96 your operating system is very likely to work with no trouble. Clang >= 3.0
97 is also known to work as an alternative solution. Recent versions may emit
Willy Tarreau4ced4bd2020-07-07 16:17:00 +020098 a bit more warnings that are worth reporting as they may reveal real bugs.
Willy Tarreauc22747d2020-11-05 16:56:37 +010099 TCC (https://repo.or.cz/tinycc.git) is also usable for developers but will
100 not support threading and was found at least once to produce bad code in
101 some rare corner cases (since fixed). But it builds extremely quickly
102 (typically half a second for the whole project) and is very convenient to
103 run quick tests during API changes or code refactoring.
Willy Tarreau7f332732018-12-16 22:27:15 +0100104
105 - GNU ld (binutils package), with no particular version. Other linkers might
106 work but were not tested.
107
108On debian or Ubuntu systems and their derivatives, you may get all these tools
109at once by issuing the two following commands :
110
111 $ sudo apt-get update
112 $ sudo apt-get install build-essential
113
114On Fedora, CentOS, RHEL and derivatives, you may get the equivalent packages
115with the following command :
116
117 $ sudo yum groupinstall "Development Tools"
118
119Please refer to your operating system's documentation for other systems.
120
121It is also possible to build HAProxy for another system or platform using a
122cross-compiler but in this case you probably already have installed these
123tools.
124
125Building HAProxy may require between 10 and 40 MB of free space in the
126directory where the sources have been extracted, depending on the debugging
127options involved.
128
129
1304) Dependencies
131===============
132
133HAProxy in its basic form does not depend on anything beyond a working libc.
134However a number of options are enabled by default, or are highly recommended,
135and these options will typically involve some external components or libraries,
Ilya Shipitsin2a950d02020-03-06 13:07:38 +0500136depending on the targeted platform.
Willy Tarreau7f332732018-12-16 22:27:15 +0100137
138Optional dependencies may be split into several categories :
139
140 - memory allocation
141 - regular expressions
142 - multi-threading
143 - password encryption
144 - cryptography
145 - compression
146 - lua
147 - device detection
148 - miscellaneous
149
150
1514.1) Memory allocation
152----------------------
153By default, HAProxy uses the standard malloc() call provided by the libc. It
Willy Tarreauc3643512019-03-27 14:20:43 +0100154may also be built to use jemalloc, which is fast and thread-safe. In order to
155use it, please add "-ljemalloc" to the ADDLIB variable. You may possibly also
156need to append "-lpthread" and/or "-ldl" depending on the operating system.
Willy Tarreau7f332732018-12-16 22:27:15 +0100157
158
1594.2) Regular expressions
160------------------------
161HAProxy may make use regular expressions (regex) to match certain patterns. The
162regex engine is provided by default in the libc. On some operating systems, it
163might happen that the original regex library provided by the libc is too slow,
164too limited or even bogus. For example, on older Solaris versions up to 8, the
165default regex used not to properly extract group references, without reporting
166compilation errors. Also, some early versions of the GNU libc used to include a
167regex engine which could be slow or even crash on certain patterns.
168
169If you plan on importing a particularly heavy configuration involving a lot of
170regex, you may benefit from using some alternative regex implementations sur as
171PCRE. HAProxy natively supports PCRE and PCRE2, both in standard and JIT
172flavors (Just In Time). The following options are available depending on the
173library version provided on your system :
174
175 - "USE_PCRE=1" : enable PCRE version 1, dynamic linking
176 - "USE_STATIC_PCRE=1" : enable PCRE version 1, static linking
177 - "USE_PCRE_JIT=1" : enable PCRE version 1 in JIT mode
178 - "USE_PCRE2=1" : enable PCRE version 2, dynamic linking
179 - "USE_STATIC_PCRE2=1" : enable PCRE version 2, static linking
180 - "USE_PCRE2_JIT=1" : enable PCRE version 2 in JIT mode
181
182Both of these libraries may be downloaded from https://www.pcre.org/.
183
184By default, the include and library paths are figured from the "pcre-config"
185and "pcre2-config" utilities. If these ones are not installed or inaccurate
186(for example when cross-compiling), it is possible to force the path to include
187files using "PCRE_INC" and "PCRE2_INC" respectively, and the path to library
188files using "PCRE_LIB" and "PCRE2_LIB" respectively. For example :
189
190 $ make TARGET=generic \
191 USE_PCRE2_JIT=1 PCRE2_INC=/opt/cross/include PCRE2_LIB=/opt/cross/lib
192
193
1944.3) Multi-threading
195--------------------
196On some systems for which positive feedback was reported, multi-threading will
197be enabled by default. When multi-threading is used, the libpthread library
198(POSIX threading) will be used. If the target system doesn't contain such a
199library, it is possible to forcefully disable multi-threading by adding
200"USE_THREAD=" on the command line.
201
202
2034.4) Password encryption
204------------------------
205Many systems provide password encryption functions used for authentication. On
206some systems these functions are part of the libc. On others, they're part of a
207separate library called "libcrypt". The default targets are pre-configured
208based on which system needs the library. It is possible to forcefully disable
209the linkage against libcrypt by adding "USE_LIBCRYPT=" on the command line, or
210to forcefully enable it using "USE_LIBCRYPT=1".
211
212
2134.5) Cryptography
214-----------------
215For SSL/TLS, it is necessary to use a cryptography library. HAProxy currently
216supports the OpenSSL library, and is known to build ant work with branches
2170.9.8, 1.0.0, 1.0.1, 1.0.2, 1.1.0 and 1.1.1. OpenSSL follows a long-term
218support cycle similar to HAProxy's, and each of the branches above receives its
219own fixes, without forcing you to upgrade to another branch. There is no excuse
220for staying vulnerable by not applying a fix available for your version. There
221is always a small risk of regression when jumping from one branch to another
222one, especially when it's very new, so it's preferable to observe for a while
223if you use a different version than your system's defaults.
224
225Two OpenSSL derivatives called LibreSSL and BoringSSL are reported to work as
226well. While there are some efforts from the community to ensure they work well,
227OpenSSL remains the primary target and this means that in case of conflicting
228choices, OpenSSL support will be favored over other options.
229
230In order to enable SSL/TLS support, simply pass "USE_OPENSSL=1" on the command
231line and the default library present on your system will be used :
232
233 $ make TARGET=generic USE_OPENSSL=1
234
235If you want to use a different version from the one provided by your system
236(which is not recommended due to the risk of missing security fixes), it is
237possible to indicate the path to the SSL include files using SSL_INC, and the
238SSL library files using SSL_LIB. Example :
239
240 $ make TARGET=generic \
241 USE_OPENSSL=1 SSL_INC=/opt/ssl-1.1.1/include SSL_LIB=/opt/ssl-1.1.1/lib
242
243In order to link OpenSSL statically against HAProxy, first download OpenSSL
244from https://www.openssl.org/ then build it with the "no-shared" keyword and
245install it to a local directory, so your system is not affected :
246
247 $ export STATICLIBSSL=/tmp/staticlibssl
248 $ ./config --prefix=$STATICLIBSSL no-shared
249 $ make && make install_sw
250
251Then when building haproxy, pass that path via SSL_INC and SSL_LIB :
252
253 $ make TARGET=generic \
254 USE_OPENSSL=1 SSL_INC=$STATICLIBSSL/include SSL_LIB=$STATICLIBSSL/lib
255
256When building with OpenSSL on some systems, you may also need to enable support
257for the "libz" library, which is visible if the linker complains about function
258"deflateInit()" not being found. In this case, simply append "ADDLIB=-lz" to
259the command line.
260
261It is worth mentioning that asynchronous cryptography engines are supported on
262OpenSSL 1.1.0 and above. Such engines are used to access hardware cryptography
263acceleration that might be present on your system.
264
265
2664.6) Compression
267----------------
268HAProxy can compress HTTP responses before delivering them to clients, in order
269to save network bandwidth. Two compression options are available. The first one
270involves the widely known zlib library, which is very likely installed on your
271system. In order to use zlib, simply pass "USE_ZLIB=1" to the command line. If
272the library is not installed in your default system's path, it is possible to
273specify the path to the include files using ZLIB_INC, and the path to the
274library files using ZLIB_LIB :
275
276 $ make TARGET=generic \
277 USE_ZLIB=1 ZLIB_INC=/opt/zlib-1.2.11/include ZLIB_LIB=/opt/zlib-1.2.11/lib
278
279However, zlib maintains an in-memory context for each compressed stream, which
280is not always welcome when dealing with large sites. An alternative solution is
281to use libslz instead, which doesn't consume memory, which is much faster, but
282compresses slightly less efficiently. For this, please use "USE_SLZ=1", and
283optionally make "SLZ_INC" and "SLZ_LIB" point to the library's include and
284library paths, respectively.
285
286Zlib is commonly found on most systems, otherwise updates can be retrieved from
287http://www.zlib.net/. It is easy and fast to build, and new versions sometimes
288provide better performance so it might be worth using an up-to-date one. Libslz
289can be downloaded http://libslz.org/ and is even easier to build.
290
291
2924.7) Lua
293--------
Ilya Shipitsin2a950d02020-03-06 13:07:38 +0500294Lua is an embedded programming language supported by HAProxy to provide more
Willy Tarreau7f332732018-12-16 22:27:15 +0100295advanced scripting capabilities. Only versions 5.3 and above are supported.
296In order to enable Lua support, please specify "USE_LUA=1" on the command line.
297Some systems provide this library under various names to avoid conflicts with
298previous versions. By default, HAProxy looks for "lua5.3", "lua53", "lua". If
299your system uses a different naming, you may need to set the library name in
300the "LUA_LIB_NAME" variable.
301
302If Lua is not provided on your system, it can be very simply built locally. It
303can be downloaded from https://www.lua.org/, extracted and built, for example :
304
305 $ cd /opt/lua-5.3.5
306 $ make linux
307
308The path to the include files and library files may be set using "LUA_INC" and
309"LUA_LIB" respectively. For example :
310
311 $ make TARGET=generic \
312 USE_LUA=1 LUA_INC=/opt/lua-5.3.5/src LUA_LIB=/opt/lua-5.3.5/src
313
314
3154.8) Device detection
316---------------------
317HAProxy supports several device detection modules relying on third party
318products. Some of them may provide free code, others free libs, others free
319evaluation licenses. Please read about their respective details in the
320following files :
321
322 doc/DeviceAtlas-device-detection.txt for DeviceAtlas
323 doc/51Degrees-device-detection.txt for 51Degrees
Willy Tarreaub3cc9f22019-04-19 16:03:32 +0200324 doc/WURFL-device-detection.txt for Scientiamobile WURFL
Willy Tarreau7f332732018-12-16 22:27:15 +0100325
326
3274.9) Miscellaneous
328------------------
329Some systems have specificities. Usually these specificities are known and/or
330detected and properly set for you. If you need to adjust the behaviour, here
331are the extra libraries that may be referenced at build time :
332
333 - USE_RT=1 build with librt, which is sometimes needed on some systems
334 when using threads. It is set by default on Linux platforms,
335 and may be disabled using "USE_RT=" if your system doesn't
Willy Tarreau4703fdd2019-06-16 19:39:44 +0200336 have one. You may have to set it as well if you face an error
337 indicating that clock_gettime() was not found.
Willy Tarreau7f332732018-12-16 22:27:15 +0100338
339 - USE_DL=1 build with libdl, which is usually needed for Lua and OpenSSL
340 on Linux. It is automatically detected and may be disabled
341 using "USE_DL=", though it should never harm.
342
343 - USE_SYSTEMD=1 enables support for the sdnotify features of systemd,
344 allowing better integration with systemd on Linux systems
345 which come with it. It is never enabled by default so there
346 is no need to disable it.
347
Willy Tarreau4ced4bd2020-07-07 16:17:00 +0200348
Willy Tarreau4703fdd2019-06-16 19:39:44 +02003494.10) Common errors
350-------------------
351Some build errors may happen depending on the options combinations or the
352selected target. When facing build errors, if you know that your system is a
353bit special or particularly old, start from TARGET=generic, it is easier to
354start from there and fix the remaining issues than trying to degrade another
355target. Common issues may include:
356
357 - clock_gettime() not found
358 => your system needs USE_RT=1
359
360 - __sync_sub_and_fetch undefined in cache.o
361 => your system needs either USE_PTHREAD_PSHARED=1 or USE_PRIVATE_CACHE=1
362
363 - many __sync_<something> errors in many files
364 => your gcc is too old, build without threads and with private cache.
365
366 - many openssl errors
367 => your OpenSSL version really is too old, do not enable OpenSSL
368
Willy Tarreau7f332732018-12-16 22:27:15 +0100369
3705) How to build HAProxy
371=======================
372
373This section assumes that you have already read section 2 (basic principles)
374and section 3 (build environment). It often refers to section 4 (dependencies).
375
376To build haproxy, you have to choose your target OS amongst the following ones
377and assign it to the TARGET variable :
378
Lukas Tribuscc1eb162019-09-01 16:48:36 +0200379 - linux-glibc for Linux kernel 2.6.28 and above
380 - linux-glibc-legacy for Linux kernel 2.6.28 and above without new features
Willy Tarreau39b2fda2020-04-16 15:14:17 +0200381 - linux-musl for Linux kernel 2.6.28 and above with musl libc
Brad Smith7c503bb2020-09-30 15:46:16 -0400382 - solaris for Solaris 10 and above
Brad Smith3f1977c2020-10-02 18:36:58 -0400383 - freebsd for FreeBSD 10 and above
Brad Smith382001b2020-10-08 01:15:06 -0400384 - dragonfly for DragonFlyBSD 4.3 and above
Brad Smith0fdfe412020-10-08 16:24:52 -0400385 - netbsd for NetBSD 8 and above
Lukas Tribuscc1eb162019-09-01 16:48:36 +0200386 - osx for Mac OS/X
Brad Smith3f1977c2020-10-02 18:36:58 -0400387 - openbsd for OpenBSD 6.3 and above
Lukas Tribuscc1eb162019-09-01 16:48:36 +0200388 - aix51 for AIX 5.1
389 - aix52 for AIX 5.2
Christian Lachnerc1322302020-02-10 10:29:13 +0100390 - aix72-gcc for AIX 7.2 (using gcc)
Lukas Tribuscc1eb162019-09-01 16:48:36 +0200391 - cygwin for Cygwin
392 - haiku for Haiku
393 - generic for any other OS or version.
394 - custom to manually adjust every setting
Willy Tarreau7f332732018-12-16 22:27:15 +0100395
396You may also choose your CPU to benefit from some optimizations. This is
397particularly important on UltraSparc machines. For this, you can assign
398one of the following choices to the CPU variable :
399
400 - i686 for intel PentiumPro, Pentium 2 and above, AMD Athlon (32 bits)
401 - i586 for intel Pentium, AMD K6, VIA C3.
402 - ultrasparc : Sun UltraSparc I/II/III/IV processor
Christian Lachnerc1322302020-02-10 10:29:13 +0100403 - power8 : IBM POWER8 processor
404 - power9 : IBM POWER9 processor
Willy Tarreau7f332732018-12-16 22:27:15 +0100405 - native : use the build machine's specific processor optimizations. Use with
406 extreme care, and never in virtualized environments (known to break).
407 - generic : any other processor or no CPU-specific optimization. (default)
408
409Alternatively, you may just set the CPU_CFLAGS value to the optimal GCC options
410for your platform. A second variable named SMALL_OPTS also supports passing a
411number of defines and compiler options usually for small systems. For better
412clarity it's recommended to pass the options which result in a smaller binary
413(like memory limits or -Os) into this variable.
414
415If you are building for a different system than the one you're building on,
416this is called "cross-compiling". HAProxy supports cross-compilation pretty
417well and tries to ease it by letting you adjust paths to all libraries (please
418read section 4 on dependencies for more details). When cross-compiling, you
419just need to pass the path to your compiler in the "CC" variable, and the path
420to the linker in the "LD" variable. Most of the time, setting the CC variable
421is enough since LD points to it by default.
422
423By default the build process runs in quiet mode and hide the details of the
424commands that are executed. This allows to more easily catch build warnings
425and see what is happening. However it is not convenient at all to observe what
426flags are passed to the compiler nor what compiler is involved. Simply append
427"V=1" to the "make" command line to switch to verbose mode and display the
428details again. It is recommended to use this option when cross-compiling to
429verify that the paths are correct and that /usr/include is never invovled.
430
431You may want to build specific target binaries which do not match your native
432compiler's target. This is particularly true on 64-bit systems when you want
433to build a 32-bit binary. Use the ARCH variable for this purpose. Right now
434it only knows about a few x86 variants (i386,i486,i586,i686,x86_64), two
435generic ones (32,64) and sets -m32/-m64 as well as -march=<arch> accordingly.
436This variable is only used to set ARCH_FLAGS to preset values, so if you know
437the arch-specific flags that your system needs, you may prefer to set
438ARCH_FLAGS instead. Note that these flags are passed both to the compiler and
439to the linker. For example, in order to build a 32-bit binary on an x86_64
440Linux system with SSL support without support for compression but when OpenSSL
441requires ZLIB anyway :
442
Willy Tarreaud254aa82019-06-14 18:40:48 +0200443 $ make TARGET=linux-glibc ARCH=i386 USE_OPENSSL=1 ADDLIB=-lz
Willy Tarreau7f332732018-12-16 22:27:15 +0100444
445Recent systems can resolve IPv6 host names using getaddrinfo(). This primitive
446is not present in all libcs and does not work in all of them either. Support in
447glibc was broken before 2.3. Some embedded libs may not properly work either,
448thus, support is disabled by default, meaning that some host names which only
449resolve as IPv6 addresses will not resolve and configs might emit an error
450during parsing. If you know that your OS libc has reliable support for
451getaddrinfo(), you can add USE_GETADDRINFO=1 on the make command line to enable
452it. This is the recommended option for most Linux distro packagers since it's
453working fine on all recent mainstream distros. It is automatically enabled on
454Solaris 8 and above, as it's known to work.
455
456If your system supports PCRE (Perl Compatible Regular Expressions), then you
457really should build with libpcre which is between 2 and 10 times faster than
458other libc implementations. Regex are used for header processing (deletion,
459rewriting, allow, deny). Please see section 4 about dependencies to figure
460how to build with PCRE support.
461
462It is possible to add native support for SSL, by passing "USE_OPENSSL=1" on the
463make command line. The libssl and libcrypto will automatically be linked with
464HAProxy. Some systems also require libz, so if the build fails due to missing
465symbols such as deflateInit(), then try again with "ADDLIB=-lz". Please check
466section 4 about dependencies for more information on how to build with OpenSSL.
467
468HAProxy can compress HTTP responses to save bandwidth. Please see section 4
469about dependencies to see the available libraries and associated options.
470
471By default, the DEBUG variable is set to '-g' to enable debug symbols. It is
472not wise to disable it on uncommon systems, because it's often the only way to
473get a usable core when you need one. Otherwise, you can set DEBUG to '-s' to
474strip the binary.
475
476If the ERR variable is set to any non-empty value, then -Werror will be added
477to the compiler so that any build warning will trigger an error. This is the
478recommended way to build when developing, and it is expected that contributed
479patches were tested with ERR=1.
480
481The SSL stack supports session cache synchronization between all running
482processes. This involves some atomic operations and synchronization operations
483which come in multiple flavors depending on the system and architecture :
484
485 Atomic operations :
486 - internal assembler versions for x86/x86_64 architectures
487
488 - gcc builtins for other architectures. Some architectures might not
489 be fully supported or might require a more recent version of gcc.
490 If your architecture is not supported, you willy have to either use
491 pthread if supported, or to disable the shared cache.
492
493 - pthread (posix threads). Pthreads are very common but inter-process
494 support is not that common, and some older operating systems did not
495 report an error when enabling multi-process mode, so they used to
496 silently fail, possibly causing crashes. Linux's implementation is
497 fine. OpenBSD doesn't support them and doesn't build. FreeBSD 9 builds
498 and reports an error at runtime, while certain older versions might
499 silently fail. Pthreads are enabled using USE_PTHREAD_PSHARED=1.
500
501 Synchronization operations :
502 - internal spinlock : this mode is OS-independent, light but will not
503 scale well to many processes. However, accesses to the session cache
504 are rare enough that this mode could certainly always be used. This
505 is the default mode.
506
507 - Futexes, which are Linux-specific highly scalable light weight mutexes
508 implemented in user-space with some limited assistance from the kernel.
509 This is the default on Linux 2.6 and above and is enabled by passing
510 USE_FUTEX=1
511
512 - pthread (posix threads). See above.
513
514If none of these mechanisms is supported by your platform, you may need to
515build with USE_PRIVATE_CACHE=1 to totally disable SSL cache sharing. Then it
516is better not to run SSL on multiple processes. Note that you don't need these
517features if you only intend to use multi-threading and never multi-process.
518
519If you need to pass other defines, includes, libraries, etc... then please
520check the Makefile to see which ones will be available in your case, and
521use/override the USE_* variables from the Makefile.
522
523AIX 5.3 is known to work with the generic target. However, for the binary to
524also run on 5.2 or earlier, you need to build with DEFINE="-D_MSGQSUPPORT",
525otherwise __fd_select() will be used while not being present in the libc, but
526this is easily addressed using the "aix52" target. If you get build errors
527because of strange symbols or section mismatches, simply remove -g from
528DEBUG_CFLAGS.
529
Christian Lachnerc1322302020-02-10 10:29:13 +0100530Building on AIX 7.2 works fine using the "aix72-gcc" TARGET. It adds two
Thayne McCombsdab4ba62021-01-07 21:24:41 -0700531special CFLAGS to prevent the loading of AIX's xmem.h and var.h. This is done
Christian Lachnerc1322302020-02-10 10:29:13 +0100532by defining the corresponding include-guards _H_XMEM and _H_VAR. Without
533excluding those header-files the build fails because of redefinition errors.
Ilya Shipitsin2a950d02020-03-06 13:07:38 +0500534Furthermore, the atomic library is added to the LDFLAGS to allow for
Christian Lachnerc1322302020-02-10 10:29:13 +0100535multithreading via USE_THREAD.
536
Willy Tarreau7f332732018-12-16 22:27:15 +0100537You can easily define your own target with the GNU Makefile. Unknown targets
538are processed with no default option except USE_POLL=default. So you can very
539well use that property to define your own set of options. USE_POLL can even be
540disabled by setting USE_POLL="". For example :
541
542 $ gmake TARGET=tiny USE_POLL="" TARGET_CFLAGS=-fomit-frame-pointer
543
544If you need to pass some defines to the preprocessor or compiler, you may pass
545them all in the DEFINE variable. Example:
546
547 $ make TARGET=generic DEFINE="-DDEBUG_DONT_SHARE_POOLS -DDEBUG_MEMORY_POOLS"
548
549The ADDINC variable may be used to add some extra include paths; this is
550sometimes needed when cross-compiling. Similarly the ADDLIB variable may be
551used to specifify extra paths to library files. Example :
552
553 $ make TARGET=generic ADDINC=-I/opt/cross/include ADDLIB=-L/opt/cross/lib64
554
555
5566) How to install HAProxy
557=========================
558
559To install haproxy, you can either copy the single resulting binary to the
560place you want, or run :
561
562 $ sudo make install
563
564If you're packaging it for another system, you can specify its root directory
565in the usual DESTDIR variable.
566
567-- end