From d74ef75908b1acf6271789a878eb818c6a5698f0 Mon Sep 17 00:00:00 2001 From: Edgar Date: Tue, 8 Feb 2022 18:11:36 +0100 Subject: [PATCH] :wrench: Use cmake to build btop --- btop/CMakeLists.txt | 103 ++++++++++++++++++++++++++++++++++++++++++++ btop/PKGBUILD | 17 +++++--- 2 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 btop/CMakeLists.txt diff --git a/btop/CMakeLists.txt b/btop/CMakeLists.txt new file mode 100644 index 0000000..5e2df73 --- /dev/null +++ b/btop/CMakeLists.txt @@ -0,0 +1,103 @@ +cmake_minimum_required (VERSION 3.18) + +file(STRINGS "src/btop.cpp" BTOP_VERSION_LINE REGEX "Version[ \\t\\r\\n]*=[ \\t\\r\\n]*\"[^\"]+\"") +string(REGEX REPLACE "^.*Version[ \\t\\r\\n]*=[ \\t\\r\\n]*\"([^\"]+)\".*$" "\\1" BTOP_VERSION "${BTOP_VERSION_LINE}") + +message(STATUS "btop version: ${BTOP_VERSION}") + +project("btop" + VERSION ${BTOP_VERSION} + DESCRIPTION "Resource monitor that shows usage and stats for processor, memory, disks, network and processes." + HOMEPAGE_URL "https://github.com/aristocratos/btop" + LANGUAGES CXX) + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(PLATFORM_SRCS_GLOB "src/linux/*.cpp") +elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(PLATFORM_SRCS_GLOB "src/freebsd/*.cpp") +elseif(APPLE) + set(PLATFORM_SRCS_GLOB "src/osx/*.cpp") +else() + message(FATAL_ERROR "Unsupported System: ${CMAKE_SYSTEM_NAME}") +endif() + +file(GLOB SRCS CONFIGURE_DEPENDS "src/*.cpp" CONFIGURE_DEPENDS "${PLATFORM_SRCS_GLOB}") + +add_executable(btop ${SRCS}) + +target_include_directories(btop PRIVATE include src) +target_compile_features(btop PUBLIC cxx_std_20) + +set(THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads REQUIRED) +target_link_libraries(btop PRIVATE Threads::Threads) + +include(CheckCXXCompilerFlag) +include(CheckLinkerFlag) + +function(target_compile_options_if_supported) + list(SUBLIST ARGV 2 -1 COMPILE_OPTIONS) + foreach(COMPILE_OPTION ${COMPILE_OPTIONS}) + string(MAKE_C_IDENTIFIER ${COMPILE_OPTION} OPTION_ID) + check_cxx_compiler_flag(${COMPILE_OPTION} CXX_COMPILER_OPTION_CHECK_${OPTION_ID}) + if(CXX_COMPILER_OPTION_CHECK_${OPTION_ID}) + target_compile_options(${ARGV0} ${ARGV1} ${COMPILE_OPTION}) + endif() + endforeach() +endfunction() + +function(target_link_options_if_supported) + list(SUBLIST ARGV 2 -1 LINK_OPTIONS) + foreach(LINK_OPTION ${LINK_OPTIONS}) + string(MAKE_C_IDENTIFIER ${LINK_OPTION} OPTION_ID) + check_linker_flag(CXX ${LINK_OPTION} CXX_LINK_OPTION_CHECK_${OPTION_ID}) + if(CXX_LINK_OPTION_CHECK_${OPTION_ID}) + target_link_options(${ARGV0} ${ARGV1} ${LINK_OPTION}) + endif() + endforeach() +endfunction() + +if(CMAKE_SYSTEM STREQUAL "x86_64") + target_compile_options_if_supported(btop PRIVATE -fcf-protection -cfguard) +endif() + +target_compile_options_if_supported(btop PRIVATE -Wall -Wextra -pedantic) +target_link_options_if_supported(btop PRIVATE -fexceptions -fstack-protector -fstack-clash-protection) + +if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + target_compile_options_if_supported(btop PRIVATE -ftree-loop-vectorize -flto) + target_link_options_if_supported(btop PRIVATE -flto -s) +endif() + +target_compile_definitions(btop PRIVATE _FORTIFY_SOURCE=2 _GLIBCXX_ASSERTIONS) + +if(APPLE) + target_link_options(btop PRIVATE -framework IOKit -framework CoreFoundation) +endif() + +option(STATIC "statically linked executable" OFF) + +if(STATIC) + set(CMAKE_REQUIRED_LINK_OPTIONS -static -Werror -Wl,--fatal-warnings) + check_cxx_source_compiles("#include + int main() { struct passwd* x = getpwuid(0); }" STATIC_GETPWUID) + if(NOT STATIC_GETPWUID) + target_compile_definitions(btop PRIVATE STATIC_BUILD) + endif() + target_link_options_if_supported(btop PRIVATE -static) +endif() + +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Nobody ") +set(CPACK_DEBIAN_PACKAGE_SECTION "utils") + +include(CPack) + +install(TARGETS btop RUNTIME + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +install(FILES "README.md" + DESTINATION "share/btop/" + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +install(DIRECTORY "themes" + DESTINATION "share/btop/" + DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) diff --git a/btop/PKGBUILD b/btop/PKGBUILD index 37c7765..256ce39 100644 --- a/btop/PKGBUILD +++ b/btop/PKGBUILD @@ -8,16 +8,21 @@ pkgdesc='A monitor of system resourecs, bpytop ported to C++' arch=(x86_64 aarch64) url="https://github.com/aristocratos/$pkgname" license=(Apache) -depends=(coreutils sed ) -makedepends=(build-essential gcc-10 g++-10) +depends=(coreutils sed) +makedepends=(cmake build-essential gcc-10 g++-10) _archive="$pkgname-$pkgver" -source=("$_archive.tar.gz::$url/archive/v$pkgver.tar.gz") -sha256sums=('59a87b9d0bb0f5010d53f0ac72ddee9fd7b5a4039bce51b94b262313e946df02') - +source=("$_archive.tar.gz::$url/archive/v$pkgver.tar.gz" "CMakeLists.txt") +sha256sums=('59a87b9d0bb0f5010d53f0ac72ddee9fd7b5a4039bce51b94b262313e946df02' 'SKIP') build() { cd "$_archive" - make CXX=g++-10 all + + cmake . \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DSTATIC=ON + + make -j$(nproc) } package() {