mirror of
https://github.com/aristocratos/btop.git
synced 2024-09-29 22:51:35 +02:00
Merge branch 'main' into main
This commit is contained in:
commit
2d3e453ed5
40
.github/workflows/cmake-freebsd.yml
vendored
Normal file
40
.github/workflows/cmake-freebsd.yml
vendored
Normal 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
40
.github/workflows/cmake-linux.yml
vendored
Normal 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
47
.github/workflows/cmake-macos.yml
vendored
Normal 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
|
||||||
|
|
15
.github/workflows/continuous-build-freebsd.yml
vendored
15
.github/workflows/continuous-build-freebsd.yml
vendored
@ -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
|
|
||||||
|
@ -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
|
||||||
|
131
CMakeLists.txt
131
CMakeLists.txt
@ -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>
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
$<$<CXX_COMPILER_ID:GNU>:-Wnull-dereference -Wuseless-cast>
|
||||||
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()
|
||||||
|
|
||||||
|
6
Makefile
6
Makefile
@ -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
104
README.md
@ -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**
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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,6 +1936,7 @@ 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
|
||||||
|
try {
|
||||||
for (const auto& file: fs::directory_iterator(zfs_pool_stat_path)) {
|
for (const auto& file: fs::directory_iterator(zfs_pool_stat_path)) {
|
||||||
filename = file.path().filename();
|
filename = file.path().filename();
|
||||||
if (filename.starts_with("objset")) {
|
if (filename.starts_with("objset")) {
|
||||||
@ -1959,6 +1960,8 @@ namespace Mem {
|
|||||||
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 "";
|
||||||
|
Loading…
Reference in New Issue
Block a user