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