diff mbox series

[linux] objtool: fix pkg-config query in case of cross-compilation

Message ID 20190411083940.3911-1-nicolas.dichtel@6wind.com (mailing list archive)
State New, archived
Headers show
Series [linux] objtool: fix pkg-config query in case of cross-compilation | expand

Commit Message

Nicolas Dichtel April 11, 2019, 8:39 a.m. UTC
In case of cross-compilation, there may be two pkg-config tools, one for
the host and one for the target. Enable to override the default name.

Fixes: 056d28d135bc ("objtool: Query pkg-config for libelf location")
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
 Makefile               | 3 ++-
 tools/objtool/Makefile | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

Comments

Rolf Eike Beer April 11, 2019, 8:52 a.m. UTC | #1
Am Donnerstag, 11. April 2019, 10:39:40 CEST schrieb Nicolas Dichtel:
> In case of cross-compilation, there may be two pkg-config tools, one for
> the host and one for the target. Enable to override the default name.
> 
> Fixes: 056d28d135bc ("objtool: Query pkg-config for libelf location")
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

If you do that, you have to fix a lot of other places, too. This starts in 
scripts/kconfig/ and also includes e.g. tools/testing/.

Usually you have pkg-config for host and ${target_platform}-pkg-config for the 
target, and the PKG_CONFIG variable for the target, usually initialized to $
(CROSS_COMPILE)pkg-config. I have sent a bunch of patches to replace the usage 
of plain pkg-config at several places with the cross-aware version, but sadly 
a lot of them have not been picked up. It break cross-building tests basically 
all the time. One example is here: 

https://marc.info/?l=linux-acpi&m=153544231529066&w=2

For me it looks like you are trying to go into the wrong direction.

Greetings,

Eike
Nicolas Dichtel April 11, 2019, 9:26 a.m. UTC | #2
Le 11/04/2019 à 10:52, Rolf Eike Beer a écrit :
> Am Donnerstag, 11. April 2019, 10:39:40 CEST schrieb Nicolas Dichtel:
>> In case of cross-compilation, there may be two pkg-config tools, one for
>> the host and one for the target. Enable to override the default name.
>>
>> Fixes: 056d28d135bc ("objtool: Query pkg-config for libelf location")
>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> 
> If you do that, you have to fix a lot of other places, too. This starts in 
> scripts/kconfig/ and also includes e.g. tools/testing/.
> 
> Usually you have pkg-config for host and ${target_platform}-pkg-config for the 
My use case was for buildroot, which define pkg-config and host-pkgconf. In
fact, I've just seen that a buildroot patch was accepted for this problem:
https://patchwork.ozlabs.org/patch/1081379/


Regards,
Nicolas
Rolf Eike Beer April 11, 2019, 1:50 p.m. UTC | #3
Am Donnerstag, 11. April 2019, 11:26:12 CEST schrieb Nicolas Dichtel:
> Le 11/04/2019 à 10:52, Rolf Eike Beer a écrit :
> > Am Donnerstag, 11. April 2019, 10:39:40 CEST schrieb Nicolas Dichtel:
> >> In case of cross-compilation, there may be two pkg-config tools, one for
> >> the host and one for the target. Enable to override the default name.
> >> 
> >> Fixes: 056d28d135bc ("objtool: Query pkg-config for libelf location")
> >> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> > 
> > If you do that, you have to fix a lot of other places, too. This starts in
> > scripts/kconfig/ and also includes e.g. tools/testing/.
> > 
> > Usually you have pkg-config for host and ${target_platform}-pkg-config for
> > the
> My use case was for buildroot, which define pkg-config and host-pkgconf. In
> fact, I've just seen that a buildroot patch was accepted for this problem:
> https://patchwork.ozlabs.org/patch/1081379/

I agree that it makes sense to have both host and target pkg-config 
configurable. But IMHO that must happen in a central place (i.e. ./Makefile), 
and it has to be used everywhere. Currently PKG_CONFIG is defined at multiple 
places, sometimes host, sometimes target, and often pkg-config is called 
directly, also mixing both usages.

So, IMHO, if you want to fix this: fix it once and for all in the whole 
kernel, not just one place. What I have introduced was just the same as 
kconfig is using to find the dependencies for some of the *config variants, so 
this usecase would break for you anyway, although I don't think anyone in 
buildroot will notice this.

Eike
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 15c8251d4d5e..f12ca3598fc4 100644
--- a/Makefile
+++ b/Makefile
@@ -953,7 +953,8 @@  mod_sign_cmd = true
 endif
 export mod_sign_cmd
 
-HOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
+export HOST_PKG_CONFIG ?= pkg-config
+HOST_LIBELF_LIBS = $(shell $(HOST_PKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf)
 
 ifdef CONFIG_STACK_VALIDATION
   has_libelf := $(call try-run,\
diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
index 53f8be0f4a1f..4e229e77aacf 100644
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile
@@ -25,8 +25,8 @@  LIBSUBCMD		= $(LIBSUBCMD_OUTPUT)libsubcmd.a
 OBJTOOL    := $(OUTPUT)objtool
 OBJTOOL_IN := $(OBJTOOL)-in.o
 
-LIBELF_FLAGS := $(shell pkg-config libelf --cflags 2>/dev/null)
-LIBELF_LIBS  := $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
+LIBELF_FLAGS := $(shell $(HOST_PKG_CONFIG) libelf --cflags 2>/dev/null)
+LIBELF_LIBS  := $(shell $(HOST_PKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf)
 
 all: $(OBJTOOL)