Merge branch 'main' into main

This commit is contained in:
kz6fittycent 2023-12-15 12:02:11 -06:00 committed by GitHub
commit 2d3e453ed5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 310 additions and 122 deletions

40
.github/workflows/cmake-freebsd.yml vendored Normal file
View file

@ -0,0 +1,40 @@
name: FreeBSD CMake
on:
push:
branches: main
tags-ignore: '*.*'
paths:
- '.github/workflows/cmake-freebsd.yml'
- 'CMakeLists.txt'
- 'include/**'
- 'src/*pp'
- 'src/freebsd/*pp'
pull_request:
branches: main
paths:
- '.github/workflows/cmake-freebsd.yml'
- 'CMakeLists.txt'
- 'include/**'
- 'src/*pp'
- 'src/freebsd/*pp'
jobs:
cmake_build_on_freebsd:
runs-on: ubuntu-22.04
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Compile
uses: vmactions/freebsd-vm@v1
with:
release: '14.0'
usesh: true
prepare: pkg install -y cmake ninja
run: |
CXX=clang++ cmake -B build -G Ninja -DBTOP_STATIC=ON
cmake --build build --verbose

40
.github/workflows/cmake-linux.yml vendored Normal file
View file

@ -0,0 +1,40 @@
name: Linux CMake
on:
push:
branches: main
tags-ignore: '*.*'
paths:
- '.github/workflows/cmake-linux.yml'
- 'CMakeLists.txt'
- 'include/**'
- 'src/*pp'
- 'src/linux/*pp'
pull_request:
branches: main
paths:
- '.github/workflows/cmake-linux.yml'
- 'CMakeLists.txt'
- 'include/**'
- 'src/*pp'
- 'src/linux/*pp'
jobs:
cmake_build_on_linux:
runs-on: ubuntu-latest
container: alpine:edge
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Install build tools
run: apk add --no-cache --update clang cmake lld ninja
- name: Configure
run: CXX=clang++ LDFLAGS=-fuse-ld=lld cmake -B build -G Ninja -DBTOP_STATIC=ON
- name: Compile
run: cmake --build build --verbose

47
.github/workflows/cmake-macos.yml vendored Normal file
View file

@ -0,0 +1,47 @@
name: macOS CMake
on:
push:
branches: main
tags-ignore: '*.*'
paths:
- '.github/workflows/cmake-macos.yml'
- 'CMakeLists.txt'
- 'include/**'
- 'src/*pp'
- 'src/osx/*pp'
pull_request:
branches: main
paths:
- '.github/workflows/cmake-macos.yml'
- 'CMakeLists.txt'
- 'include/**'
- 'src/*pp'
- 'src/osx/*pp'
jobs:
cmake_build_on_macos:
runs-on: macos-latest
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Install build tools
run: |
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
brew update --quiet
brew install --force --overwrite cmake llvm@17 ninja
- name: Configure
run: |
export LLVM_PREFIX="$(brew --prefix llvm)"
export CXX="$LLVM_PREFIX/bin/clang++"
export CPPFLAGS="-I$LLVM_PREFIX/include"
export LDFLAGS="-L$LLVM_PREFIX/lib -L$LLVM_PREFIX/lib/c++ -Wl,-rpath,$LLVM_PREFIX/lib/c++ -fuse-ld=$LLVM_PREFIX/bin/ld64.lld"
cmake -B build -G Ninja
- name: Compile
run: cmake --build build --verbose

View file

@ -58,18 +58,3 @@ jobs:
path: 'bin/*' path: 'bin/*'
if-no-files-found: error if-no-files-found: error
build-freebsd-cmake:
runs-on: ubuntu-22.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- name: Compile
uses: vmactions/freebsd-vm@v1
with:
release: '14.0'
usesh: true
prepare: pkg install -y cmake git ninja
run: |
CXX=clang++ cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBTOP_STATIC=ON
cmake --build build

View file

@ -2,6 +2,12 @@
* Added Gpu Support | @romner-set | PR #529 * Added Gpu Support | @romner-set | PR #529
* Enable macos clang | @muneebmahmed | PR #666
* Fix Apple Silicon CPUs misprinted | @masiboss | PR #679
* Cmake support for MacOS | @imwints | PR #675
* Elementarish theme: color update according to Elementary palette | @stradicat | PR #660 * Elementarish theme: color update according to Elementary palette | @stradicat | PR #660
* Add alternative key codes for Delete, Insert, Home, End | @ivanp7 | PR #659 * Add alternative key codes for Delete, Insert, Home, End | @ivanp7 | PR #659

View file

@ -3,7 +3,7 @@
# CMake configuration for btop # CMake configuration for btop
# #
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.24)
# Disable in-source builds since they would override the Makefile # Disable in-source builds since they would override the Makefile
if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
@ -17,7 +17,12 @@ project("btop"
LANGUAGES CXX LANGUAGES CXX
) )
# Make custom modules available include(CheckCXXCompilerFlag)
include(CheckIncludeFileCXX)
include(CheckIPOSupported)
include(CMakeDependentOption)
# Make our Find<Package>.cmake files available
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
# When the build type is not set we can't fortify # When the build type is not set we can't fortify
@ -31,8 +36,6 @@ set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_COLOR_DIAGNOSTICS ON) set(CMAKE_COLOR_DIAGNOSTICS ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Options
include(CMakeDependentOption)
option(BTOP_STATIC "Link btop statically" OFF) option(BTOP_STATIC "Link btop statically" OFF)
option(BTOP_LTO "Enable LTO" ON) option(BTOP_LTO "Enable LTO" ON)
option(BTOP_USE_MOLD "Use mold to link btop" OFF) option(BTOP_USE_MOLD "Use mold to link btop" OFF)
@ -41,20 +44,11 @@ option(BTOP_WERROR "Compile with warnings as errors" OFF)
option(BTOP_GPU "Enable GPU support" ON) option(BTOP_GPU "Enable GPU support" ON)
cmake_dependent_option(BTOP_RSMI_STATIC "Link statically to ROCm SMI" OFF "BTOP_GPU" OFF) cmake_dependent_option(BTOP_RSMI_STATIC "Link statically to ROCm SMI" OFF "BTOP_GPU" OFF)
if(BTOP_STATIC) if(BTOP_STATIC AND NOT APPLE)
# Set this before calling find_package # Set this before calling find_package
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
endif() endif()
include(CheckCXXCompilerFlag)
include(CheckIncludeFileCXX)
include(CheckIPOSupported)
check_include_file_cxx(ranges CXX_HAS_RANGES)
if(NOT CXX_HAS_RANGES)
message(FATAL_ERROR "The compiler doesn't support <ranges>")
endif()
add_executable(btop add_executable(btop
src/btop.cpp src/btop.cpp
src/btop_config.cpp src/btop_config.cpp
@ -66,106 +60,98 @@ add_executable(btop
src/btop_tools.cpp src/btop_tools.cpp
) )
# NOTE: Checks can be simplified with CMake 3.25 if(APPLE)
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") target_sources(btop PRIVATE src/osx/btop_collect.cpp src/osx/sensors.cpp src/osx/smc.cpp)
target_sources(btop PRIVATE
src/osx/btop_collect.cpp
src/osx/sensors.cpp
src/osx/smc.cpp
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
target_sources(btop PRIVATE src/freebsd/btop_collect.cpp) target_sources(btop PRIVATE src/freebsd/btop_collect.cpp)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") elseif(LINUX)
target_sources(btop PRIVATE src/linux/btop_collect.cpp) target_sources(btop PRIVATE src/linux/btop_collect.cpp)
else() else()
message(FATAL_ERROR "${CMAKE_SYSTEM_NAME} is not supported") message(FATAL_ERROR "${CMAKE_SYSTEM_NAME} is not supported")
endif() endif()
check_include_file_cxx(ranges CXX_HAVE_RANGES)
if(NOT CXX_HAVE_RANGES)
message(FATAL_ERROR "The compiler doesn't support <ranges>")
endif()
# Check for and enable LTO # Check for and enable LTO
check_ipo_supported(RESULT ipo_supported) check_ipo_supported(RESULT ipo_supported)
if(ipo_supported AND BTOP_LTO) if(ipo_supported AND BTOP_LTO)
set_target_properties(btop PROPERTIES INTERPROCEDURAL_OPTIMIZATION ON) set_target_properties(btop PROPERTIES INTERPROCEDURAL_OPTIMIZATION ON)
endif() endif()
# TODO: enable more warnings in coordination with upstream target_compile_options(btop PRIVATE -Wall -Wextra -Wpedantic -ftree-vectorize)
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) if(BTOP_PEDANTIC)
target_compile_options(btop PRIVATE target_compile_options(btop PRIVATE
-Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused -Woverloaded-virtual
-Woverloaded-virtual -Wconversion -Wsign-conversion -Wdouble-promotion -Wconversion -Wsign-conversion -Wdouble-promotion -Wformat=2 -Wimplicit-fallthrough -Weffc++
-Wformat=2 -Wimplicit-fallthrough -Weffc++ $<$<CXX_COMPILER_ID:Clang>:-Wheader-hygiene -Wgnu -Wthread-safety>
$<$<CXX_COMPILER_ID:GNU>:-Wduplicated-cond -Wduplicated-branches -Wlogical-op>
$<$<CXX_COMPILER_ID:GNU>:-Wnull-dereference -Wuseless-cast>
) )
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(btop PRIVATE
-Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wnull-dereference
-Wuseless-cast
)
endif()
endif() endif()
if(BTOP_WERROR) if(BTOP_WERROR)
target_compile_options(btop PRIVATE -Werror) target_compile_options(btop PRIVATE -Werror)
endif() endif()
check_cxx_compiler_flag(-fstack-protector CXX_HAS_FSTACK_PROTECTOR) if(NOT APPLE)
if(CXX_HAS_FSTACK_PROTECTOR) target_compile_options(btop PRIVATE -fstack-clash-protection)
endif()
check_cxx_compiler_flag(-fstack-protector HAS_FSTACK_PROTECTOR)
if(HAS_FSTACK_PROTECTOR)
target_compile_options(btop PRIVATE -fstack-protector) target_compile_options(btop PRIVATE -fstack-protector)
endif() endif()
check_cxx_compiler_flag(-fcf-protection HAS_FCF_PROTECTION)
check_cxx_compiler_flag(-fcf-protection CXX_HAS_FCF_PROTECTION) if(HAS_FCF_PROTECTION)
if(CXX_HAS_FCF_PROTECTION)
target_compile_options(btop PRIVATE -fcf-protection) target_compile_options(btop PRIVATE -fcf-protection)
endif() endif()
target_compile_definitions(btop PRIVATE target_compile_definitions(btop PRIVATE
_FILE_OFFSET_BITS=64 _FILE_OFFSET_BITS=64
_GLIBCXX_ASSERTIONS _LIBCPP_ENABLE_ASSERTIONS=1 $<$<CONFIG:Debug>:_GLIBCXX_ASSERTIONS _LIBCPP_ENABLE_ASSERTIONS=1>
# Only has an effect with optimizations enabled # Only has an effect with optimizations enabled
$<$<NOT:$<CONFIG:Debug>>:_FORTIFY_SOURCE=2> $<$<NOT:$<CONFIG:Debug>>:_FORTIFY_SOURCE=2>
) )
target_include_directories(btop SYSTEM PRIVATE include)
# Enable pthreads
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(btop Threads::Threads)
# Enable GPU support # Enable GPU support
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND BTOP_GPU) if(LINUX AND BTOP_GPU)
target_compile_definitions(btop PRIVATE GPU_SUPPORT) target_compile_definitions(btop PRIVATE GPU_SUPPORT)
if(BTOP_RSMI_STATIC) if(BTOP_RSMI_STATIC)
# ROCm doesn't properly add it's folders to the module path # ROCm doesn't properly add it's folders to the module path if `CMAKE_MODULE_PATH` is already
# if `CMAKE_MODULE_PATH` is already set # set
# We could also manully append ROCm's path here # We could also manully append ROCm's path here
set(_CMAKE_MODULE_PATH CMAKE_MODULE_PATH) set(_CMAKE_MODULE_PATH CMAKE_MODULE_PATH)
unset(CMAKE_MODULE_PATH) unset(CMAKE_MODULE_PATH)
# NOTE: This might be problematic in the future if other sub projects # NOTE: This might be problematic in the future if other sub projects depend on this or if
# depend on this or if btop starts producing libraries # btop starts producing libraries
# Build a static ROCm library # Build a static ROCm library
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
add_subdirectory(lib/rocm_smi_lib EXCLUDE_FROM_ALL) add_subdirectory(lib/rocm_smi_lib EXCLUDE_FROM_ALL)
add_library(ROCm INTERFACE) add_library(ROCm INTERFACE)
# Export ROCm's properties to a CMake target (which should've been done by ROCm :-/) # Export ROCm's properties to a target
target_compile_definitions(ROCm INTERFACE RSMI_STATIC) target_compile_definitions(ROCm INTERFACE RSMI_STATIC)
target_include_directories(ROCm INTERFACE lib/rocm_smi_lib/include) target_include_directories(ROCm INTERFACE lib/rocm_smi_lib/include)
target_link_libraries(ROCm INTERFACE rocm_smi64) target_link_libraries(ROCm INTERFACE rocm_smi64)
set(CMAKE_MODULE_PATH _CMAKE_MODULE_PATH) set(CMAKE_MODULE_PATH _CMAKE_MODULE_PATH)
target_link_libraries(btop PRIVATE ROCm) target_link_libraries(btop ROCm)
endif() endif()
endif() endif()
target_include_directories(btop SYSTEM PRIVATE include)
# mold
if(BTOP_USE_MOLD) if(BTOP_USE_MOLD)
target_link_options(btop PRIVATE -fuse-ld=mold) target_link_options(btop PRIVATE -fuse-ld=mold)
endif() endif()
@ -175,21 +161,28 @@ if(BTOP_STATIC)
target_link_options(btop PRIVATE -static LINKER:--fatal-warnings) target_link_options(btop PRIVATE -static LINKER:--fatal-warnings)
endif() endif()
# Add libraries # Other platform depdendent flags
set(THREADS_PREFER_PTHREAD_FLAG ON) if(APPLE)
find_package(Threads REQUIRED) target_link_libraries(btop
target_link_libraries(btop PRIVATE Threads::Threads) $<LINK_LIBRARY:FRAMEWORK,CoreFoundation> $<LINK_LIBRARY:FRAMEWORK,IOKit>
)
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") elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
# Avoid version mismatch for libstdc++ when a specific version of GCC is installed and not the
# default one since all use the default ones RPATH
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
string(REGEX MATCH "^[0-9]+" GCC_VERSION_MAJOR "${CMAKE_CXX_COMPILER_VERSION}")
set_target_properties(btop PROPERTIES
INSTALL_RPATH "/usr/local/lib/gcc${GCC_VERSION_MAJOR}"
BUILD_WITH_INSTALL_RPATH TRUE
)
endif()
find_package(devstat REQUIRED) find_package(devstat REQUIRED)
find_package(kvm REQUIRED) target_link_libraries(btop devstat::devstat)
target_link_libraries(btop PRIVATE devstat::devstat kvm::kvm)
if(BTOP_STATIC) if(BTOP_STATIC)
find_package(elf REQUIRED) find_package(elf REQUIRED)
target_link_libraries(btop PRIVATE elf::elf) find_package(kvm REQUIRED)
target_link_libraries(btop elf::elf kvm::kvm)
endif() endif()
endif() endif()

View file

@ -59,10 +59,14 @@ override CXX_VERSION_MAJOR := $(shell echo $(CXX_VERSION) | cut -d '.' -f 1)
CLANG_WORKS = false CLANG_WORKS = false
GCC_WORKS = false GCC_WORKS = false
MIN_CLANG_VERSION = 16
#? Supported is Clang 16.0.0 and later #? Supported is Clang 16.0.0 and later
ifeq ($(CXX_IS_CLANG),true) ifeq ($(CXX_IS_CLANG),true)
ifneq ($(shell test $(CXX_VERSION_MAJOR) -lt 16; echo $$?),0) ifeq ($(shell $(CXX) --version | grep Apple >/dev/null 2>&1; echo $$?),0)
MIN_CLANG_VERSION := 15
endif
ifneq ($(shell test $(CXX_VERSION_MAJOR) -lt $(MIN_CLANG_VERSION); echo $$?),0)
CLANG_WORKS := true CLANG_WORKS := true
endif endif
endif endif

104
README.md
View file

@ -326,7 +326,7 @@ Also needs a UTF8 locale and a font that covers:
## Compilation Linux ## Compilation Linux
Needs GCC 10 / Clang 16 (or higher). Requires at least GCC 10 or Clang 16.
The makefile also needs GNU coreutils and `sed` (should already be installed on any modern distribution). The makefile also needs GNU coreutils and `sed` (should already be installed on any modern distribution).
@ -359,11 +359,9 @@ Also needs a UTF8 locale and a font that covers:
``` ```
<details> <details>
<summary> <summary>
### With Make ### With Make
</summary> </summary>
1. **Install dependencies (example for Ubuntu 21.04 Hirsute)** 1. **Install dependencies (example for Ubuntu 21.04 Hirsute)**
@ -450,13 +448,10 @@ Also needs a UTF8 locale and a font that covers:
``` ```
</details> </details>
<details> <details>
<summary> <summary>
### With CMake (Community maintained) ### With CMake (Community maintained)
</summary> </summary>
1. **Install build dependencies** 1. **Install build dependencies**
@ -499,7 +494,7 @@ Also needs a UTF8 locale and a font that covers:
| `-DBTOP_RSMI_STATIC=<ON\|OFF>` | Build and link the ROCm SMI library statically (OFF by default) | | `-DBTOP_RSMI_STATIC=<ON\|OFF>` | Build and link the ROCm SMI library statically (OFF by default) |
| `-DCMAKE_INSTALL_PREFIX=<path>` | The installation prefix ('/usr/local' 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` To force any other compiler, run `CXX=<compiler> cmake -B build -G Ninja`
4. **Install** 4. **Install**
@ -526,14 +521,20 @@ Also needs a UTF8 locale and a font that covers:
## Compilation macOS OSX ## Compilation macOS OSX
Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in the compiled binary). Requires at least GCC 10 or Clang 16.
GCC 12 needed for macOS Ventura. If you get linker errors on Ventura you'll need to upgrade your command line tools (Version 14.0) is bugged. With GCC, version 12 (or better) is needed for macOS Ventura. If you get linker errors on Ventura you'll need to upgrade your command line tools (Version 14.0) is bugged.
The makefile also needs GNU coreutils and `sed`. The makefile also needs GNU coreutils and `sed`.
Install and use Homebrew or MacPorts package managers for easy dependency installation Install and use Homebrew or MacPorts package managers for easy dependency installation
<details>
<summary>
### With Make
</summary>
1. **Install dependencies (example for Homebrew)** 1. **Install dependencies (example for Homebrew)**
```bash ```bash
@ -612,18 +613,90 @@ Also needs a UTF8 locale and a font that covers:
gmake help gmake help
``` ```
</details>
<details>
<summary>
### With CMake (Community maintained)
</summary>
1. **Install build dependencies**
Requires Clang, CMake, Ninja and Git
```bash
brew update --quiet
brew install cmake git llvm ninja
```
2. **Clone the repository**
```bash
git clone https://github.com/aristocratos/btop.git && cd btop
```
3. **Compile**
```bash
# Configure
export LLVM_PREFIX="$(brew --prefix llvm)"
export CXX="$LLVM_PREFIX/bin/clang++"
export CPPFLAGS="-I$LLVM_PREFIX/include"
export LDFLAGS="-L$LLVM_PREFIX/lib -L$LLVM_PREFIX/lib/c++ -Wl,-rpath,$LLVM_PREFIX/lib/c++ -fuse-ld=$LLVM_PREFIX/bin/ld64.lld"
cmake -B build -G Ninja
# Build
cmake --build build
```
_**Note:** btop uses lots of C++ 20 features, so it's necessary to be specific about the compiler and the standard library. If you get a compile with Apple-Clang or GCC, feel free to add the instructions here._
This will automatically build a release version of btop.
Some useful options to pass to the configure step:
| Configure flag | Description |
|---------------------------------|-------------------------------------------------------------------------|
| `-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 any specific 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 FreeBSD ## Compilation FreeBSD
Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in the compiled binary). Requires at least GCC 10 or Clang 16.
Note that GNU make (`gmake`) is required to compile on FreeBSD. Note that GNU make (`gmake`) is required to compile on FreeBSD.
<details> <details>
<summary> <summary>
### With gmake ### With gmake
</summary> </summary>
1. **Install dependencies** 1. **Install dependencies**
@ -706,13 +779,10 @@ Also needs a UTF8 locale and a font that covers:
``` ```
</details> </details>
<details> <details>
<summary> <summary>
### With CMake (Community maintained) ### With CMake (Community maintained)
</summary> </summary>
1. **Install build dependencies** 1. **Install build dependencies**
@ -735,7 +805,7 @@ Also needs a UTF8 locale and a font that covers:
```bash ```bash
git clone https://github.com/aristocratos/btop.git && cd btop git clone https://github.com/aristocratos/btop.git && cd btop
`````` ```
3. **Compile** 3. **Compile**
@ -770,7 +840,7 @@ Also needs a UTF8 locale and a font that covers:
_**Note:** Static linking does not work with GCC._ _**Note:** Static linking does not work with GCC._
To force a compiler, run `CXX=<compiler> cmake -B build -G Ninja` To force any other compiler, run `CXX=<compiler> cmake -B build -G Ninja`
4. **Install** 4. **Install**

View file

@ -75,7 +75,7 @@ namespace Global {
{"#801414", "██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ╚═╝"}, {"#801414", "██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ╚═╝"},
{"#000000", "╚═════╝ ╚═╝ ╚═════╝ ╚═╝"}, {"#000000", "╚═════╝ ╚═╝ ╚═════╝ ╚═╝"},
}; };
const string Version = "1.2.13"; const string Version = "1.3.0";
int coreCount; int coreCount;
string overlay; string overlay;

View file

@ -1755,7 +1755,7 @@ namespace Mem {
//? Get disk/partition stats //? Get disk/partition stats
for (auto it = disks.begin(); it != disks.end(); ) { for (auto it = disks.begin(); it != disks.end(); ) {
auto &[mountpoint, disk] = *it; auto &[mountpoint, disk] = *it;
if (v_contains(ignore_list, mountpoint)) { if (v_contains(ignore_list, mountpoint) or disk.name == "swap") {
it = disks.erase(it); it = disks.erase(it);
continue; continue;
} }
@ -1936,29 +1936,32 @@ namespace Mem {
} }
// looking through all files that start with 'objset' to find the one containing `device_name` object stats // looking through all files that start with 'objset' to find the one containing `device_name` object stats
for (const auto& file: fs::directory_iterator(zfs_pool_stat_path)) { try {
filename = file.path().filename(); for (const auto& file: fs::directory_iterator(zfs_pool_stat_path)) {
if (filename.starts_with("objset")) { filename = file.path().filename();
filestream.open(file.path()); if (filename.starts_with("objset")) {
if (filestream.good()) { filestream.open(file.path());
// skip first two lines if (filestream.good()) {
for (int i = 0; i < 2; i++) filestream.ignore(numeric_limits<streamsize>::max(), '\n'); // skip first two lines
// skip characters until '7' is reached, indicating data type 7, next value will be object name for (int i = 0; i < 2; i++) filestream.ignore(numeric_limits<streamsize>::max(), '\n');
filestream.ignore(numeric_limits<streamsize>::max(), '7'); // skip characters until '7' is reached, indicating data type 7, next value will be object name
filestream >> name_compare; filestream.ignore(numeric_limits<streamsize>::max(), '7');
if (name_compare == device_name) { filestream >> name_compare;
filestream.close(); if (name_compare == device_name) {
if (access(file.path().c_str(), R_OK) == 0) { filestream.close();
return file.path(); if (access(file.path().c_str(), R_OK) == 0) {
} else { return file.path();
Logger::debug("Can't access file: " + file.path().string()); } else {
return ""; Logger::debug("Can't access file: " + file.path().string());
return "";
}
} }
} }
filestream.close();
} }
filestream.close();
} }
} }
catch (fs::filesystem_error& e) {}
Logger::debug("Could not read directory: " + zfs_pool_stat_path.string()); Logger::debug("Could not read directory: " + zfs_pool_stat_path.string());
return ""; return "";