Use cmake to build btop
This commit is contained in:
parent
d259fe0aab
commit
c3b56b7813
117
CMakeLists.txt
Normal file
117
CMakeLists.txt
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
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.cmake)
|
||||||
|
|
||||||
|
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()
|
||||||
|
|
||||||
|
target_compile_options_if_supported(btop PRIVATE -Wall -Wextra -pedantic -fcf-protection -cfguard)
|
||||||
|
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 -static-libgcc -static-libstdc++)
|
||||||
|
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(
|
||||||
|
FILES "CHANGELOG.md"
|
||||||
|
DESTINATION "share/btop/"
|
||||||
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
||||||
|
)
|
||||||
|
install(
|
||||||
|
FILES "LICENSE"
|
||||||
|
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
|
||||||
|
)
|
68
CheckLinkerFlag.cmake
Normal file
68
CheckLinkerFlag.cmake
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
# CheckLinkerFlag
|
||||||
|
# ------------------
|
||||||
|
#
|
||||||
|
# Checks whether a compiler supports a given linker flag.
|
||||||
|
#
|
||||||
|
|
||||||
|
include(CheckCSourceCompiles)
|
||||||
|
include(CheckCXXSourceCompiles)
|
||||||
|
include(CheckFortranSourceCompiles)
|
||||||
|
|
||||||
|
include(CMakeCheckCompilerFlagCommonPatterns)
|
||||||
|
|
||||||
|
# FLAG: the linker flag to check
|
||||||
|
# LANGUAGE: the language to test it on. C, CXX, or Fortran
|
||||||
|
# RESULT: return variable
|
||||||
|
|
||||||
|
macro(check_linker_flag LANGUAGE FLAG RESULT)
|
||||||
|
if (NOT DEFINED ${RESULT})
|
||||||
|
set(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${FLAG}")
|
||||||
|
# Normalize locale during test compilation.
|
||||||
|
set(_CheckLinkerFlag_LOCALE_VARS LC_ALL LC_MESSAGES LANG)
|
||||||
|
foreach (v ${_CheckLinkerFlag_LOCALE_VARS})
|
||||||
|
set(_CheckLinkerFlag_SAVED_${v} "$ENV{${v}}")
|
||||||
|
set(ENV{${v}} C)
|
||||||
|
endforeach ()
|
||||||
|
|
||||||
|
CHECK_COMPILER_FLAG_COMMON_PATTERNS(_CheckLinkerFlag_COMMON_PATTERNS)
|
||||||
|
|
||||||
|
if ("${LANGUAGE}" STREQUAL C)
|
||||||
|
|
||||||
|
CHECK_C_SOURCE_COMPILES(
|
||||||
|
"int main(void) { return 0; }" ${RESULT}
|
||||||
|
# Some compilers do not fail with a bad flag
|
||||||
|
FAIL_REGEX "command line option .* is valid for .* but not for C" # GNU
|
||||||
|
${_CheckLinkerFlag_COMMON_PATTERNS}
|
||||||
|
)
|
||||||
|
elseif ("${LANGUAGE}" STREQUAL CXX)
|
||||||
|
check_cxx_source_compiles(
|
||||||
|
"int main(void) { return 0; }" ${RESULT}
|
||||||
|
# Some compilers do not fail with a bad flag
|
||||||
|
FAIL_REGEX "command line option .* is valid for .* but not for C" # GNU
|
||||||
|
${_CheckLinkerFlag_COMMON_PATTERNS}
|
||||||
|
)
|
||||||
|
elseif ("${LANGUAGE}" STREQUAL Fortran)
|
||||||
|
check_fortran_source_compiles(
|
||||||
|
"program test
|
||||||
|
print *, \'Hello, world\'
|
||||||
|
end program test"
|
||||||
|
${RESULT}
|
||||||
|
# Some compilers do not fail with a bad flag
|
||||||
|
FAIL_REGEX "command line option .* is valid for .* but not for Fortran" # GNU
|
||||||
|
${_CheckLinkerFlag_COMMON_PATTERNS})
|
||||||
|
else ()
|
||||||
|
message(FATAL_ERROR "Invalid LANGUAGE argument ${LANGUAGE}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
foreach (v ${_CheckCCompilerFlag_LOCALE_VARS})
|
||||||
|
set(ENV{${v}} ${_CheckCCompilerFlag_SAVED_${v}})
|
||||||
|
unset(_CheckCCompilerFlag_SAVED_${v})
|
||||||
|
endforeach ()
|
||||||
|
unset(_CheckCCompilerFlag_LOCALE_VARS)
|
||||||
|
unset(_CheckCCompilerFlag_COMMON_PATTERNS)
|
||||||
|
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
|
||||||
|
endif ()
|
||||||
|
endmacro(check_linker_flag)
|
23
PKGBUILD
23
PKGBUILD
@ -1,4 +1,5 @@
|
|||||||
# Maintainer: Canony <canony@protonmail.ch>
|
# Maintainer: Edgar <Edgar{at}AnotherFoxGuy.com>
|
||||||
|
# Contributor: Canony <canony@protonmail.ch>
|
||||||
# Contributor: Caleb Maclennan <caleb@alerque.com>
|
# Contributor: Caleb Maclennan <caleb@alerque.com>
|
||||||
|
|
||||||
pkgname=btop
|
pkgname=btop
|
||||||
@ -9,15 +10,25 @@ arch=(x86_64 aarch64)
|
|||||||
url="https://github.com/aristocratos/$pkgname"
|
url="https://github.com/aristocratos/$pkgname"
|
||||||
license=(Apache)
|
license=(Apache)
|
||||||
depends=(coreutils sed)
|
depends=(coreutils sed)
|
||||||
makedepends=(build-essential gcc-10 g++-10)
|
makedepends=(cmake build-essential gcc-10 g++-10)
|
||||||
_archive="$pkgname-$pkgver"
|
_archive="$pkgname-$pkgver"
|
||||||
source=("$_archive.tar.gz::$url/archive/v$pkgver.tar.gz")
|
source=("$_archive.tar.gz::$url/archive/v$pkgver.tar.gz" "CMakeLists.txt" "CheckLinkerFlag.cmake")
|
||||||
sha256sums=('59a87b9d0bb0f5010d53f0ac72ddee9fd7b5a4039bce51b94b262313e946df02')
|
sha256sums=('59a87b9d0bb0f5010d53f0ac72ddee9fd7b5a4039bce51b94b262313e946df02' 'SKIP' 'SKIP')
|
||||||
|
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
cd "$_archive"
|
cd "$_archive"
|
||||||
make CXX=g++-10 all
|
|
||||||
|
cp -f "$srcdir/CMakeLists.txt" .
|
||||||
|
cp -f "$srcdir/CheckLinkerFlag.cmake" .
|
||||||
|
|
||||||
|
cmake . \
|
||||||
|
-DCMAKE_C_COMPILER=gcc-10 \
|
||||||
|
-DCMAKE_CXX_COMPILER=g++-10 \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DSTATIC=ON
|
||||||
|
|
||||||
|
make -j$(nproc)
|
||||||
}
|
}
|
||||||
|
|
||||||
package() {
|
package() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user