From 617228ce175496050b3b42dbca8164df09a3fc8d Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Mon, 16 Aug 2021 18:16:32 +0200 Subject: [PATCH] [v0.05] Allow user to change CUDA_PATH. Add CMakeLists.txt in case I decide to change to CMake later --- CMakeLists.txt | 50 +++++++++++++++++++++++++++++++++++++++++++++ Makefile | 5 ++--- build.sh | 17 +++++++++++++++ src/common/main.cpp | 2 +- 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 CMakeLists.txt create mode 100755 build.sh diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..efd4867 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,50 @@ +cmake_minimum_required(VERSION 3.10) +include(CheckLanguage) + +project(gpufetch CXX) + +set(SRC_DIR "src") +set(COMMON_DIR "${SRC_DIR}/common") +set(CUDA_DIR "${SRC_DIR}/cuda") + +if(NOT WIN32) + string(ASCII 27 Esc) + set(ColorReset "${Esc}[m") + set(ColorBold "${Esc}[1m") + set(Red "${Esc}[31m") + set(Green "${Esc}[32m") + set(BoldRed "${Esc}[1;31m") + set(BoldGreen "${Esc}[1;32m") +endif() + +check_language(CUDA) +if(CMAKE_CUDA_COMPILER) + enable_language(CUDA) +else() + message(FATAL_ERROR "${BoldRed}[ERROR]${ColorReset} Unable to find CUDA compiler. You may use -DCMAKE_CUDA_COMPILER and -DCMAKE_CUDA_COMPILER_TOOLKIT_ROOT if CUDA is installed but not detected by CMake") +endif() + +set(SANITY_FLAGS "-Wfloat-equal -Wshadow -Wpointer-arith") +set(CMAKE_CXX_FLAGS "${SANITY_FLAGS} -Wall -Wextra -pedantic -fstack-protector-all -pedantic") + +# https://en.wikipedia.org/w/index.php?title=CUDA§ion=5#GPUs_supported +# https://raw.githubusercontent.com/PointCloudLibrary/pcl/master/cmake/pcl_find_cuda.cmake +if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL "11.0") + set(CMAKE_CUDA_ARCHITECTURES 35 37 50 52 53 60 61 62 70 72 75 80 86) +elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL "10.0") + set(CMAKE_CUDA_ARCHITECTURES 30 32 35 37 50 52 53 60 61 62 70 72 75) +elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL "9.0") + set(CMAKE_CUDA_ARCHITECTURES 30 32 35 37 50 52 53 60 61 62 70 72) +elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "8.0") + set(CMAKE_CUDA_ARCHITECTURES 20 21 30 32 35 37 50 52 53 60 61 62) +endif() + +add_library(cuda_backend STATIC ${CUDA_DIR}/cuda.cpp ${CUDA_DIR}/uarch.cpp ${CUDA_DIR}/nvmlb.cpp ${CUDA_DIR}/pci.cpp) +target_include_directories(cuda_backend PUBLIC ${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/samples/common/inc ${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/x86_64-linux/include) +link_directories(${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/x86_64-linux/lib) + +add_executable(gpufetch ${COMMON_DIR}/main.cpp ${COMMON_DIR}/args.cpp ${COMMON_DIR}/gpu.cpp ${COMMON_DIR}/global.cpp ${COMMON_DIR}/printer.cpp) +target_link_libraries(cuda_backend cudart nvidia-ml) +target_link_libraries(gpufetch cuda_backend) + +install(TARGETS gpufetch DESTINATION bin) diff --git a/Makefile b/Makefile index 67631c4..02ad630 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ CXX ?= g++ +CUDA_PATH ?= /usr/local/cuda/ +PREFIX ?= /usr CXXFLAGS+=-Wall -Wextra -pedantic -fstack-protector-all -pedantic SANITY_FLAGS=-Wfloat-equal -Wshadow -Wpointer-arith -PREFIX ?= /usr - SRC_COMMON=src/common/ SRC_CUDA=src/cuda/ @@ -13,7 +13,6 @@ COMMON_HDR = $(SRC_COMMON)ascii.hpp $(SRC_COMMON)gpu.hpp $(SRC_COMMON)args.hpp $ CUDA_SRC = $(SRC_CUDA)cuda.cpp $(SRC_CUDA)uarch.cpp $(SRC_CUDA)pci.cpp $(SRC_CUDA)nvmlb.cpp CUDA_HDR = $(SRC_CUDA)cuda.hpp $(SRC_CUDA)uarch.hpp $(SRC_CUDA)pci.hpp $(SRC_CUDA)nvmlb.hpp $(SRC_CUDA)chips.hpp -CUDA_PATH = /usr/local/cuda/ SOURCE += $(COMMON_SRC) $(CUDA_SRC) HEADERS += $(COMMON_HDR) $(CUDA_HDR) diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..f43574d --- /dev/null +++ b/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# gpufetch build script +set -e + +rm -rf build/ gpufetch +mkdir build/ +cd build/ + +# In case you have CUDA installed but it is not detected, +# - set CMAKE_CUDA_COMPILER to your nvcc binary: +# - set CMAKE_CUDA_COMPILER_TOOLKIT_ROOT to the CUDA root dir +cmake -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc -DCMAKE_CUDA_COMPILER_TOOLKIT_ROOT=/usr/local/cuda/ .. +#cmake .. +make -j$(nproc) +cd - +ln -s build/gpufetch . diff --git a/src/common/main.cpp b/src/common/main.cpp index 92eb14a..f160b96 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -7,7 +7,7 @@ #include "../cuda/cuda.hpp" #include "../cuda/uarch.hpp" -static const char* VERSION = "0.04"; +static const char* VERSION = "0.05"; void print_help(char *argv[]) { const char **t = args_str;