From 6f12e3555d9558266e5ffc7f6847f0a7273db5b8 Mon Sep 17 00:00:00 2001 From: Steffen Winter Date: Mon, 27 Nov 2023 00:33:11 +0100 Subject: [PATCH] Properly invoke CMake to build ROCm * Build an optimized library by default * Only build the library target * ROCm is build with debug symbols when `make DEBUG=true` * Enable LTO * Use the more generic CMake build command instead of calling make directly, this always uses all cores by default and makes it easier to switch to another generator e.g. Ninja * Use a variable to store the ROCm source directory. The directory can be changed with `make ROCM_DIR=` * The static library is now directly linked by CMake and not created off of the object files from a shared library build * The C++ compiler used to compile btop is now used to compile ROCm to avoid name mangling when `CXX` from the environment and `make CXX=` differ * CMake is invoked from btop's root directory --- Makefile | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index f449606..2adc8c2 100644 --- a/Makefile +++ b/Makefile @@ -329,20 +329,24 @@ uninstall: #? Compile rocm_smi ifeq ($(GPU_SUPPORT)$(RSMI_STATIC),truetrue) + ROCM_DIR ?= lib/rocm_smi_lib + ROCM_BUILD_DIR := $(ROCM_DIR)/build + ifeq ($(DEBUG),true) + BUILD_TYPE := Debug + else + BUILD_TYPE := Release + endif .ONESHELL: rocm_smi: @printf "\n\033[1;92mBuilding ROCm SMI static library\033[37m...\033[0m\n" @TSTAMP=$$(date +%s 2>/dev/null || echo "0") - @mkdir -p lib/rocm_smi_lib/build - @cd lib/rocm_smi_lib/build @$(QUIET) || printf "\033[1;97mRunning CMake...\033[0m\n" - @cmake .. $(SUPPRESS) || { printf "\033[1;91mCMake failed, continuing build without statically linking ROCm SMI\033[37m...\033[0m\n"; exit 0; } + CXX=$(CXX) cmake -S $(ROCM_DIR) -B $(ROCM_BUILD_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_POLICY_DEFAULT_CMP0069=NEW -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DBUILD_SHARED_LIBS=OFF $(SUPPRESS) || { printf "\033[1;91mCMake failed, continuing build without statically linking ROCm SMI\033[37m...\033[0m\n"; exit 0; } @$(QUIET) || printf "\n\033[1;97mBuilding and linking...\033[0m\n" - @$(MAKE) $(SUPPRESS) || { printf "\033[1;91mMake failed, continuing build without statically linking ROCm SMI\033[37m...\033[0m\n"; exit 0; } - @ar -crs rocm_smi/librocm_smi64.a $$(find rocm_smi -name '*.o') $(SURPRESS) || { printf "\033[1;91mFailed to pack ROCm SMI into static library, continuing build without statically linking ROCm SMI\033[37m...\033[0m\n"; exit 0; } - @printf "\033[1;92m100$(P)\033[10D\033[5C-> \033[1;37mrocm_smi/librocm_smi64.a \033[100D\033[38C\033[1;93m(\033[1;97m$$(du -ah rocm_smi/librocm_smi64.a | cut -f1)iB\033[1;93m)\033[0m\n" + @cmake --build $(ROCM_BUILD_DIR) -j -t rocm_smi64 $(SUPPRESS) || { printf "\033[1;91mMake failed, continuing build without statically linking ROCm SMI\033[37m...\033[0m\n"; exit 0; } + @printf "\033[1;92m100$(P)\033[10D\033[5C-> \033[1;37m$(ROCM_BUILD_DIR)/rocm_smi/librocm_smi64.a \033[1;93m(\033[1;97m$$(du -ah $(ROCM_BUILD_DIR)/rocm_smi/librocm_smi64.a | cut -f1)iB\033[1;93m)\033[0m\n" @printf "\033[1;92mROCm SMI build complete in \033[92m(\033[97m$$($(DATE_CMD) -d @$$(expr $$(date +%s 2>/dev/null || echo "0") - $(TIMESTAMP) 2>/dev/null) -u +%Mm:%Ss 2>/dev/null | sed 's/^00m://' || echo "unknown")\033[92m)\033[0m\n" - @$(eval override LDFLAGS += lib/rocm_smi_lib/build/rocm_smi/librocm_smi64.a -DRSMI_STATIC) # TODO: this seems to execute every time, no matter if the compilation failed or succeeded + @$(eval override LDFLAGS += $(ROCM_BUILD_DIR)/rocm_smi/librocm_smi64.a -DRSMI_STATIC) # TODO: this seems to execute every time, no matter if the compilation failed or succeeded @$(eval override CXXFLAGS += -DRSMI_STATIC) else rocm_smi: