IBM is still selling AIX?! (Which stands for: it Ain't unIX ;-) ) -----Original Message----- From: Chris <glad...@gmail.com> Sent: Monday, February 3, 2020 6:10 AM To: haproxy@formilux.org Subject: [PATCH] AIX 7.2 support
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