🔧 Use cmake to build btop
This commit is contained in:
		
							
								
								
									
										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) | ||||||
| @@ -8,16 +8,21 @@ pkgdesc='A monitor of system resourecs, bpytop ported to C++' | |||||||
| arch=(x86_64 aarch64) | 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") | ||||||
| sha256sums=('59a87b9d0bb0f5010d53f0ac72ddee9fd7b5a4039bce51b94b262313e946df02') | sha256sums=('59a87b9d0bb0f5010d53f0ac72ddee9fd7b5a4039bce51b94b262313e946df02' 'SKIP') | ||||||
|  |  | ||||||
|  |  | ||||||
| build() { | build() { | ||||||
| 	cd "$_archive" | 	cd "$_archive" | ||||||
| 	make CXX=g++-10 all |  | ||||||
|  | 	cmake . \ | ||||||
|  | 		-DCMAKE_INSTALL_PREFIX=/usr \ | ||||||
|  | 		-DCMAKE_BUILD_TYPE=Release \ | ||||||
|  | 		-DSTATIC=ON | ||||||
|  |  | ||||||
|  | 	make -j$(nproc) | ||||||
| } | } | ||||||
|  |  | ||||||
| package() { | package() { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user