aboutsummaryrefslogtreecommitdiff
path: root/GNUmakefile
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-04-26 08:20:20 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-04-26 08:41:17 +0200
commitbef017f5fe7f65491f7efb3c6217e96823f9649e (patch)
treee4f9391d9cd63f7f7d912faf04e0d83f628eb629 /GNUmakefile
parentf91bc4c7fcf3ea66f7c4e4d9ff65adf4db3de2a9 (diff)
downloadvis-bef017f5fe7f65491f7efb3c6217e96823f9649e.tar.gz
vis-bef017f5fe7f65491f7efb3c6217e96823f9649e.tar.xz
build: try to produce a statically linked position independent executable
In theory this should be as simple as: $ cc -fPIE -pie --static helloworld.c But unfortunately by default this will always add a PT_INTERP referencing the dynamic loader/linker. On latest binutils >=2.26 this can be worked around by supplying --no-dynamic-linker. Also tweak the musl-gcc wrapper to use rcrt1.o as startup file.
Diffstat (limited to 'GNUmakefile')
-rw-r--r--GNUmakefile2
1 files changed, 2 insertions, 0 deletions
diff --git a/GNUmakefile b/GNUmakefile
index 015ca92..99a2f75 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -51,6 +51,8 @@ dependency/build/libmusl-extract: dependency/sources/$(LIBMUSL).tar.gz | depende
touch $@
dependency/build/libmusl-configure: dependency/build/libmusl-extract
+ # tweak musl gcc wrapper/spec file to support static PIE linking
+ sed -i 's#%{pie:S}crt1.o#%{pie:%{static:rcrt1.o%s;:Scrt1.o%s};:crt1.o%s}#' $(dir $<)/$(LIBMUSL)/tools/musl-gcc.specs.sh
cd $(dir $<)/$(LIBMUSL) && ./configure --prefix=$(DEPS_PREFIX) --syslibdir=$(DEPS_PREFIX)/lib
touch $@