1# _GCC_PICFLAG(FLAG, DISPATCH)
2# ----------------------------
3# Store PIC flag corresponding to DISPATCH triplet in FLAG.
4# Explit use of -fpic in CFLAGS corresponding to FLAG overrides default.
5AC_DEFUN([_GCC_PICFLAG], [
6
7case "${$2}" in
8    # PIC is the default on some targets or must not be used.
9    *-*-darwin*)
10	# For darwin, common symbols are not allowed in MH_DYLIB files
11	case "${CFLAGS}" in
12	  # If we are using a compiler supporting mdynamic-no-pic
13	  # and the option has been tested as safe to add, then cancel
14	  # it here, since the code generated is incompatible with shared
15	  # libs.
16	  *-mdynamic-no-pic*) $1='-fno-common -mno-dynamic-no-pic' ;;
17	  *) $1=-fno-common ;;
18	esac
19	;;
20    alpha*-dec-osf5*)
21	# PIC is the default.
22	;;
23    hppa*64*-*-hpux*)
24	# PIC is the default for 64-bit PA HP-UX.
25	;;
26    i[[34567]]86-*-cygwin* | x86_64-*-cygwin*)
27	;;
28    i[[34567]]86-*-mingw* | x86_64-*-mingw*)
29	;;
30    i[[34567]]86-*-interix[[3-9]]*)
31	# Interix 3.x gcc -fpic/-fPIC options generate broken code.
32	# Instead, we relocate shared libraries at runtime.
33	;;
34    i[[34567]]86-*-nto-qnx*)
35	# QNX uses GNU C++, but need to define -shared option too, otherwise
36	# it will coredump.
37	$1='-fPIC -shared'
38	;;
39    i[[34567]]86-pc-msdosdjgpp*)
40	# DJGPP does not support shared libraries at all.
41	;;
42    ia64*-*-hpux*)
43	# On IA64 HP-UX, PIC is the default but the pic flag
44	# sets the default TLS model and affects inlining.
45	$1=-fPIC
46	;;
47    loongarch*-*-*)
48	$1=-fpic
49	;;
50    mips-sgi-irix6*)
51	# PIC is the default.
52	;;
53    rs6000-ibm-aix* | powerpc-ibm-aix*)
54	# All AIX code is PIC.
55	;;
56
57    # Some targets support both -fPIC and -fpic, but prefer the latter.
58    # FIXME: Why?
59    i[[34567]]86-*-* | x86_64-*-*)
60	$1=-fpic
61	;;
62    # FIXME: Override -fPIC default in libgcc only? 
63    sh-*-linux* | sh[[2346lbe]]*-*-linux*)
64	$1=-fpic
65	;;
66    # FIXME: Simplify to sh*-*-netbsd*?
67    sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
68      sh64-*-netbsd* | sh64l*-*-netbsd*)
69	$1=-fpic
70	;;
71    # Default to -fPIC unless specified otherwise.
72    *)
73	$1=-fPIC
74	;;
75esac
76
77# If the user explicitly uses -fpic/-fPIC, keep that.
78case "${m4_bpatsubsts($1, PICFLAG, CFLAGS)}" in
79    *-fpic*)
80	$1=-fpic
81	;;
82    *-fPIC*)
83	$1=-fPIC
84	;;
85esac
86])
87
88# GCC_PICFLAG
89# -----------
90# Store host PIC flag in PICFLAG.
91AC_DEFUN([GCC_PICFLAG], [
92  AC_REQUIRE([AC_CANONICAL_HOST])
93  _GCC_PICFLAG([PICFLAG], [host])])
94
95# GCC_PICFLAG_FOR_TARGET
96# ----------------------
97# Store target PIC flag in PICFLAG_FOR_TARGET.
98AC_DEFUN([GCC_PICFLAG_FOR_TARGET], [
99  AC_REQUIRE([AC_CANONICAL_TARGET])
100  _GCC_PICFLAG([PICFLAG_FOR_TARGET], [target])])
101