summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rwxr-xr-xconfigure30
-rwxr-xr-xtools/gen-deps.sh2
3 files changed, 24 insertions, 12 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 aa6f91f..de87b55 100755
--- a/configure
+++ b/configure
@@ -40,6 +40,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]
@@ -142,6 +143,7 @@ sysdeps='$prefix/lib/skalibs/sysdeps'
 manualsysdeps=false
 shared=false
 static=true
+allpic=detect
 slashpackage=false
 abspath=false
 sproot=
@@ -178,6 +180,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 ;;
@@ -292,14 +296,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)
@@ -414,10 +422,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/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')"