Hello everybody,
I spent some time making haproxy compile and run successfully on AIX
7.2 using GCC 8.3 and wanted to contribute my patch in the hope that
it could be merged. The patch is based on the current haproxy 2.1 head
revision. I can make one for the development branch too - but it
should be basically identical.
--- Makefile.old 2020-02-03 10:56:25.000000000 +0000
+++ Makefile 2020-02-03 11:32:00.735254403 +0000
@@ -144,13 +144,13 @@
# Use TARGET=<target_name> to optimize for a specifc target OS among the
# following list (use the default "generic" if uncertain) :
# linux-glibc, linux-glibc-legacy, solaris, freebsd, openbsd, netbsd,
-# cygwin, haiku, aix51, aix52, osx, generic, custom
+# cygwin, haiku, aix51, aix52, aix72-gcc, osx, generic, custom
TARGET =
#### TARGET CPU
# Use CPU=<cpu_name> to optimize for a particular CPU, among the following
# list :
-# generic, native, i586, i686, ultrasparc, custom
+# generic, native, i586, i686, ultrasparc, power8, power9, custom
CPU = generic
#### Architecture, used when not building for native architecture
@@ -257,6 +257,8 @@
CPU_CFLAGS.i586 = -O2 -march=i586
CPU_CFLAGS.i686 = -O2 -march=i686
CPU_CFLAGS.ultrasparc = -O6 -mcpu=v9 -mtune=ultrasparc
+CPU_CFLAGS.power8 = -O2 -mcpu=power8 -mtune=power8
+CPU_CFLAGS.power9 = -O2 -mcpu=power9 -mtune=power9
CPU_CFLAGS = $(CPU_CFLAGS.$(CPU))
#### ARCH dependant flags, may be overridden by CPU flags
@@ -381,7 +383,7 @@
DEBUG_CFLAGS =
endif
-# AIX 5.2 and above
+# AIX 5.2
ifeq ($(TARGET),aix52)
set_target_defaults = $(call default_opts, \
USE_POLL USE_LIBCRYPT USE_OBSOLETE_LINKER)
@@ -389,6 +391,14 @@
DEBUG_CFLAGS =
endif
+# AIX 7.2 and above
+ifeq ($(TARGET),aix72-gcc)
+ set_target_defaults = $(call default_opts, \
+ USE_POLL USE_THREAD USE_LIBCRYPT USE_OBSOLETE_LINKER
USE_GETADDRINFO USE_TFO)
+ TARGET_CFLAGS = -D_H_XMEM -D_H_VAR
+ TARGET_LDFLAGS = -latomic
+endif
+
# Cygwin
ifeq ($(TARGET),cygwin)
set_target_defaults = $(call default_opts, \
@@ -754,7 +764,7 @@
@echo "Please choose the target among the following supported list :"
@echo
@echo " linux-glibc, linux-glibc-legacy, solaris, freebsd, openbsd, netbsd,"
- @echo " cygwin, haiku, aix51, aix52, osx, generic, custom"
+ @echo " cygwin, haiku, aix51, aix52, aix72-gcc, osx, generic, custom"
@echo
@echo "Use \"generic\" if you don't want any optimization, \"custom\" if you"
@echo "want to precisely tweak every option, or choose the target which"
@@ -832,7 +842,7 @@
else \
echo "TARGET not set, you may pass 'TARGET=xxx' to set one among :";\
echo " linux-glibc, linux-glibc-legacy, solaris, freebsd,
netbsd, osx,"; \
- echo " openbsd, aix51, aix52, cygwin, haiku, generic, custom"; \
+ echo " openbsd, aix51, aix52, aix72-gcc, cygwin, haiku,
generic, custom"; \
fi
$(Q)echo;echo "Enabled features for TARGET '$(TARGET)' (disable with
'USE_xxx=') :"
$(Q)set -- $(foreach opt,$(patsubst USE_%,%,$(use_opts)),$(if
$(USE_$(opt)),$(opt),)); echo " $$*" | (fmt || cat) 2>/dev/null
The patch implements a new TARGET called aix72-gcc and also adds 2
CPUs (power8 and power9). Here is my proof-of-work:
-bash-4.4$ gmake -j8 TARGET=aix72-gcc CPU=power8 USE_ZLIB=1
ZLIB_LIB=/opt/haproxy/lib ZLIB_INC=/opt/haproxy/include USE_OPENSSL=1
SSL_LIB=/opt/haproxy/lib SSL_INC=/opt/haproxy/include USE_PCRE2=1
USE_PCRE2_JIT=1 PCREDIR=/opt/haproxy USE_LUA=1
LUA_LIB=/opt/haproxy/lib LUA_INC=/opt/haproxy/include/lua
LUA_LIB_NAME=lua LUA_LD_FLAGS=
EXTRA_OBJS="contrib/prometheus-exporter/service-prometheus.o"
CC src/ev_poll.o
CC src/ssl_sock.o
CC src/hlua.o
CC src/hlua_fcn.o
CC src/mux_h2.o
CC src/stream.o
CC src/mux_fcgi.o
CC src/cfgparse-listen.o
src/hlua.c: In function 'hlua_panic_ljmp':
src/hlua.c:128:1: warning: no return statement in function returning
non-void [-Wreturn-type]
static int hlua_panic_ljmp(lua_State *L) { longjmp(safe_ljmp_env, 1); }
^~~~~~
CC src/http_ana.o
CC src/stats.o
CC src/mux_h1.o
CC src/flt_spoe.o
CC src/server.o
CC src/cfgparse.o
CC src/checks.o
CC src/backend.o
CC src/log.o
CC src/peers.o
CC src/cli.o
CC src/haproxy.o
CC src/stick_table.o
CC src/standard.o
CC src/sample.o
CC src/proxy.o
CC src/stream_interface.o
CC src/pattern.o
CC src/dns.o
CC src/proto_tcp.o
CC src/listener.o
CC src/cfgparse-global.o
CC src/h1.o
CC src/http_rules.o
CC src/http_fetch.o
CC src/cache.o
CC src/session.o
CC src/fcgi-app.o
CC src/connection.o
CC src/tcp_rules.o
CC src/filters.o
CC src/task.o
CC src/mworker.o
CC src/map.o
CC src/h1_htx.o
CC src/trace.o
CC src/flt_trace.o
CC src/acl.o
CC src/http_htx.o
CC src/flt_http_comp.o
CC src/payload.o
CC src/vars.o
CC src/debug.o
CC src/mux_pt.o
CC src/http_act.o
CC src/h2.o
CC src/queue.o
CC src/fd.o
CC src/proto_uxst.o
CC src/lb_chash.o
CC src/ring.o
CC src/frontend.o
CC src/raw_sock.o
CC src/xprt_handshake.o
CC src/htx.o
CC src/memory.o
CC src/applet.o
CC src/channel.o
CC src/signal.o
CC src/lb_fwrr.o
CC src/ev_select.o
CC src/sink.o
CC src/http_conv.o
CC src/proto_sockpair.o
CC src/mworker-prog.o
CC src/activity.o
CC src/lb_fwlc.o
CC src/http.o
CC src/lb_fas.o
CC src/uri_auth.o
CC src/hathreads.o
CC src/regex.o
CC src/auth.o
CC src/buffer.o
CC src/compression.o
CC src/proto_udp.o
CC src/lb_map.o
CC src/chunk.o
CC src/wdt.o
CC src/hpack-dec.o
CC src/action.o
CC src/xxhash.o
CC src/pipe.o
CC src/shctx.o
CC src/hpack-tbl.o
CC src/http_acl.o
CC src/sha1.o
CC src/time.o
CC src/hpack-enc.o
CC src/fcgi.o
CC src/arg.o
CC src/base64.o
CC src/protocol.o
CC src/freq_ctr.o
CC src/lru.o
CC src/hpack-huff.o
CC src/dict.o
CC src/hash.o
CC src/mailers.o
CC src/version.o
CC contrib/prometheus-exporter/service-prometheus.o
CC ebtree/ebtree.o
CC ebtree/eb32sctree.o
CC ebtree/eb32tree.o
CC ebtree/eb64tree.o
CC ebtree/ebmbtree.o
CC ebtree/ebsttree.o
CC ebtree/ebimtree.o
CC ebtree/ebistree.o
LD haproxy
-bash-4.4$ ./haproxy -vv
HA-Proxy version 2.1.2 2019/12/21 - https://haproxy.org/
Status: stable branch - will stop receiving fixes around Q1 2021.
Known bugs: http://www.haproxy.org/bugs/bugs-2.1.2.html
Build options :
TARGET = aix72-gcc
CPU = power8
CC = gcc
CFLAGS = -O2 -mcpu=power8 -mtune=power8 -g -fno-strict-aliasing
-Wdeclaration-after-statement -fwrapv -Wno-unused-label
-Wno-sign-compare -Wno-unused-parameter -Wno-old-style-declaration
-Wno-ignored-qualifiers -Wno-clobbered -Wno-missing-field-initializers
-Wno-implicit-fallthrough -Wno-stringop-overflow
-Wno-cast-function-type -Wtype-limits -Wshift-negative-value
-Wshift-overflow=2 -Wduplicated-cond -Wnull-dereference -D_H_XMEM
-D_H_VAR
OPTIONS = USE_PCRE2=1 USE_PCRE2_JIT=1 USE_OPENSSL=1 USE_LUA=1 USE_ZLIB=1
Feature list : -EPOLL -KQUEUE -MY_EPOLL -MY_SPLICE -NETFILTER -PCRE
-PCRE_JIT +PCRE2 +PCRE2_JIT +POLL -PRIVATE_CACHE +THREAD
-PTHREAD_PSHARED -REGPARM -STATIC_PCRE -STATIC_PCRE2 -TPROXY
-LINUX_TPROXY -LINUX_SPLICE +LIBCRYPT -CRYPT_H -VSYSCALL +GETADDRINFO
+OPENSSL +LUA -FUTEX -ACCEPT4 -MY_ACCEPT4 +ZLIB -SLZ -CPU_AFFINITY
+TFO -NS -DL -RT -DEVICEATLAS -51DEGREES -WURFL -SYSTEMD
+OBSOLETE_LINKER -PRCTL -THREAD_DUMP -EVPORTS
Default settings :
bufsize = 16384, maxrewrite = 1024, maxpollevents = 200
Built with multi-threading support (MAX_THREADS=32, default=1).
Built with OpenSSL version : OpenSSL 1.1.1d 10 Sep 2019
Running on OpenSSL version : OpenSSL 1.1.1d 10 Sep 2019
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3
Built with Lua version : Lua 5.3.5
Built with transparent proxy support using:
Built with PCRE2 version : 10.34 2019-11-21
PCRE2 library supports JIT : yes
Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.11
Running on zlib version : 1.2.11
Compression algorithms supported : identity("identity"),
deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with the Prometheus exporter as a service
Available polling systems :
poll : pref=200, test result OK
select : pref=150, test result OK
Total: 2 (2 usable), will use poll.
Available multiplexer protocols :
(protocols marked as <default> cannot be specified using 'proto' keyword)
h2 : mode=HTTP side=FE|BE mux=H2
fcgi : mode=HTTP side=BE mux=FCGI
<default> : mode=HTTP side=FE|BE mux=H1
<default> : mode=TCP side=FE|BE mux=PASS
Available services :
prometheus-exporter
Available filters :
[SPOE] spoe
[CACHE] cache
[FCGI] fcgi-app
[TRACE] trace
[COMP] compression
If you have any questions feel free to ask and please keep me on CC
for this topic!
have a nice day,
Christian