You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sys-process/btop/files/btop-1.2.13-allow-clang.patch

192 lines
7.6 KiB

Support compiling with clang 16 or above.
Bug: https://bugs.gentoo.org/839318
Upstream Commit: https://github.com/aristocratos/btop/commit/7e50b03e391a346b2b6ce92be332c58d91f75a000w
With hunks from:
From af7d5086fce8d995f3f8b10677d107a1124a12bf Mon Sep 17 00:00:00 2001
From: "Jakob P. Liljenberg" <admin@qvantnet.com>
Date: Thu, 15 Jun 2023 17:45:05 +0200
Subject: [PATCH] Merge pull request #510 from nobounce/LLVM
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-#* Btop++ makefile v1.5
+#* Btop++ makefile v1.6
BANNER = \n \033[38;5;196m██████\033[38;5;240m╗ \033[38;5;196m████████\033[38;5;240m╗ \033[38;5;196m██████\033[38;5;240m╗ \033[38;5;196m██████\033[38;5;240m╗\n \033[38;5;160m██\033[38;5;239m╔══\033[38;5;160m██\033[38;5;239m╗╚══\033[38;5;160m██\033[38;5;239m╔══╝\033[38;5;160m██\033[38;5;239m╔═══\033[38;5;160m██\033[38;5;239m╗\033[38;5;160m██\033[38;5;239m╔══\033[38;5;160m██\033[38;5;239m╗ \033[38;5;160m██\033[38;5;239m╗ \033[38;5;160m██\033[38;5;239m╗\n \033[38;5;124m██████\033[38;5;238m╔╝ \033[38;5;124m██\033[38;5;238m║ \033[38;5;124m██\033[38;5;238m║ \033[38;5;124m██\033[38;5;238m║\033[38;5;124m██████\033[38;5;238m╔╝ \033[38;5;124m██████\033[38;5;238m╗\033[38;5;124m██████\033[38;5;238m╗\n \033[38;5;88m██\033[38;5;237m╔══\033[38;5;88m██\033[38;5;237m╗ \033[38;5;88m██\033[38;5;237m║ \033[38;5;88m██\033[38;5;237m║ \033[38;5;88m██\033[38;5;237m║\033[38;5;88m██\033[38;5;237m╔═══╝ ╚═\033[38;5;88m██\033[38;5;237m╔═╝╚═\033[38;5;88m██\033[38;5;237m╔═╝\n \033[38;5;52m██████\033[38;5;236m╔╝ \033[38;5;52m██\033[38;5;236m║ ╚\033[38;5;52m██████\033[38;5;236m╔╝\033[38;5;52m██\033[38;5;236m║ ╚═╝ ╚═╝\n \033[38;5;235m╚═════╝ ╚═╝ ╚═════╝ ╚═╝ \033[1;3;38;5;240mMakefile v1.5\033[0m
@@ -39,6 +39,46 @@ endif
override PLATFORM_LC := $(shell echo $(PLATFORM) | tr '[:upper:]' '[:lower:]')
+#? Compiler and Linker
+ifeq ($(shell $(CXX) --version | grep clang >/dev/null 2>&1; echo $$?),0)
+ override CXX_IS_CLANG := true
+endif
+override CXX_VERSION := $(shell $(CXX) -dumpfullversion -dumpversion || echo 0)
+override CXX_VERSION_MAJOR := $(shell echo $(CXX_VERSION) | cut -d '.' -f 1)
+
+CLANG_WORKS = false
+GCC_WORKS = false
+
+#? Supported is Clang 16.0.0 and later
+ifeq ($(CXX_IS_CLANG),true)
+ ifneq ($(shell test $(CXX_VERSION_MAJOR) -lt 16; echo $$?),0)
+ CLANG_WORKS := true
+ endif
+endif
+ifeq ($(CLANG_WORKS),false)
+ #? Try to find a newer GCC version
+ ifeq ($(shell command -v g++-12 >/dev/null; echo $$?),0)
+ CXX := g++-12
+ else ifeq ($(shell command -v g++-11 >/dev/null; echo $$?),0)
+ CXX := g++-11
+ else ifeq ($(shell command -v g++11 >/dev/null; echo $$?),0)
+ CXX := g++11
+ else ifeq ($(shell command -v g++ >/dev/null; echo $$?),0)
+ CXX := g++
+ endif
+ override CXX_VERSION := $(shell $(CXX) -dumpfullversion -dumpversion || echo 0)
+ override CXX_VERSION_MAJOR := $(shell echo $(CXX_VERSION) | cut -d '.' -f 1)
+ ifneq ($(shell test $(CXX_VERSION_MAJOR) -lt 10; echo $$?),0)
+ GCC_WORKS := true
+ endif
+endif
+
+ifeq ($(CLANG_WORKS),false)
+ ifeq ($(GCC_WORKS),false)
+$(error $(shell printf "\033[1;91mERROR: \033[97mCompiler too old. (Requires Clang 16.0.0, GCC 10.1.0)\033[0m"))
+ endif
+endif
+
#? Any flags added to TESTFLAGS must not contain whitespace for the testing to work
override TESTFLAGS := -fexceptions -fstack-clash-protection -fcf-protection
ifneq ($(PLATFORM) $(ARCH),macos arm64)
@@ -46,7 +86,13 @@ ifneq ($(PLATFORM) $(ARCH),macos arm64)
endif
ifeq ($(STATIC),true)
- override ADDFLAGS += -static-libgcc -static-libstdc++
+ 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
ifneq ($(PLATFORM),macos)
override ADDFLAGS += -DSTATIC_BUILD -static -Wl,--fatal-warnings
endif
@@ -62,33 +108,6 @@ else
override VERBOSE := true
endif
-#? Compiler and Linker
-ifeq ($(shell command -v g++-12 >/dev/null; echo $$?),0)
- CXX := g++-12
-else ifeq ($(shell command -v g++-11 >/dev/null; echo $$?),0)
- CXX := g++-11
-else ifeq ($(shell command -v g++11 >/dev/null; echo $$?),0)
- CXX := g++11
-else ifeq ($(shell command -v g++ >/dev/null; echo $$?),0)
- CXX := g++
-endif
-override CXX_VERSION := $(shell $(CXX) -dumpfullversion -dumpversion || echo 0)
-
-#? Try to make sure we are using GCC/G++ version 11 or later if not instructed to use g++-10
-ifeq ($(CXX),g++)
- ifeq ($(shell g++ --version | grep clang >/dev/null 2>&1; echo $$?),0)
- V_MAJOR := 0
- else
- V_MAJOR := $(shell echo $(CXX_VERSION) | cut -f1 -d".")
- endif
- ifneq ($(shell test $(V_MAJOR) -ge 11; echo $$?),0)
- ifeq ($(shell command -v g++-11 >/dev/null; echo $$?),0)
- override CXX := g++-11
- override CXX_VERSION := $(shell $(CXX) -dumpfullversion -dumpversion || echo 0)
- endif
- endif
-endif
-
#? Pull in platform specific source files and get thread count
ifeq ($(PLATFORM_LC),linux)
PLATFORM_DIR := linux
@@ -115,6 +134,13 @@ ifeq ($(THREADS),1)
override THREADS := auto
endif
+#? LTO command line
+ifeq ($(CLANG_WORKS),true)
+ LTO := thin
+else
+ LTO := $(THREADS)
+endif
+
#? The Directories, Source, Includes, Objects and Binary
SRCDIR := src
INCDIR := include
@@ -130,8 +156,8 @@ override GOODFLAGS := $(foreach flag,$(TESTFLAGS),$(strip $(shell echo "int main
#? Flags, Libraries and Includes
override REQFLAGS := -std=c++20
WARNFLAGS := -Wall -Wextra -pedantic
-OPTFLAGS := -O2 -ftree-loop-vectorize -flto=$(THREADS)
+OPTFLAGS := -O2 -ftree-vectorize -flto=$(LTO)
LDCXXFLAGS := -pthread -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS -D_FILE_OFFSET_BITS=64 $(GOODFLAGS) $(ADDFLAGS)
override CXXFLAGS += $(REQFLAGS) $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS)
override LDFLAGS += $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS)
INC := -I$(INCDIR) -I$(SRCDIR)
--- a/src/btop.cpp
+++ b/src/btop.cpp
@@ -37,6 +37,11 @@ tab-size = 4
#include <mach-o/dyld.h>
#include <limits.h>
#endif
+#if !defined(__clang__) && __GNUC__ < 11
+ #include <semaphore.h>
+#else
+ #include <semaphore>
+#endif
#include <btop_shared.hpp>
#include <btop_tools.hpp>
@@ -321,14 +326,12 @@ namespace Runner {
atomic<bool> coreNum_reset (false);
//* Setup semaphore for triggering thread to do work
-#if __GNUC__ < 11
- #include <semaphore.h>
+#if !defined(__clang__) && __GNUC__ < 11
sem_t do_work;
inline void thread_sem_init() { sem_init(&do_work, 0, 0); }
inline void thread_wait() { sem_wait(&do_work); }
inline void thread_trigger() { sem_post(&do_work); }
#else
- #include <semaphore>
std::binary_semaphore do_work(0);
inline void thread_sem_init() { ; }
inline void thread_wait() { do_work.acquire(); }
--- a/src/btop_tools.cpp
+++ b/src/btop_tools.cpp
@@ -17,6 +17,7 @@ tab-size = 4
*/
#include <cmath>
+#include <codecvt>
#include <iostream>
#include <fstream>
#include <ctime>
--- a/src/btop.cpp
+++ b/src/btop.cpp
@@ -657,7 +657,7 @@ namespace Runner {
<< Term::sync_end << flush;
}
//* ----------------------------------------------- THREAD LOOP -----------------------------------------------
- pthread_exit(NULL);
+ return {};
}
//? ------------------------------------------ Secondary thread end -----------------------------------------------
--
2.41.0