129459361Smrg#! /bin/sh 229459361Smrg# Configuration validation subroutine script. 3eb323118Smrg# Copyright 1992-2024 Free Software Foundation, Inc. 429459361Smrg 5e24f450bSmrg# shellcheck disable=SC2006,SC2268 # see below for rationale 6e24f450bSmrg 7eb323118Smrgtimestamp='2024-01-01' 829459361Smrg 9fb4ebca8Smrg# This file is free software; you can redistribute it and/or modify it 10fb4ebca8Smrg# under the terms of the GNU General Public License as published by 11eb323118Smrg# the Free Software Foundation, either version 3 of the License, or 1229459361Smrg# (at your option) any later version. 1329459361Smrg# 14fb4ebca8Smrg# This program is distributed in the hope that it will be useful, but 15fb4ebca8Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 16fb4ebca8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17fb4ebca8Smrg# General Public License for more details. 1829459361Smrg# 1929459361Smrg# You should have received a copy of the GNU General Public License 20e24f450bSmrg# along with this program; if not, see <https://www.gnu.org/licenses/>. 2129459361Smrg# 2229459361Smrg# As a special exception to the GNU General Public License, if you 2329459361Smrg# distribute this file as part of a program that contains a 2429459361Smrg# configuration script generated by Autoconf, you may include it under 25fb4ebca8Smrg# the same distribution terms that you use for the rest of that 26fb4ebca8Smrg# program. This Exception is an additional permission under section 7 27fb4ebca8Smrg# of the GNU General Public License, version 3 ("GPLv3"). 2829459361Smrg 2929459361Smrg 30fa2b3b63Smrg# Please send patches to <config-patches@gnu.org>. 3129459361Smrg# 3229459361Smrg# Configuration subroutine to validate and canonicalize a configuration type. 3329459361Smrg# Supply the specified configuration type as an argument. 3429459361Smrg# If it is invalid, we print an error message on stderr and exit with code 1. 3529459361Smrg# Otherwise, we print the canonical config type on stdout and succeed. 3629459361Smrg 374fbc8bdeSmrg# You can get the latest version of this script from: 38e24f450bSmrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub 394fbc8bdeSmrg 4029459361Smrg# This file is supposed to be the same for all GNU packages 4129459361Smrg# and recognize all the CPU types, system types and aliases 4229459361Smrg# that are meaningful with *any* GNU software. 4329459361Smrg# Each package is responsible for reporting which valid configurations 4429459361Smrg# it does not support. The user should be able to distinguish 4529459361Smrg# a failure to support a valid configuration from a meaningless 4629459361Smrg# configuration. 4729459361Smrg 4829459361Smrg# The goal of this file is to map all the various variations of a given 4929459361Smrg# machine specification into a single specification in the form: 5029459361Smrg# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM 5129459361Smrg# or in some cases, the newer four-part form: 5229459361Smrg# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM 5329459361Smrg# It is wrong to echo any other type of specification. 5429459361Smrg 55e24f450bSmrg# The "shellcheck disable" line above the timestamp inhibits complaints 56e24f450bSmrg# about features and limitations of the classic Bourne shell that were 57e24f450bSmrg# superseded or lifted in POSIX. However, this script identifies a wide 58e24f450bSmrg# variety of pre-POSIX systems that do not have POSIX shells at all, and 59e24f450bSmrg# even some reasonably current systems (Solaris 10 as case-in-point) still 60e24f450bSmrg# have a pre-POSIX /bin/sh. 61e24f450bSmrg 6229459361Smrgme=`echo "$0" | sed -e 's,.*/,,'` 6329459361Smrg 6429459361Smrgusage="\ 65fa2b3b63SmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS 6629459361Smrg 6729459361SmrgCanonicalize a configuration name. 6829459361Smrg 69e24f450bSmrgOptions: 7029459361Smrg -h, --help print this help, then exit 7129459361Smrg -t, --time-stamp print date of last modification, then exit 7229459361Smrg -v, --version print version number, then exit 7329459361Smrg 7429459361SmrgReport bugs and patches to <config-patches@gnu.org>." 7529459361Smrg 7629459361Smrgversion="\ 7729459361SmrgGNU config.sub ($timestamp) 7829459361Smrg 79eb323118SmrgCopyright 1992-2024 Free Software Foundation, Inc. 8029459361Smrg 8129459361SmrgThis is free software; see the source for copying conditions. There is NO 8229459361Smrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 8329459361Smrg 8429459361Smrghelp=" 85eb323118SmrgTry '$me --help' for more information." 8629459361Smrg 8729459361Smrg# Parse command line 8829459361Smrgwhile test $# -gt 0 ; do 8929459361Smrg case $1 in 9029459361Smrg --time-stamp | --time* | -t ) 9129459361Smrg echo "$timestamp" ; exit ;; 9229459361Smrg --version | -v ) 9329459361Smrg echo "$version" ; exit ;; 9429459361Smrg --help | --h* | -h ) 9529459361Smrg echo "$usage"; exit ;; 9629459361Smrg -- ) # Stop option processing 9729459361Smrg shift; break ;; 9829459361Smrg - ) # Use stdin as input. 9929459361Smrg break ;; 10029459361Smrg -* ) 101e24f450bSmrg echo "$me: invalid option $1$help" >&2 10229459361Smrg exit 1 ;; 10329459361Smrg 10429459361Smrg *local*) 10529459361Smrg # First pass through any local machine types. 106e24f450bSmrg echo "$1" 10729459361Smrg exit ;; 10829459361Smrg 10929459361Smrg * ) 11029459361Smrg break ;; 11129459361Smrg esac 11229459361Smrgdone 11329459361Smrg 11429459361Smrgcase $# in 11529459361Smrg 0) echo "$me: missing argument$help" >&2 11629459361Smrg exit 1;; 11729459361Smrg 1) ;; 11829459361Smrg *) echo "$me: too many arguments$help" >&2 11929459361Smrg exit 1;; 12029459361Smrgesac 12129459361Smrg 122e24f450bSmrg# Split fields of configuration type 123e24f450bSmrg# shellcheck disable=SC2162 124e24f450bSmrgsaved_IFS=$IFS 125e24f450bSmrgIFS="-" read field1 field2 field3 field4 <<EOF 126e24f450bSmrg$1 127e24f450bSmrgEOF 128e24f450bSmrgIFS=$saved_IFS 12929459361Smrg 130e24f450bSmrg# Separate into logical components for further validation 131e24f450bSmrgcase $1 in 132e24f450bSmrg *-*-*-*-*) 133eb323118Smrg echo "Invalid configuration '$1': more than four components" >&2 134e24f450bSmrg exit 1 13529459361Smrg ;; 136e24f450bSmrg *-*-*-*) 137e24f450bSmrg basic_machine=$field1-$field2 138e24f450bSmrg basic_os=$field3-$field4 13929459361Smrg ;; 140e24f450bSmrg *-*-*) 141e24f450bSmrg # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two 142e24f450bSmrg # parts 143e24f450bSmrg maybe_os=$field2-$field3 144e24f450bSmrg case $maybe_os in 145e24f450bSmrg nto-qnx* | linux-* | uclinux-uclibc* \ 146e24f450bSmrg | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ 147e24f450bSmrg | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ 148eb323118Smrg | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ 149eb323118Smrg | windows-* ) 150e24f450bSmrg basic_machine=$field1 151e24f450bSmrg basic_os=$maybe_os 152e24f450bSmrg ;; 153e24f450bSmrg android-linux) 154e24f450bSmrg basic_machine=$field1-unknown 155e24f450bSmrg basic_os=linux-android 156e24f450bSmrg ;; 157e24f450bSmrg *) 158e24f450bSmrg basic_machine=$field1-$field2 159e24f450bSmrg basic_os=$field3 160e24f450bSmrg ;; 161e24f450bSmrg esac 16229459361Smrg ;; 163e24f450bSmrg *-*) 164e24f450bSmrg # A lone config we happen to match not fitting any pattern 165e24f450bSmrg case $field1-$field2 in 166e24f450bSmrg decstation-3100) 167e24f450bSmrg basic_machine=mips-dec 168e24f450bSmrg basic_os= 169e24f450bSmrg ;; 170e24f450bSmrg *-*) 171e24f450bSmrg # Second component is usually, but not always the OS 172e24f450bSmrg case $field2 in 173e24f450bSmrg # Prevent following clause from handling this valid os 174e24f450bSmrg sun*os*) 175e24f450bSmrg basic_machine=$field1 176e24f450bSmrg basic_os=$field2 177e24f450bSmrg ;; 178e24f450bSmrg zephyr*) 179e24f450bSmrg basic_machine=$field1-unknown 180e24f450bSmrg basic_os=$field2 181e24f450bSmrg ;; 182e24f450bSmrg # Manufacturers 183e24f450bSmrg dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ 184e24f450bSmrg | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ 185e24f450bSmrg | unicom* | ibm* | next | hp | isi* | apollo | altos* \ 186e24f450bSmrg | convergent* | ncr* | news | 32* | 3600* | 3100* \ 187e24f450bSmrg | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ 188e24f450bSmrg | ultra | tti* | harris | dolphin | highlevel | gould \ 189e24f450bSmrg | cbm | ns | masscomp | apple | axis | knuth | cray \ 190e24f450bSmrg | microblaze* | sim | cisco \ 191e24f450bSmrg | oki | wec | wrs | winbond) 192e24f450bSmrg basic_machine=$field1-$field2 193e24f450bSmrg basic_os= 194e24f450bSmrg ;; 195e24f450bSmrg *) 196e24f450bSmrg basic_machine=$field1 197e24f450bSmrg basic_os=$field2 198e24f450bSmrg ;; 199e24f450bSmrg esac 200e24f450bSmrg ;; 201e24f450bSmrg esac 20229459361Smrg ;; 203e24f450bSmrg *) 204e24f450bSmrg # Convert single-component short-hands not valid as part of 205e24f450bSmrg # multi-component configurations. 206e24f450bSmrg case $field1 in 207e24f450bSmrg 386bsd) 208e24f450bSmrg basic_machine=i386-pc 209e24f450bSmrg basic_os=bsd 210e24f450bSmrg ;; 211e24f450bSmrg a29khif) 212e24f450bSmrg basic_machine=a29k-amd 213e24f450bSmrg basic_os=udi 214e24f450bSmrg ;; 215e24f450bSmrg adobe68k) 216e24f450bSmrg basic_machine=m68010-adobe 217e24f450bSmrg basic_os=scout 218e24f450bSmrg ;; 219e24f450bSmrg alliant) 220e24f450bSmrg basic_machine=fx80-alliant 221e24f450bSmrg basic_os= 222e24f450bSmrg ;; 223e24f450bSmrg altos | altos3068) 224e24f450bSmrg basic_machine=m68k-altos 225e24f450bSmrg basic_os= 226e24f450bSmrg ;; 227e24f450bSmrg am29k) 228e24f450bSmrg basic_machine=a29k-none 229e24f450bSmrg basic_os=bsd 230e24f450bSmrg ;; 231e24f450bSmrg amdahl) 232e24f450bSmrg basic_machine=580-amdahl 233e24f450bSmrg basic_os=sysv 234e24f450bSmrg ;; 235e24f450bSmrg amiga) 236e24f450bSmrg basic_machine=m68k-unknown 237e24f450bSmrg basic_os= 238e24f450bSmrg ;; 239e24f450bSmrg amigaos | amigados) 240e24f450bSmrg basic_machine=m68k-unknown 241e24f450bSmrg basic_os=amigaos 242e24f450bSmrg ;; 243e24f450bSmrg amigaunix | amix) 244e24f450bSmrg basic_machine=m68k-unknown 245e24f450bSmrg basic_os=sysv4 246e24f450bSmrg ;; 247e24f450bSmrg apollo68) 248e24f450bSmrg basic_machine=m68k-apollo 249e24f450bSmrg basic_os=sysv 250e24f450bSmrg ;; 251e24f450bSmrg apollo68bsd) 252e24f450bSmrg basic_machine=m68k-apollo 253e24f450bSmrg basic_os=bsd 254e24f450bSmrg ;; 255e24f450bSmrg aros) 256e24f450bSmrg basic_machine=i386-pc 257e24f450bSmrg basic_os=aros 258e24f450bSmrg ;; 259e24f450bSmrg aux) 260e24f450bSmrg basic_machine=m68k-apple 261e24f450bSmrg basic_os=aux 262e24f450bSmrg ;; 263e24f450bSmrg balance) 264e24f450bSmrg basic_machine=ns32k-sequent 265e24f450bSmrg basic_os=dynix 266e24f450bSmrg ;; 267e24f450bSmrg blackfin) 268e24f450bSmrg basic_machine=bfin-unknown 269e24f450bSmrg basic_os=linux 270e24f450bSmrg ;; 271e24f450bSmrg cegcc) 272e24f450bSmrg basic_machine=arm-unknown 273e24f450bSmrg basic_os=cegcc 274e24f450bSmrg ;; 275e24f450bSmrg convex-c1) 276e24f450bSmrg basic_machine=c1-convex 277e24f450bSmrg basic_os=bsd 278e24f450bSmrg ;; 279e24f450bSmrg convex-c2) 280e24f450bSmrg basic_machine=c2-convex 281e24f450bSmrg basic_os=bsd 282e24f450bSmrg ;; 283e24f450bSmrg convex-c32) 284e24f450bSmrg basic_machine=c32-convex 285e24f450bSmrg basic_os=bsd 286e24f450bSmrg ;; 287e24f450bSmrg convex-c34) 288e24f450bSmrg basic_machine=c34-convex 289e24f450bSmrg basic_os=bsd 290e24f450bSmrg ;; 291e24f450bSmrg convex-c38) 292e24f450bSmrg basic_machine=c38-convex 293e24f450bSmrg basic_os=bsd 294e24f450bSmrg ;; 295e24f450bSmrg cray) 296e24f450bSmrg basic_machine=j90-cray 297e24f450bSmrg basic_os=unicos 298e24f450bSmrg ;; 299e24f450bSmrg crds | unos) 300e24f450bSmrg basic_machine=m68k-crds 301e24f450bSmrg basic_os= 302e24f450bSmrg ;; 303e24f450bSmrg da30) 304e24f450bSmrg basic_machine=m68k-da30 305e24f450bSmrg basic_os= 306e24f450bSmrg ;; 307e24f450bSmrg decstation | pmax | pmin | dec3100 | decstatn) 308e24f450bSmrg basic_machine=mips-dec 309e24f450bSmrg basic_os= 310e24f450bSmrg ;; 311e24f450bSmrg delta88) 312e24f450bSmrg basic_machine=m88k-motorola 313e24f450bSmrg basic_os=sysv3 314e24f450bSmrg ;; 315e24f450bSmrg dicos) 316e24f450bSmrg basic_machine=i686-pc 317e24f450bSmrg basic_os=dicos 318e24f450bSmrg ;; 319e24f450bSmrg djgpp) 320e24f450bSmrg basic_machine=i586-pc 321e24f450bSmrg basic_os=msdosdjgpp 322e24f450bSmrg ;; 323e24f450bSmrg ebmon29k) 324e24f450bSmrg basic_machine=a29k-amd 325e24f450bSmrg basic_os=ebmon 326e24f450bSmrg ;; 327e24f450bSmrg es1800 | OSE68k | ose68k | ose | OSE) 328e24f450bSmrg basic_machine=m68k-ericsson 329e24f450bSmrg basic_os=ose 330e24f450bSmrg ;; 331e24f450bSmrg gmicro) 332e24f450bSmrg basic_machine=tron-gmicro 333e24f450bSmrg basic_os=sysv 334e24f450bSmrg ;; 335e24f450bSmrg go32) 336e24f450bSmrg basic_machine=i386-pc 337e24f450bSmrg basic_os=go32 338e24f450bSmrg ;; 339e24f450bSmrg h8300hms) 340e24f450bSmrg basic_machine=h8300-hitachi 341e24f450bSmrg basic_os=hms 342e24f450bSmrg ;; 343e24f450bSmrg h8300xray) 344e24f450bSmrg basic_machine=h8300-hitachi 345e24f450bSmrg basic_os=xray 346e24f450bSmrg ;; 347e24f450bSmrg h8500hms) 348e24f450bSmrg basic_machine=h8500-hitachi 349e24f450bSmrg basic_os=hms 350e24f450bSmrg ;; 351e24f450bSmrg harris) 352e24f450bSmrg basic_machine=m88k-harris 353e24f450bSmrg basic_os=sysv3 354e24f450bSmrg ;; 355e24f450bSmrg hp300 | hp300hpux) 356e24f450bSmrg basic_machine=m68k-hp 357e24f450bSmrg basic_os=hpux 358e24f450bSmrg ;; 359e24f450bSmrg hp300bsd) 360e24f450bSmrg basic_machine=m68k-hp 361e24f450bSmrg basic_os=bsd 362e24f450bSmrg ;; 363e24f450bSmrg hppaosf) 364e24f450bSmrg basic_machine=hppa1.1-hp 365e24f450bSmrg basic_os=osf 366e24f450bSmrg ;; 367e24f450bSmrg hppro) 368e24f450bSmrg basic_machine=hppa1.1-hp 369e24f450bSmrg basic_os=proelf 370e24f450bSmrg ;; 371e24f450bSmrg i386mach) 372e24f450bSmrg basic_machine=i386-mach 373e24f450bSmrg basic_os=mach 374e24f450bSmrg ;; 375e24f450bSmrg isi68 | isi) 376e24f450bSmrg basic_machine=m68k-isi 377e24f450bSmrg basic_os=sysv 378e24f450bSmrg ;; 379e24f450bSmrg m68knommu) 380e24f450bSmrg basic_machine=m68k-unknown 381e24f450bSmrg basic_os=linux 382e24f450bSmrg ;; 383e24f450bSmrg magnum | m3230) 384e24f450bSmrg basic_machine=mips-mips 385e24f450bSmrg basic_os=sysv 386e24f450bSmrg ;; 387e24f450bSmrg merlin) 388e24f450bSmrg basic_machine=ns32k-utek 389e24f450bSmrg basic_os=sysv 390e24f450bSmrg ;; 391e24f450bSmrg mingw64) 392e24f450bSmrg basic_machine=x86_64-pc 393e24f450bSmrg basic_os=mingw64 394e24f450bSmrg ;; 395e24f450bSmrg mingw32) 396e24f450bSmrg basic_machine=i686-pc 397e24f450bSmrg basic_os=mingw32 398e24f450bSmrg ;; 399e24f450bSmrg mingw32ce) 400e24f450bSmrg basic_machine=arm-unknown 401e24f450bSmrg basic_os=mingw32ce 402e24f450bSmrg ;; 403e24f450bSmrg monitor) 404e24f450bSmrg basic_machine=m68k-rom68k 405e24f450bSmrg basic_os=coff 406e24f450bSmrg ;; 407e24f450bSmrg morphos) 408e24f450bSmrg basic_machine=powerpc-unknown 409e24f450bSmrg basic_os=morphos 410e24f450bSmrg ;; 411e24f450bSmrg moxiebox) 412e24f450bSmrg basic_machine=moxie-unknown 413e24f450bSmrg basic_os=moxiebox 414e24f450bSmrg ;; 415e24f450bSmrg msdos) 416e24f450bSmrg basic_machine=i386-pc 417e24f450bSmrg basic_os=msdos 418e24f450bSmrg ;; 419e24f450bSmrg msys) 420e24f450bSmrg basic_machine=i686-pc 421e24f450bSmrg basic_os=msys 422e24f450bSmrg ;; 423e24f450bSmrg mvs) 424e24f450bSmrg basic_machine=i370-ibm 425e24f450bSmrg basic_os=mvs 426e24f450bSmrg ;; 427e24f450bSmrg nacl) 428e24f450bSmrg basic_machine=le32-unknown 429e24f450bSmrg basic_os=nacl 430e24f450bSmrg ;; 431e24f450bSmrg ncr3000) 432e24f450bSmrg basic_machine=i486-ncr 433e24f450bSmrg basic_os=sysv4 434e24f450bSmrg ;; 435e24f450bSmrg netbsd386) 436e24f450bSmrg basic_machine=i386-pc 437e24f450bSmrg basic_os=netbsd 438e24f450bSmrg ;; 439e24f450bSmrg netwinder) 440e24f450bSmrg basic_machine=armv4l-rebel 441e24f450bSmrg basic_os=linux 442e24f450bSmrg ;; 443e24f450bSmrg news | news700 | news800 | news900) 444e24f450bSmrg basic_machine=m68k-sony 445e24f450bSmrg basic_os=newsos 446e24f450bSmrg ;; 447e24f450bSmrg news1000) 448e24f450bSmrg basic_machine=m68030-sony 449e24f450bSmrg basic_os=newsos 450e24f450bSmrg ;; 451e24f450bSmrg necv70) 452e24f450bSmrg basic_machine=v70-nec 453e24f450bSmrg basic_os=sysv 454e24f450bSmrg ;; 455e24f450bSmrg nh3000) 456e24f450bSmrg basic_machine=m68k-harris 457e24f450bSmrg basic_os=cxux 458e24f450bSmrg ;; 459e24f450bSmrg nh[45]000) 460e24f450bSmrg basic_machine=m88k-harris 461e24f450bSmrg basic_os=cxux 462e24f450bSmrg ;; 463e24f450bSmrg nindy960) 464e24f450bSmrg basic_machine=i960-intel 465e24f450bSmrg basic_os=nindy 466e24f450bSmrg ;; 467e24f450bSmrg mon960) 468e24f450bSmrg basic_machine=i960-intel 469e24f450bSmrg basic_os=mon960 470e24f450bSmrg ;; 471e24f450bSmrg nonstopux) 472e24f450bSmrg basic_machine=mips-compaq 473e24f450bSmrg basic_os=nonstopux 474e24f450bSmrg ;; 475e24f450bSmrg os400) 476e24f450bSmrg basic_machine=powerpc-ibm 477e24f450bSmrg basic_os=os400 478e24f450bSmrg ;; 479e24f450bSmrg OSE68000 | ose68000) 480e24f450bSmrg basic_machine=m68000-ericsson 481e24f450bSmrg basic_os=ose 482e24f450bSmrg ;; 483e24f450bSmrg os68k) 484e24f450bSmrg basic_machine=m68k-none 485e24f450bSmrg basic_os=os68k 486e24f450bSmrg ;; 487e24f450bSmrg paragon) 488e24f450bSmrg basic_machine=i860-intel 489e24f450bSmrg basic_os=osf 490e24f450bSmrg ;; 491e24f450bSmrg parisc) 492e24f450bSmrg basic_machine=hppa-unknown 493e24f450bSmrg basic_os=linux 494e24f450bSmrg ;; 495e24f450bSmrg psp) 496e24f450bSmrg basic_machine=mipsallegrexel-sony 497e24f450bSmrg basic_os=psp 498e24f450bSmrg ;; 499e24f450bSmrg pw32) 500e24f450bSmrg basic_machine=i586-unknown 501e24f450bSmrg basic_os=pw32 502e24f450bSmrg ;; 503e24f450bSmrg rdos | rdos64) 504e24f450bSmrg basic_machine=x86_64-pc 505e24f450bSmrg basic_os=rdos 506e24f450bSmrg ;; 507e24f450bSmrg rdos32) 508e24f450bSmrg basic_machine=i386-pc 509e24f450bSmrg basic_os=rdos 510e24f450bSmrg ;; 511e24f450bSmrg rom68k) 512e24f450bSmrg basic_machine=m68k-rom68k 513e24f450bSmrg basic_os=coff 514e24f450bSmrg ;; 515e24f450bSmrg sa29200) 516e24f450bSmrg basic_machine=a29k-amd 517e24f450bSmrg basic_os=udi 518e24f450bSmrg ;; 519e24f450bSmrg sei) 520e24f450bSmrg basic_machine=mips-sei 521e24f450bSmrg basic_os=seiux 522e24f450bSmrg ;; 523e24f450bSmrg sequent) 524e24f450bSmrg basic_machine=i386-sequent 525e24f450bSmrg basic_os= 526e24f450bSmrg ;; 527e24f450bSmrg sps7) 528e24f450bSmrg basic_machine=m68k-bull 529e24f450bSmrg basic_os=sysv2 530e24f450bSmrg ;; 531e24f450bSmrg st2000) 532e24f450bSmrg basic_machine=m68k-tandem 533e24f450bSmrg basic_os= 534e24f450bSmrg ;; 535e24f450bSmrg stratus) 536e24f450bSmrg basic_machine=i860-stratus 537e24f450bSmrg basic_os=sysv4 538e24f450bSmrg ;; 539e24f450bSmrg sun2) 540e24f450bSmrg basic_machine=m68000-sun 541e24f450bSmrg basic_os= 542e24f450bSmrg ;; 543e24f450bSmrg sun2os3) 544e24f450bSmrg basic_machine=m68000-sun 545e24f450bSmrg basic_os=sunos3 546e24f450bSmrg ;; 547e24f450bSmrg sun2os4) 548e24f450bSmrg basic_machine=m68000-sun 549e24f450bSmrg basic_os=sunos4 550e24f450bSmrg ;; 551e24f450bSmrg sun3) 552e24f450bSmrg basic_machine=m68k-sun 553e24f450bSmrg basic_os= 554e24f450bSmrg ;; 555e24f450bSmrg sun3os3) 556e24f450bSmrg basic_machine=m68k-sun 557e24f450bSmrg basic_os=sunos3 558e24f450bSmrg ;; 559e24f450bSmrg sun3os4) 560e24f450bSmrg basic_machine=m68k-sun 561e24f450bSmrg basic_os=sunos4 562e24f450bSmrg ;; 563e24f450bSmrg sun4) 564e24f450bSmrg basic_machine=sparc-sun 565e24f450bSmrg basic_os= 566e24f450bSmrg ;; 567e24f450bSmrg sun4os3) 568e24f450bSmrg basic_machine=sparc-sun 569e24f450bSmrg basic_os=sunos3 570e24f450bSmrg ;; 571e24f450bSmrg sun4os4) 572e24f450bSmrg basic_machine=sparc-sun 573e24f450bSmrg basic_os=sunos4 574e24f450bSmrg ;; 575e24f450bSmrg sun4sol2) 576e24f450bSmrg basic_machine=sparc-sun 577e24f450bSmrg basic_os=solaris2 578e24f450bSmrg ;; 579e24f450bSmrg sun386 | sun386i | roadrunner) 580e24f450bSmrg basic_machine=i386-sun 581e24f450bSmrg basic_os= 582e24f450bSmrg ;; 583e24f450bSmrg sv1) 584e24f450bSmrg basic_machine=sv1-cray 585e24f450bSmrg basic_os=unicos 586e24f450bSmrg ;; 587e24f450bSmrg symmetry) 588e24f450bSmrg basic_machine=i386-sequent 589e24f450bSmrg basic_os=dynix 590e24f450bSmrg ;; 591e24f450bSmrg t3e) 592e24f450bSmrg basic_machine=alphaev5-cray 593e24f450bSmrg basic_os=unicos 594e24f450bSmrg ;; 595e24f450bSmrg t90) 596e24f450bSmrg basic_machine=t90-cray 597e24f450bSmrg basic_os=unicos 598e24f450bSmrg ;; 599e24f450bSmrg toad1) 600e24f450bSmrg basic_machine=pdp10-xkl 601e24f450bSmrg basic_os=tops20 602e24f450bSmrg ;; 603e24f450bSmrg tpf) 604e24f450bSmrg basic_machine=s390x-ibm 605e24f450bSmrg basic_os=tpf 606e24f450bSmrg ;; 607e24f450bSmrg udi29k) 608e24f450bSmrg basic_machine=a29k-amd 609e24f450bSmrg basic_os=udi 610e24f450bSmrg ;; 611e24f450bSmrg ultra3) 612e24f450bSmrg basic_machine=a29k-nyu 613e24f450bSmrg basic_os=sym1 614e24f450bSmrg ;; 615e24f450bSmrg v810 | necv810) 616e24f450bSmrg basic_machine=v810-nec 617e24f450bSmrg basic_os=none 618e24f450bSmrg ;; 619e24f450bSmrg vaxv) 620e24f450bSmrg basic_machine=vax-dec 621e24f450bSmrg basic_os=sysv 622e24f450bSmrg ;; 623e24f450bSmrg vms) 624e24f450bSmrg basic_machine=vax-dec 625e24f450bSmrg basic_os=vms 626e24f450bSmrg ;; 627e24f450bSmrg vsta) 628e24f450bSmrg basic_machine=i386-pc 629e24f450bSmrg basic_os=vsta 630e24f450bSmrg ;; 631e24f450bSmrg vxworks960) 632e24f450bSmrg basic_machine=i960-wrs 633e24f450bSmrg basic_os=vxworks 634e24f450bSmrg ;; 635e24f450bSmrg vxworks68) 636e24f450bSmrg basic_machine=m68k-wrs 637e24f450bSmrg basic_os=vxworks 638e24f450bSmrg ;; 639e24f450bSmrg vxworks29k) 640e24f450bSmrg basic_machine=a29k-wrs 641e24f450bSmrg basic_os=vxworks 642e24f450bSmrg ;; 643e24f450bSmrg xbox) 644e24f450bSmrg basic_machine=i686-pc 645e24f450bSmrg basic_os=mingw32 646e24f450bSmrg ;; 647e24f450bSmrg ymp) 648e24f450bSmrg basic_machine=ymp-cray 649e24f450bSmrg basic_os=unicos 650e24f450bSmrg ;; 651e24f450bSmrg *) 652e24f450bSmrg basic_machine=$1 653e24f450bSmrg basic_os= 654e24f450bSmrg ;; 655e24f450bSmrg esac 65629459361Smrg ;; 65729459361Smrgesac 65829459361Smrg 659e24f450bSmrg# Decode 1-component or ad-hoc basic machines 66029459361Smrgcase $basic_machine in 661e24f450bSmrg # Here we handle the default manufacturer of certain CPU types. It is in 662e24f450bSmrg # some cases the only manufacturer, in others, it is the most popular. 663e24f450bSmrg w89k) 664e24f450bSmrg cpu=hppa1.1 665e24f450bSmrg vendor=winbond 66629459361Smrg ;; 667e24f450bSmrg op50n) 668e24f450bSmrg cpu=hppa1.1 669e24f450bSmrg vendor=oki 67029459361Smrg ;; 671e24f450bSmrg op60c) 672e24f450bSmrg cpu=hppa1.1 673e24f450bSmrg vendor=oki 67429459361Smrg ;; 675e24f450bSmrg ibm*) 676e24f450bSmrg cpu=i370 677e24f450bSmrg vendor=ibm 6785dd2154eSmrg ;; 679e24f450bSmrg orion105) 680e24f450bSmrg cpu=clipper 681e24f450bSmrg vendor=highlevel 682fb4ebca8Smrg ;; 683e24f450bSmrg mac | mpw | mac-mpw) 684e24f450bSmrg cpu=m68k 685e24f450bSmrg vendor=apple 6865dd2154eSmrg ;; 687e24f450bSmrg pmac | pmac-mpw) 688e24f450bSmrg cpu=powerpc 689e24f450bSmrg vendor=apple 6905dd2154eSmrg ;; 6915dd2154eSmrg 69229459361Smrg # Recognize the various machine names and aliases which stand 69329459361Smrg # for a CPU type and a company and sometimes even an OS. 69429459361Smrg 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) 695e24f450bSmrg cpu=m68000 696e24f450bSmrg vendor=att 69729459361Smrg ;; 69829459361Smrg 3b*) 699e24f450bSmrg cpu=we32k 700e24f450bSmrg vendor=att 70147202d7bSmrg ;; 7024fbc8bdeSmrg bluegene*) 703e24f450bSmrg cpu=powerpc 704e24f450bSmrg vendor=ibm 705e24f450bSmrg basic_os=cnk 70629459361Smrg ;; 70729459361Smrg decsystem10* | dec10*) 708e24f450bSmrg cpu=pdp10 709e24f450bSmrg vendor=dec 710e24f450bSmrg basic_os=tops10 71129459361Smrg ;; 71229459361Smrg decsystem20* | dec20*) 713e24f450bSmrg cpu=pdp10 714e24f450bSmrg vendor=dec 715e24f450bSmrg basic_os=tops20 71629459361Smrg ;; 71729459361Smrg delta | 3300 | motorola-3300 | motorola-delta \ 71829459361Smrg | 3300-motorola | delta-motorola) 719e24f450bSmrg cpu=m68k 720e24f450bSmrg vendor=motorola 72129459361Smrg ;; 722e24f450bSmrg dpx2*) 723e24f450bSmrg cpu=m68k 724e24f450bSmrg vendor=bull 725e24f450bSmrg basic_os=sysv3 72629459361Smrg ;; 72729459361Smrg encore | umax | mmax) 728e24f450bSmrg cpu=ns32k 729e24f450bSmrg vendor=encore 73029459361Smrg ;; 731e24f450bSmrg elxsi) 732e24f450bSmrg cpu=elxsi 733e24f450bSmrg vendor=elxsi 734e24f450bSmrg basic_os=${basic_os:-bsd} 73529459361Smrg ;; 73629459361Smrg fx2800) 737e24f450bSmrg cpu=i860 738e24f450bSmrg vendor=alliant 73929459361Smrg ;; 74029459361Smrg genix) 741e24f450bSmrg cpu=ns32k 742e24f450bSmrg vendor=ns 74329459361Smrg ;; 74429459361Smrg h3050r* | hiux*) 745e24f450bSmrg cpu=hppa1.1 746e24f450bSmrg vendor=hitachi 747e24f450bSmrg basic_os=hiuxwe2 74829459361Smrg ;; 74929459361Smrg hp3k9[0-9][0-9] | hp9[0-9][0-9]) 750e24f450bSmrg cpu=hppa1.0 751e24f450bSmrg vendor=hp 75229459361Smrg ;; 75329459361Smrg hp9k2[0-9][0-9] | hp9k31[0-9]) 754e24f450bSmrg cpu=m68000 755e24f450bSmrg vendor=hp 75629459361Smrg ;; 75729459361Smrg hp9k3[2-9][0-9]) 758e24f450bSmrg cpu=m68k 759e24f450bSmrg vendor=hp 76029459361Smrg ;; 76129459361Smrg hp9k6[0-9][0-9] | hp6[0-9][0-9]) 762e24f450bSmrg cpu=hppa1.0 763e24f450bSmrg vendor=hp 76429459361Smrg ;; 76529459361Smrg hp9k7[0-79][0-9] | hp7[0-79][0-9]) 766e24f450bSmrg cpu=hppa1.1 767e24f450bSmrg vendor=hp 76829459361Smrg ;; 76929459361Smrg hp9k78[0-9] | hp78[0-9]) 77029459361Smrg # FIXME: really hppa2.0-hp 771e24f450bSmrg cpu=hppa1.1 772e24f450bSmrg vendor=hp 77329459361Smrg ;; 77429459361Smrg hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) 77529459361Smrg # FIXME: really hppa2.0-hp 776e24f450bSmrg cpu=hppa1.1 777e24f450bSmrg vendor=hp 77829459361Smrg ;; 77929459361Smrg hp9k8[0-9][13679] | hp8[0-9][13679]) 780e24f450bSmrg cpu=hppa1.1 781e24f450bSmrg vendor=hp 78229459361Smrg ;; 78329459361Smrg hp9k8[0-9][0-9] | hp8[0-9][0-9]) 784e24f450bSmrg cpu=hppa1.0 785e24f450bSmrg vendor=hp 78629459361Smrg ;; 78729459361Smrg i*86v32) 788e24f450bSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 789e24f450bSmrg vendor=pc 790e24f450bSmrg basic_os=sysv32 79129459361Smrg ;; 79229459361Smrg i*86v4*) 793e24f450bSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 794e24f450bSmrg vendor=pc 795e24f450bSmrg basic_os=sysv4 79629459361Smrg ;; 79729459361Smrg i*86v) 798e24f450bSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 799e24f450bSmrg vendor=pc 800e24f450bSmrg basic_os=sysv 80129459361Smrg ;; 80229459361Smrg i*86sol2) 803e24f450bSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 804e24f450bSmrg vendor=pc 805e24f450bSmrg basic_os=solaris2 80629459361Smrg ;; 807e24f450bSmrg j90 | j90-cray) 808e24f450bSmrg cpu=j90 809e24f450bSmrg vendor=cray 810e24f450bSmrg basic_os=${basic_os:-unicos} 81129459361Smrg ;; 81229459361Smrg iris | iris4d) 813e24f450bSmrg cpu=mips 814e24f450bSmrg vendor=sgi 815e24f450bSmrg case $basic_os in 816e24f450bSmrg irix*) 81729459361Smrg ;; 81829459361Smrg *) 819e24f450bSmrg basic_os=irix4 82029459361Smrg ;; 82129459361Smrg esac 82229459361Smrg ;; 82329459361Smrg miniframe) 824e24f450bSmrg cpu=m68000 825e24f450bSmrg vendor=convergent 82629459361Smrg ;; 827e24f450bSmrg *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) 828e24f450bSmrg cpu=m68k 829e24f450bSmrg vendor=atari 830e24f450bSmrg basic_os=mint 83129459361Smrg ;; 83229459361Smrg news-3600 | risc-news) 833e24f450bSmrg cpu=mips 834e24f450bSmrg vendor=sony 835e24f450bSmrg basic_os=newsos 836e24f450bSmrg ;; 837e24f450bSmrg next | m*-next) 838e24f450bSmrg cpu=m68k 839e24f450bSmrg vendor=next 840e24f450bSmrg case $basic_os in 841e24f450bSmrg openstep*) 842e24f450bSmrg ;; 843e24f450bSmrg nextstep*) 84429459361Smrg ;; 845e24f450bSmrg ns2*) 846e24f450bSmrg basic_os=nextstep2 84729459361Smrg ;; 84829459361Smrg *) 849e24f450bSmrg basic_os=nextstep3 85029459361Smrg ;; 85129459361Smrg esac 85229459361Smrg ;; 85329459361Smrg np1) 854e24f450bSmrg cpu=np1 855e24f450bSmrg vendor=gould 856fa2b3b63Smrg ;; 85729459361Smrg op50n-* | op60c-*) 858e24f450bSmrg cpu=hppa1.1 859e24f450bSmrg vendor=oki 860e24f450bSmrg basic_os=proelf 86129459361Smrg ;; 86229459361Smrg pa-hitachi) 863e24f450bSmrg cpu=hppa1.1 864e24f450bSmrg vendor=hitachi 865e24f450bSmrg basic_os=hiuxwe2 86647202d7bSmrg ;; 86729459361Smrg pbd) 868e24f450bSmrg cpu=sparc 869e24f450bSmrg vendor=tti 87029459361Smrg ;; 87129459361Smrg pbb) 872e24f450bSmrg cpu=m68k 873e24f450bSmrg vendor=tti 87429459361Smrg ;; 875e24f450bSmrg pc532) 876e24f450bSmrg cpu=ns32k 877e24f450bSmrg vendor=pc532 87829459361Smrg ;; 87929459361Smrg pn) 880e24f450bSmrg cpu=pn 881e24f450bSmrg vendor=gould 88229459361Smrg ;; 883e24f450bSmrg power) 884e24f450bSmrg cpu=power 885e24f450bSmrg vendor=ibm 88629459361Smrg ;; 88729459361Smrg ps2) 888e24f450bSmrg cpu=i386 889e24f450bSmrg vendor=ibm 89029459361Smrg ;; 89129459361Smrg rm[46]00) 892e24f450bSmrg cpu=mips 893e24f450bSmrg vendor=siemens 89429459361Smrg ;; 89529459361Smrg rtpc | rtpc-*) 896e24f450bSmrg cpu=romp 897e24f450bSmrg vendor=ibm 89829459361Smrg ;; 89929459361Smrg sde) 900e24f450bSmrg cpu=mipsisa32 901e24f450bSmrg vendor=sde 902e24f450bSmrg basic_os=${basic_os:-elf} 90329459361Smrg ;; 904e24f450bSmrg simso-wrs) 905e24f450bSmrg cpu=sparclite 906e24f450bSmrg vendor=wrs 907e24f450bSmrg basic_os=vxworks 90829459361Smrg ;; 909e24f450bSmrg tower | tower-32) 910e24f450bSmrg cpu=m68k 911e24f450bSmrg vendor=ncr 91229459361Smrg ;; 913e24f450bSmrg vpp*|vx|vx-*) 914e24f450bSmrg cpu=f301 915e24f450bSmrg vendor=fujitsu 91629459361Smrg ;; 917e24f450bSmrg w65) 918e24f450bSmrg cpu=w65 919e24f450bSmrg vendor=wdc 92029459361Smrg ;; 921e24f450bSmrg w89k-*) 922e24f450bSmrg cpu=hppa1.1 923e24f450bSmrg vendor=winbond 924e24f450bSmrg basic_os=proelf 92529459361Smrg ;; 926e24f450bSmrg none) 927e24f450bSmrg cpu=none 928e24f450bSmrg vendor=none 92929459361Smrg ;; 930e24f450bSmrg leon|leon[3-9]) 931e24f450bSmrg cpu=sparc 932e24f450bSmrg vendor=$basic_machine 93329459361Smrg ;; 934e24f450bSmrg leon-*|leon[3-9]-*) 935e24f450bSmrg cpu=sparc 936e24f450bSmrg vendor=`echo "$basic_machine" | sed 's/-.*//'` 93729459361Smrg ;; 938e24f450bSmrg 939e24f450bSmrg *-*) 940e24f450bSmrg # shellcheck disable=SC2162 941e24f450bSmrg saved_IFS=$IFS 942e24f450bSmrg IFS="-" read cpu vendor <<EOF 943e24f450bSmrg$basic_machine 944e24f450bSmrgEOF 945e24f450bSmrg IFS=$saved_IFS 94629459361Smrg ;; 947eb323118Smrg # We use 'pc' rather than 'unknown' 948e24f450bSmrg # because (1) that's what they normally are, and 949e24f450bSmrg # (2) the word "unknown" tends to confuse beginning users. 950e24f450bSmrg i*86 | x86_64) 951e24f450bSmrg cpu=$basic_machine 952e24f450bSmrg vendor=pc 95329459361Smrg ;; 954e24f450bSmrg # These rules are duplicated from below for sake of the special case above; 955e24f450bSmrg # i.e. things that normalized to x86 arches should also default to "pc" 956e24f450bSmrg pc98) 957e24f450bSmrg cpu=i386 958e24f450bSmrg vendor=pc 9595dd2154eSmrg ;; 960e24f450bSmrg x64 | amd64) 961e24f450bSmrg cpu=x86_64 962e24f450bSmrg vendor=pc 96329459361Smrg ;; 964e24f450bSmrg # Recognize the basic CPU types without company name. 965e24f450bSmrg *) 966e24f450bSmrg cpu=$basic_machine 967e24f450bSmrg vendor=unknown 96829459361Smrg ;; 969e24f450bSmrgesac 970e24f450bSmrg 971e24f450bSmrgunset -v basic_machine 972e24f450bSmrg 973e24f450bSmrg# Decode basic machines in the full and proper CPU-Company form. 974e24f450bSmrgcase $cpu-$vendor in 975e24f450bSmrg # Here we handle the default manufacturer of certain CPU types in canonical form. It is in 976e24f450bSmrg # some cases the only manufacturer, in others, it is the most popular. 977e24f450bSmrg craynv-unknown) 978e24f450bSmrg vendor=cray 979e24f450bSmrg basic_os=${basic_os:-unicosmp} 98029459361Smrg ;; 981e24f450bSmrg c90-unknown | c90-cray) 982e24f450bSmrg vendor=cray 983e24f450bSmrg basic_os=${Basic_os:-unicos} 98429459361Smrg ;; 985e24f450bSmrg fx80-unknown) 986e24f450bSmrg vendor=alliant 98729459361Smrg ;; 988e24f450bSmrg romp-unknown) 989e24f450bSmrg vendor=ibm 99029459361Smrg ;; 991e24f450bSmrg mmix-unknown) 992e24f450bSmrg vendor=knuth 99329459361Smrg ;; 994e24f450bSmrg microblaze-unknown | microblazeel-unknown) 995e24f450bSmrg vendor=xilinx 99629459361Smrg ;; 997e24f450bSmrg rs6000-unknown) 998e24f450bSmrg vendor=ibm 99929459361Smrg ;; 1000e24f450bSmrg vax-unknown) 1001e24f450bSmrg vendor=dec 100229459361Smrg ;; 1003e24f450bSmrg pdp11-unknown) 1004e24f450bSmrg vendor=dec 100529459361Smrg ;; 1006e24f450bSmrg we32k-unknown) 1007e24f450bSmrg vendor=att 100829459361Smrg ;; 1009e24f450bSmrg cydra-unknown) 1010e24f450bSmrg vendor=cydrome 101129459361Smrg ;; 1012e24f450bSmrg i370-ibm*) 1013e24f450bSmrg vendor=ibm 101429459361Smrg ;; 1015e24f450bSmrg orion-unknown) 1016e24f450bSmrg vendor=highlevel 101729459361Smrg ;; 1018e24f450bSmrg xps-unknown | xps100-unknown) 1019e24f450bSmrg cpu=xps100 1020e24f450bSmrg vendor=honeywell 102147202d7bSmrg ;; 1022e24f450bSmrg 1023e24f450bSmrg # Here we normalize CPU types with a missing or matching vendor 1024eb323118Smrg armh-unknown | armh-alt) 1025eb323118Smrg cpu=armv7l 1026eb323118Smrg vendor=alt 1027eb323118Smrg basic_os=${basic_os:-linux-gnueabihf} 1028eb323118Smrg ;; 1029e24f450bSmrg dpx20-unknown | dpx20-bull) 1030e24f450bSmrg cpu=rs6000 1031e24f450bSmrg vendor=bull 1032e24f450bSmrg basic_os=${basic_os:-bosx} 103329459361Smrg ;; 1034e24f450bSmrg 1035e24f450bSmrg # Here we normalize CPU types irrespective of the vendor 1036e24f450bSmrg amd64-*) 1037e24f450bSmrg cpu=x86_64 103829459361Smrg ;; 1039e24f450bSmrg blackfin-*) 1040e24f450bSmrg cpu=bfin 1041e24f450bSmrg basic_os=linux 104229459361Smrg ;; 1043e24f450bSmrg c54x-*) 1044e24f450bSmrg cpu=tic54x 104529459361Smrg ;; 1046e24f450bSmrg c55x-*) 1047e24f450bSmrg cpu=tic55x 104829459361Smrg ;; 1049e24f450bSmrg c6x-*) 1050e24f450bSmrg cpu=tic6x 105129459361Smrg ;; 1052e24f450bSmrg e500v[12]-*) 1053e24f450bSmrg cpu=powerpc 1054e24f450bSmrg basic_os=${basic_os}"spe" 105529459361Smrg ;; 1056e24f450bSmrg mips3*-*) 1057e24f450bSmrg cpu=mips64 105829459361Smrg ;; 1059e24f450bSmrg ms1-*) 1060e24f450bSmrg cpu=mt 106129459361Smrg ;; 1062e24f450bSmrg m68knommu-*) 1063e24f450bSmrg cpu=m68k 1064e24f450bSmrg basic_os=linux 106529459361Smrg ;; 1066e24f450bSmrg m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) 1067e24f450bSmrg cpu=s12z 106829459361Smrg ;; 1069e24f450bSmrg openrisc-*) 1070e24f450bSmrg cpu=or32 107129459361Smrg ;; 1072e24f450bSmrg parisc-*) 1073e24f450bSmrg cpu=hppa 1074e24f450bSmrg basic_os=linux 107529459361Smrg ;; 1076e24f450bSmrg pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) 1077e24f450bSmrg cpu=i586 107829459361Smrg ;; 1079eb323118Smrg pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*) 1080e24f450bSmrg cpu=i686 1081fa2b3b63Smrg ;; 1082e24f450bSmrg pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) 1083e24f450bSmrg cpu=i686 108429459361Smrg ;; 1085e24f450bSmrg pentium4-*) 1086e24f450bSmrg cpu=i786 108729459361Smrg ;; 1088e24f450bSmrg pc98-*) 1089e24f450bSmrg cpu=i386 109029459361Smrg ;; 1091e24f450bSmrg ppc-* | ppcbe-*) 1092e24f450bSmrg cpu=powerpc 109329459361Smrg ;; 1094e24f450bSmrg ppcle-* | powerpclittle-*) 1095e24f450bSmrg cpu=powerpcle 10965dd2154eSmrg ;; 1097e24f450bSmrg ppc64-*) 1098e24f450bSmrg cpu=powerpc64 109929459361Smrg ;; 1100e24f450bSmrg ppc64le-* | powerpc64little-*) 1101e24f450bSmrg cpu=powerpc64le 110229459361Smrg ;; 1103e24f450bSmrg sb1-*) 1104e24f450bSmrg cpu=mipsisa64sb1 110547202d7bSmrg ;; 1106e24f450bSmrg sb1el-*) 1107e24f450bSmrg cpu=mipsisa64sb1el 110829459361Smrg ;; 1109e24f450bSmrg sh5e[lb]-*) 1110e24f450bSmrg cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` 111129459361Smrg ;; 1112e24f450bSmrg spur-*) 1113e24f450bSmrg cpu=spur 111429459361Smrg ;; 1115e24f450bSmrg strongarm-* | thumb-*) 1116e24f450bSmrg cpu=arm 111729459361Smrg ;; 1118e24f450bSmrg tx39-*) 1119e24f450bSmrg cpu=mipstx39 112029459361Smrg ;; 1121e24f450bSmrg tx39el-*) 1122e24f450bSmrg cpu=mipstx39el 112329459361Smrg ;; 1124e24f450bSmrg x64-*) 1125e24f450bSmrg cpu=x86_64 112629459361Smrg ;; 1127e24f450bSmrg xscale-* | xscalee[bl]-*) 1128e24f450bSmrg cpu=`echo "$cpu" | sed 's/^xscale/arm/'` 112929459361Smrg ;; 1130eb323118Smrg arm64-* | aarch64le-*) 1131e24f450bSmrg cpu=aarch64 113229459361Smrg ;; 1133e24f450bSmrg 1134e24f450bSmrg # Recognize the canonical CPU Types that limit and/or modify the 1135e24f450bSmrg # company names they are paired with. 1136e24f450bSmrg cr16-*) 1137e24f450bSmrg basic_os=${basic_os:-elf} 113829459361Smrg ;; 1139e24f450bSmrg crisv32-* | etraxfs*-*) 1140e24f450bSmrg cpu=crisv32 1141e24f450bSmrg vendor=axis 114229459361Smrg ;; 1143e24f450bSmrg cris-* | etrax*-*) 1144e24f450bSmrg cpu=cris 1145e24f450bSmrg vendor=axis 114629459361Smrg ;; 1147e24f450bSmrg crx-*) 1148e24f450bSmrg basic_os=${basic_os:-elf} 114929459361Smrg ;; 1150e24f450bSmrg neo-tandem) 1151e24f450bSmrg cpu=neo 1152e24f450bSmrg vendor=tandem 115329459361Smrg ;; 1154e24f450bSmrg nse-tandem) 1155e24f450bSmrg cpu=nse 1156e24f450bSmrg vendor=tandem 115729459361Smrg ;; 1158e24f450bSmrg nsr-tandem) 1159e24f450bSmrg cpu=nsr 1160e24f450bSmrg vendor=tandem 116129459361Smrg ;; 1162e24f450bSmrg nsv-tandem) 1163e24f450bSmrg cpu=nsv 1164e24f450bSmrg vendor=tandem 116529459361Smrg ;; 1166e24f450bSmrg nsx-tandem) 1167e24f450bSmrg cpu=nsx 1168e24f450bSmrg vendor=tandem 116929459361Smrg ;; 1170e24f450bSmrg mipsallegrexel-sony) 1171e24f450bSmrg cpu=mipsallegrexel 1172e24f450bSmrg vendor=sony 117329459361Smrg ;; 1174e24f450bSmrg tile*-*) 1175e24f450bSmrg basic_os=${basic_os:-linux-gnu} 1176e24f450bSmrg ;; 1177e24f450bSmrg 117829459361Smrg *) 1179e24f450bSmrg # Recognize the canonical CPU types that are allowed with any 1180e24f450bSmrg # company name. 1181e24f450bSmrg case $cpu in 1182e24f450bSmrg 1750a | 580 \ 1183e24f450bSmrg | a29k \ 1184eb323118Smrg | aarch64 | aarch64_be | aarch64c | arm64ec \ 1185e24f450bSmrg | abacus \ 1186e24f450bSmrg | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ 1187e24f450bSmrg | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ 1188e24f450bSmrg | alphapca5[67] | alpha64pca5[67] \ 1189e24f450bSmrg | am33_2.0 \ 1190e24f450bSmrg | amdgcn \ 1191e24f450bSmrg | arc | arceb | arc32 | arc64 \ 1192e24f450bSmrg | arm | arm[lb]e | arme[lb] | armv* \ 1193e24f450bSmrg | avr | avr32 \ 1194e24f450bSmrg | asmjs \ 1195e24f450bSmrg | ba \ 1196e24f450bSmrg | be32 | be64 \ 1197e24f450bSmrg | bfin | bpf | bs2000 \ 1198e24f450bSmrg | c[123]* | c30 | [cjt]90 | c4x \ 1199e24f450bSmrg | c8051 | clipper | craynv | csky | cydra \ 1200e24f450bSmrg | d10v | d30v | dlx | dsp16xx \ 1201e24f450bSmrg | e2k | elxsi | epiphany \ 1202e24f450bSmrg | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ 1203eb323118Smrg | javascript \ 1204e24f450bSmrg | h8300 | h8500 \ 1205e24f450bSmrg | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ 1206e24f450bSmrg | hexagon \ 1207e24f450bSmrg | i370 | i*86 | i860 | i960 | ia16 | ia64 \ 1208e24f450bSmrg | ip2k | iq2000 \ 1209e24f450bSmrg | k1om \ 1210eb323118Smrg | kvx \ 1211e24f450bSmrg | le32 | le64 \ 1212e24f450bSmrg | lm32 \ 1213eb323118Smrg | loongarch32 | loongarch64 \ 1214e24f450bSmrg | m32c | m32r | m32rle \ 1215e24f450bSmrg | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ 1216e24f450bSmrg | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ 1217e24f450bSmrg | m88110 | m88k | maxq | mb | mcore | mep | metag \ 1218e24f450bSmrg | microblaze | microblazeel \ 1219eb323118Smrg | mips* \ 1220e24f450bSmrg | mmix \ 1221e24f450bSmrg | mn10200 | mn10300 \ 1222e24f450bSmrg | moxie \ 1223e24f450bSmrg | mt \ 1224e24f450bSmrg | msp430 \ 1225eb323118Smrg | nanomips* \ 1226e24f450bSmrg | nds32 | nds32le | nds32be \ 1227e24f450bSmrg | nfp \ 1228e24f450bSmrg | nios | nios2 | nios2eb | nios2el \ 1229e24f450bSmrg | none | np1 | ns16k | ns32k | nvptx \ 1230e24f450bSmrg | open8 \ 1231e24f450bSmrg | or1k* \ 1232e24f450bSmrg | or32 \ 1233e24f450bSmrg | orion \ 1234e24f450bSmrg | picochip \ 1235e24f450bSmrg | pdp10 | pdp11 | pj | pjl | pn | power \ 1236e24f450bSmrg | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ 1237e24f450bSmrg | pru \ 1238e24f450bSmrg | pyramid \ 1239e24f450bSmrg | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ 1240e24f450bSmrg | rl78 | romp | rs6000 | rx \ 1241e24f450bSmrg | s390 | s390x \ 1242e24f450bSmrg | score \ 1243e24f450bSmrg | sh | shl \ 1244e24f450bSmrg | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ 1245e24f450bSmrg | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ 1246e24f450bSmrg | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ 1247e24f450bSmrg | sparclite \ 1248e24f450bSmrg | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ 1249e24f450bSmrg | spu \ 1250e24f450bSmrg | tahoe \ 1251e24f450bSmrg | thumbv7* \ 1252e24f450bSmrg | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ 1253e24f450bSmrg | tron \ 1254e24f450bSmrg | ubicom32 \ 1255e24f450bSmrg | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ 1256e24f450bSmrg | vax \ 1257eb323118Smrg | vc4 \ 1258e24f450bSmrg | visium \ 1259e24f450bSmrg | w65 \ 1260e24f450bSmrg | wasm32 | wasm64 \ 1261e24f450bSmrg | we32k \ 1262e24f450bSmrg | x86 | x86_64 | xc16x | xgate | xps100 \ 1263e24f450bSmrg | xstormy16 | xtensa* \ 1264e24f450bSmrg | ymp \ 1265e24f450bSmrg | z8k | z80) 1266e24f450bSmrg ;; 1267e24f450bSmrg 1268e24f450bSmrg *) 1269eb323118Smrg echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 1270e24f450bSmrg exit 1 1271e24f450bSmrg ;; 1272e24f450bSmrg esac 127329459361Smrg ;; 127429459361Smrgesac 127529459361Smrg 127629459361Smrg# Here we canonicalize certain aliases for manufacturers. 1277e24f450bSmrgcase $vendor in 1278e24f450bSmrg digital*) 1279e24f450bSmrg vendor=dec 128029459361Smrg ;; 1281e24f450bSmrg commodore*) 1282e24f450bSmrg vendor=cbm 128329459361Smrg ;; 128429459361Smrg *) 128529459361Smrg ;; 128629459361Smrgesac 128729459361Smrg 128829459361Smrg# Decode manufacturer-specific aliases for certain operating systems. 128929459361Smrg 1290eb323118Smrgif test x"$basic_os" != x 129129459361Smrgthen 1292e24f450bSmrg 1293eb323118Smrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just 1294e24f450bSmrg# set os. 1295eb323118Smrgobj= 1296e24f450bSmrgcase $basic_os in 1297e24f450bSmrg gnu/linux*) 1298e24f450bSmrg kernel=linux 1299e24f450bSmrg os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` 1300e24f450bSmrg ;; 1301e24f450bSmrg os2-emx) 1302e24f450bSmrg kernel=os2 1303e24f450bSmrg os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` 1304e24f450bSmrg ;; 1305e24f450bSmrg nto-qnx*) 1306e24f450bSmrg kernel=nto 1307e24f450bSmrg os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` 1308e24f450bSmrg ;; 1309e24f450bSmrg *-*) 1310e24f450bSmrg # shellcheck disable=SC2162 1311e24f450bSmrg saved_IFS=$IFS 1312e24f450bSmrg IFS="-" read kernel os <<EOF 1313e24f450bSmrg$basic_os 1314e24f450bSmrgEOF 1315e24f450bSmrg IFS=$saved_IFS 1316e24f450bSmrg ;; 1317e24f450bSmrg # Default OS when just kernel was specified 1318e24f450bSmrg nto*) 1319e24f450bSmrg kernel=nto 1320e24f450bSmrg os=`echo "$basic_os" | sed -e 's|nto|qnx|'` 1321e24f450bSmrg ;; 1322e24f450bSmrg linux*) 1323e24f450bSmrg kernel=linux 1324e24f450bSmrg os=`echo "$basic_os" | sed -e 's|linux|gnu|'` 13254fbc8bdeSmrg ;; 1326eb323118Smrg managarm*) 1327eb323118Smrg kernel=managarm 1328eb323118Smrg os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'` 1329eb323118Smrg ;; 1330e24f450bSmrg *) 1331e24f450bSmrg kernel= 1332e24f450bSmrg os=$basic_os 133329459361Smrg ;; 1334e24f450bSmrgesac 1335e24f450bSmrg 1336e24f450bSmrg# Now, normalize the OS (knowing we just have one component, it's not a kernel, 1337e24f450bSmrg# etc.) 1338e24f450bSmrgcase $os in 1339e24f450bSmrg # First match some system type aliases that might get confused 1340e24f450bSmrg # with valid system types. 1341e24f450bSmrg # solaris* is a basic system type, with this one exception. 1342e24f450bSmrg auroraux) 1343e24f450bSmrg os=auroraux 134429459361Smrg ;; 1345e24f450bSmrg bluegene*) 1346e24f450bSmrg os=cnk 134729459361Smrg ;; 1348e24f450bSmrg solaris1 | solaris1.*) 1349e24f450bSmrg os=`echo "$os" | sed -e 's|solaris1|sunos4|'` 135029459361Smrg ;; 1351e24f450bSmrg solaris) 1352e24f450bSmrg os=solaris2 135329459361Smrg ;; 1354e24f450bSmrg unixware*) 1355e24f450bSmrg os=sysv4.2uw 135629459361Smrg ;; 1357e24f450bSmrg # es1800 is here to avoid being matched by es* (a different OS) 1358e24f450bSmrg es1800*) 1359e24f450bSmrg os=ose 136029459361Smrg ;; 1361e24f450bSmrg # Some version numbers need modification 1362e24f450bSmrg chorusos*) 1363e24f450bSmrg os=chorusos 136429459361Smrg ;; 1365e24f450bSmrg isc) 1366e24f450bSmrg os=isc2.2 136729459361Smrg ;; 1368e24f450bSmrg sco6) 1369e24f450bSmrg os=sco5v6 137029459361Smrg ;; 1371e24f450bSmrg sco5) 1372e24f450bSmrg os=sco3.2v5 137329459361Smrg ;; 1374e24f450bSmrg sco4) 1375e24f450bSmrg os=sco3.2v4 137629459361Smrg ;; 1377e24f450bSmrg sco3.2.[4-9]*) 1378e24f450bSmrg os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` 137929459361Smrg ;; 1380e24f450bSmrg sco*v* | scout) 1381e24f450bSmrg # Don't match below 138229459361Smrg ;; 1383e24f450bSmrg sco*) 1384e24f450bSmrg os=sco3.2v2 138529459361Smrg ;; 1386e24f450bSmrg psos*) 1387e24f450bSmrg os=psos 138829459361Smrg ;; 1389e24f450bSmrg qnx*) 1390e24f450bSmrg os=qnx 139129459361Smrg ;; 1392e24f450bSmrg hiux*) 1393e24f450bSmrg os=hiuxwe2 139429459361Smrg ;; 1395e24f450bSmrg lynx*178) 1396e24f450bSmrg os=lynxos178 139729459361Smrg ;; 1398e24f450bSmrg lynx*5) 1399e24f450bSmrg os=lynxos5 140029459361Smrg ;; 1401e24f450bSmrg lynxos*) 1402e24f450bSmrg # don't get caught up in next wildcard 140329459361Smrg ;; 1404e24f450bSmrg lynx*) 1405e24f450bSmrg os=lynxos 140629459361Smrg ;; 1407e24f450bSmrg mac[0-9]*) 1408e24f450bSmrg os=`echo "$os" | sed -e 's|mac|macos|'` 140929459361Smrg ;; 1410e24f450bSmrg opened*) 1411e24f450bSmrg os=openedition 141229459361Smrg ;; 1413e24f450bSmrg os400*) 1414e24f450bSmrg os=os400 141529459361Smrg ;; 1416e24f450bSmrg sunos5*) 1417e24f450bSmrg os=`echo "$os" | sed -e 's|sunos5|solaris2|'` 141829459361Smrg ;; 1419e24f450bSmrg sunos6*) 1420e24f450bSmrg os=`echo "$os" | sed -e 's|sunos6|solaris3|'` 142129459361Smrg ;; 1422e24f450bSmrg wince*) 1423e24f450bSmrg os=wince 142429459361Smrg ;; 1425e24f450bSmrg utek*) 1426e24f450bSmrg os=bsd 142729459361Smrg ;; 1428e24f450bSmrg dynix*) 1429e24f450bSmrg os=bsd 143029459361Smrg ;; 1431e24f450bSmrg acis*) 1432e24f450bSmrg os=aos 143329459361Smrg ;; 1434e24f450bSmrg atheos*) 1435e24f450bSmrg os=atheos 143629459361Smrg ;; 1437e24f450bSmrg syllable*) 1438e24f450bSmrg os=syllable 143929459361Smrg ;; 1440e24f450bSmrg 386bsd) 1441e24f450bSmrg os=bsd 144229459361Smrg ;; 1443e24f450bSmrg ctix* | uts*) 1444e24f450bSmrg os=sysv 144529459361Smrg ;; 1446e24f450bSmrg nova*) 1447e24f450bSmrg os=rtmk-nova 144829459361Smrg ;; 1449e24f450bSmrg ns2) 1450e24f450bSmrg os=nextstep2 145129459361Smrg ;; 1452e24f450bSmrg # Preserve the version number of sinix5. 1453e24f450bSmrg sinix5.*) 1454e24f450bSmrg os=`echo "$os" | sed -e 's|sinix|sysv|'` 145529459361Smrg ;; 1456e24f450bSmrg sinix*) 1457e24f450bSmrg os=sysv4 145829459361Smrg ;; 1459e24f450bSmrg tpf*) 1460e24f450bSmrg os=tpf 146129459361Smrg ;; 1462e24f450bSmrg triton*) 1463e24f450bSmrg os=sysv3 146429459361Smrg ;; 1465e24f450bSmrg oss*) 1466e24f450bSmrg os=sysv3 146729459361Smrg ;; 1468e24f450bSmrg svr4*) 1469e24f450bSmrg os=sysv4 147029459361Smrg ;; 1471e24f450bSmrg svr3) 1472e24f450bSmrg os=sysv3 147329459361Smrg ;; 1474e24f450bSmrg sysvr4) 1475e24f450bSmrg os=sysv4 147647202d7bSmrg ;; 1477e24f450bSmrg ose*) 1478e24f450bSmrg os=ose 14795dd2154eSmrg ;; 1480e24f450bSmrg *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) 1481e24f450bSmrg os=mint 1482fa2b3b63Smrg ;; 1483e24f450bSmrg dicos*) 1484e24f450bSmrg os=dicos 1485e24f450bSmrg ;; 1486e24f450bSmrg pikeos*) 1487e24f450bSmrg # Until real need of OS specific support for 1488e24f450bSmrg # particular features comes up, bare metal 1489e24f450bSmrg # configurations are quite functional. 1490e24f450bSmrg case $cpu in 1491e24f450bSmrg arm*) 1492e24f450bSmrg os=eabi 1493e24f450bSmrg ;; 1494e24f450bSmrg *) 1495eb323118Smrg os= 1496eb323118Smrg obj=elf 1497e24f450bSmrg ;; 1498e24f450bSmrg esac 149929459361Smrg ;; 1500eb323118Smrg aout* | coff* | elf* | pe*) 1501eb323118Smrg # These are machine code file formats, not OSes 1502eb323118Smrg obj=$os 1503eb323118Smrg os= 1504eb323118Smrg ;; 150529459361Smrg *) 1506e24f450bSmrg # No normalization, but not necessarily accepted, that comes below. 150729459361Smrg ;; 150829459361Smrgesac 1509e24f450bSmrg 151029459361Smrgelse 151129459361Smrg 151229459361Smrg# Here we handle the default operating systems that come with various machines. 151329459361Smrg# The value should be what the vendor currently ships out the door with their 151429459361Smrg# machine or put another way, the most popular os provided with the machine. 151529459361Smrg 151629459361Smrg# Note that if you're going to try to match "-MANUFACTURER" here (say, 151729459361Smrg# "-sun"), then you have to tell the case statement up towards the top 151829459361Smrg# that MANUFACTURER isn't an operating system. Otherwise, code above 151929459361Smrg# will signal an error saying that MANUFACTURER isn't an operating 152029459361Smrg# system, and we'll never get to this point. 152129459361Smrg 1522e24f450bSmrgkernel= 1523eb323118Smrgobj= 1524e24f450bSmrgcase $cpu-$vendor in 15255dd2154eSmrg score-*) 1526eb323118Smrg os= 1527eb323118Smrg obj=elf 152829459361Smrg ;; 15295dd2154eSmrg spu-*) 1530eb323118Smrg os= 1531eb323118Smrg obj=elf 153229459361Smrg ;; 153329459361Smrg *-acorn) 1534e24f450bSmrg os=riscix1.2 153529459361Smrg ;; 153629459361Smrg arm*-rebel) 1537e24f450bSmrg kernel=linux 1538e24f450bSmrg os=gnu 153929459361Smrg ;; 154029459361Smrg arm*-semi) 1541eb323118Smrg os= 1542eb323118Smrg obj=aout 154329459361Smrg ;; 15445dd2154eSmrg c4x-* | tic4x-*) 1545eb323118Smrg os= 1546eb323118Smrg obj=coff 154729459361Smrg ;; 1548fb4ebca8Smrg c8051-*) 1549eb323118Smrg os= 1550eb323118Smrg obj=elf 1551e24f450bSmrg ;; 1552e24f450bSmrg clipper-intergraph) 1553e24f450bSmrg os=clix 1554fb4ebca8Smrg ;; 1555fb4ebca8Smrg hexagon-*) 1556eb323118Smrg os= 1557eb323118Smrg obj=elf 1558fb4ebca8Smrg ;; 15594fbc8bdeSmrg tic54x-*) 1560eb323118Smrg os= 1561eb323118Smrg obj=coff 15624fbc8bdeSmrg ;; 15634fbc8bdeSmrg tic55x-*) 1564eb323118Smrg os= 1565eb323118Smrg obj=coff 15664fbc8bdeSmrg ;; 15674fbc8bdeSmrg tic6x-*) 1568eb323118Smrg os= 1569eb323118Smrg obj=coff 15704fbc8bdeSmrg ;; 157129459361Smrg # This must come before the *-dec entry. 157229459361Smrg pdp10-*) 1573e24f450bSmrg os=tops20 157429459361Smrg ;; 157529459361Smrg pdp11-*) 1576e24f450bSmrg os=none 157729459361Smrg ;; 157829459361Smrg *-dec | vax-*) 1579e24f450bSmrg os=ultrix4.2 158029459361Smrg ;; 158129459361Smrg m68*-apollo) 1582e24f450bSmrg os=domain 158329459361Smrg ;; 158429459361Smrg i386-sun) 1585e24f450bSmrg os=sunos4.0.2 158629459361Smrg ;; 158729459361Smrg m68000-sun) 1588e24f450bSmrg os=sunos3 158929459361Smrg ;; 159029459361Smrg m68*-cisco) 1591eb323118Smrg os= 1592eb323118Smrg obj=aout 159329459361Smrg ;; 15945dd2154eSmrg mep-*) 1595eb323118Smrg os= 1596eb323118Smrg obj=elf 159747202d7bSmrg ;; 159829459361Smrg mips*-cisco) 1599eb323118Smrg os= 1600eb323118Smrg obj=elf 160129459361Smrg ;; 1602eb323118Smrg mips*-*|nanomips*-*) 1603eb323118Smrg os= 1604eb323118Smrg obj=elf 160529459361Smrg ;; 160629459361Smrg or32-*) 1607eb323118Smrg os= 1608eb323118Smrg obj=coff 160929459361Smrg ;; 161029459361Smrg *-tti) # must be before sparc entry or we get the wrong os. 1611e24f450bSmrg os=sysv3 161229459361Smrg ;; 161329459361Smrg sparc-* | *-sun) 1614e24f450bSmrg os=sunos4.1.1 161529459361Smrg ;; 1616fa2b3b63Smrg pru-*) 1617eb323118Smrg os= 1618eb323118Smrg obj=elf 1619fa2b3b63Smrg ;; 162029459361Smrg *-be) 1621e24f450bSmrg os=beos 162229459361Smrg ;; 162329459361Smrg *-ibm) 1624e24f450bSmrg os=aix 162529459361Smrg ;; 16265dd2154eSmrg *-knuth) 1627e24f450bSmrg os=mmixware 162829459361Smrg ;; 162929459361Smrg *-wec) 1630e24f450bSmrg os=proelf 163129459361Smrg ;; 163229459361Smrg *-winbond) 1633e24f450bSmrg os=proelf 163429459361Smrg ;; 163529459361Smrg *-oki) 1636e24f450bSmrg os=proelf 163729459361Smrg ;; 163829459361Smrg *-hp) 1639e24f450bSmrg os=hpux 164029459361Smrg ;; 164129459361Smrg *-hitachi) 1642e24f450bSmrg os=hiux 164329459361Smrg ;; 164429459361Smrg i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) 1645e24f450bSmrg os=sysv 164629459361Smrg ;; 164729459361Smrg *-cbm) 1648e24f450bSmrg os=amigaos 164929459361Smrg ;; 165029459361Smrg *-dg) 1651e24f450bSmrg os=dgux 165229459361Smrg ;; 165329459361Smrg *-dolphin) 1654e24f450bSmrg os=sysv3 165529459361Smrg ;; 165629459361Smrg m68k-ccur) 1657e24f450bSmrg os=rtu 165829459361Smrg ;; 165929459361Smrg m88k-omron*) 1660e24f450bSmrg os=luna 166129459361Smrg ;; 1662e24f450bSmrg *-next) 1663e24f450bSmrg os=nextstep 166429459361Smrg ;; 166529459361Smrg *-sequent) 1666e24f450bSmrg os=ptx 166729459361Smrg ;; 166829459361Smrg *-crds) 1669e24f450bSmrg os=unos 167029459361Smrg ;; 167129459361Smrg *-ns) 1672e24f450bSmrg os=genix 167329459361Smrg ;; 167429459361Smrg i370-*) 1675e24f450bSmrg os=mvs 167629459361Smrg ;; 167729459361Smrg *-gould) 1678e24f450bSmrg os=sysv 167929459361Smrg ;; 168029459361Smrg *-highlevel) 1681e24f450bSmrg os=bsd 168229459361Smrg ;; 168329459361Smrg *-encore) 1684e24f450bSmrg os=bsd 168529459361Smrg ;; 168629459361Smrg *-sgi) 1687e24f450bSmrg os=irix 168829459361Smrg ;; 168929459361Smrg *-siemens) 1690e24f450bSmrg os=sysv4 169129459361Smrg ;; 169229459361Smrg *-masscomp) 1693e24f450bSmrg os=rtu 169429459361Smrg ;; 169529459361Smrg f30[01]-fujitsu | f700-fujitsu) 1696e24f450bSmrg os=uxpv 169729459361Smrg ;; 169829459361Smrg *-rom68k) 1699eb323118Smrg os= 1700eb323118Smrg obj=coff 170129459361Smrg ;; 170229459361Smrg *-*bug) 1703eb323118Smrg os= 1704eb323118Smrg obj=coff 170529459361Smrg ;; 170629459361Smrg *-apple) 1707e24f450bSmrg os=macos 170829459361Smrg ;; 170929459361Smrg *-atari*) 1710e24f450bSmrg os=mint 1711e24f450bSmrg ;; 1712e24f450bSmrg *-wrs) 1713e24f450bSmrg os=vxworks 171429459361Smrg ;; 171529459361Smrg *) 1716e24f450bSmrg os=none 171729459361Smrg ;; 171829459361Smrgesac 1719e24f450bSmrg 172029459361Smrgfi 172129459361Smrg 1722eb323118Smrg# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). 1723eb323118Smrg 1724e24f450bSmrgcase $os in 1725e24f450bSmrg # Sometimes we do "kernel-libc", so those need to count as OSes. 1726eb323118Smrg llvm* | musl* | newlib* | relibc* | uclibc*) 1727e24f450bSmrg ;; 1728e24f450bSmrg # Likewise for "kernel-abi" 1729e24f450bSmrg eabi* | gnueabi*) 1730e24f450bSmrg ;; 1731e24f450bSmrg # VxWorks passes extra cpu info in the 4th filed. 1732e24f450bSmrg simlinux | simwindows | spe) 1733e24f450bSmrg ;; 1734eb323118Smrg # See `case $cpu-$os` validation below 1735eb323118Smrg ghcjs) 1736eb323118Smrg ;; 1737e24f450bSmrg # Now accept the basic system types. 1738e24f450bSmrg # The portable systems comes first. 1739e24f450bSmrg # Each alternative MUST end in a * to match a version number. 1740e24f450bSmrg gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ 1741e24f450bSmrg | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ 1742e24f450bSmrg | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ 1743e24f450bSmrg | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ 1744e24f450bSmrg | hiux* | abug | nacl* | netware* | windows* \ 1745eb323118Smrg | os9* | macos* | osx* | ios* | tvos* | watchos* \ 1746e24f450bSmrg | mpw* | magic* | mmixware* | mon960* | lnews* \ 1747e24f450bSmrg | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ 1748e24f450bSmrg | aos* | aros* | cloudabi* | sortix* | twizzler* \ 1749e24f450bSmrg | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ 1750e24f450bSmrg | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ 1751e24f450bSmrg | mirbsd* | netbsd* | dicos* | openedition* | ose* \ 1752e24f450bSmrg | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ 1753e24f450bSmrg | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ 1754eb323118Smrg | bosx* | nextstep* | cxux* | oabi* \ 1755eb323118Smrg | ptx* | ecoff* | winnt* | domain* | vsta* \ 1756e24f450bSmrg | udi* | lites* | ieee* | go32* | aux* | hcos* \ 1757e24f450bSmrg | chorusrdb* | cegcc* | glidix* | serenity* \ 1758eb323118Smrg | cygwin* | msys* | moss* | proelf* | rtems* \ 1759e24f450bSmrg | midipix* | mingw32* | mingw64* | mint* \ 1760e24f450bSmrg | uxpv* | beos* | mpeix* | udk* | moxiebox* \ 1761e24f450bSmrg | interix* | uwin* | mks* | rhapsody* | darwin* \ 1762e24f450bSmrg | openstep* | oskit* | conix* | pw32* | nonstopux* \ 1763e24f450bSmrg | storm-chaos* | tops10* | tenex* | tops20* | its* \ 1764e24f450bSmrg | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ 1765e24f450bSmrg | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ 1766e24f450bSmrg | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ 1767e24f450bSmrg | skyos* | haiku* | rdos* | toppers* | drops* | es* \ 1768e24f450bSmrg | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ 1769e24f450bSmrg | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ 1770eb323118Smrg | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ 1771eb323118Smrg | fiwix* | mlibc* | cos* | mbr* | ironclad* ) 1772e24f450bSmrg ;; 1773e24f450bSmrg # This one is extra strict with allowed versions 1774e24f450bSmrg sco3.2v2 | sco3.2v[4-9]* | sco5v6*) 1775e24f450bSmrg # Don't forget version if it is 3.2v4 or newer. 1776e24f450bSmrg ;; 1777eb323118Smrg # This refers to builds using the UEFI calling convention 1778eb323118Smrg # (which depends on the architecture) and PE file format. 1779eb323118Smrg # Note that this is both a different calling convention and 1780eb323118Smrg # different file format than that of GNU-EFI 1781eb323118Smrg # (x86_64-w64-mingw32). 1782eb323118Smrg uefi) 1783eb323118Smrg ;; 1784e24f450bSmrg none) 1785e24f450bSmrg ;; 1786eb323118Smrg kernel* | msvc* ) 1787eb323118Smrg # Restricted further below 1788eb323118Smrg ;; 1789eb323118Smrg '') 1790eb323118Smrg if test x"$obj" = x 1791eb323118Smrg then 1792eb323118Smrg echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 1793eb323118Smrg fi 1794eb323118Smrg ;; 1795e24f450bSmrg *) 1796eb323118Smrg echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 1797eb323118Smrg exit 1 1798eb323118Smrg ;; 1799eb323118Smrgesac 1800eb323118Smrg 1801eb323118Smrgcase $obj in 1802eb323118Smrg aout* | coff* | elf* | pe*) 1803eb323118Smrg ;; 1804eb323118Smrg '') 1805eb323118Smrg # empty is fine 1806eb323118Smrg ;; 1807eb323118Smrg *) 1808eb323118Smrg echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 1809eb323118Smrg exit 1 1810eb323118Smrg ;; 1811eb323118Smrgesac 1812eb323118Smrg 1813eb323118Smrg# Here we handle the constraint that a (synthetic) cpu and os are 1814eb323118Smrg# valid only in combination with each other and nowhere else. 1815eb323118Smrgcase $cpu-$os in 1816eb323118Smrg # The "javascript-unknown-ghcjs" triple is used by GHC; we 1817eb323118Smrg # accept it here in order to tolerate that, but reject any 1818eb323118Smrg # variations. 1819eb323118Smrg javascript-ghcjs) 1820eb323118Smrg ;; 1821eb323118Smrg javascript-* | *-ghcjs) 1822eb323118Smrg echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 1823e24f450bSmrg exit 1 1824e24f450bSmrg ;; 1825e24f450bSmrgesac 1826e24f450bSmrg 1827e24f450bSmrg# As a final step for OS-related things, validate the OS-kernel combination 1828e24f450bSmrg# (given a valid OS), if there is a kernel. 1829eb323118Smrgcase $kernel-$os-$obj in 1830eb323118Smrg linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ 1831eb323118Smrg | linux-mlibc*- | linux-musl*- | linux-newlib*- \ 1832eb323118Smrg | linux-relibc*- | linux-uclibc*- ) 1833eb323118Smrg ;; 1834eb323118Smrg uclinux-uclibc*- ) 1835eb323118Smrg ;; 1836eb323118Smrg managarm-mlibc*- | managarm-kernel*- ) 1837e24f450bSmrg ;; 1838eb323118Smrg windows*-msvc*-) 1839e24f450bSmrg ;; 1840eb323118Smrg -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ 1841eb323118Smrg | -uclibc*- ) 1842e24f450bSmrg # These are just libc implementations, not actual OSes, and thus 1843e24f450bSmrg # require a kernel. 1844eb323118Smrg echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 1845e24f450bSmrg exit 1 1846e24f450bSmrg ;; 1847eb323118Smrg -kernel*- ) 1848eb323118Smrg echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 1849eb323118Smrg exit 1 1850e24f450bSmrg ;; 1851eb323118Smrg *-kernel*- ) 1852eb323118Smrg echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 1853eb323118Smrg exit 1 1854e24f450bSmrg ;; 1855eb323118Smrg *-msvc*- ) 1856eb323118Smrg echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 1857eb323118Smrg exit 1 1858e24f450bSmrg ;; 1859eb323118Smrg kfreebsd*-gnu*- | kopensolaris*-gnu*-) 1860eb323118Smrg ;; 1861eb323118Smrg vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) 1862eb323118Smrg ;; 1863eb323118Smrg nto-qnx*-) 1864eb323118Smrg ;; 1865eb323118Smrg os2-emx-) 1866e24f450bSmrg ;; 1867eb323118Smrg *-eabi*- | *-gnueabi*-) 1868e24f450bSmrg ;; 1869eb323118Smrg none--*) 1870eb323118Smrg # None (no kernel, i.e. freestanding / bare metal), 1871eb323118Smrg # can be paired with an machine code file format 1872eb323118Smrg ;; 1873eb323118Smrg -*-) 1874e24f450bSmrg # Blank kernel with real OS is always fine. 1875e24f450bSmrg ;; 1876eb323118Smrg --*) 1877eb323118Smrg # Blank kernel and OS with real machine code file format is always fine. 1878eb323118Smrg ;; 1879eb323118Smrg *-*-*) 1880eb323118Smrg echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 1881e24f450bSmrg exit 1 1882e24f450bSmrg ;; 1883e24f450bSmrgesac 1884e24f450bSmrg 188529459361Smrg# Here we handle the case where we know the os, and the CPU type, but not the 188629459361Smrg# manufacturer. We pick the logical manufacturer. 1887e24f450bSmrgcase $vendor in 1888e24f450bSmrg unknown) 1889e24f450bSmrg case $cpu-$os in 1890e24f450bSmrg *-riscix*) 189129459361Smrg vendor=acorn 189229459361Smrg ;; 1893e24f450bSmrg *-sunos*) 189429459361Smrg vendor=sun 189529459361Smrg ;; 1896e24f450bSmrg *-cnk* | *-aix*) 189729459361Smrg vendor=ibm 189829459361Smrg ;; 1899e24f450bSmrg *-beos*) 190029459361Smrg vendor=be 190129459361Smrg ;; 1902e24f450bSmrg *-hpux*) 190329459361Smrg vendor=hp 190429459361Smrg ;; 1905e24f450bSmrg *-mpeix*) 190629459361Smrg vendor=hp 190729459361Smrg ;; 1908e24f450bSmrg *-hiux*) 190929459361Smrg vendor=hitachi 191029459361Smrg ;; 1911e24f450bSmrg *-unos*) 191229459361Smrg vendor=crds 191329459361Smrg ;; 1914e24f450bSmrg *-dgux*) 191529459361Smrg vendor=dg 191629459361Smrg ;; 1917e24f450bSmrg *-luna*) 191829459361Smrg vendor=omron 191929459361Smrg ;; 1920e24f450bSmrg *-genix*) 192129459361Smrg vendor=ns 192229459361Smrg ;; 1923e24f450bSmrg *-clix*) 1924e24f450bSmrg vendor=intergraph 1925e24f450bSmrg ;; 1926e24f450bSmrg *-mvs* | *-opened*) 1927e24f450bSmrg vendor=ibm 1928e24f450bSmrg ;; 1929e24f450bSmrg *-os400*) 193029459361Smrg vendor=ibm 193129459361Smrg ;; 1932e24f450bSmrg s390-* | s390x-*) 193329459361Smrg vendor=ibm 193429459361Smrg ;; 1935e24f450bSmrg *-ptx*) 193629459361Smrg vendor=sequent 193729459361Smrg ;; 1938e24f450bSmrg *-tpf*) 193929459361Smrg vendor=ibm 194029459361Smrg ;; 1941e24f450bSmrg *-vxsim* | *-vxworks* | *-windiss*) 194229459361Smrg vendor=wrs 194329459361Smrg ;; 1944e24f450bSmrg *-aux*) 194529459361Smrg vendor=apple 194629459361Smrg ;; 1947e24f450bSmrg *-hms*) 194829459361Smrg vendor=hitachi 194929459361Smrg ;; 1950e24f450bSmrg *-mpw* | *-macos*) 195129459361Smrg vendor=apple 195229459361Smrg ;; 1953e24f450bSmrg *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) 195429459361Smrg vendor=atari 195529459361Smrg ;; 1956e24f450bSmrg *-vos*) 195729459361Smrg vendor=stratus 195829459361Smrg ;; 195929459361Smrg esac 196029459361Smrg ;; 196129459361Smrgesac 196229459361Smrg 1963eb323118Smrgecho "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" 196429459361Smrgexit 196529459361Smrg 196629459361Smrg# Local variables: 1967e24f450bSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 196829459361Smrg# time-stamp-start: "timestamp='" 196929459361Smrg# time-stamp-format: "%:y-%02m-%02d" 197029459361Smrg# time-stamp-end: "'" 197129459361Smrg# End: 1972