[FFmpeg-cvslog] build: Support executable only ldflags

Luca Barbato git at videolan.org
Tue Jul 22 02:50:13 CEST 2014


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Wed Jul 16 17:00:11 2014 +0200| [bb0babd7054bed7edfd9f4d6b20cdba864de1830] | committer: Luca Barbato

build: Support executable only ldflags

The options is useful to build position-independent executables on
hardened systems (e.g. Android L and Gentoo Hardened).

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bb0babd7054bed7edfd9f4d6b20cdba864de1830
---

 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 6302997..99d3240 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 aa61573..c74e433 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 3ada146..d4a6618 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 af33206..3da14b6 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)



More information about the ffmpeg-cvslog mailing list