From 057f4594fbcc7d5540db67fb2ff85a36e40cb03c Mon Sep 17 00:00:00 2001 From: aristocratos Date: Sun, 7 Jan 2024 14:10:40 +0100 Subject: [PATCH 1/9] Fixed config variable show_gpu_info working correctly --- src/btop_draw.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/btop_draw.cpp b/src/btop_draw.cpp index 0ceaa2f..eecec45 100644 --- a/src/btop_draw.cpp +++ b/src/btop_draw.cpp @@ -2010,7 +2010,7 @@ namespace Draw { #ifdef GPU_SUPPORT const bool show_gpu_on = Config::getS("show_gpu_info") == "On"; const bool gpus_shown_in_cpu_panel = Gpu::gpu_names.size() > 0 and ( - show_gpu_on or (Config::getS("cpu_graph_lower") == "Auto" and Gpu::shown == 0) + show_gpu_on or (Config::getS("show_gpu_info") == "Auto" and Gpu::shown == 0) ); const int gpus_height_offset = (Gpu::gpu_names.size() - Gpu::shown)*gpus_shown_in_cpu_panel; int gpus_extra_height = gpus_shown_in_cpu_panel ? Gpu::gpu_names.size() - (show_gpu_on ? 0 : Gpu::shown) : 0; From 62964693b30573cc6495cb181ab3adb89d077c20 Mon Sep 17 00:00:00 2001 From: aristocratos Date: Sun, 7 Jan 2024 14:51:03 +0100 Subject: [PATCH 2/9] Fixed gpu boxes visibility state not saved and removed unnecessary comments --- src/btop.cpp | 26 ++++++++++++------- src/btop_config.cpp | 5 ++-- src/btop_draw.cpp | 4 +-- src/btop_draw.hpp | 4 +-- src/btop_menu.cpp | 52 ++++++++++++++++++------------------- src/btop_menu.hpp | 12 ++++----- src/btop_shared.hpp | 53 +++++++++++++++++++------------------- src/btop_tools.cpp | 6 ++--- src/btop_tools.hpp | 2 +- src/linux/btop_collect.cpp | 50 +++++++++++++++++------------------ 10 files changed, 110 insertions(+), 104 deletions(-) diff --git a/src/btop.cpp b/src/btop.cpp index 9ad5012..736854f 100644 --- a/src/btop.cpp +++ b/src/btop.cpp @@ -96,9 +96,9 @@ namespace Global { string exit_error_msg; atomic thread_exception (false); - bool debuginit{}; // defaults to false - bool debug{}; // defaults to false - bool utf_force{}; // defaults to false + bool debuginit{}; + bool debug{}; + bool utf_force{}; uint64_t start_time; @@ -107,9 +107,10 @@ namespace Global { atomic should_quit (false); atomic should_sleep (false); atomic _runner_started (false); + atomic init_conf (false); - bool arg_tty{}; // defaults to false - bool arg_low_color{}; // defaults to false + bool arg_tty{}; + bool arg_low_color{}; int arg_preset = -1; int arg_update = 0; } @@ -418,7 +419,7 @@ namespace Runner { string output; string empty_bg; - bool pause_output{}; // defaults to false + bool pause_output{}; sigset_t mask; pthread_t runner_id; pthread_mutex_t mtx; @@ -894,10 +895,10 @@ int main(int argc, char **argv) { } //? Config init - { vector load_warnings; + { + atomic_lock lck(Global::init_conf); + vector load_warnings; Config::load(Config::conf_file, load_warnings); - - if (Config::current_boxes.empty()) Config::check_boxes(Config::getS("shown_boxes")); Config::set("lowcolor", (Global::arg_low_color ? true : not Config::getB("truecolor"))); if (Global::debug) { @@ -918,7 +919,7 @@ int main(int argc, char **argv) { } else { string found; - bool set_failure{}; // defaults to false + bool set_failure{}; for (const auto loc_env : array{"LANG", "LC_ALL"}) { if (std::getenv(loc_env) != nullptr and str_to_upper(s_replace((string)std::getenv(loc_env), "-", "")).ends_with("UTF8")) { found = std::getenv(loc_env); @@ -1018,6 +1019,11 @@ int main(int argc, char **argv) { clean_quit(1); } + if (not Config::check_boxes(Config::getS("shown_boxes"))) { + Config::check_boxes("cpu mem net proc"); + Config::set("shown_boxes", "cpu mem net proc"s); + } + //? Update list of available themes and generate the selected theme Theme::updateThemes(); Theme::setTheme(); diff --git a/src/btop_config.cpp b/src/btop_config.cpp index b8a5f67..18e60ae 100644 --- a/src/btop_config.cpp +++ b/src/btop_config.cpp @@ -507,7 +507,7 @@ namespace Config { else if (name.starts_with("graph_symbol_") and (value != "default" and not v_contains(valid_graph_symbols, value))) validError = fmt::format("Invalid graph symbol identifier for {}: {}", name, value); - else if (name == "shown_boxes" and not value.empty() and not check_boxes(value)) + else if (name == "shown_boxes" and not Global::init_conf and not value.empty() and not check_boxes(value)) validError = "Invalid box name(s) in shown_boxes!"; #ifdef GPU_SUPPORT @@ -619,8 +619,7 @@ namespace Config { if (not v_contains(valid_boxes, box)) return false; #ifdef GPU_SUPPORT if (box.starts_with("gpu")) { - size_t gpu_num = stoi(box.substr(3)); - if (gpu_num == 0) gpu_num = 5; + size_t gpu_num = stoi(box.substr(3)) + 1; if (std::cmp_greater(gpu_num, Gpu::gpu_names.size())) return false; } #endif diff --git a/src/btop_draw.cpp b/src/btop_draw.cpp index eecec45..acab14c 100644 --- a/src/btop_draw.cpp +++ b/src/btop_draw.cpp @@ -307,8 +307,8 @@ namespace Draw { {"/uptime", ""} }; - static time_t c_time{}; // defaults to 0 - static size_t clock_len{}; // defaults to 0 + static time_t c_time{}; + static size_t clock_len{}; static string clock_str; if (auto n_time = time(nullptr); not force and n_time == c_time) diff --git a/src/btop_draw.hpp b/src/btop_draw.hpp index b049a57..205fa85 100644 --- a/src/btop_draw.hpp +++ b/src/btop_draw.hpp @@ -65,8 +65,8 @@ namespace Draw { //* An editable text field class TextEdit { - size_t pos{}; // defaults to 0 - size_t upos{}; // defaults to 0 + size_t pos{}; + size_t upos{}; bool numeric; public: string text; diff --git a/src/btop_menu.cpp b/src/btop_menu.cpp index bc97dc2..fb119aa 100644 --- a/src/btop_menu.cpp +++ b/src/btop_menu.cpp @@ -49,8 +49,8 @@ namespace Menu { bool redraw{true}; int currentMenu = -1; msgBox messageBox; - int signalToSend{}; // defaults to 0 - int signalKillRet{}; // defaults to 0 + int signalToSend{}; + int signalKillRet{}; const array P_Signals = { "0", @@ -868,8 +868,8 @@ namespace Menu { int signalChoose(const string& key) { auto s_pid = (Config::getB("show_detailed") and Config::getI("selected_pid") == 0 ? Config::getI("detailed_pid") : Config::getI("selected_pid")); - static int x{}; // defaults to 0 - static int y{}; // defaults to 0 + static int x{}; + static int y{}; static int selected_signal = -1; if (bg.empty()) selected_signal = -1; @@ -1070,8 +1070,8 @@ namespace Menu { int mainMenu(const string& key) { enum MenuItems { Options, Help, Quit }; - static int y{}; // defaults to 0 - static int selected{}; // defaults to 0 + static int y{}; + static int selected{}; static vector colors_selected; static vector colors_normal; auto tty_mode = Config::getB("tty_mode"); @@ -1149,18 +1149,18 @@ namespace Menu { int optionsMenu(const string& key) { enum Predispositions { isBool, isInt, isString, is2D, isBrowseable, isEditable}; - static int y{}; // defaults to 0 - static int x{}; // defaults to 0 - static int height{}; // defaults to 0 - static int page{}; // defaults to 0 - static int pages{}; // defaults to 0 - static int selected{}; // defaults to 0 - static int select_max{}; // defaults to 0 - static int item_height{}; // defaults to 0 - static int selected_cat{}; // defaults to 0 - static int max_items{}; // defaults to 0 - static int last_sel{}; // defaults to 0 - static bool editing{}; // defaults to false + static int y{}; + static int x{}; + static int height{}; + static int page{}; + static int pages{}; + static int selected{}; + static int select_max{}; + static int item_height{}; + static int selected_cat{}; + static int max_items{}; + static int last_sel{}; + static bool editing{}; static Draw::TextEdit editor; static string warnings; static bitset<8> selPred; @@ -1196,9 +1196,9 @@ namespace Menu { Theme::updateThemes(); } int retval = Changed; - bool recollect{}; // defaults to false - bool screen_redraw{}; // defaults to false - bool theme_refresh{}; // defaults to false + bool recollect{}; + bool screen_redraw{}; + bool theme_refresh{}; //? Draw background if needed else process input if (redraw) { @@ -1500,11 +1500,11 @@ namespace Menu { } int helpMenu(const string& key) { - static int y{}; // defaults to 0 - static int x{}; // defaults to 0 - static int height{}; // defaults to 0 - static int page{}; // defaults to 0 - static int pages{}; // defaults to 0 + static int y{}; + static int x{}; + static int height{}; + static int page{}; + static int pages{}; if (bg.empty()) page = 0; int retval = Changed; diff --git a/src/btop_menu.hpp b/src/btop_menu.hpp index 74b30d1..63974e4 100644 --- a/src/btop_menu.hpp +++ b/src/btop_menu.hpp @@ -46,12 +46,12 @@ namespace Menu { //? Strings in content vector is not checked for box width overflow class msgBox { string box_contents, button_left, button_right; - int height{}; // defaults to 0 - int width{}; // defaults to 0 - int boxtype{}; // defaults to 0 - int selected{}; // defaults to 0 - int x{}; // defaults to 0 - int y{}; // defaults to 0 + int height{}; + int width{}; + int boxtype{}; + int selected{}; + int x{}; + int y{}; public: enum BoxTypes { OK, YES_NO, NO_YES }; enum msgReturn { diff --git a/src/btop_shared.hpp b/src/btop_shared.hpp index ebd1073..69566c6 100644 --- a/src/btop_shared.hpp +++ b/src/btop_shared.hpp @@ -54,6 +54,7 @@ namespace Global { extern string overlay; extern string clock; extern uid_t real_uid, set_uid; + extern atomic init_conf; } namespace Runner { @@ -228,11 +229,11 @@ namespace Mem { string name; string fstype{}; // defaults to "" std::filesystem::path stat{}; // defaults to "" - int64_t total{}; // defaults to 0 - int64_t used{}; // defaults to 0 - int64_t free{}; // defaults to 0 - int used_percent{}; // defaults to 0 - int free_percent{}; // defaults to 0 + int64_t total{}; + int64_t used{}; + int64_t free{}; + int used_percent{}; + int free_percent{}; array old_io = {0, 0, 0}; deque io_read = {}; @@ -272,12 +273,12 @@ namespace Net { extern std::unordered_map graph_max; struct net_stat { - uint64_t speed{}; // defaults to 0 - uint64_t top{}; // defaults to 0 - uint64_t total{}; // defaults to 0 - uint64_t last{}; // defaults to 0 - uint64_t offset{}; // defaults to 0 - uint64_t rollover{}; // defaults to 0 + uint64_t speed{}; + uint64_t top{}; + uint64_t total{}; + uint64_t last{}; + uint64_t offset{}; + uint64_t rollover{}; }; struct net_info { @@ -285,7 +286,7 @@ namespace Net { std::unordered_map stat = { {"download", {}}, {"upload", {}} }; string ipv4{}; // defaults to "" string ipv6{}; // defaults to "" - bool connected{}; // defaults to false + bool connected{}; }; extern std::unordered_map current_net; @@ -337,32 +338,32 @@ namespace Proc { //* Container for process information struct proc_info { - size_t pid{}; // defaults to 0 + size_t pid{}; string name{}; // defaults to "" string cmd{}; // defaults to "" string short_cmd{}; // defaults to "" - size_t threads{}; // defaults to 0 - int name_offset{}; // defaults to 0 + size_t threads{}; + int name_offset{}; string user{}; // defaults to "" - uint64_t mem{}; // defaults to 0 + uint64_t mem{}; double cpu_p{}; // defaults to = 0.0 double cpu_c{}; // defaults to = 0.0 char state = '0'; - int64_t p_nice{}; // defaults to 0 - uint64_t ppid{}; // defaults to 0 - uint64_t cpu_s{}; // defaults to 0 - uint64_t cpu_t{}; // defaults to 0 + int64_t p_nice{}; + uint64_t ppid{}; + uint64_t cpu_s{}; + uint64_t cpu_t{}; string prefix{}; // defaults to "" - size_t depth{}; // defaults to 0 - size_t tree_index{}; // defaults to 0 - bool collapsed{}; // defaults to false - bool filtered{}; // defaults to false + size_t depth{}; + size_t tree_index{}; + bool collapsed{}; + bool filtered{}; }; //* Container for process info box struct detail_container { - size_t last_pid{}; // defaults to 0 - bool skip_smaps{}; // defaults to false + size_t last_pid{}; + bool skip_smaps{}; proc_info entry; string elapsed, parent, status, io_read, io_write, memory; long long first_mem = -1; diff --git a/src/btop_tools.cpp b/src/btop_tools.cpp index 47c53bc..8a85ed4 100644 --- a/src/btop_tools.cpp +++ b/src/btop_tools.cpp @@ -54,9 +54,9 @@ namespace rng = std::ranges; //* Collection of escape codes and functions for terminal manipulation namespace Term { - atomic initialized{}; // defaults to false - atomic width{}; // defaults to 0 - atomic height{}; // defaults to 0 + atomic initialized{}; + atomic width{}; + atomic height{}; string current_tty; namespace { diff --git a/src/btop_tools.hpp b/src/btop_tools.hpp index bda89f2..705a5eb 100644 --- a/src/btop_tools.hpp +++ b/src/btop_tools.hpp @@ -406,7 +406,7 @@ namespace Tools { //* Sets atomic to true on construct, sets to false on destruct class atomic_lock { atomic& atom; - bool not_true{}; // defaults to false + bool not_true{}; public: atomic_lock(atomic& atom, bool wait = false); ~atomic_lock(); diff --git a/src/linux/btop_collect.cpp b/src/linux/btop_collect.cpp index 677c3fe..0c1ab66 100644 --- a/src/linux/btop_collect.cpp +++ b/src/linux/btop_collect.cpp @@ -77,8 +77,8 @@ namespace Cpu { vector available_sensors = {"Auto"}; cpu_info current_cpu; fs::path freq_path = "/sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq"; - bool got_sensors{}; // defaults to false - bool cpu_temp_only{}; // defaults to false + bool got_sensors{}; + bool cpu_temp_only{}; //* Populate found_sensors map bool get_sensors(); @@ -92,9 +92,9 @@ namespace Cpu { struct Sensor { fs::path path; string label; - int64_t temp{}; // defaults to 0 - int64_t high{}; // defaults to 0 - int64_t crit{}; // defaults to 0 + int64_t temp{}; + int64_t high{}; + int64_t crit{}; }; std::unordered_map found_sensors; @@ -542,14 +542,14 @@ namespace Cpu { } string get_cpuHz() { - static int failed{}; // defaults to 0 + static int failed{}; if (failed > 4) return ""s; string cpuhz; try { - double hz{}; // defaults to 0.0 + double hz{}; //? Try to get freq from /sys/devices/system/cpu/cpufreq/policy first (faster) if (not freq_path.empty()) { hz = stod(readfile(freq_path, "0.0")) / 1000; @@ -605,9 +605,9 @@ namespace Cpu { //? Try to get core mapping from /proc/cpuinfo ifstream cpuinfo(Shared::procPath / "cpuinfo"); if (cpuinfo.good()) { - int cpu{}; // defaults to 0 - int core{}; // defaults to 0 - int n{}; // defaults to 0 + int cpu{}; + int core{}; + int n{}; for (string instr; cpuinfo >> instr;) { if (instr == "processor") { cpuinfo.ignore(SSmax, ':'); @@ -1508,10 +1508,10 @@ namespace Gpu { #endif namespace Mem { - bool has_swap{}; // defaults to false + bool has_swap{}; vector fstab; fs::file_time_type fstab_time; - int disk_ios{}; // defaults to 0 + int disk_ios{}; vector last_found; //?* Find the filepath to the specified ZFS object's stat file @@ -1999,10 +1999,10 @@ namespace Mem { int64_t bytes_read; int64_t bytes_write; int64_t io_ticks; - int64_t bytes_read_total{}; // defaults to 0 - int64_t bytes_write_total{}; // defaults to 0 - int64_t io_ticks_total{}; // defaults to 0 - int64_t objects_read{}; // defaults to 0 + int64_t bytes_read_total{}; + int64_t bytes_write_total{}; + int64_t io_ticks_total{}; + int64_t objects_read{}; // looking through all files that start with 'objset' for (const auto& file: fs::directory_iterator(disk.stat)) { @@ -2078,11 +2078,11 @@ namespace Net { net_info empty_net = {}; vector interfaces; string selected_iface; - int errors{}; // defaults to 0 + int errors{}; std::unordered_map graph_max = { {"download", {}}, {"upload", {}} }; std::unordered_map> max_count = { {"download", {}}, {"upload", {}} }; bool rescale{true}; - uint64_t timestamp{}; // defaults to 0 + uint64_t timestamp{}; //* RAII wrapper for getifaddrs class getifaddr_wrapper { @@ -2171,7 +2171,7 @@ namespace Net { auto& saved_stat = net.at(iface).stat.at(dir); auto& bandwidth = net.at(iface).bandwidth.at(dir); - uint64_t val{}; // defaults to 0 + uint64_t val{}; try { val = (uint64_t)stoull(readfile(sys_file, "0")); } catch (const std::invalid_argument&) {} catch (const std::out_of_range&) {} @@ -2291,15 +2291,15 @@ namespace Proc { std::unordered_map uid_user; string current_sort; string current_filter; - bool current_rev{}; // defaults to false + bool current_rev{}; fs::file_time_type passwd_time; uint64_t cputimes; int collapse = -1, expand = -1; - uint64_t old_cputimes{}; // defaults to 0 - atomic numpids{}; // defaults to 0 - int filter_found{}; // defaults to 0 + uint64_t old_cputimes{}; + atomic numpids{}; + int filter_found{}; detail_container detailed; constexpr size_t KTHREADD = 2; @@ -2431,7 +2431,7 @@ namespace Proc { const int cmult = (per_core) ? Shared::coreCount : 1; bool got_detailed = false; - static size_t proc_clear_count{}; // defaults to 0 + static size_t proc_clear_count{}; //* Use pids from last update if only changing filter, sorting or tree options if (no_update and not current_procs.empty()) { @@ -2506,7 +2506,7 @@ namespace Proc { //? Check if pid already exists in current_procs auto find_old = rng::find(current_procs, pid, &proc_info::pid); - bool no_cache{}; // defaults to false + bool no_cache{}; if (find_old == current_procs.end()) { current_procs.push_back({pid}); find_old = current_procs.end() - 1; From 36842a3bccfb78f5c27642435bff387b42f7d13b Mon Sep 17 00:00:00 2001 From: aristocratos Date: Sun, 7 Jan 2024 15:23:01 +0100 Subject: [PATCH 3/9] v1.3.0 GPU Support Linux and platform support OpenBSD --- CHANGELOG.md | 14 +++++++++++++- README.md | 15 ++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbf273b..00273c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## v1.3.0 -* Added Gpu Support | @romner-set | PR #529 +* Added Gpu Support Linux | @romner-set | PR #529 + +* Added platform support for OpenBSD | @joske | PR #607 * Enable macos clang | @muneebmahmed | PR #666 @@ -42,6 +44,16 @@ * Create adwaita.theme | @flipflop133 | #485 +* Try get terminal size of "/dev/tty" if stdout fails | @imwints | PR #627 + +* Refresh rate program argument | @imwints | PR #640 + +* Improved error handling when determining the config directory | @imwints | #652 + +* Use native POSIX polling syscalls to read input | @lvxnull | #624 + +* Conditional compile on Big Sur and up | @joske | PR #690 + + Various fixes by @imwints, @simplepad, @joske, @gwena, @cpalv, @iambeingtracked, @mattico, @NexAdn ## v1.2.13 diff --git a/README.md b/README.md index fa67b70..0b351a2 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,15 @@ ## News +##### 7 January 2024 + +Btop release v1.3.0 + +Big release with GPU support added for Linux and platform support for OpenBSD. Big thanks to @romner-set (GPU support) and @joske (OpenBSD support) for contributions. +And a multitude of bugfixes and small changes, see [CHANGES.md](CHANGES.md) and latest [release](https://github.com/aristocratos/btop/releases/latest) for detailed list and attributions. + +See news entry below for more information regarding GPU support. + ##### 25 November 2023 GPU monitoring added for Linux! @@ -69,6 +78,9 @@ Big update with version bump to 1.3 coming soon. First release of btop4win available at https://github.com/aristocratos/btop4win +
+More... + ##### 16 January 2022 Release v1.2.0 with FreeBSD support. No release binaries for FreeBSD provided as of yet. @@ -84,9 +96,6 @@ macOS binaries + installer are included for both x86 and ARM64 (Apple Silicon) i Big thank you to [@joske](https://github.com/joske) who wrote the vast majority of the implementation! -
-More... - ##### 30 October 2021 Work on the OSX [macOS] and FreeBSD branches, both initiated and mostly worked on by [@joske](https://github.com/joske), will likely be completed in the coming weeks. From 4ab43fd159ab03d80707ea71287a73931eeedd55 Mon Sep 17 00:00:00 2001 From: Steffen Winter Date: Sun, 7 Jan 2024 18:59:21 +0100 Subject: [PATCH 4/9] Bump cmake to v1.3.0 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f8c546..c82b462 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") endif() project("btop" - VERSION 1.2.13 + VERSION 1.3.0 DESCRIPTION "A monitor of resources" HOMEPAGE_URL "https://github.com/aristocratos/btop" LANGUAGES CXX @@ -97,7 +97,7 @@ if(BTOP_WERROR) endif() if(NOT APPLE) - target_compile_options(btop PRIVATE -fstack-clash-protection) + target_compile_options(btop PRIVATE -fstack-clash-protection) endif() check_cxx_compiler_flag(-fstack-protector HAS_FSTACK_PROTECTOR) if(HAS_FSTACK_PROTECTOR) From 19c6099c7c48efd85959bed7391a19449091f9bb Mon Sep 17 00:00:00 2001 From: Steffen Winter Date: Mon, 8 Jan 2024 13:19:16 +0100 Subject: [PATCH 5/9] Use _FORTIFY_SOURCE=3 and put it behind a build flag --- CMakeLists.txt | 3 ++- Makefile | 7 ++++++- README.md | 7 +++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f8c546..2480efb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ option(BTOP_LTO "Enable LTO" ON) option(BTOP_USE_MOLD "Use mold to link btop" OFF) option(BTOP_PEDANTIC "Enable a bunch of additional warnings" OFF) option(BTOP_WERROR "Compile with warnings as errors" OFF) +option(BTOP_FORTIFY "Detect buffer overflows with _FORTIFY_SOURCE=3" ON) option(BTOP_GPU "Enable GPU support" ON) cmake_dependent_option(BTOP_RSMI_STATIC "Link statically to ROCm SMI" OFF "BTOP_GPU" OFF) @@ -112,7 +113,7 @@ target_compile_definitions(btop PRIVATE _FILE_OFFSET_BITS=64 $<$:_GLIBCXX_ASSERTIONS _LIBCPP_ENABLE_ASSERTIONS=1> # Only has an effect with optimizations enabled - $<$>:_FORTIFY_SOURCE=2> + $<$>,$>:_FORTIFY_SOURCE=3> ) target_include_directories(btop SYSTEM PRIVATE include) diff --git a/Makefile b/Makefile index 36e2ea1..36153a3 100644 --- a/Makefile +++ b/Makefile @@ -50,6 +50,11 @@ ifeq ($(GPU_SUPPORT),true) override ADDFLAGS += -DGPU_SUPPORT endif +FORTIFY_SOURCE ?= true +ifeq ($(FORTIFY_SOURCE),true) + override ADDFLAGS += -D_FORTIFY_SOURCE=3 +endif + #? Compiler and Linker ifeq ($(shell $(CXX) --version | grep clang >/dev/null 2>&1; echo $$?),0) override CXX_IS_CLANG := true @@ -174,7 +179,7 @@ override GOODFLAGS := $(foreach flag,$(TESTFLAGS),$(strip $(shell echo "int main override REQFLAGS := -std=c++20 WARNFLAGS := -Wall -Wextra -pedantic OPTFLAGS := -O2 -ftree-vectorize -flto=$(LTO) -LDCXXFLAGS := -pthread -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS -D_FILE_OFFSET_BITS=64 $(GOODFLAGS) $(ADDFLAGS) +LDCXXFLAGS := -pthread -D_GLIBCXX_ASSERTIONS -D_FILE_OFFSET_BITS=64 $(GOODFLAGS) $(ADDFLAGS) override CXXFLAGS += $(REQFLAGS) $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS) override LDFLAGS += $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS) INC := $(foreach incdir,$(INCDIRS),-isystem $(incdir)) -I$(SRCDIR) diff --git a/README.md b/README.md index 0b351a2..827f3a3 100644 --- a/README.md +++ b/README.md @@ -405,6 +405,7 @@ Also needs a UTF8 locale and a font that covers: | `STRIP=true` | To force stripping of debug symbols (adds `-s` linker flag) | | `DEBUG=true` | Sets OPTFLAGS to `-O0 -g` and enables more verbose debug logging | | `ARCH=` | To manually set the target architecture | + | `FORTIFY_SOURCE=false` | Disable fortification with `_FORTIFY_SOURCE=3` | | `GPU_SUPPORT=` | Enable/disable GPU support (Enabled by default on X86_64 Linux) | | `RSMI_STATIC=true` | To statically link the ROCm SMI library used for querying AMDGPU | | `ADDFLAGS=` | For appending flags to both compiler and linker | @@ -503,6 +504,7 @@ Also needs a UTF8 locale and a font that covers: | `-DBTOP_USE_MOLD=` | Use mold to link btop (OFF by default) | | `-DBTOP_PEDANTIC=` | Compile with additional warnings (OFF by default) | | `-DBTOP_WERROR=` | Compile with warnings as errors (OFF by default) | + | `-DBTOP_FORTIFY=` | Detect buffer overflows with `_FORTIFY_SOURCE=3` (ON by default) | | `-DBTOP_GPU=` | Enable GPU support (ON by default) | | `-DBTOP_RSMI_STATIC=` | Build and link the ROCm SMI library statically (OFF by default) | | `-DCMAKE_INSTALL_PREFIX=` | The installation prefix ('/usr/local' by default) | @@ -576,6 +578,7 @@ Also needs a UTF8 locale and a font that covers: | `STRIP=true` | To force stripping of debug symbols (adds `-s` linker flag) | | `DEBUG=true` | Sets OPTFLAGS to `-O0 -g` and enables more verbose debug logging | | `ARCH=` | To manually set the target architecture | + | `FORTIFY_SOURCE=false` | Disable fortification with `_FORTIFY_SOURCE=3` | | `ADDFLAGS=` | For appending flags to both compiler and linker | | `CXX=` | Manualy set which compiler to use | @@ -674,6 +677,7 @@ Also needs a UTF8 locale and a font that covers: | `-DBTOP_USE_MOLD=` | Use mold to link btop (OFF by default) | | `-DBTOP_PEDANTIC=` | Compile with additional warnings (OFF by default) | | `-DBTOP_WERROR=` | Compile with warnings as errors (OFF by default) | + | `-DBTOP_FORTIFY=` | Detect buffer overflows with `_FORTIFY_SOURCE=3` (ON by default) | | `-DCMAKE_INSTALL_PREFIX=` | The installation prefix ('/usr/local' by default) | To force any specific compiler, run `CXX= cmake -B build -G Ninja` @@ -742,6 +746,7 @@ Also needs a UTF8 locale and a font that covers: | `STRIP=true` | To force stripping of debug symbols (adds `-s` linker flag) | | `DEBUG=true` | Sets OPTFLAGS to `-O0 -g` and enables more verbose debug logging | | `ARCH=` | To manually set the target architecture | + | `FORTIFY_SOURCE=false` | Disable fortification with `_FORTIFY_SOURCE=3` | | `ADDFLAGS=` | For appending flags to both compiler and linker | | `CXX=` | Manualy set which compiler to use | @@ -851,6 +856,7 @@ Also needs a UTF8 locale and a font that covers: | `-DBTOP_USE_MOLD=` | Use mold to link btop (OFF by default) | | `-DBTOP_PEDANTIC=` | Compile with additional warnings (OFF by default) | | `-DBTOP_WERROR=` | Compile with warnings as errors (OFF by default) | + | `-DBTOP_FORTIFY=` | Detect buffer overflows with `_FORTIFY_SOURCE=3` (ON by default) | | `-DCMAKE_INSTALL_PREFIX=` | The installation prefix ('/usr/local' by default) | _**Note:** Static linking does not work with GCC._ @@ -921,6 +927,7 @@ Also needs a UTF8 locale and a font that covers: | `STRIP=true` | To force stripping of debug symbols (adds `-s` linker flag) | | `DEBUG=true` | Sets OPTFLAGS to `-O0 -g` and enables more verbose debug logging | | `ARCH=` | To manually set the target architecture | + | `FORTIFY_SOURCE=false` | Disable fortification with `_FORTIFY_SOURCE=3` | | `ADDFLAGS=` | For appending flags to both compiler and linker | | `CXX=` | Manualy set which compiler to use | From 3cbb0484a44fd3c829589b92c604a16e12465434 Mon Sep 17 00:00:00 2001 From: v4u6h4n Date: Thu, 11 Jan 2024 12:19:09 +1100 Subject: [PATCH 6/9] Update README.md Added optional dependencies to 'Prerequisites' section. --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 0b351a2..a886524 100644 --- a/README.md +++ b/README.md @@ -222,6 +222,18 @@ Also needs a UTF8 locale and a font that covers: * Unicode Block “Geometric Shapes” U+25A0 - U+25FF * Unicode Block "Box Drawing" and "Block Elements" U+2500 - U+259F +### **Optional Dependencies (Needed for GPU monitoring)** + + * **NVIDIA** + +If you have an NVIDIA GPU you must use an official NVIDIA driver, both the closed-source and open-source ones have been verified to work. + +In addition to that you must also have the nvidia-ml dynamic library installed, which should be included with the driver package of your distribution. + + * **AMD** + +If you have an AMD GPU `rocm_smi_lib` is required, which may or may not be packaged for your distribution. + ### **Notice (Text rendering issues)** * If you are having problems with the characters in the graphs not looking like they do in the screenshots, it's likely a problem with your systems configured fallback font not having support for braille characters. From ca368c5b89e591be6b3795efaf6aa85b459ed3db Mon Sep 17 00:00:00 2001 From: aristocratos Date: Thu, 11 Jan 2024 09:35:20 +0100 Subject: [PATCH 7/9] Added link to compile section --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index a886524..d237d42 100644 --- a/README.md +++ b/README.md @@ -224,6 +224,10 @@ Also needs a UTF8 locale and a font that covers: ### **Optional Dependencies (Needed for GPU monitoring)** +GPU monitoring also requires a btop binary built with GPU support (`GPU_SUPPORT=true` flag). + +See [GPU compatibility](#gpu-compatibility) section for more about compiling with GPU support. + * **NVIDIA** If you have an NVIDIA GPU you must use an official NVIDIA driver, both the closed-source and open-source ones have been verified to work. From e936339038dc77ded0b51ab3f3b1341808a85e4e Mon Sep 17 00:00:00 2001 From: aristocratos Date: Thu, 11 Jan 2024 10:39:39 +0100 Subject: [PATCH 8/9] Undefine FORTIFY_SOURCE before setting new value when enabled --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 36153a3..ed80899 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ endif FORTIFY_SOURCE ?= true ifeq ($(FORTIFY_SOURCE),true) - override ADDFLAGS += -D_FORTIFY_SOURCE=3 + override ADDFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 endif #? Compiler and Linker From b2df50396b0405b8ce2cfa3b10d4542cfd9d73cd Mon Sep 17 00:00:00 2001 From: "Jakob P. Liljenberg" Date: Thu, 11 Jan 2024 19:27:29 +0100 Subject: [PATCH 9/9] Update README.md -> Fixed bad links --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9191071..13e57ae 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,8 @@ Btop release v1.3.0 -Big release with GPU support added for Linux and platform support for OpenBSD. Big thanks to @romner-set (GPU support) and @joske (OpenBSD support) for contributions. -And a multitude of bugfixes and small changes, see [CHANGES.md](CHANGES.md) and latest [release](https://github.com/aristocratos/btop/releases/latest) for detailed list and attributions. +Big release with GPU support added for Linux and platform support for OpenBSD. Big thanks to [@romner-set](https://github.com/romner-set) (GPU support) and [@joske](https://github.com/joske) (OpenBSD support) for contributions. +And a multitude of bugfixes and small changes, see [CHANGELOG.md](CHANGELOG.md) and latest [release](https://github.com/aristocratos/btop/releases/latest) for detailed list and attributions. See news entry below for more information regarding GPU support.