objtool: make use of pkg-config for libelf
diff mbox

Message ID 20180301125537.14160-1-pp@emlix.com
State New
Headers show

Commit Message

Philipp Puschmann March 1, 2018, 12:55 p.m. UTC
For libelf with non-standard paths make use of pkg-config.

Signed-off-by: Philipp Puschmann <pp@emlix.com>
---
 Makefile               | 4 +++-
 tools/objtool/Makefile | 8 ++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

Comments

Josh Poimboeuf March 5, 2018, 2:53 p.m. UTC | #1
[ Adding Robin ]

Robin, does this fix the same issue as your recent patches?  If so, I'd
prefer this one because it doesn't need any new environment variables.

On Thu, Mar 01, 2018 at 01:55:37PM +0100, Philipp Puschmann wrote:
> For libelf with non-standard paths make use of pkg-config.
> 
> Signed-off-by: Philipp Puschmann <pp@emlix.com>
> ---
>  Makefile               | 4 +++-
>  tools/objtool/Makefile | 8 ++++++--
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 659a7780aeb3..31b296b0e941 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -953,8 +953,10 @@ endif
>  export mod_sign_cmd
>  
>  ifdef CONFIG_STACK_VALIDATION
> +  LIBELF_LIBS = $(shell pkg-config --libs libelf 2> /dev/null || \
> +                        echo -lelf)
>    has_libelf := $(call try-run,\
> -		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null -lelf -,1,0)
> +		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(LIBELF_LIBS) -,1,0)
>    ifeq ($(has_libelf),1)
>      objtool_target := tools/objtool FORCE
>    else
> diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
> index e6acc281dd37..c565eff8c393 100644
> --- a/tools/objtool/Makefile
> +++ b/tools/objtool/Makefile
> @@ -27,12 +27,16 @@ OBJTOOL_IN := $(OBJTOOL)-in.o
>  
>  all: $(OBJTOOL)
>  
> +LIBELF_LIBS     = $(shell pkg-config --libs libelf 2> /dev/null || \
> +                        echo -lelf)
> +LIBELF_INCLUDES = $(shell pkg-config --cflags libelf 2> /dev/null)
>  INCLUDES := -I$(srctree)/tools/include \
>  	    -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
> -	    -I$(srctree)/tools/objtool/arch/$(ARCH)/include
> +	    -I$(srctree)/tools/objtool/arch/$(ARCH)/include \
> +	    $(LIBELF_INCLUDES)
>  WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed
>  CFLAGS   += -Wall -Werror $(WARNINGS) -fomit-frame-pointer -O2 -g $(INCLUDES)
> -LDFLAGS  += -lelf $(LIBSUBCMD)
> +LDFLAGS  += $(LIBELF_LIBS) $(LIBSUBCMD)
>  
>  # Allow old libelf to be used:
>  elfshdr := $(shell echo '\#include <libelf.h>' | $(CC) $(CFLAGS) -x c -E - | grep elf_getshdr)
> -- 
> 2.16.1
>
Robin Jarry March 5, 2018, 3:21 p.m. UTC | #2
2018-03-05, Josh Poimboeuf:
> [ Adding Robin ]
> 
> Robin, does this fix the same issue as your recent patches?  If so, I'd
> prefer this one because it doesn't need any new environment variables.

Hi Josh,

this looks like it would work. I need to do proper testing before
confirmation. Also, I did not have time to work on a v3. I'll wait a bit
to see where this goes first.

Patch
diff mbox

diff --git a/Makefile b/Makefile
index 659a7780aeb3..31b296b0e941 100644
--- a/Makefile
+++ b/Makefile
@@ -953,8 +953,10 @@  endif
 export mod_sign_cmd
 
 ifdef CONFIG_STACK_VALIDATION
+  LIBELF_LIBS = $(shell pkg-config --libs libelf 2> /dev/null || \
+                        echo -lelf)
   has_libelf := $(call try-run,\
-		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null -lelf -,1,0)
+		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(LIBELF_LIBS) -,1,0)
   ifeq ($(has_libelf),1)
     objtool_target := tools/objtool FORCE
   else
diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
index e6acc281dd37..c565eff8c393 100644
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile
@@ -27,12 +27,16 @@  OBJTOOL_IN := $(OBJTOOL)-in.o
 
 all: $(OBJTOOL)
 
+LIBELF_LIBS     = $(shell pkg-config --libs libelf 2> /dev/null || \
+                        echo -lelf)
+LIBELF_INCLUDES = $(shell pkg-config --cflags libelf 2> /dev/null)
 INCLUDES := -I$(srctree)/tools/include \
 	    -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
-	    -I$(srctree)/tools/objtool/arch/$(ARCH)/include
+	    -I$(srctree)/tools/objtool/arch/$(ARCH)/include \
+	    $(LIBELF_INCLUDES)
 WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed
 CFLAGS   += -Wall -Werror $(WARNINGS) -fomit-frame-pointer -O2 -g $(INCLUDES)
-LDFLAGS  += -lelf $(LIBSUBCMD)
+LDFLAGS  += $(LIBELF_LIBS) $(LIBSUBCMD)
 
 # Allow old libelf to be used:
 elfshdr := $(shell echo '\#include <libelf.h>' | $(CC) $(CFLAGS) -x c -E - | grep elf_getshdr)