From 38dc9bd762c5a153059e7fd120b20fda9918de12 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 30 Oct 2017 11:09:10 +0000 Subject: Make all-pic a user option --- Makefile | 4 ++++ configure | 30 +++++++++++++++++++----------- package/deps.mak | 2 +- tools/gen-deps.sh | 2 +- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 259d624..610dbb6 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,11 @@ version_M := $(basename $(version_m)) version_l := $(basename $(version_M)) CPPFLAGS_ALL := $(CPPFLAGS_AUTO) $(CPPFLAGS) CFLAGS_ALL := $(CFLAGS_AUTO) $(CFLAGS) +ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),) CFLAGS_SHARED := -fPIC +else +CFLAGS_SHARED := +endif LDFLAGS_ALL := $(LDFLAGS_AUTO) $(LDFLAGS) REALCC = $(CROSS_COMPILE)$(CC) AR := $(CROSS_COMPILE)ar diff --git a/configure b/configure index 8b10b01..d8c3307 100755 --- a/configure +++ b/configure @@ -41,6 +41,7 @@ Optional features: --disable-static do not build static libraries [enabled] --disable-allstatic do not prefer linking against static libraries [enabled] --enable-static-libc make entirely static binaries [disabled] + --enable-all-pic build everything as PIC [enabled iff toolchain builds PIE] --enable-slashpackage[=ROOT] assume /package installation at ROOT [disabled] --enable-absolute-paths do not rely on PATH to access this package's binaries, hardcode absolute BINDIR/foobar paths instead [disabled] @@ -145,6 +146,7 @@ sysdeps='$prefix/lib/skalibs/sysdeps' manualsysdeps=false shared=false static=true +allpic=detect slashpackage=false abspath=false sproot= @@ -182,6 +184,8 @@ for arg ; do --disable-allstatic|--enable-allstatic=no) allstatic=false ; evenmorestatic=false ;; --enable-static-libc|--enable-static-libc=yes) allstatic=true ; evenmorestatic=true ;; --disable-static-libc|--enable-static-libc=no) evenmorestatic=false ;; + --enable-all-pic|--enable-all-pic=yes) allpic=true ;; + --disable-all-pic|--enable-all-pic=no) allpic=false ;; --enable-slashpackage=*) sproot=${arg#*=} ; slashpackage=true ; ;; --enable-slashpackage) sproot= ; slashpackage=true ;; --disable-slashpackage) sproot= ; slashpackage=false ;; @@ -299,14 +303,18 @@ if [ "x$target" != "x$(cat $sysdeps/target)" ] ; then exit 1 fi -defaultpie=false -echo "Checking whether we're building PIE..." -if $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -dM -E - < /dev/null | grep -qF __PIE__ ; then - defaultpie=true - CFLAGS_AUTO="$CFLAGS_AUTO -fPIC" - echo " ... yes" -else - echo " ... no" +if test $allpic = detect ; then + echo "Checking whether we need to build everything as PIC..." + if $CC_AUTO $CPPFLAGS_AUTO $CPPFLAGS $CPPFLAGS_POST $CFLAGS_AUTO $CFLAGS $CFLAGS_POST -dM -E - < /dev/null | grep -qF __PIE__ ; then + allpic=true + echo " ... yes" + else + allpic=false + echo " ... no" + fi +fi +if $allpic ; then + tryflag CFLAGS_AUTO -fPIC fi spawn_lib=$(cat $sysdeps/spawn.lib) @@ -421,10 +429,10 @@ if $shared ; then else echo "DO_SHARED :=" fi -if $defaultpie ; then - echo "DEFAULT_PIE := 1" +if $allpic ; then + echo "STATIC_LIBS_ARE_PIC := 1" else - echo "DEFAULT_PIE :=" + echo "STATIC_LIBS_ARE_PIC :=" fi exec 1>&3 3>&- diff --git a/package/deps.mak b/package/deps.mak index 7cca70e..5495a04 100644 --- a/package/deps.mak +++ b/package/deps.mak @@ -164,7 +164,7 @@ wait: EXTRA_LIBS := wait: src/execline/wait.o ${LIBEXECLINE} -lskarnet withstdinas: EXTRA_LIBS := withstdinas: src/execline/withstdinas.o -lskarnet -ifeq ($(strip $(DEFAULT_PIE)),) +ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),) libexecline.a.xyzzy: src/libexecline/el_execsequence.o src/libexecline/el_getstrict.o src/libexecline/el_parse.o src/libexecline/el_parse_from_buffer.o src/libexecline/el_parse_from_string.o src/libexecline/el_popenv.o src/libexecline/el_pushenv.o src/libexecline/el_semicolon.o src/libexecline/el_spawn0.o src/libexecline/el_spawn1.o src/libexecline/el_substandrun.o src/libexecline/el_substandrun_str.o src/libexecline/el_substitute.o src/libexecline/el_transform.o src/libexecline/el_vardupl.o src/libexecline/exlsn_define.o src/libexecline/exlsn_elglob.o src/libexecline/exlsn_import.o src/libexecline/exlsn_multidefine.o src/libexecline/exlsn_exlp.o src/libexecline/exlsn_main.o src/libexecline/exlsn_free.o src/libexecline/exlp.o else libexecline.a.xyzzy: src/libexecline/el_execsequence.lo src/libexecline/el_getstrict.lo src/libexecline/el_parse.lo src/libexecline/el_parse_from_buffer.lo src/libexecline/el_parse_from_string.lo src/libexecline/el_popenv.lo src/libexecline/el_pushenv.lo src/libexecline/el_semicolon.lo src/libexecline/el_spawn0.lo src/libexecline/el_spawn1.lo src/libexecline/el_substandrun.lo src/libexecline/el_substandrun_str.lo src/libexecline/el_substitute.lo src/libexecline/el_transform.lo src/libexecline/el_vardupl.lo src/libexecline/exlsn_define.lo src/libexecline/exlsn_elglob.lo src/libexecline/exlsn_import.lo src/libexecline/exlsn_multidefine.lo src/libexecline/exlsn_exlp.lo src/libexecline/exlsn_main.lo src/libexecline/exlsn_free.lo src/libexecline/exlp.lo diff --git a/tools/gen-deps.sh b/tools/gen-deps.sh index 67ec2d4..6383ac2 100755 --- a/tools/gen-deps.sh +++ b/tools/gen-deps.sh @@ -65,7 +65,7 @@ for dir in $(ls -1 src | grep -v ^include) ; do deps="$deps src/$dir/$dep" fi done < src/$dir/deps-lib/$file - echo 'ifeq ($(strip $(DEFAULT_PIE)),)' + echo 'ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)' echo "lib${file}.a.xyzzy:$deps" echo else echo "lib${file}.a.xyzzy:$(echo "$deps" | sed 's/\.o/.lo/g')" -- cgit v1.2.3