diff options
Diffstat (limited to 'config/picflag.m4')
-rw-r--r-- | config/picflag.m4 | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/config/picflag.m4 b/config/picflag.m4 new file mode 100644 index 0000000..f6f1b44 --- /dev/null +++ b/config/picflag.m4 @@ -0,0 +1,95 @@ +# _GCC_PICFLAG(FLAG, DISPATCH) +# ---------------------------- +# Store PIC flag corresponding to DISPATCH triplet in FLAG. +# Explit use of -fpic in CFLAGS corresponding to FLAG overrides default. +AC_DEFUN([_GCC_PICFLAG], [ + +case "${$2}" in + # PIC is the default on some targets or must not be used. + *-*-darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + $1=-fno-common + ;; + alpha*-dec-osf5*) + # PIC is the default. + ;; + hppa*64*-*-hpux*) + # PIC is the default for 64-bit PA HP-UX. + ;; + i[[34567]]86-*-cygwin* | i[[34567]]86-*-mingw* | x86_64-*-mingw*) + ;; + i[[34567]]86-*-interix3*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + i[[34567]]86-*-nto-qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + $1='-fPIC -shared' + ;; + i[[34567]]86-pc-msdosdjgpp*) + # DJGPP does not support shared libraries at all. + ;; + ia64*-*-hpux*) + # On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + $1=-fPIC + ;; + mips-sgi-irix6*) + # PIC is the default. + ;; + rs6000-ibm-aix* | powerpc-ibm-aix*) + # All AIX code is PIC. + ;; + + # Some targets support both -fPIC and -fpic, but prefer the latter. + # FIXME: Why? + i[[34567]]86-*-* | x86_64-*-*) + $1=-fpic + ;; + m68k-*-*) + $1=-fpic + ;; + s390*-*-*) + $1=-fpic + ;; + # FIXME: Override -fPIC default in libgcc only? + sh-*-linux* | sh[[2346lbe]]*-*-linux*) + $1=-fpic + ;; + # FIXME: Simplify to sh*-*-netbsd*? + sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \ + sh64-*-netbsd* | sh64l*-*-netbsd*) + $1=-fpic + ;; + # Default to -fPIC unless specified otherwise. + *) + $1=-fPIC + ;; +esac + +# If the user explicitly uses -fpic/-fPIC, keep that. +case "${m4_bpatsubsts($1, PICFLAG, CFLAGS)}" in + *-fpic*) + $1=-fpic + ;; + *-fPIC*) + $1=-fPIC + ;; +esac +]) + +# GCC_PICFLAG +# ----------- +# Store host PIC flag in PICFLAG. +AC_DEFUN([GCC_PICFLAG], [ + AC_REQUIRE([AC_CANONICAL_HOST]) + _GCC_PICFLAG([PICFLAG], [host])]) + +# GCC_PICFLAG_FOR_TARGET +# ---------------------- +# Store target PIC flag in PICFLAG_FOR_TARGET. +AC_DEFUN([GCC_PICFLAG_FOR_TARGET], [ + AC_REQUIRE([AC_CANONICAL_TARGET]) + _GCC_PICFLAG([PICFLAG_FOR_TARGET], [target])]) |