🔧 Use cmake to build btop
This commit is contained in:
parent
49b61ee6d1
commit
d74ef75908
103
btop/CMakeLists.txt
Normal file
103
btop/CMakeLists.txt
Normal file
@ -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 <pwd.h>
|
||||
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 <nobody@nowhere.no>")
|
||||
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)
|
@ -9,15 +9,20 @@ arch=(x86_64 aarch64)
|
||||
url="https://github.com/aristocratos/$pkgname"
|
||||
license=(Apache)
|
||||
depends=(coreutils sed)
|
||||
makedepends=(build-essential gcc-10 g++-10)
|
||||
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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user