@cryptotaxi247 / netdata / commits / a8eef0572

Vendor protobuf in static builds. (#17774)

* Fix Abseil bundling. Abseil’s build infrastructure is fundamentally broken on non-glibc systems in a number of ways, so borrow the patches used by Alpine/Void/gRPC to resolve these issues. * Explicitly pull in `patch` as a dependency. It was already a required dep for the FLB build, but we now also need it for vendoring Abseil. * Empty commit to force retriggering CI jobs. * Actually use vendored copy of Abseil/Protobuf for static builds.

Austin S. Hemmelgarn committed Jun 11, 2025 at 07:27 UTC a8eef05720cd102aadc16973a6d4e2b57a83ecb4
5 files changed +99 -13
packaging/cmake/Modules/NetdataProtobuf.cmake
+22 -12
@@ -27,22 +27,32 @@ function(netdata_bundle_protobuf)
27 set(ABSL_PROPAGATE_CXX_STD On)
28 set(ABSL_ENABLE_INSTALL Off)
29 set(BUILD_SHARED_LIBS Off)
30 - set(absl_repo https://github.com/abseil/abseil-cpp)
30 + set(ABSL_BUILD_TESTING Off)
31 + set(absl_SOURCE_DIR "${CMAKE_BINARY_DIR}/_deps/absl-src")
32
33 message(STATUS "Preparing bundled Abseil (required by bundled Protobuf)")
34 + find_program(PATCH patch REQUIRED)
35 if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
34 - FetchContent_Declare(absl
35 - GIT_REPOSITORY ${absl_repo}
36 - GIT_TAG ${ABSL_TAG}
37 - CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
38 - EXCLUDE_FROM_ALL
39 - )
36 + FetchContent_Declare(absl
37 + GIT_REPOSITORY https://github.com/abseil/abseil-cpp
38 + GIT_TAG ${ABSL_TAG}
39 + SOURCE_DIR ${absl_SOURCE_DIR}
40 + PATCH_COMMAND ${CMAKE_SOURCE_DIR}/packaging/cmake/patches/apply-patches.sh
41 + ${absl_SOURCE_DIR}
42 + ${CMAKE_SOURCE_DIR}/packaging/cmake/patches/abseil
43 + CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
44 + EXCLUDE_FROM_ALL
45 + )
46 else()
41 - FetchContent_Declare(absl
42 - GIT_REPOSITORY ${absl_repo}
43 - GIT_TAG ${ABSL_TAG}
44 - CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
45 - )
47 + FetchContent_Declare(absl
48 + GIT_REPOSITORY https://github.com/abseil/abseil-cpp
49 + GIT_TAG ${ABSL_TAG}
50 + SOURCE_DIR ${absl_SOURCE_DIR}
51 + PATCH_COMMAND ${CMAKE_SOURCE_DIR}/packaging/cmake/patches/apply-patches.sh
52 + ${absl_SOURCE_DIR}
53 + ${CMAKE_SOURCE_DIR}/packaging/cmake/patches/abseil
54 + CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
55 + )
56 endif()
57 FetchContent_MakeAvailable_NoInstall(absl)
58 message(STATUS "Finished preparing bundled Abseil")
packaging/cmake/patches/abseil/abseil-musl.patch new
+58
@@ -0,0 +1,58 @@
1 +Patch-Source: https://github.com/void-linux/void-packages/blob/master/srcpkgs/mozc/patches/abseil.patch
2 +
3 +Ported from grpc's patches
4 +
5 +An all-in-one patch that fixes several issues:
6 +
7 +1) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl)
8 +2) powerpc stacktrace implementation only works on glibc (disabled on musl)
9 +4) examine_stack.cpp makes glibc assumptions on powerpc (fixed)
10 +
11 +--- a/absl/debugging/internal/examine_stack.cc
12 ++++ b/absl/debugging/internal/examine_stack.cc
13 +@@ -33,6 +33,10 @@
14 + #include <csignal>
15 + #include <cstdio>
16 +
17 ++#if defined(__powerpc__)
18 ++#include <asm/ptrace.h>
19 ++#endif
20 ++
21 + #include "absl/base/attributes.h"
22 + #include "absl/base/internal/raw_logging.h"
23 + #include "absl/base/macros.h"
24 +@@ -174,8 +178,10 @@
25 + return reinterpret_cast<void*>(context->uc_mcontext.pc);
26 + #elif defined(__powerpc64__)
27 + return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]);
28 ++#elif defined(__powerpc__) && defined(__GLIBC__)
29 ++ return reinterpret_cast<void*>(context->uc_mcontext.regs->nip);
30 + #elif defined(__powerpc__)
31 +- return reinterpret_cast<void*>(context->uc_mcontext.uc_regs->gregs[32]);
32 ++ return reinterpret_cast<void*>(((struct pt_regs *)context->uc_regs)->nip);
33 + #elif defined(__riscv)
34 + return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]);
35 + #elif defined(__s390__) && !defined(__s390x__)
36 +--- a/absl/debugging/internal/stacktrace_config.h
37 ++++ b/absl/debugging/internal/stacktrace_config.h
38 +@@ -60,7 +60,7 @@
39 + #elif defined(__i386__) || defined(__x86_64__)
40 + #define ABSL_STACKTRACE_INL_HEADER \
41 + "absl/debugging/internal/stacktrace_x86-inl.inc"
42 +-#elif defined(__ppc__) || defined(__PPC__)
43 ++#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__)
44 + #define ABSL_STACKTRACE_INL_HEADER \
45 + "absl/debugging/internal/stacktrace_powerpc-inl.inc"
46 + #elif defined(__aarch64__)
47 +--- a/absl/base/internal/unscaledcycleclock_config.h
48 ++++ b/absl/base/internal/unscaledcycleclock_config.h
49 +@@ -21,7 +21,8 @@
50 +
51 + // The following platforms have an implementation of a hardware counter.
52 + #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
53 +- defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \
54 ++ defined(__riscv) || \
55 ++ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
56 + defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))
57 + #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
58 + #else
packaging/cmake/patches/apply-patches.sh new
+12
@@ -0,0 +1,12 @@
1 +#!/bin/sh
2 +
3 +SRC_DIR="${1}"
4 +PATCH_DIR="${2}"
5 +
6 +set -e
7 +
8 +cd "${SRC_DIR}"
9 +
10 +for patch_file in "${PATCH_DIR}"/*; do
11 + patch -p1 -i "${patch_file}"
12 +done
packaging/installer/install-required-packages.sh
+7
@@ -661,6 +661,12 @@ declare -A pkg_cmake=(
661 ['default']="cmake"
662 )
663
664 +# patch is required for vendoring Abseil
665 +declare -A pkg_patch=(
666 + ['default']="patch"
667 + ['gentoo']="dev-util/patch"
668 +)
669 +
670 declare -A pkg_json_c_dev=(
671 ['alpine']="json-c-dev"
672 ['arch']="json-c"
@@ -1259,6 +1265,7 @@ packages() {
1265 require_cmd tar || suitable_package tar
1266 require_cmd curl || suitable_package curl
1267 require_cmd gzip || suitable_package gzip
1268 + require_cmd patch || suitable_package patch
1269 fi
1270
1271 # -------------------------------------------------------------------------
packaging/makeself/jobs/70-netdata-git.install.sh
-1
@@ -35,7 +35,6 @@ run ./netdata-installer.sh \
35 --dont-wait \
36 --dont-start-it \
37 --disable-exporting-mongodb \
38 - --use-system-protobuf \
38 --dont-scrub-cflags-even-though-it-may-break-things \
39 --one-time-build \
40 --enable-lto \