From b82c42b2d1aa184b41508085790db65f4e35516f Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 4 Mar 2022 15:50:48 +0000 Subject: [PATCH] BUILD: fix kFreeBSD build. kFreeBSD needs to be treated as a distinct target from FreeBSD since the underlying system libc is the GNU one. Thus, relying only on __GLIBC__ no longer suffice. - freebsd-glibc new target, key difference is including crypt.h and linking to libdl like linux. - cpu affinity available but the api is still the FreeBSD's. - enabling auxiliary data access only for Linux. Patch based on preliminary work done by @bigon. closes #1555 (cherry picked from commit 43a568575f9c14ce57ab437602dbdc089574cc33) Signed-off-by: Willy Tarreau --- Makefile | 11 +++++++++-- include/haproxy/cpuset-t.h | 2 +- src/tools.c | 4 ++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 599bceb..fab2861 100644 --- a/Makefile +++ b/Makefile @@ -154,8 +154,8 @@ DOCDIR = $(PREFIX)/doc/haproxy #### TARGET system # Use TARGET= to optimize for a specific target OS among the # following list (use the default "generic" if uncertain) : -# linux-glibc, linux-glibc-legacy, linux-musl, solaris, freebsd, dragonfly, -# openbsd, netbsd, cygwin, haiku, aix51, aix52, aix72-gcc, osx, generic, +# linux-glibc, linux-glibc-legacy, linux-musl, solaris, freebsd, freebsd-glibc, +# dragonfly, openbsd, netbsd, cygwin, haiku, aix51, aix52, aix72-gcc, osx, generic, # custom TARGET = @@ -389,6 +389,13 @@ ifeq ($(TARGET),freebsd) USE_ACCEPT4 USE_CLOSEFROM USE_GETADDRINFO USE_PROCCTL) endif +# kFreeBSD glibc +ifeq ($(TARGET),freebsd-glibc) + set_target_defaults = $(call default_opts, \ + USE_POLL USE_TPROXY USE_LIBCRYPT USE_THREAD USE_CPU_AFFINITY USE_KQUEUE \ + USE_ACCEPT4 USE_GETADDRINFO USE_CRYPT_H USE_DL) +endif + # DragonFlyBSD 4.3 and above ifeq ($(TARGET),dragonfly) set_target_defaults = $(call default_opts, \ diff --git a/include/haproxy/cpuset-t.h b/include/haproxy/cpuset-t.h index 00f7342..3709821 100644 --- a/include/haproxy/cpuset-t.h +++ b/include/haproxy/cpuset-t.h @@ -15,7 +15,7 @@ #include -#if defined(__linux__) || defined(__DragonFly__) +#if defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) # define CPUSET_REPR cpu_set_t # define CPUSET_USE_CPUSET diff --git a/src/tools.c b/src/tools.c index 21f4102..0043d81 100644 --- a/src/tools.c +++ b/src/tools.c @@ -43,7 +43,7 @@ extern void *__elf_aux_vector; #include #include -#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) +#if defined(__linux__) && defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) #include #endif @@ -4791,7 +4791,7 @@ const char *get_exec_path() { const char *ret = NULL; -#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) +#if defined(__linux__) && defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) long execfn = getauxval(AT_EXECFN); if (execfn && execfn != ENOENT) -- 1.7.10.4