From bb0babd7054bed7edfd9f4d6b20cdba864de1830 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Wed, 16 Jul 2014 17:00:11 +0200 Subject: [PATCH] build: Support executable only ldflags The options is useful to build position-independent executables on hardened systems (e.g. Android L and Gentoo Hardened). --- Makefile | 4 ++-- configure | 9 +++++++++ doc/platform.texi | 3 +++ library.mak | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 6302997d39..99d324008f 100644 --- a/Makefile +++ b/Makefile @@ -104,7 +104,7 @@ FF_DEP_LIBS := $(DEP_LIBS) all: $(AVPROGS) $(TOOLS): %$(EXESUF): %.o $(EXEOBJS) - $(LD) $(LDFLAGS) $(LD_O) $^ $(ELIBS) + $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) tools/cws2fws$(EXESUF): ELIBS = $(ZLIB) @@ -149,7 +149,7 @@ endef $(foreach P,$(PROGS),$(eval $(call DOPROG,$(P:$(EXESUF)=)))) $(PROGS): %$(EXESUF): %.o $(FF_DEP_LIBS) - $(LD) $(LDFLAGS) $(LD_O) $(OBJS-$*) $(FF_EXTRALIBS) + $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $(OBJS-$*) $(FF_EXTRALIBS) OBJDIRS += tools diff --git a/configure b/configure index aa61573528..c74e43310c 100755 --- a/configure +++ b/configure @@ -244,6 +244,7 @@ Toolchain options: --host-os=OS compiler host OS [$target_os] --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS] --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS] + --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS] --extra-libs=ELIBS add ELIBS [$ELIBS] --extra-version=STRING version string suffix [] --optflags=OPTFLAGS override optimization-related compiler flags @@ -679,6 +680,10 @@ add_ldflags(){ append LDFLAGS $($ldflags_filter "$@") } +add_ldexeflags(){ + append LDEXEFLAGS $($ldflags_filter "$@") +} + add_stripflags(){ append STRIPFLAGS "$@" } @@ -2356,6 +2361,9 @@ for opt do --extra-ldflags=*) add_ldflags $optval ;; + --extra-ldexeflags=*) + add_ldexeflags $optval + ;; --extra-libs=*) add_extralibs $optval ;; @@ -4575,6 +4583,7 @@ LD_LIB=$LD_LIB LD_PATH=$LD_PATH DLLTOOL=$dlltool LDFLAGS=$LDFLAGS +LDEXEFLAGS=$LDEXEFLAGS SHFLAGS=$(echo $($ldflags_filter $SHFLAGS)) STRIPFLAGS=$STRIPFLAGS YASMFLAGS=$YASMFLAGS diff --git a/doc/platform.texi b/doc/platform.texi index 3ada146e79..d4a6618b13 100644 --- a/doc/platform.texi +++ b/doc/platform.texi @@ -35,6 +35,9 @@ to your project LDFLAGS: -Wl,-Bsymbolic @end example +If your target platform requires position independent binaries, you should +pass the correct linking flag (e.g. @code{-pie}) to @code{--extra-ldexeflags}. + @section BSD BSD make will not build Libav, you need to install and use GNU Make diff --git a/library.mak b/library.mak index af33206434..3da14b6abb 100644 --- a/library.mak +++ b/library.mak @@ -46,7 +46,7 @@ $(TOOLS): THISLIB = $(FULLNAME:%=$(LD_LIB)) $(TESTPROGS): THISLIB = $(SUBDIR)$(LIBNAME) $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o $(EXEOBJS) - $$(LD) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $(FFEXTRALIBS) $$(ELIBS) + $$(LD) $(LDFLAGS) $(LDEXEFLAGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $(FFEXTRALIBS) $$(ELIBS) $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) $(Q)cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME)