summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraristocratos <gnmjpl@gmail.com>2023-11-25 21:01:11 +0100
committeraristocratos <gnmjpl@gmail.com>2023-11-25 21:01:11 +0100
commit19bcff894bd8f018bc3c76607b1dd91200537923 (patch)
treec4bb731a28f389874fbf000ef2b10785c3cbee41
parentb87772611cb6290e834c6beb27eaceea46a10d90 (diff)
Squashed commit of the following:
commit 0267eba2bbebd6f166b24358159d7fb094fae052 Merge: 50bbab0 e81cf2b Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Nov 15 21:43:18 2023 +0100 Merge pull request #659 from ivanp7/patch-1 Add alternative key codes for Delete, Insert, Home, End commit 50bbab05122b2f8c35c90e4a6e01d5c52e5eca60 Merge: 9edbf27 5a14c7b Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Nov 15 21:35:50 2023 +0100 Merge pull request #660 from stradicat/feature/elementarish Elementarish theme: color update according to Elementary palette commit 5a14c7b6fa41a7fe7061c0aa2f2d0c0fe530e495 Merge: 979506f 71eb414 Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 15 17:27:34 2023 -0300 Merge branch 'main' of https://github.com/stradicat/btop commit 979506f18ecdc1475b882d7dadc220386169b7db Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 8 11:17:47 2023 -0300 Elementarish theme: color update according to Elementary palette commit 71eb4142e8204303af091555067b93d82e5dcec1 Author: Dennis Mayr <dmayr.dev@gmail.com> Date: Wed Nov 8 11:17:47 2023 -0300 Elementarish theme: color update according to Elementary palette commit e81cf2b7ff4111e279e1111127e49c6858d83d5e Author: vân <3432246+ivanp7@users.noreply.github.com> Date: Tue Nov 7 15:12:27 2023 +0000 Add alternative key codes for Insert, Home, End commit f9452ff6d56af721fb5526ede11206c7d3b885b8 Author: vân <3432246+ivanp7@users.noreply.github.com> Date: Mon Nov 6 13:31:53 2023 +0000 Add alternative Delete key code Delete key not always produces ^[[3~, on some terminals (like st) it produces ^[[P. commit 9edbf27f1b6d5844a97325fcda732762ba086a99 Merge: 2a864f6 ff1f51c Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Oct 21 02:09:55 2023 +0200 Merge pull request #649 from nobounce/workflow-timeout Set FreeBSD workflow timeout commit ff1f51ccbb6d6133292e57ba1b8edb8b6c941fc9 Author: Steffen Winter <steffen.winter@proton.me> Date: Wed Oct 18 22:26:36 2023 +0200 Set FreeBSD workflow timeout Recently the FreeBSD workflow has started to hang in a boot loop when the VM starts up. The issue is being tracked upstream but there is not response at the moment. To work around this set a timeout to not waste CI minutes. Other workflows might also want this change since they don't take 20 minutes anyway. commit 2a864f6f2ea60df16b3f015885eb3c18a48b9b78 Merge: 636eb25 b2bf8ef Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Oct 7 10:40:54 2023 +0200 Merge pull request #643 from DecklynKern/main Fix scrollbar not clearing sometimes. commit b2bf8ef504f29650f8fe0adab41c3cac35b67567 Author: DecklynKern <DecklynKern@gmail.com> Date: Fri Oct 6 17:33:38 2023 -0600 Fix scrollbar not clearing sometimes. commit 636eb25f5e31a7af337b024873b2ceb42650ebdb Merge: 260c0f6 b5ba2fc Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 19:51:03 2023 +0200 Merge pull request #623 from rahulaggarwal965/main Add keybind for toggling memory display mode in PROC box commit b5ba2fc9635e540142d3dd3eccd866865c9393fd Author: Rahul Aggarwal <rahulaggarwal965@gmail.com> Date: Wed Sep 20 22:55:56 2023 -0400 Add keybind for toggling memory display mode in PROC box commit 260c0f662313fe0d0df859645f5731af04fc9fa7 Merge: 52bfff7 e6a06eb Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 18:56:25 2023 +0200 Merge pull request #635 from lvxnull/editorconfig Add hpp files to .editorconfig commit e6a06eb729f11fb8b14f104a041c8504772a8c95 Author: lvxnull <86745229+lvxnull@users.noreply.github.com> Date: Thu Sep 28 19:44:47 2023 +0200 Add hpp files to .editorconfig commit 52bfff7ceb3d259b1a71002fcbfb20261294bdd7 Merge: 1f72e56 19dbbe1 Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Sat Sep 30 18:55:08 2023 +0200 Merge pull request #636 from nobounce/performance-iili Minor string initialization improvement commit 19dbbe1a17f7e6453709c37a23859e5d73591e53 Author: nobounce <steffen.winter@proton.me> Date: Fri Sep 29 12:20:59 2023 +0200 Minor string initialization improvement commit 1f72e56c7d6e70f8851134c0a28e17fb0a824a71 Merge: 278a0e6 cdcf8bc Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Fri Sep 29 10:43:21 2023 +0200 Merge pull request #633 from crestfallnatwork/main [fix] Made disks statvfs logic asynchronous. commit cdcf8bc92978c826d9c1768b547df3b7484003f2 Author: crestfalln <guptahiman01@gmail.com> Date: Fri Sep 29 09:07:27 2023 +0530 fixed bug where updated disks stats overrided disk io data commit 9b4e85f08dc3be40d8f4904093cd2bdd096e60fa Author: crestfalln <no-reply@crestfalln.com> Date: Thu Sep 28 04:57:05 2023 +0530 fixed bug where updated disks stats overrided disk io data commit 889623874ef6233610ed529bff18e1ba2c407e14 Author: crestfalln <no-reply@crestfalln.com> Date: Wed Sep 27 23:57:06 2023 +0530 made disks stat logic async commit 278a0e6b171a5f967e0680f679c20d9fc8d58c6f Merge: d16adc9 e89519f Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Thu Sep 28 18:32:09 2023 +0200 Merge pull request #630 from lvxnull/signal-list Fix signal list on non-linux/weird linux platforms commit e89519fbb2cd53ddb06ab0a39093c19fc595277c Author: lvxnull <86745229+lvxnull@users.noreply.github.com> Date: Sun Sep 24 21:44:38 2023 +0200 Fix signal list on non-linux/weird linux platforms commit d16adc9fd03322d46f1b84e5ebe7d426f726a5cc Merge: 2c3ac48 f34b408 Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Thu Sep 28 18:20:42 2023 +0200 Merge pull request #618 from nobounce/aggregate-child-processes Add option to accumulate a child's resources in parent in tree-view commit f34b40892fef31f657cbe8066c8b0d41ed37c0fc Author: nobounce <steffen.winter@proton.me> Date: Sun Sep 24 16:34:50 2023 +0200 Make process thread count better readable when wider than 5 digits commit 6027cedd424e963bc6fe9017252ed4f1c9f8634b Author: nobounce <steffen.winter@proton.me> Date: Thu Sep 14 23:27:05 2023 +0200 Add option to accumulate a child's resources in parent in tree-view commit 2c3ac4855de49563edd4ef199b0be74babc7ce32 Merge: f90dc37 5c6a281 Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Sep 13 21:14:56 2023 +0200 Merge pull request #589 from nobounce/cmake Add CMake support for Linux commit f90dc37c26024f28c2a88d87d041fca1f1b5db1e Merge: 0cac861 68a49c1 Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Wed Sep 13 20:27:05 2023 +0200 Merge pull request #610 from SidVeld/feature/horizon-theme Horizon theme commit 5c6a2810021c352584a0834c95eff4ece7454c0e Author: nobounce <steffen.winter@proton.me> Date: Tue Aug 29 20:39:00 2023 +0200 Add CMake support Linux is completly supported FreeBSD is not able to create a static executable for now. See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=273398 MacOS was not tested commit 68a49c10a63371b65beb670f7a55ccb43fe38311 Author: SidVeld <sidveld@gmail.com> Date: Wed Sep 6 18:03:31 2023 +0300 Add horizon theme commit 0cac8619105521999d603efaeb7d7eed8c38d746 Merge: 31be436 f798acd Author: Jakob P. Liljenberg <admin@qvantnet.com> Date: Tue Sep 5 19:27:38 2023 +0200 Merge pull request #609 from scorpion-26/byteconv Fix short conversion of 1000-1023 *iB commit f798acdaf71455684883df0ffb31d29293f788b2 Author: scorpion-26 <dev.scorpion26@gmail.com> Date: Tue Sep 5 18:00:47 2023 +0200 Fix short conversion of 1000-1023*iB floating_humanizer([1000-1024], true) with base 8 returns "2K", whereas it should return "1.0K" to align with other formats. The conversion is also broken for all other units(e.g. 1023M is also broken and returns "2G") commit 31be4362ce122182862ac338a9a479cde3a4c8e2 Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 02:00:07 2023 +0200 FreeBSD Github action 13.1 -> 13.2 and static libgcc and libstdc++ commit fc523fd1d0ef49443367056e30653933efc8920c Author: aristocratos <gnmjpl@gmail.com> Date: Sun Aug 27 01:36:26 2023 +0200 Fix for FreeBSD github action not failing "correctly"...
-rw-r--r--.editorconfig2
-rw-r--r--.github/workflows/continuous-build-freebsd.yml8
-rw-r--r--.gitignore22
-rw-r--r--CMakeLists.txt167
-rw-r--r--README.md201
-rw-r--r--cmake/Modules/Finddevstat.cmake23
-rw-r--r--cmake/Modules/Findelf.cmake23
-rw-r--r--cmake/Modules/Findkvm.cmake23
-rw-r--r--src/btop_config.cpp3
-rw-r--r--src/btop_draw.cpp19
-rw-r--r--src/btop_input.cpp7
-rw-r--r--src/btop_menu.cpp76
-rw-r--r--src/btop_shared.cpp7
-rw-r--r--src/btop_tools.cpp2
-rw-r--r--src/linux/btop_collect.cpp65
-rw-r--r--themes/elementarish.theme50
-rw-r--r--themes/horizon.theme86
17 files changed, 711 insertions, 73 deletions
diff --git a/.editorconfig b/.editorconfig
index 63202f0..b27d25a 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,4 +1,4 @@
-[*.{cpp,h,sh,md,cfg,sample}]
+[*.{cpp,h,hpp,sh,md,cfg,sample}]
indent_style = tab
indent_size = 4
diff --git a/.github/workflows/continuous-build-freebsd.yml b/.github/workflows/continuous-build-freebsd.yml
index b341211..4cdc550 100644
--- a/.github/workflows/continuous-build-freebsd.yml
+++ b/.github/workflows/continuous-build-freebsd.yml
@@ -28,6 +28,7 @@ on:
jobs:
build-freebsd:
runs-on: macos-12
+ timeout-minutes: 20
steps:
- uses: actions/checkout@v3
with:
@@ -36,18 +37,19 @@ jobs:
- name: Compile
uses: vmactions/freebsd-vm@v0
with:
- release: 13.1
+ release: 13.2
usesh: true
prepare: |
pkg install -y gmake gcc11 coreutils git
git config --global --add safe.directory /Users/runner/work/btop/btop
run: |
- gmake
+ gmake STATIC=true STRIP=true
GIT_HASH=$(git rev-parse --short "$GITHUB_SHA")
mv bin/btop bin/btop-$GIT_HASH
ls -alh bin
- uses: actions/upload-artifact@v3
with:
- name: btop-x86_64-FreeBSD-13.1
+ name: btop-x86_64-FreeBSD-13.2
path: 'bin/*'
+ if-no-files-found: error
diff --git a/.gitignore b/.gitignore
index 8e986b0..35382d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,9 +54,11 @@ btop
# Optional libraries
lib/rocm_smi_lib
+# Optional libraries
+lib/rocm_smi_lib
-#do not ignore .github directory
-!.github
+# Don't ignore .github directory
+!.github/
# Ignore files created by Qt Creator
*.config
@@ -67,3 +69,19 @@ lib/rocm_smi_lib
*.cxxflags
*.files
*.includes
+
+# CMake
+CMakeLists.txt.user
+CMakeCache.txt
+CMakeFiles
+CMakeScripts
+Testing
+Makefile
+cmake_install.cmake
+install_manifest.txt
+compile_commands.json
+CTestTestfile.cmake
+_deps
+
+# CLion
+cmake-build-*
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..d11a250
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,167 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# CMake configuration for btop
+#
+
+cmake_minimum_required(VERSION 3.12)
+
+# Disable in-source builds since they would override the Makefile
+if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
+ message(FATAL_ERROR "In-source builds are not allowed")
+endif()
+
+project("btop"
+ VERSION 1.2.13
+ DESCRIPTION "A monitor of resources"
+ HOMEPAGE_URL "https://github.com/aristocratos/btop"
+ LANGUAGES CXX
+)
+
+# Make custom modules available
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
+
+# When the build type is not set we can't fortify
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Release)
+endif()
+
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+set(CMAKE_COLOR_DIAGNOSTICS ON)
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
+# Options
+option(BTOP_STATIC "Link btop statically" OFF)
+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)
+
+if(BTOP_STATIC)
+ # Set this before calling find_package
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
+endif()
+
+if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ find_package(devstat REQUIRED)
+ find_package(kvm REQUIRED)
+ if(BTOP_STATIC)
+ find_package(elf REQUIRED)
+ endif()
+endif()
+
+include(CheckCXXCompilerFlag)
+include(CheckIPOSupported)
+
+add_executable(btop
+ src/btop.cpp
+ src/btop_config.cpp
+ src/btop_draw.cpp
+ src/btop_input.cpp
+ src/btop_menu.cpp
+ src/btop_shared.cpp
+ src/btop_theme.cpp
+ src/btop_tools.cpp
+)
+
+# NOTE: Checks can be simplified with CMake 3.25
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ target_sources(btop PRIVATE
+ src/osx/btop_collect.cpp
+ src/osx/sensors.cpp
+ src/osx/smc.cpp
+ )
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ target_sources(btop PRIVATE src/freebsd/btop_collect.cpp)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ target_sources(btop PRIVATE src/linux/btop_collect.cpp)
+else()
+ message(FATAL_ERROR "${CMAKE_SYSTEM_NAME} is not supported")
+endif()
+
+# Check for and enable LTO
+check_ipo_supported(RESULT ipo_supported)
+if(ipo_supported AND BTOP_LTO)
+ set_target_properties(btop PROPERTIES INTERPROCEDURAL_OPTIMIZATION ON)
+endif()
+
+# TODO: enable more warnings in coordination with upstream
+target_compile_options(btop PRIVATE
+ -Wall -Wextra -Wpedantic
+ -ftree-vectorize -fstack-clash-protection
+)
+if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ target_compile_options(btop PRIVATE
+ -Wheader-hygiene -Wgnu -Wthread-safety
+ )
+endif()
+
+if(BTOP_PEDANTIC)
+ target_compile_options(btop PRIVATE
+ -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused
+ -Woverloaded-virtual -Wconversion -Wsign-conversion -Wdouble-promotion
+ -Wformat=2 -Wimplicit-fallthrough -Weffc++
+ )
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ target_compile_options(btop PRIVATE
+ -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wnull-dereference
+ -Wuseless-cast
+ )
+ endif()
+endif()
+
+if(BTOP_WERROR)
+ target_compile_options(btop PRIVATE -Werror)
+endif()
+
+check_cxx_compiler_flag(-fstack-protector CXX_HAS_FSTACK_PROTECTOR)
+if(CXX_HAS_FSTACK_PROTECTOR)
+ target_compile_options(btop PRIVATE -fstack-protector)
+endif()
+
+check_cxx_compiler_flag(-fcf-protection CXX_HAS_FCF_PROTECTION)
+if(CXX_HAS_FCF_PROTECTION)
+ target_compile_options(btop PRIVATE -fcf-protection)
+endif()
+
+target_compile_definitions(btop PRIVATE
+ _FILE_OFFSET_BITS=64
+ _GLIBCXX_ASSERTIONS _LIBCPP_ENABLE_ASSERTIONS=1
+ # Only has an effect with optimizations enabled
+ $<$<NOT:$<CONFIG:Debug>>:_FORTIFY_SOURCE=2>
+)
+
+target_include_directories(btop SYSTEM PRIVATE include)
+
+# mold
+if(BTOP_USE_MOLD)
+ target_link_options(btop PRIVATE -fuse-ld=mold)
+endif()
+
+if(BTOP_STATIC)
+ target_compile_definitions(btop PRIVATE STATIC_BUILD)
+ target_link_options(btop PRIVATE -static LINKER:--fatal-warnings)
+endif()
+
+# Add libraries
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+find_package(Threads REQUIRED)
+target_link_libraries(btop PRIVATE Threads::Threads)
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ target_link_libraries(btop PRIVATE $<LINK_LIBRARY:FRAMEWORK,CoreFoundation)
+ target_link_libraries(btop PRIVATE $<LINK_LIBRARY:FRAMEWORK,IOKit)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ target_link_libraries(btop PRIVATE devstat::devstat kvm::kvm)
+ if(BTOP_STATIC)
+ target_link_libraries(btop PRIVATE elf::elf)
+ endif()
+endif()
+
+install(TARGETS btop RUNTIME)
+install(FILES "btop.desktop" DESTINATION "share/applications")
+install(FILES "Img/icon.png" DESTINATION "share/icons/hicolor/48x48/apps" RENAME "btop.png")
+install(FILES "Img/icon.svg" DESTINATION "share/icons/hicolor/scalable/apps" RENAME "btop.svg")
+install(DIRECTORY "themes" DESTINATION "share/btop")
+
diff --git a/README.md b/README.md
index b5fdf47..b1a6764 100644
--- a/README.md
+++ b/README.md
@@ -310,7 +310,35 @@ Also needs a UTF8 locale and a font that covers:
The makefile also needs GNU coreutils and `sed` (should already be installed on any modern distribution).
- For a `cmake` based build alternative see the [fork](https://github.com/jan-guenter/btop/tree/main) by @jan-guenter
+ ### GPU compatibility
+
+ Btop++ supports NVIDIA and AMD GPUs out of the box on Linux, provided you have the correct drivers and libraries.
+
+ Compatibility with Intel GPUs using generic DRM calls is planned, as is compatibility for FreeBSD and macOS.
+
+ * **NVIDIA**
+
+ You must use an official NVIDIA driver, both the closed-source and [open-source](https://github.com/NVIDIA/open-gpu-kernel-modules) 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**
+
+ AMDGPU data is queried using the [ROCm SMI](https://github.com/RadeonOpenCompute/rocm_smi_lib) library, which may or may not be packaged for your distribution. If your distribution doesn't provide a package, btop++ is statically linked to ROCm SMI with the `RSMI_STATIC=true` make flag.
+
+ This flag expects the ROCm SMI source code in `lib/rocm_smi_lib`, and compilation will fail if it's not there. The latest tested version is 5.6.x, which can be obtained with the following command:
+
+ ```bash
+ git clone https://github.com/RadeonOpenCompute/rocm_smi_lib.git --depth 1 -b rocm-5.6.x lib/rocm_smi_lib
+ ```
+
+<details>
+
+<summary>
+
+### With Make
+
+</summary>
1. **Install dependencies (example for Ubuntu 21.04 Hirsute)**
@@ -401,6 +429,79 @@ Also needs a UTF8 locale and a font that covers:
make help
```
+</details>
+
+<details>
+
+<summary>
+
+### With CMake (Community maintained)
+
+</summary>
+
+1. **Install build dependencies**
+
+ Requires Clang / GCC, CMake, Ninja and Git
+
+ For example, with Debian Bookworm:
+
+ ```bash
+ sudo apt install cmake git g++ ninja-build
+ ```
+
+2. **Clone the repository**
+
+ ```bash
+ git clone https://github.com/aristocratos/btop.git && cd btop
+ ``````
+
+3. **Compile**
+
+ ```bash
+ # Configure
+ cmake -B build -G Ninja
+ # Build
+ cmake --build build
+ ```
+
+ This will automatically build a release version of btop.
+
+ Some useful options to pass to the configure step:
+
+ | Configure flag | Description |
+ |---------------------------------|-------------------------------------------------------------------------|
+ | `-DBTOP_STATIC=<ON\|OFF>` | Enables static linking (OFF by default) |
+ | `-DBTOP_LTO=<ON\|OFF>` | Enables link time optimization (ON by default) |
+ | `-DBTOP_USE_MOLD=<ON\|OFF>` | Use mold to link btop (OFF by default) |
+ | `-DBTOP_PEDANTIC=<ON\|OFF>` | Compile with additional warnings (OFF by default) |
+ | `-DBTOP_WERROR=<ON\|OFF>` | Compile with warnings as errors (OFF by default) |
+ | `-DCMAKE_INSTALL_PREFIX=<path>` | The installation prefix ('/usr/local' by default) |
+
+ To force a compiler, run `CXX=<compiler> cmake -B build -G Ninja`
+
+4. **Install**
+
+ ```bash
+ cmake --install build
+ ```
+
+ May require root privileges
+
+5. **Uninstall**
+
+ CMake doesn't generate an uninstall target by default. To remove installed files, run
+ ```
+ cat build/install_manifest.txt | xargs rm -irv
+ ```
+
+6. **Cleanup build directory**
+
+ ```bash
+ cmake --build build -t clean
+ ```
+
+</details>
+
## Compilation macOS OSX
Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in the compiled binary).
@@ -497,6 +598,14 @@ Also needs a UTF8 locale and a font that covers:
Note that GNU make (`gmake`) is required to compile on FreeBSD.
+<details>
+
+<summary>
+
+### With gmake
+
+</summary>
+
1. **Install dependencies**
```bash
@@ -577,28 +686,98 @@ Also needs a UTF8 locale and a font that covers:
gmake help
```
-## GPU compatibility
- Btop++ supports NVIDIA and AMD GPUs out of the box on Linux, provided you have the correct drivers and libraries.
- Compatibility with Intel GPUs using generic DRM calls is planned, as is compatibility for FreeBSD and macOS.
+</details>
- * **NVIDIA**
+<details>
- You must use an official NVIDIA driver, both the closed-source and [open-source](https://github.com/NVIDIA/open-gpu-kernel-modules) ones have been verified to work.
+<summary>
- 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.
+### With CMake (Community maintained)
- * **AMD**
+</summary>
- AMDGPU data is queried using the [ROCm SMI](https://github.com/RadeonOpenCompute/rocm_smi_lib) library, which may or may not be packaged for your distribution. If your distribution doesn't provide a package, btop++ is statically linked to ROCm SMI with the `RSMI_STATIC=true` make flag.
+1. **Install build dependencies**
- This flag expects the ROCm SMI source code in `lib/rocm_smi_lib`, and compilation will fail if it's not there. The latest tested version is 5.6.x, which can be obtained with the following command:
+ Requires Clang / GCC, CMake, Ninja and Git
+
+ _**Note:** LLVM's libc++ shipped with FreeBSD 13 is too old and cannot compile btop._
+ FreeBSD 14 and later:
```bash
- git clone https://github.com/RadeonOpenCompute/rocm_smi_lib.git --depth 1 -b rocm-5.6.x lib/rocm_smi_lib
+ pkg install cmake ninja
+ ```
+
+ FreeBSD 13:
+ ```bash
+ pkg install cmake gcc13 ninja
```
+2. **Clone the repository**
+
+ ```bash
+ git clone https://github.com/aristocratos/btop.git && cd btop
+ ``````
+
+3. **Compile**
+
+ FreeBSD 14 and later:
+ ```bash
+ # Configure
+ cmake -B build -G Ninja
+ # Build
+ cmake --build build
+ ```
+
+ FreeBSD 13:
+ ```bash
+ # Configure
+ CXX=g++13 cmake -B build -G Ninja
+ # Build
+ cmake --build build
+ ```
+
+ This will automatically build a release version of btop.
+
+ Some useful options to pass to the configure step:
+
+ | Configure flag | Description |
+ |---------------------------------|-------------------------------------------------------------------------|
+ | `-DBTOP_STATIC=<ON\|OFF>` | Enables static linking (OFF by default) |
+ | `-DBTOP_LTO=<ON\|OFF>` | Enables link time optimization (ON by default) |
+ | `-DBTOP_USE_MOLD=<ON\|OFF>` | Use mold to link btop (OFF by default) |
+ | `-DBTOP_PEDANTIC=<ON\|OFF>` | Compile with additional warnings (OFF by default) |
+ | `-DBTOP_WERROR=<ON\|OFF>` | Compile with warnings as errors (OFF by default) |
+ | `-DCMAKE_INSTALL_PREFIX=<path>` | The installation prefix ('/usr/local' by default) |
+
+ _**Note:** Static linking does not work with GCC._
+
+ To force a compiler, run `CXX=<compiler> cmake -B build -G Ninja`
+
+4. **Install**
+
+ ```bash
+ cmake --install build
+ ```
+
+ May require root privileges
+
+5. **Uninstall**
+
+ CMake doesn't generate an uninstall target by default. To remove installed files, run
+ ```
+ cat build/install_manifest.txt | xargs rm -irv
+ ```
+
+6. **Cleanup build directory**
+
+ ```bash
+ cmake --build build -t clean
+ ```
+
+</details>
+
## Installing the snap
[![btop](https://snapcraft.io/btop/badge.svg)](https://snapcraft.io/btop)
diff --git a/cmake/Modules/Finddevstat.cmake b/cmake/Modules/Finddevstat.cmake
new file mode 100644
index 0000000..694e613
--- /dev/null
+++ b/cmake/Modules/Finddevstat.cmake
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Find devstat, the Device Statistics Library
+#
+
+if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ find_path(devstat_INCLUDE_DIR NAMES devstat.h)
+ find_library(devstat_LIBRARY NAMES devstat)
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(devstat REQUIRED_VARS devstat_LIBRARY devstat_INCLUDE_DIR)
+
+ if(devstat_FOUND AND NOT TARGET devstat::devstat)
+ add_library(devstat::devstat UNKNOWN IMPORTED)
+ set_target_properties(devstat::devstat PROPERTIES
+ IMPORTED_LOCATION "${devstat_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${devstat_INCLUDE_DIR}"
+ )
+ endif()
+
+ mark_as_advanced(devstat_INCLUDE_DIR devstat_LIBRARY)
+endif()
+
diff --git a/cmake/Modules/Findelf.cmake b/cmake/Modules/Findelf.cmake
new file mode 100644
index 0000000..91e0beb
--- /dev/null
+++ b/cmake/Modules/Findelf.cmake
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Find libelf, the ELF Access Library
+#
+
+if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ find_path(elf_INCLUDE_DIR NAMES libelf.h)
+ find_library(elf_LIBRARY NAMES elf)
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(elf REQUIRED_VARS elf_LIBRARY elf_INCLUDE_DIR)
+
+ if(elf_FOUND AND NOT TARGET elf::elf)
+ add_library(elf::elf UNKNOWN IMPORTED)
+ set_target_properties(elf::elf PROPERTIES
+ IMPORTED_LOCATION "${elf_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${elf_INCLUDE_DIR}"
+ )
+ endif()
+
+ mark_as_advanced(elf_INCLUDE_DIR elf_LIBRARY)
+endif()
+
diff --git a/cmake/Modules/Findkvm.cmake b/cmake/Modules/Findkvm.cmake
new file mode 100644
index 0000000..a0847de
--- /dev/null
+++ b/cmake/Modules/Findkvm.cmake
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Find libkvm, the Kernel Data Access Library
+#
+
+if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ find_path(kvm_INCLUDE_DIR NAMES kvm.h)
+ find_library(kvm_LIBRARY NAMES kvm)
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(kvm REQUIRED_VARS kvm_LIBRARY kvm_INCLUDE_DIR)
+
+ if(kvm_FOUND AND NOT TARGET kvm::kvm)
+ add_library(kvm::kvm UNKNOWN IMPORTED)
+ set_target_properties(kvm::kvm PROPERTIES
+ IMPORTED_LOCATION "${kvm_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${kvm_INCLUDE_DIR}"
+ )
+ endif()
+
+ mark_as_advanced(kvm_INCLUDE_DIR kvm_LIBRARY)
+endif()
+
diff --git a/src/btop_config.cpp b/src/btop_config.cpp
index 4189c64..0f723b7 100644
--- a/src/btop_config.cpp
+++ b/src/btop_config.cpp
@@ -109,6 +109,8 @@ namespace Config {
{"proc_filter_kernel", "#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop)."},
+ {"proc_aggregate", "#* In tree-view, always accumulate child process resources in the parent process."},
+
{"cpu_graph_upper", "#* Sets the CPU stat shown in upper half of the CPU graph, \"total\" is always available.\n"
"#* Select from a list of detected attributes from the options menu."},
@@ -296,6 +298,7 @@ namespace Config {
{"lowcolor", false},
{"show_detailed", false},
{"proc_filtering", false},
+ {"proc_aggregate", false},
#ifdef GPU_SUPPORT
{"nvml_measure_pcie_speeds", true},
{"gpu_mirror_graph", true},
diff --git a/src/btop_draw.cpp b/src/btop_draw.cpp
index 1327562..edb1eec 100644
--- a/src/btop_draw.cpp
+++ b/src/btop_draw.cpp
@@ -1876,7 +1876,17 @@ namespace Proc {
else mem_str.resize((mem_p < 10 or mem_p >= 100 ? 3 : 4));
mem_str += '%';
}
- out += (thread_size > 0 ? t_color + rjust(to_string(min(p.threads, (size_t)9999)), thread_size) + ' ' + end : "" )
+
+ // Shorten process thread representation when larger than 5 digits: 10000 -> 10K ...
+ const std::string proc_threads_string = [&] {
+ if (p.threads > 9999) {
+ return std::to_string(p.threads / 1000) + 'K';
+ } else {
+ return std::to_string(p.threads);
+ }
+ }();
+
+ out += (thread_size > 0 ? t_color + rjust(proc_threads_string, thread_size) + ' ' + end : "" )
+ g_color + ljust((cmp_greater(p.user.size(), user_size) ? p.user.substr(0, user_size - 1) + '+' : p.user), user_size) + ' '
+ m_color + rjust(mem_str, 5) + end + ' '
+ (is_selected ? "" : Theme::c("inactive_fg")) + (show_graphs ? graph_bg * 5: "")
@@ -1892,8 +1902,11 @@ namespace Proc {
if (numpids > select_max) {
const int scroll_pos = clamp((int)round((double)start * select_max / (numpids - select_max)), 0, height - 5);
out += Mv::to(y + 1, x + width - 2) + Fx::b + Theme::c("main_fg") + Symbols::up
- + Mv::to(y + height - 2, x + width - 2) + Symbols::down
- + Mv::to(y + 2 + scroll_pos, x + width - 2) + "█";
+ + Mv::to(y + height - 2, x + width - 2) + Symbols::down;
+
+ for (int i = y + 2; i < y + height - 2; i++) {
+ out += Mv::to(i, x + width - 2) + ((i == y + 2 + scroll_pos) ? "█" : " ");
+ }
}
//? Current selection and number of processes
diff --git a/src/btop_input.cpp b/src/btop_input.cpp
index ce3ac48..88f307b 100644
--- a/src/btop_input.cpp
+++ b/src/btop_input.cpp
@@ -64,9 +64,13 @@ namespace Input {
{"[C", "right"},
{"OC", "right"},
{"[2~", "insert"},
+ {"[4h", "insert"},
{"[3~", "delete"},
+ {"[P", "delete"},
{"[H", "home"},
+ {"[1~", "home"},
{"[F", "end"},
+ {"[4~", "end"},
{"[5~", "page_up"},
{"[6~", "page_down"},
{"\t", "tab"},
@@ -362,6 +366,9 @@ namespace Input {
else if (key == "c")
Config::flip("proc_per_core");
+ else if (key == "%")
+ Config::flip("proc_mem_bytes");
+
else if (key == "delete" and not Config::getS("proc_filter").empty())
Config::set("proc_filter", ""s);
diff --git a/src/btop_menu.cpp b/src/btop_menu.cpp
index 9b11f21..206052f 100644
--- a/src/btop_menu.cpp
+++ b/src/btop_menu.cpp
@@ -54,15 +54,73 @@ namespace Menu {
int signalKillRet{}; // defaults to 0
const array<string, 32> P_Signals = {
- "0",
+ "0",
+#ifdef __linux__
+#if defined(__hppa__)
+ "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL",
+ "SIGTRAP", "SIGABRT", "SIGSTKFLT", "SIGFPE",
+ "SIGKILL", "SIGBUS", "SIGSEGV", "SIGXCPU",
+ "SIGPIPE", "SIGALRM", "SIGTERM", "SIGUSR1",
+ "SIGUSR2", "SIGCHLD", "SIGPWR", "SIGVTALRM",
+ "SIGPROF", "SIGIO", "SIGWINCH", "SIGSTOP",
+ "SIGTSTP", "SIGCONT", "SIGTTIN", "SIGTTOU",
+ "SIGURG", "SIGXFSZ", "SIGSYS"
+#elif defined(__mips__)
+ "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL",
+ "SIGTRAP", "SIGABRT", "SIGEMT", "SIGFPE",
+ "SIGKILL", "SIGBUS", "SIGSEGV", "SIGSYS",
+ "SIGPIPE", "SIGALRM", "SIGTERM", "SIGUSR1",
+ "SIGUSR2", "SIGCHLD", "SIGPWR", "SIGWINCH",
+ "SIGURG", "SIGIO", "SIGSTOP", "SIGTSTP",
+ "SIGCONT", "SIGTTIN", "SIGTTOU", "SIGVTALRM",
+ "SIGPROF", "SIGXCPU", "SIGXFSZ"
+#elif defined(__alpha__)
+ "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL",
+ "SIGTRAP", "SIGABRT", "SIGEMT", "SIGFPE",
+ "SIGKILL", "SIGBUS", "SIGSEGV", "SIGSYS",
+ "SIGPIPE", "SIGALRM", "SIGTERM", "SIGURG",
+ "SIGSTOP", "SIGTSTP", "SIGCONT", "SIGCHLD",
+ "SIGTTIN", "SIGTTOU", "SIGIO", "SIGXCPU",
+ "SIGXFSZ", "SIGVTALRM", "SIGPROF", "SIGWINCH",
+ "SIGPWR", "SIGUSR1", "SIGUSR2"
+#elif defined (__sparc__)
+ "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL",
+ "SIGTRAP", "SIGABRT", "SIGEMT", "SIGFPE",
+ "SIGKILL", "SIGBUS", "SIGSEGV", "SIGSYS",
+ "SIGPIPE", "SIGALRM", "SIGTERM", "SIGURG",
+ "SIGSTOP", "SIGTSTP", "SIGCONT", "SIGCHLD",
+ "SIGTTIN", "SIGTTOU", "SIGIO", "SIGXCPU",
+ "SIGXFSZ", "SIGVTALRM", "SIGPROF", "SIGWINCH",
+ "SIGLOST", "SIGUSR1", "SIGUSR2"
+#else
"SIGHUP", "SIGINT", "SIGQUIT", "SIGILL",
"SIGTRAP", "SIGABRT", "SIGBUS", "SIGFPE",
"SIGKILL", "SIGUSR1", "SIGSEGV", "SIGUSR2",
- "SIGPIPE", "SIGALRM", "SIGTERM", "16", "SIGCHLD",
- "SIGCONT", "SIGSTOP", "SIGTSTP", "SIGTTIN",
- "SIGTTOU", "SIGURG", "SIGXCPU", "SIGXFSZ",
- "SIGVTALRM", "SIGPROF", "SIGWINCH", "SIGIO",
- "SIGPWR", "SIGSYS"
+ "SIGPIPE", "SIGALRM", "SIGTERM", "SIGSTKFLT",
+ "SIGCHLD", "SIGCONT", "SIGSTOP", "SIGTSTP",
+ "SIGTTIN", "SIGTTOU", "SIGURG", "SIGXCPU",
+ "SIGXFSZ", "SIGVTALRM", "SIGPROF", "SIGWINCH",
+ "SIGIO", "SIGPWR", "SIGSYS"
+#endif
+#elif defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__APPLE__)
+ "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL",
+ "SIGTRAP", "SIGABRT", "SIGEMT", "SIGFPE",
+ "SIGKILL", "SIGBUS", "SIGSEGV", "SIGSYS",
+ "SIGPIPE", "SIGALRM", "SIGTERM", "SIGURG",
+ "SIGSTOP", "SIGTSTP", "SIGCONT", "SIGCHLD",
+ "SIGTTIN", "SIGTTOU", "SIGIO", "SIGXCPU",
+ "SIGXFSZ", "SIGVTALRM", "SIGPROF", "SIGWINCH",
+ "SIGINFO", "SIGUSR1", "SIGUSR2"
+#else
+ "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL",
+ "SIGTRAP", "SIGABRT", "7", "SIGFPE",
+ "SIGKILL", "10", "SIGSEGV", "12",
+ "SIGPIPE", "SIG