xref: /netbsd-src/external/gpl3/gcc/dist/libstdc++-v3/configure.host (revision e9e6e0f6fbc36b8de7586170291cf5fc97cab8b6)
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_global.
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_baseline_subdir_switch
34#			   g++ switch to determine ABI baseline subdir for
35#			   multilibbed targets,
36#			   defaults to --print-multi-directory
37#
38#   abi_tweaks_dir         location of cxxabi_tweaks.h,
39#                          defaults to cpu_include_dir
40#
41#   atomicity_dir          location of atomicity.h,
42#                          defaults to cpu_include_dir
43#
44#   atomic_word_dir        location of atomic_word.h
45#                          defaults to generic.
46#
47#   atomic_flags           extra flags to pass to use atomic instructions
48#                          defaults to nothing.
49#
50#   cpu_defines_dir        location of cpu_defines.h
51#                          defaults to generic.
52#
53#   cpu_opt_bits_random    path name of random.h containing CPU-specific
54#                          optimizations
55#
56#   cpu_opt_ext_random     path name of random.h containing CPU-specific
57#                          optimizations for extensions
58#
59#   error_constants_dir    location of error_constants.h
60#                          defaults to os/generic.
61#
62# It possibly modifies the following variables:
63#
64#   OPT_LDFLAGS            extra flags to pass when linking the library, of
65#                          the form '-Wl,blah'
66#                          (defaults to empty in acinclude.m4)
67#
68#   port_specific_symbol_files
69#                          whitespace-separated list of files containing
70#                          additional symbols to export from the shared
71#                          library, when symbol versioning is in use
72#
73#   tmake_file		   A list of machine-description-specific
74#			   makefile fragments.
75#
76#
77# If the defaults will not work for your platform, you need only change the
78# variables that won't work, i.e., you do not need to explicitly set a
79# working variable to its default.  Most hosts only need to change the two
80# *_include_dir variables.
81
82
83# DEFAULTS
84# Try to guess a default cpu_include_dir based on the name of the CPU.  We
85# cannot do this for os_include_dir; there are too many portable operating
86# systems out there.  :-)
87c_model=c_global
88c_compatibility=no
89atomic_word_dir=cpu/generic
90atomic_flags=""
91atomicity_dir="cpu/generic"
92cpu_defines_dir="cpu/generic"
93try_cpu=generic
94abi_baseline_subdir_switch=--print-multi-directory
95abi_tweaks_dir="cpu/generic"
96error_constants_dir="os/generic"
97tmake_file=
98
99# HOST-SPECIFIC OVERRIDES
100# Set any CPU-dependent bits.
101
102# Provide a way to funnel exotic flavors and prefixed/postfixed chip
103# variants into the established source config/cpu/* sub-directories.
104# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
105case "${host_cpu}" in
106  alpha*)
107    try_cpu=alpha
108    ;;
109  arm*)
110    try_cpu=arm
111    ;;
112  crisv32)
113    try_cpu=cris
114    ;;
115  i[567]86 | x86_64)
116    try_cpu=i486
117    ;;
118  hppa*)
119    try_cpu=hppa
120    ;;
121  mips*)
122    try_cpu=mips
123    ;;
124  powerpc* | rs6000)
125    try_cpu=powerpc
126    ;;
127  sparc* | ultrasparc)
128    try_cpu=sparc
129    ;;
130  *)
131    if test -d ${glibcxx_srcdir}/config/cpu/${host_cpu}; then
132      try_cpu=${host_cpu}
133    fi
134esac
135
136
137# Now look for the file(s) usually tied to a CPU model, and make
138# default choices for those if they haven't been explicitly set
139# already.
140cpu_include_dir=cpu/${try_cpu}
141
142
143# Set specific CPU overrides for cpu_defines_dir. Most can just use generic.
144# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
145case "${host_cpu}" in
146  arm*)
147    cpu_defines_dir=cpu/arm
148    ;;
149  powerpc* | rs6000)
150    cpu_defines_dir=cpu/powerpc
151    ;;
152esac
153
154
155# Set specific CPU overrides for atomic_word_dir and atomic_flags.
156# Most can just use generic.
157# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
158case "${host_cpu}" in
159  cris*)
160    atomic_word_dir=cpu/cris
161    ;;
162  i[4567]86 | x86_64)
163    atomic_flags="-march=native"
164    ;;
165  sparc* | ultrasparc)
166    atomic_word_dir=cpu/sparc
167    atomic_flags="-mcpu=v9"
168    ;;
169esac
170
171
172# Set specific CPU overrides for atomicity_dir.
173# This can be over-ridden in GLIBCXX_ENABLE_ATOMIC_BUILTINS.
174# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
175if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/atomicity.h ; then
176# The sh atomicity.h is unusable
177if test ${cpu_include_dir} != "cpu/sh"; then
178  atomicity_dir=$cpu_include_dir
179fi
180fi
181
182
183if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/cxxabi_tweaks.h ; then
184  abi_tweaks_dir=$cpu_include_dir
185fi
186
187
188# Set directory with CPU-specific optimization
189cpu_opt_dir=${cpu_include_dir}/opt
190test -d ${glibcxx_srcdir}/config/${cpu_include_dir}/opt ||
191cpu_opt_dir=cpu/generic/opt
192# For each header with CPU-specific optimizations check whether it
193# exists in ${cpu_opt_dir}.  If not, point the variable at the
194# appropriate file in the generic directory.
195cpu_opt_ext_random=${cpu_opt_dir}/ext/opt_random.h
196test -f ${glibcxx_srcdir}/config/${cpu_opt_ext_random} ||
197cpu_opt_ext_random=cpu/generic/opt/ext/opt_random.h
198
199cpu_opt_bits_random=${cpu_opt_dir}/bits/opt_random.h
200test -f ${glibcxx_srcdir}/config/${cpu_opt_ext_random} ||
201cpu_opt_ext_random=cpu/generic/opt/bits/opt_random.h
202
203
204# Set any OS-dependent bits.
205# Set the os_include_dir.
206# Set the error_costants_dir.
207# Set c_model, c_compatibility here.
208# If atomic ops and/or numeric limits are OS-specific rather than
209# CPU-specifc, set those here too.
210# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
211case "${host_os}" in
212  aix[56789]*)
213    # Newer versions of AIX only support PowerPC architecture, so use
214    # atomic instructions directly.
215    os_include_dir="os/aix"
216    tmake_file="os/aix/t-aix"
217    ;;
218  aix*)
219    os_include_dir="os/generic"
220    atomicity_dir="cpu/generic"
221    ;;
222  bsd*)
223    # Plain BSD attempts to share FreeBSD files.
224    os_include_dir="os/bsd/freebsd"
225    ;;
226  cygwin*)
227    os_include_dir="os/newlib"
228    OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
229    ;;
230  darwin[4-7] | darwin[4-7].*)
231    # For earlier Darwin, performance is improved if libstdc++ is
232    # single-module. Up to at least 10.3.7, -flat_namespace is required
233    # for proper treatment of coalesced symbols.
234    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module -Wl,-flat_namespace"
235    os_include_dir="os/bsd/darwin"
236    ;;
237  darwin8 | darwin8.* )
238    # For 8+ compatibility is better if not -flat_namespace.
239    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module"
240    case "${host_cpu}" in
241      i[34567]86 | x86_64)
242        OPTIMIZE_CXXFLAGS="${OPTIMIZE_CXXFLAGS} -fvisibility-inlines-hidden"
243        ;;
244    esac
245    os_include_dir="os/bsd/darwin"
246    ;;
247  darwin*)
248    # Post Darwin8, defaults should be sufficient.
249    os_include_dir="os/bsd/darwin"
250    ;;
251  *djgpp*)      # leading * picks up "msdosdjgpp"
252    os_include_dir="os/djgpp"
253    error_constants_dir="os/djgpp"
254    ;;
255  dragonfly*)
256    os_include_dir="os/bsd/dragonfly"
257    ;;
258  freebsd*)
259    os_include_dir="os/bsd/freebsd"
260    ;;
261  linux-musl*)
262    os_include_dir="os/generic"
263    ;;
264  gnu* | linux* | kfreebsd*-gnu | uclinux*)
265    if [ "$uclibc" = "yes" ]; then
266      os_include_dir="os/uclibc"
267    elif [ "$bionic" = "yes" ]; then
268      os_include_dir="os/bionic"
269    else
270      os_include_dir="os/gnu-linux"
271    fi
272    ;;
273  hpux*)
274    os_include_dir="os/hpux"
275    ;;
276  mingw32*)
277    case "$host" in
278      *-w64-*)
279        os_include_dir="os/mingw32-w64"
280        error_constants_dir="os/mingw32-w64"
281        ;;
282      *)
283        os_include_dir="os/mingw32"
284        error_constants_dir="os/mingw32"
285        ;;
286    esac
287    OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
288    ;;
289  netbsd*)
290    os_include_dir="os/bsd/netbsd"
291    ;;
292  openbsd*)
293    os_include_dir="os/bsd/openbsd"
294    ;;
295  qnx6.[12]*)
296    os_include_dir="os/qnx/qnx6.1"
297    c_model=c
298    ;;
299  rtems*)
300    # Use libatomic if necessary and avoid libstdc++ specific atomicity support
301    atomicity_dir="cpu/generic/atomicity_builtins"
302    ;;
303  solaris2*)
304    os_include_dir="os/solaris"
305    ;;
306  tpf)
307    os_include_dir="os/tpf"
308    ;;
309  vxworks*)
310    os_include_dir="os/vxworks"
311    ;;
312  *)
313    os_include_dir="os/generic"
314    ;;
315esac
316
317
318# Set any OS-dependent and CPU-dependent bits.
319# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
320case "${host}" in
321  *-*-linux* | *-*-uclinux*)
322    case "${host_cpu}" in
323      i[567]86)
324        abi_baseline_pair=i486-linux-gnu
325        ;;
326      mips64*)
327	abi_baseline_pair=mips64-linux-gnu
328	;;
329      powerpc64*)
330        abi_baseline_pair=powerpc64-linux-gnu
331        ;;
332      s390)
333        abi_baseline_pair=s390-linux-gnu
334        ;;
335      s390x)
336        abi_baseline_pair=s390x-linux-gnu
337        ;;
338      sparc64)
339        abi_baseline_pair=sparc64-linux-gnu
340        ;;
341      x86_64)
342        abi_baseline_pair=x86_64-linux-gnu
343        ;;
344      *)
345        if test $try_cpu = generic; then
346          try_abi_cpu=$host_cpu
347        else
348          try_abi_cpu=$try_cpu
349        fi
350        if test -d ${glibcxx_srcdir}/config/abi/post/${try_abi_cpu}-linux-gnu; then
351          abi_baseline_pair=${try_abi_cpu}-linux-gnu
352        fi
353    esac
354    case "${host}" in
355      arm*-*-linux-* | arm*-*-uclinuxfdpiceabi)
356	port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
357	;;
358    esac
359    ;;
360  arm*-*-freebsd*)
361     port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
362     ;;
363  powerpc*-*-darwin*)
364    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
365    ;;
366  *-*-solaris2*)
367    abi_baseline_pair=solaris
368    case "${host_cpu}" in
369	i?86 | x86_64)
370	    abi_baseline_pair=i386-${abi_baseline_pair}
371	    ;;
372	sparc*)
373	    abi_baseline_pair=sparc-${abi_baseline_pair}
374	    ;;
375    esac
376    abi_baseline_subdir_switch=--print-multi-os-directory
377    ;;
378esac
379