Re: [PATCH] cpupower: fix lib default installation path

From: Shuah Khan
Date: Mon Jul 01 2024 - 15:36:52 EST


On 6/29/24 06:20, Roman Storozhenko wrote:
On Fri, Jun 28, 2024 at 10:44 PM Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> wrote:

On 6/23/24 07:10, Roman Storozhenko wrote:
Invocation the tool built with the default settings fails:
$ cpupower
cpupower: error while loading shared libraries: libcpupower.so.1: cannot
open shared object file: No such file or directory> The issue is that Makefile puts the library to "/usr/lib64" dir for a 64
bit machine. This is wrong. According to the "File hierarchy standard
specification:
https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf

"/usr/lib<qual>" dirs are intended for alternative-format libraries
(e.g., "/usr/lib32" for 32-bit libraries on a 64-bit machine (optional)).

The utility is built for the current machine and doesn't change bit
depth.
Fix the issue by changing library destination dir to "/usr/lib".

Signed-off-by: Roman Storozhenko <romeusmeister@xxxxxxxxx>
---
tools/power/cpupower/Makefile | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/tools/power/cpupower/Makefile b/tools/power/cpupower/Makefile
index cd0225a312b4..6c02f401069e 100644
--- a/tools/power/cpupower/Makefile
+++ b/tools/power/cpupower/Makefile
@@ -67,6 +67,7 @@ LANGUAGES = de fr it cs pt ka
bindir ?= /usr/bin
sbindir ?= /usr/sbin
mandir ?= /usr/man
+libdir ?= /usr/lib
includedir ?= /usr/include
localedir ?= /usr/share/locale
docdir ?= /usr/share/doc/packages/cpupower
@@ -94,15 +95,6 @@ RANLIB = $(CROSS)ranlib
HOSTCC = gcc
MKDIR = mkdir

These are set when make invoked from the kernel main
Makefile - see "make tools" option in main Makefile

-# 64bit library detection
-include ../../scripts/Makefile.arch

This does the 64-librray detection based on arch.
-
-ifeq ($(IS_64_BIT), 1)
-libdir ?= /usr/lib64
-else
-libdir ?= /usr/lib
-endif
-
# Now we set up the build system
#


---
base-commit: f76698bd9a8ca01d3581236082d786e9a6b72bb7
change-id: 20240623-fix-lib-install-3b7dccdbdf45

Best regards,

What happens if you cross-compile with this patch? Take a look at this
commit that fixed cross-compile:

a73f6e2fbe8077811ea9546e0d44a7533111f0ba

This makefile has to be in sync with the rest of the tools - see
"make tools" in the kernel main Makefile.

I have done this using "make tools" method mainline kernel and the
patch for x86_64 and risc-v:
1) x86_64
$make cpupower
$ sudo make cpupower_install -j8
$ cpupower
cpupower: error while loading shared libraries: libcpupower.so.1:
cannot open shared object file: No such file or directory

Works with my patch, and doesn't work with the mainline.

2) RISC-V:
$ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- cpupower -j8
$ sudo make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- cpupower_install -j8
$ cpupower
cpupower: error while loading shared libraries: libcpupower.so.1:
cannot open shared object file: No such file or directory
> Works with my patch, and doesn't work with the mainline.

Please update the change log with the information you provided above
and send me v2.

thanks,
-- Shuah