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 \