diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2014-07-16 17:00:11 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2014-07-21 22:18:35 +0200 |
commit | bb0babd7054bed7edfd9f4d6b20cdba864de1830 (patch) | |
tree | c1978d5c25bd4a998fc9eff4d5901ec64616cd8c | |
parent | b396bbad100a7493691d09b8dceba91e3cd28e2e (diff) | |
download | ffmpeg-bb0babd7054bed7edfd9f4d6b20cdba864de1830.tar.gz |
build: Support executable only ldflags
The options is useful to build position-independent executables on
hardened systems (e.g. Android L and Gentoo Hardened).
-rw-r--r-- | Makefile | 4 | ||||
-rwxr-xr-x | configure | 9 | ||||
-rw-r--r-- | doc/platform.texi | 3 | ||||
-rw-r--r-- | library.mak | 2 |
4 files changed, 15 insertions, 3 deletions
@@ -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 @@ -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) |