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