From 5a02125a861ced5d96cece53782cdf916c4b7628 Mon Sep 17 00:00:00 2001 From: Steffen Winter Date: Thu, 2 May 2024 11:36:55 +0200 Subject: [PATCH] Add missing linker flag for static links on FreeBSD https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278551 --- CMakeLists.txt | 6 ++++++ Makefile | 25 +++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a4dbec..10c33b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,6 +193,12 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") INSTALL_RPATH "/usr/local/lib/gcc${GCC_VERSION_MAJOR}" BUILD_WITH_INSTALL_RPATH TRUE ) + + # The gcc compiler wrapper doesn't add '--eh-frame-hdr' on FreeBSD with static builds + # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278551 + if(BTOP_STATIC) + target_link_options(btop PRIVATE LINKER:--eh-frame-hdr) + endif() endif() find_package(devstat REQUIRED) diff --git a/Makefile b/Makefile index e489164..6831a58 100644 --- a/Makefile +++ b/Makefile @@ -97,17 +97,18 @@ ifneq ($(PLATFORM) $(ARCH),macos arm64) endif ifeq ($(STATIC),true) - ifeq ($(CXX_IS_CLANG) $(CLANG_WORKS),true true) + ifeq ($(CXX_IS_CLANG),true) ifeq ($(shell $(CXX) -print-target-triple | grep gnu >/dev/null; echo $$?),0) $(error $(shell printf "\033[1;91mERROR: \033[97m$(CXX) can't statically link glibc\033[0m")) endif - else - override ADDFLAGS += -static-libgcc -static-libstdc++ endif - ifeq ($(PLATFORM_LC),linux) - override ADDFLAGS += -DSTATIC_BUILD -static -Wl,--fatal-warnings - else ifeq ($(PLATFORM_LC),freebsd) - override ADDFLAGS += -DSTATIC_BUILD + + ifeq ($(PLATFORM_LC),$(filter $(PLATFORM_LC),freebsd linux)) + override ADDFLAGS += -DSTATIC_BUILD -static + else + ifeq ($(CXX_IS_CLANG),false) + override ADDFLAGS += -static-libgcc -static-libstdc++ + endif endif endif @@ -130,9 +131,13 @@ else ifeq ($(PLATFORM_LC),freebsd) PLATFORM_DIR := freebsd THREADS := $(shell getconf NPROCESSORS_ONLN 2>/dev/null || echo 1) SU_GROUP := wheel - override ADDFLAGS += -lm -lkvm -ldevstat -Wl,-rpath=/usr/local/lib/gcc$(CXX_VERSION_MAJOR) - ifneq ($(STATIC),true) - override ADDFLAGS += -lstdc++ + override ADDFLAGS += -lm -lkvm -ldevstat + ifeq ($(STATIC),true) + override ADDFLAGS += -lelf -Wl,--eh-frame-hdr + endif + + ifeq ($(CXX_IS_CLANG),false) + override ADDFLAGS += -lstdc++ -Wl,rpath=/usr/local/lib/gcc$(CXX_VERSION_MAJOR) endif export MAKE = gmake else ifeq ($(PLATFORM_LC),macos)