summaryrefslogtreecommitdiff
path: root/sys-process/btop/files/btop-1.2.13-allow-clang.patch
blob: 68f2434dc7e8dbd30aa4dd7bc88912c75e56c170 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
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