diff options
author | aristocratos <gnmjpl@gmail.com> | 2023-11-25 21:01:11 +0100 |
---|---|---|
committer | aristocratos <gnmjpl@gmail.com> | 2023-11-25 21:01:11 +0100 |
commit | 19bcff894bd8f018bc3c76607b1dd91200537923 (patch) | |
tree | c4bb731a28f389874fbf000ef2b10785c3cbee41 | |
parent | b87772611cb6290e834c6beb27eaceea46a10d90 (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-- | .editorconfig | 2 | ||||
-rw-r--r-- | .github/workflows/continuous-build-freebsd.yml | 8 | ||||
-rw-r--r-- | .gitignore | 22 | ||||
-rw-r--r-- | CMakeLists.txt | 167 | ||||
-rw-r--r-- | README.md | 201 | ||||
-rw-r--r-- | cmake/Modules/Finddevstat.cmake | 23 | ||||
-rw-r--r-- | cmake/Modules/Findelf.cmake | 23 | ||||
-rw-r--r-- | cmake/Modules/Findkvm.cmake | 23 | ||||
-rw-r--r-- | src/btop_config.cpp | 3 | ||||
-rw-r--r-- | src/btop_draw.cpp | 19 | ||||
-rw-r--r-- | src/btop_input.cpp | 7 | ||||
-rw-r--r-- | src/btop_menu.cpp | 76 | ||||
-rw-r--r-- | src/btop_shared.cpp | 7 | ||||
-rw-r--r-- | src/btop_tools.cpp | 2 | ||||
-rw-r--r-- | src/linux/btop_collect.cpp | 65 | ||||
-rw-r--r-- | themes/elementarish.theme | 50 | ||||
-rw-r--r-- | themes/horizon.theme | 86 |
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 @@ -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") + @@ -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 |