1# configure.host
2#
3# This shell script handles all host based configuration for libstdc++.
4# It sets various shell variables based on the the host and the
5# configuration options.  You can modify this shell script without needing
6# to rerun autoconf/aclocal/etc.  This file is "sourced" not executed.
7#
8# You should read docs/html/17_intro/porting.* to make sense of this file.
9#
10#
11# It uses the following shell variables as set by config.guess:
12#   host                The configuration host (full CPU-vendor-OS triplet)
13#   host_cpu            The configuration host CPU
14#   host_os             The configuration host OS
15#
16#
17# It sets the following shell variables:
18#
19#   cpu_include_dir        CPU-specific directory, defaults to cpu/generic
20#                          if cpu/host_cpu doesn't exist.  This is not used
21#                          directly, but sets the default for others.
22#
23#   os_include_dir         OS-specific directory, defaults to os/generic.
24#
25#   c_model                the "C" header model, defaults to c_std.
26#
27#   c_compatibility        if "C" compatibility headers are necessary,
28#                          defaults to no.
29#
30#   abi_baseline_pair      directory name for ABI compat testing,
31#                          defaults to host_cpu-host_os (as per config.guess)
32#
33#   abi_tweaks_dir         location of cxxabi_tweaks.h,
34#                          defaults to cpu_include_dir
35#
36#   atomicity_dir          location of atomicity.h,
37#                          defaults to cpu_include_dir
38#
39#   atomic_word_dir        location of atomic_word.h
40#                          defaults to generic.
41#
42#   cpu_defines_dir        location of cpu_defines.h
43#                          defaults to generic.
44#
45# It possibly modifies the following variables:
46#
47#   OPT_LDFLAGS            extra flags to pass when linking the library, of
48#                          the form '-Wl,blah'
49#                          (defaults to empty in acinclude.m4)
50#
51#   port_specific_symbol_files
52#                          whitespace-seperated list of files containing
53#                          additional symbols to export from the shared
54#                          library, when symbol versioning is in use
55#
56#
57# If the defaults will not work for your platform, you need only change the
58# variables that won't work, i.e., you do not need to explicitly set a
59# working variable to its default.  Most hosts only need to change the two
60# *_include_dir variables.
61
62
63# DEFAULTS
64# Try to guess a default cpu_include_dir based on the name of the CPU.  We
65# cannot do this for os_include_dir; there are too many portable operating
66# systems out there.  :-)
67c_model=c_std
68c_compatibility=no
69atomic_word_dir=cpu/generic
70atomicity_dir="cpu/generic"
71cpu_defines_dir="cpu/generic"
72try_cpu=generic
73abi_tweaks_dir="cpu/generic"
74
75# HOST-SPECIFIC OVERRIDES
76# Set any CPU-dependent bits.
77
78# Provide a way to funnel exotic flavors and prefixed/postfixed chip
79# variants into the established source config/cpu/* sub-directories.
80# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
81case "${host_cpu}" in
82  alpha*)
83    try_cpu=alpha
84    ;;
85  arm* | xscale | ep9312)
86    try_cpu=arm
87    ;;
88  i[567]86 | x86_64)
89    try_cpu=i486
90    ;;
91  hppa*)
92    try_cpu=hppa
93    ;;
94  mips*)
95    try_cpu=mips
96    ;;
97  m680[246]0)
98    try_cpu=m68k
99    ;;
100  powerpc* | rs6000)
101    try_cpu=powerpc
102    ;;
103  sparc* | ultrasparc)
104    try_cpu=sparc
105    ;;
106  *)
107    if test -d ${glibcxx_srcdir}/config/cpu/${host_cpu}; then
108      try_cpu=${host_cpu}
109    fi
110esac
111
112
113# Now look for the file(s) usually tied to a CPU model, and make
114# default choices for those if they haven't been explicitly set
115# already.  
116cpu_include_dir=cpu/${try_cpu}
117
118
119# Set specific CPU overrides for cpu_defines_dir. Most can just use generic.
120# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
121case "${host_cpu}" in
122  powerpc* | rs6000)
123    cpu_defines_dir=cpu/powerpc
124    ;;
125esac
126
127
128# Set specific CPU overrides for atomic_word_dir. Most can just use generic.
129# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
130case "${host_cpu}" in
131  alpha*)
132    atomic_word_dir=cpu/alpha
133    ;;
134  cris*)
135    atomic_word_dir=cpu/cris
136    ;;
137  ia64)
138    atomic_word_dir=cpu/ia64
139    ;;
140  powerpc* | rs6000)
141    atomic_word_dir=cpu/powerpc
142    ;;
143  sparc* | ultrasparc)
144    atomic_word_dir=cpu/sparc
145    ;;
146esac
147
148
149# Set specific CPU overrides for atomicity_dir.
150# This can be over-ridden in GLIBCXX_ENABLE_ATOMIC_BUILTINS.
151# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
152if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/atomicity.h ; then
153  atomicity_dir=$cpu_include_dir
154fi
155
156
157if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/cxxabi_tweaks.h ; then
158  abi_tweaks_dir=$cpu_include_dir
159fi
160
161
162# Set any OS-dependent bits.
163# Set the os_include_dir.
164# Set c_model, c_compatibility here.
165# If atomic ops and/or numeric limits are OS-specific rather than
166# CPU-specifc, set those here too.
167# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
168case "${host_os}" in
169  aix4.[3456789]* | aix[56789]*)
170    # We set os_include_dir to os/aix only on AIX 4.3 and newer, but
171    # os/aix/atomicity.h works on earlier versions of AIX 4.*, so we
172    # explicitly duplicate the directory for 4.[<3].
173    os_include_dir="os/aix"
174    atomicity_dir="os/aix"
175    atomic_word_dir="os/aix"
176    OPT_LDFLAGS="-Wl,-G"
177    ;;
178  aix4.*)
179    os_include_dir="os/generic"
180    atomicity_dir="os/aix"
181    atomic_word_dir="os/aix"
182    ;;
183  aix*)
184    os_include_dir="os/generic"
185    atomicity_dir="cpu/generic"
186    ;;
187  bsd*)
188    # Plain BSD attempts to share FreeBSD files.
189    os_include_dir="os/bsd/freebsd"
190    ;;
191  cygwin*)
192    os_include_dir="os/newlib"
193    ;;
194  darwin | darwin[1-7] | darwin[1-7].*)
195    # On Darwin, performance is improved if libstdc++ is single-module.
196    # Up to at least 10.3.7, -flat_namespace is required for proper
197    # treatment of coalesced symbols.
198    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module -Wl,-flat_namespace"
199    os_include_dir="os/bsd/darwin"
200    ;;
201  darwin[89] | darwin[89].* | darwin[1-9][0-9]* )
202    # On Darwin, performance is improved if libstdc++ is single-module,
203    # and on 8+ compatibility is better if not -flat_namespace.
204    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module"
205    os_include_dir="os/bsd/darwin"
206    ;;
207  *djgpp*)      # leading * picks up "msdosdjgpp"
208    os_include_dir="os/djgpp"
209    ;;
210  freebsd*)
211    os_include_dir="os/bsd/freebsd"
212    ;;
213  gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
214    if [ "$uclibc" = "yes" ]; then
215      os_include_dir="os/uclibc"
216    else
217      os_include_dir="os/gnu-linux"
218    fi
219    ;;
220  hpux*)
221    os_include_dir="os/hpux"
222    ;;
223  irix[1-6] | irix[1-5].* | irix6.[0-4]*)
224    # This is known to work on at least IRIX 5.2 and 6.3.
225    os_include_dir="os/irix/irix5.2"
226    atomicity_dir=os/irix
227    atomic_word_dir=os/irix
228    ;;
229  irix6.5*)
230    os_include_dir="os/irix/irix6.5"
231    atomicity_dir=os/irix
232    atomic_word_dir=os/irix
233    ;;
234  mingw32*)
235    os_include_dir="os/mingw32"
236    ;;
237  netbsd*)
238    os_include_dir="os/bsd/netbsd"
239    ;;
240  qnx6.[12]*)
241    os_include_dir="os/qnx/qnx6.1"
242    c_model=c
243    ;;
244  solaris2)
245    # This too-vague configuration does not provide enough information
246    # to select a ctype include, and thus os_include_dir is a crap shoot.
247    echo "Please specify the full version of Solaris, ie. solaris2.9 " 1>&2
248    exit 1
249    ;;
250  solaris2.5 | solaris2.5.[0-9])
251    os_include_dir="os/solaris/solaris2.5"
252    ;;
253  solaris2.6)
254    os_include_dir="os/solaris/solaris2.6"
255    ;;
256  solaris2.[789] | solaris2.1[0-9])
257    os_include_dir="os/solaris/solaris2.7"
258    ;;
259  tpf)
260    os_include_dir="os/tpf"
261    ;;
262  vxworks)
263    os_include_dir="os/vxworks"
264    ;;
265  windiss*)
266    os_include_dir="os/windiss"
267    ;;
268  *)
269    os_include_dir="os/generic"
270    ;;
271esac
272
273
274# Set any OS-dependent and CPU-dependent bits.
275# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
276case "${host}" in
277  *-*-linux*)
278    case "${host_cpu}" in
279      i[567]86)
280        abi_baseline_pair=i486-linux-gnu
281        ;;
282      powerpc64)
283        abi_baseline_pair=powerpc64-linux-gnu
284        ;;
285      s390)
286        abi_baseline_pair=s390-linux-gnu
287        ;;
288      s390x)
289        abi_baseline_pair=s390x-linux-gnu
290        ;;
291      x86_64)
292        abi_baseline_pair=x86_64-linux-gnu
293        ;;
294      *)
295        if test -d ${glibcxx_srcdir}/config/abi/post/${try_cpu}-linux-gnu; then
296          abi_baseline_pair=${try_cpu}-linux-gnu
297        fi
298    esac
299    ;;
300  mips*-*-*)
301    case "${host_os}" in
302      gnu* | linux* | irix*)
303        ;;
304      *)
305        atomicity_dir="cpu/generic"
306        ;;
307    esac
308    ;;
309  powerpc*-*-darwin*)
310    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
311    ;;
312esac
313