1597410b8Schristos#! /bin/sh 2597410b8Schristos# Configuration validation subroutine script. 3*889f3bb0Schristos# Copyright 1992-2023 Free Software Foundation, Inc. 4597410b8Schristos 5924795e6Schristos# shellcheck disable=SC2006,SC2268 # see below for rationale 6924795e6Schristos 7*889f3bb0Schristostimestamp='2023-09-19' 8597410b8Schristos 9387b2cebSchristos# This file is free software; you can redistribute it and/or modify it 10387b2cebSchristos# under the terms of the GNU General Public License as published by 11924795e6Schristos# the Free Software Foundation, either version 3 of the License, or 12597410b8Schristos# (at your option) any later version. 13597410b8Schristos# 14387b2cebSchristos# This program is distributed in the hope that it will be useful, but 15387b2cebSchristos# WITHOUT ANY WARRANTY; without even the implied warranty of 16387b2cebSchristos# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17387b2cebSchristos# General Public License for more details. 18597410b8Schristos# 19597410b8Schristos# You should have received a copy of the GNU General Public License 20314094e7Schristos# along with this program; if not, see <https://www.gnu.org/licenses/>. 21597410b8Schristos# 22597410b8Schristos# As a special exception to the GNU General Public License, if you 23597410b8Schristos# distribute this file as part of a program that contains a 24597410b8Schristos# configuration script generated by Autoconf, you may include it under 25387b2cebSchristos# the same distribution terms that you use for the rest of that 26387b2cebSchristos# program. This Exception is an additional permission under section 7 27387b2cebSchristos# of the GNU General Public License, version 3 ("GPLv3"). 28597410b8Schristos 29597410b8Schristos 309d1da10bSchristos# Please send patches to <config-patches@gnu.org>. 31597410b8Schristos# 32597410b8Schristos# Configuration subroutine to validate and canonicalize a configuration type. 33597410b8Schristos# Supply the specified configuration type as an argument. 34597410b8Schristos# If it is invalid, we print an error message on stderr and exit with code 1. 35597410b8Schristos# Otherwise, we print the canonical config type on stdout and succeed. 36597410b8Schristos 37597410b8Schristos# You can get the latest version of this script from: 38924795e6Schristos# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub 39597410b8Schristos 40597410b8Schristos# This file is supposed to be the same for all GNU packages 41597410b8Schristos# and recognize all the CPU types, system types and aliases 42597410b8Schristos# that are meaningful with *any* GNU software. 43597410b8Schristos# Each package is responsible for reporting which valid configurations 44597410b8Schristos# it does not support. The user should be able to distinguish 45597410b8Schristos# a failure to support a valid configuration from a meaningless 46597410b8Schristos# configuration. 47597410b8Schristos 48597410b8Schristos# The goal of this file is to map all the various variations of a given 49597410b8Schristos# machine specification into a single specification in the form: 50597410b8Schristos# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM 51597410b8Schristos# or in some cases, the newer four-part form: 52597410b8Schristos# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM 53597410b8Schristos# It is wrong to echo any other type of specification. 54597410b8Schristos 55924795e6Schristos# The "shellcheck disable" line above the timestamp inhibits complaints 56924795e6Schristos# about features and limitations of the classic Bourne shell that were 57924795e6Schristos# superseded or lifted in POSIX. However, this script identifies a wide 58924795e6Schristos# variety of pre-POSIX systems that do not have POSIX shells at all, and 59924795e6Schristos# even some reasonably current systems (Solaris 10 as case-in-point) still 60924795e6Schristos# have a pre-POSIX /bin/sh. 61924795e6Schristos 62597410b8Schristosme=`echo "$0" | sed -e 's,.*/,,'` 63597410b8Schristos 64597410b8Schristosusage="\ 65c358683dSchristosUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS 66597410b8Schristos 67597410b8SchristosCanonicalize a configuration name. 68597410b8Schristos 69314094e7SchristosOptions: 70597410b8Schristos -h, --help print this help, then exit 71597410b8Schristos -t, --time-stamp print date of last modification, then exit 72597410b8Schristos -v, --version print version number, then exit 73597410b8Schristos 74597410b8SchristosReport bugs and patches to <config-patches@gnu.org>." 75597410b8Schristos 76597410b8Schristosversion="\ 77597410b8SchristosGNU config.sub ($timestamp) 78597410b8Schristos 79*889f3bb0SchristosCopyright 1992-2023 Free Software Foundation, Inc. 80597410b8Schristos 81597410b8SchristosThis is free software; see the source for copying conditions. There is NO 82597410b8Schristoswarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 83597410b8Schristos 84597410b8Schristoshelp=" 85*889f3bb0SchristosTry '$me --help' for more information." 86597410b8Schristos 87597410b8Schristos# Parse command line 88597410b8Schristoswhile test $# -gt 0 ; do 89597410b8Schristos case $1 in 90597410b8Schristos --time-stamp | --time* | -t ) 91597410b8Schristos echo "$timestamp" ; exit ;; 92597410b8Schristos --version | -v ) 93597410b8Schristos echo "$version" ; exit ;; 94597410b8Schristos --help | --h* | -h ) 95597410b8Schristos echo "$usage"; exit ;; 96597410b8Schristos -- ) # Stop option processing 97597410b8Schristos shift; break ;; 98597410b8Schristos - ) # Use stdin as input. 99597410b8Schristos break ;; 100597410b8Schristos -* ) 101314094e7Schristos echo "$me: invalid option $1$help" >&2 102597410b8Schristos exit 1 ;; 103597410b8Schristos 104597410b8Schristos *local*) 105597410b8Schristos # First pass through any local machine types. 106314094e7Schristos echo "$1" 107597410b8Schristos exit ;; 108597410b8Schristos 109597410b8Schristos * ) 110597410b8Schristos break ;; 111597410b8Schristos esac 112597410b8Schristosdone 113597410b8Schristos 114597410b8Schristoscase $# in 115597410b8Schristos 0) echo "$me: missing argument$help" >&2 116597410b8Schristos exit 1;; 117597410b8Schristos 1) ;; 118597410b8Schristos *) echo "$me: too many arguments$help" >&2 119597410b8Schristos exit 1;; 120597410b8Schristosesac 121597410b8Schristos 122314094e7Schristos# Split fields of configuration type 123314094e7Schristos# shellcheck disable=SC2162 124924795e6Schristossaved_IFS=$IFS 125314094e7SchristosIFS="-" read field1 field2 field3 field4 <<EOF 126314094e7Schristos$1 127314094e7SchristosEOF 128924795e6SchristosIFS=$saved_IFS 129314094e7Schristos 130314094e7Schristos# Separate into logical components for further validation 131314094e7Schristoscase $1 in 132314094e7Schristos *-*-*-*-*) 133*889f3bb0Schristos echo "Invalid configuration '$1': more than four components" >&2 134314094e7Schristos exit 1 135314094e7Schristos ;; 136314094e7Schristos *-*-*-*) 137314094e7Schristos basic_machine=$field1-$field2 138924795e6Schristos basic_os=$field3-$field4 139314094e7Schristos ;; 140314094e7Schristos *-*-*) 141314094e7Schristos # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two 142314094e7Schristos # parts 143314094e7Schristos maybe_os=$field2-$field3 144597410b8Schristos case $maybe_os in 145924795e6Schristos nto-qnx* | linux-* | uclinux-uclibc* \ 146314094e7Schristos | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ 147314094e7Schristos | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ 148*889f3bb0Schristos | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ 149*889f3bb0Schristos | windows-* ) 150314094e7Schristos basic_machine=$field1 151924795e6Schristos basic_os=$maybe_os 152597410b8Schristos ;; 153387b2cebSchristos android-linux) 154314094e7Schristos basic_machine=$field1-unknown 155924795e6Schristos basic_os=linux-android 156387b2cebSchristos ;; 157597410b8Schristos *) 158314094e7Schristos basic_machine=$field1-$field2 159924795e6Schristos basic_os=$field3 160314094e7Schristos ;; 161314094e7Schristos esac 162314094e7Schristos ;; 163314094e7Schristos *-*) 164314094e7Schristos # A lone config we happen to match not fitting any pattern 165314094e7Schristos case $field1-$field2 in 166314094e7Schristos decstation-3100) 167314094e7Schristos basic_machine=mips-dec 168924795e6Schristos basic_os= 169314094e7Schristos ;; 170314094e7Schristos *-*) 171314094e7Schristos # Second component is usually, but not always the OS 172314094e7Schristos case $field2 in 173314094e7Schristos # Prevent following clause from handling this valid os 174314094e7Schristos sun*os*) 175314094e7Schristos basic_machine=$field1 176924795e6Schristos basic_os=$field2 177924795e6Schristos ;; 178924795e6Schristos zephyr*) 179924795e6Schristos basic_machine=$field1-unknown 180924795e6Schristos basic_os=$field2 181314094e7Schristos ;; 182314094e7Schristos # Manufacturers 183314094e7Schristos dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ 184314094e7Schristos | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ 185314094e7Schristos | unicom* | ibm* | next | hp | isi* | apollo | altos* \ 186314094e7Schristos | convergent* | ncr* | news | 32* | 3600* | 3100* \ 187314094e7Schristos | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ 188314094e7Schristos | ultra | tti* | harris | dolphin | highlevel | gould \ 189314094e7Schristos | cbm | ns | masscomp | apple | axis | knuth | cray \ 190314094e7Schristos | microblaze* | sim | cisco \ 191314094e7Schristos | oki | wec | wrs | winbond) 192314094e7Schristos basic_machine=$field1-$field2 193924795e6Schristos basic_os= 194314094e7Schristos ;; 195314094e7Schristos *) 196314094e7Schristos basic_machine=$field1 197924795e6Schristos basic_os=$field2 198314094e7Schristos ;; 199314094e7Schristos esac 200314094e7Schristos ;; 201314094e7Schristos esac 202314094e7Schristos ;; 203314094e7Schristos *) 204314094e7Schristos # Convert single-component short-hands not valid as part of 205314094e7Schristos # multi-component configurations. 206314094e7Schristos case $field1 in 207314094e7Schristos 386bsd) 208314094e7Schristos basic_machine=i386-pc 209924795e6Schristos basic_os=bsd 210314094e7Schristos ;; 211314094e7Schristos a29khif) 212314094e7Schristos basic_machine=a29k-amd 213924795e6Schristos basic_os=udi 214314094e7Schristos ;; 215314094e7Schristos adobe68k) 216314094e7Schristos basic_machine=m68010-adobe 217924795e6Schristos basic_os=scout 218314094e7Schristos ;; 219314094e7Schristos alliant) 220314094e7Schristos basic_machine=fx80-alliant 221924795e6Schristos basic_os= 222314094e7Schristos ;; 223314094e7Schristos altos | altos3068) 224314094e7Schristos basic_machine=m68k-altos 225924795e6Schristos basic_os= 226314094e7Schristos ;; 227314094e7Schristos am29k) 228314094e7Schristos basic_machine=a29k-none 229924795e6Schristos basic_os=bsd 230314094e7Schristos ;; 231314094e7Schristos amdahl) 232314094e7Schristos basic_machine=580-amdahl 233924795e6Schristos basic_os=sysv 234314094e7Schristos ;; 235314094e7Schristos amiga) 236314094e7Schristos basic_machine=m68k-unknown 237924795e6Schristos basic_os= 238314094e7Schristos ;; 239314094e7Schristos amigaos | amigados) 240314094e7Schristos basic_machine=m68k-unknown 241924795e6Schristos basic_os=amigaos 242314094e7Schristos ;; 243314094e7Schristos amigaunix | amix) 244314094e7Schristos basic_machine=m68k-unknown 245924795e6Schristos basic_os=sysv4 246314094e7Schristos ;; 247314094e7Schristos apollo68) 248314094e7Schristos basic_machine=m68k-apollo 249924795e6Schristos basic_os=sysv 250314094e7Schristos ;; 251314094e7Schristos apollo68bsd) 252314094e7Schristos basic_machine=m68k-apollo 253924795e6Schristos basic_os=bsd 254314094e7Schristos ;; 255314094e7Schristos aros) 256314094e7Schristos basic_machine=i386-pc 257924795e6Schristos basic_os=aros 258314094e7Schristos ;; 259314094e7Schristos aux) 260314094e7Schristos basic_machine=m68k-apple 261924795e6Schristos basic_os=aux 262314094e7Schristos ;; 263314094e7Schristos balance) 264314094e7Schristos basic_machine=ns32k-sequent 265924795e6Schristos basic_os=dynix 266314094e7Schristos ;; 267314094e7Schristos blackfin) 268314094e7Schristos basic_machine=bfin-unknown 269924795e6Schristos basic_os=linux 270314094e7Schristos ;; 271314094e7Schristos cegcc) 272314094e7Schristos basic_machine=arm-unknown 273924795e6Schristos basic_os=cegcc 274314094e7Schristos ;; 275314094e7Schristos convex-c1) 276314094e7Schristos basic_machine=c1-convex 277924795e6Schristos basic_os=bsd 278314094e7Schristos ;; 279314094e7Schristos convex-c2) 280314094e7Schristos basic_machine=c2-convex 281924795e6Schristos basic_os=bsd 282314094e7Schristos ;; 283314094e7Schristos convex-c32) 284314094e7Schristos basic_machine=c32-convex 285924795e6Schristos basic_os=bsd 286314094e7Schristos ;; 287314094e7Schristos convex-c34) 288314094e7Schristos basic_machine=c34-convex 289924795e6Schristos basic_os=bsd 290314094e7Schristos ;; 291314094e7Schristos convex-c38) 292314094e7Schristos basic_machine=c38-convex 293924795e6Schristos basic_os=bsd 294314094e7Schristos ;; 295314094e7Schristos cray) 296314094e7Schristos basic_machine=j90-cray 297924795e6Schristos basic_os=unicos 298314094e7Schristos ;; 299314094e7Schristos crds | unos) 300314094e7Schristos basic_machine=m68k-crds 301924795e6Schristos basic_os= 302314094e7Schristos ;; 303314094e7Schristos da30) 304314094e7Schristos basic_machine=m68k-da30 305924795e6Schristos basic_os= 306314094e7Schristos ;; 307314094e7Schristos decstation | pmax | pmin | dec3100 | decstatn) 308314094e7Schristos basic_machine=mips-dec 309924795e6Schristos basic_os= 310314094e7Schristos ;; 311314094e7Schristos delta88) 312314094e7Schristos basic_machine=m88k-motorola 313924795e6Schristos basic_os=sysv3 314314094e7Schristos ;; 315314094e7Schristos dicos) 316314094e7Schristos basic_machine=i686-pc 317924795e6Schristos basic_os=dicos 318314094e7Schristos ;; 319314094e7Schristos djgpp) 320314094e7Schristos basic_machine=i586-pc 321924795e6Schristos basic_os=msdosdjgpp 322314094e7Schristos ;; 323314094e7Schristos ebmon29k) 324314094e7Schristos basic_machine=a29k-amd 325924795e6Schristos basic_os=ebmon 326314094e7Schristos ;; 327314094e7Schristos es1800 | OSE68k | ose68k | ose | OSE) 328314094e7Schristos basic_machine=m68k-ericsson 329924795e6Schristos basic_os=ose 330314094e7Schristos ;; 331314094e7Schristos gmicro) 332314094e7Schristos basic_machine=tron-gmicro 333924795e6Schristos basic_os=sysv 334314094e7Schristos ;; 335314094e7Schristos go32) 336314094e7Schristos basic_machine=i386-pc 337924795e6Schristos basic_os=go32 338314094e7Schristos ;; 339314094e7Schristos h8300hms) 340314094e7Schristos basic_machine=h8300-hitachi 341924795e6Schristos basic_os=hms 342314094e7Schristos ;; 343314094e7Schristos h8300xray) 344314094e7Schristos basic_machine=h8300-hitachi 345924795e6Schristos basic_os=xray 346314094e7Schristos ;; 347314094e7Schristos h8500hms) 348314094e7Schristos basic_machine=h8500-hitachi 349924795e6Schristos basic_os=hms 350314094e7Schristos ;; 351314094e7Schristos harris) 352314094e7Schristos basic_machine=m88k-harris 353924795e6Schristos basic_os=sysv3 354314094e7Schristos ;; 355db9b8011Schristos hp300 | hp300hpux) 356314094e7Schristos basic_machine=m68k-hp 357924795e6Schristos basic_os=hpux 358314094e7Schristos ;; 359314094e7Schristos hp300bsd) 360314094e7Schristos basic_machine=m68k-hp 361924795e6Schristos basic_os=bsd 362314094e7Schristos ;; 363314094e7Schristos hppaosf) 364314094e7Schristos basic_machine=hppa1.1-hp 365924795e6Schristos basic_os=osf 366314094e7Schristos ;; 367314094e7Schristos hppro) 368314094e7Schristos basic_machine=hppa1.1-hp 369924795e6Schristos basic_os=proelf 370314094e7Schristos ;; 371314094e7Schristos i386mach) 372314094e7Schristos basic_machine=i386-mach 373924795e6Schristos basic_os=mach 374314094e7Schristos ;; 375314094e7Schristos isi68 | isi) 376314094e7Schristos basic_machine=m68k-isi 377924795e6Schristos basic_os=sysv 378314094e7Schristos ;; 379314094e7Schristos m68knommu) 380314094e7Schristos basic_machine=m68k-unknown 381924795e6Schristos basic_os=linux 382314094e7Schristos ;; 383314094e7Schristos magnum | m3230) 384314094e7Schristos basic_machine=mips-mips 385924795e6Schristos basic_os=sysv 386314094e7Schristos ;; 387314094e7Schristos merlin) 388314094e7Schristos basic_machine=ns32k-utek 389924795e6Schristos basic_os=sysv 390314094e7Schristos ;; 391314094e7Schristos mingw64) 392314094e7Schristos basic_machine=x86_64-pc 393924795e6Schristos basic_os=mingw64 394314094e7Schristos ;; 395314094e7Schristos mingw32) 396314094e7Schristos basic_machine=i686-pc 397924795e6Schristos basic_os=mingw32 398314094e7Schristos ;; 399314094e7Schristos mingw32ce) 400314094e7Schristos basic_machine=arm-unknown 401924795e6Schristos basic_os=mingw32ce 402314094e7Schristos ;; 403314094e7Schristos monitor) 404314094e7Schristos basic_machine=m68k-rom68k 405924795e6Schristos basic_os=coff 406314094e7Schristos ;; 407314094e7Schristos morphos) 408314094e7Schristos basic_machine=powerpc-unknown 409924795e6Schristos basic_os=morphos 410314094e7Schristos ;; 411314094e7Schristos moxiebox) 412314094e7Schristos basic_machine=moxie-unknown 413924795e6Schristos basic_os=moxiebox 414314094e7Schristos ;; 415314094e7Schristos msdos) 416314094e7Schristos basic_machine=i386-pc 417924795e6Schristos basic_os=msdos 418314094e7Schristos ;; 419314094e7Schristos msys) 420314094e7Schristos basic_machine=i686-pc 421924795e6Schristos basic_os=msys 422314094e7Schristos ;; 423314094e7Schristos mvs) 424314094e7Schristos basic_machine=i370-ibm 425924795e6Schristos basic_os=mvs 426314094e7Schristos ;; 427314094e7Schristos nacl) 428314094e7Schristos basic_machine=le32-unknown 429924795e6Schristos basic_os=nacl 430314094e7Schristos ;; 431314094e7Schristos ncr3000) 432314094e7Schristos basic_machine=i486-ncr 433924795e6Schristos basic_os=sysv4 434314094e7Schristos ;; 435314094e7Schristos netbsd386) 436314094e7Schristos basic_machine=i386-pc 437924795e6Schristos basic_os=netbsd 438314094e7Schristos ;; 439314094e7Schristos netwinder) 440314094e7Schristos basic_machine=armv4l-rebel 441924795e6Schristos basic_os=linux 442314094e7Schristos ;; 443314094e7Schristos news | news700 | news800 | news900) 444314094e7Schristos basic_machine=m68k-sony 445924795e6Schristos basic_os=newsos 446314094e7Schristos ;; 447314094e7Schristos news1000) 448314094e7Schristos basic_machine=m68030-sony 449924795e6Schristos basic_os=newsos 450314094e7Schristos ;; 451314094e7Schristos necv70) 452314094e7Schristos basic_machine=v70-nec 453924795e6Schristos basic_os=sysv 454314094e7Schristos ;; 455314094e7Schristos nh3000) 456314094e7Schristos basic_machine=m68k-harris 457924795e6Schristos basic_os=cxux 458314094e7Schristos ;; 459314094e7Schristos nh[45]000) 460314094e7Schristos basic_machine=m88k-harris 461924795e6Schristos basic_os=cxux 462314094e7Schristos ;; 463314094e7Schristos nindy960) 464314094e7Schristos basic_machine=i960-intel 465924795e6Schristos basic_os=nindy 466314094e7Schristos ;; 467314094e7Schristos mon960) 468314094e7Schristos basic_machine=i960-intel 469924795e6Schristos basic_os=mon960 470314094e7Schristos ;; 471314094e7Schristos nonstopux) 472314094e7Schristos basic_machine=mips-compaq 473924795e6Schristos basic_os=nonstopux 474314094e7Schristos ;; 475314094e7Schristos os400) 476314094e7Schristos basic_machine=powerpc-ibm 477924795e6Schristos basic_os=os400 478314094e7Schristos ;; 479314094e7Schristos OSE68000 | ose68000) 480314094e7Schristos basic_machine=m68000-ericsson 481924795e6Schristos basic_os=ose 482314094e7Schristos ;; 483314094e7Schristos os68k) 484314094e7Schristos basic_machine=m68k-none 485924795e6Schristos basic_os=os68k 486314094e7Schristos ;; 487314094e7Schristos paragon) 488314094e7Schristos basic_machine=i860-intel 489924795e6Schristos basic_os=osf 490314094e7Schristos ;; 491314094e7Schristos parisc) 492314094e7Schristos basic_machine=hppa-unknown 493924795e6Schristos basic_os=linux 494924795e6Schristos ;; 495924795e6Schristos psp) 496924795e6Schristos basic_machine=mipsallegrexel-sony 497924795e6Schristos basic_os=psp 498314094e7Schristos ;; 499314094e7Schristos pw32) 500314094e7Schristos basic_machine=i586-unknown 501924795e6Schristos basic_os=pw32 502314094e7Schristos ;; 503314094e7Schristos rdos | rdos64) 504314094e7Schristos basic_machine=x86_64-pc 505924795e6Schristos basic_os=rdos 506314094e7Schristos ;; 507314094e7Schristos rdos32) 508314094e7Schristos basic_machine=i386-pc 509924795e6Schristos basic_os=rdos 510314094e7Schristos ;; 511314094e7Schristos rom68k) 512314094e7Schristos basic_machine=m68k-rom68k 513924795e6Schristos basic_os=coff 514314094e7Schristos ;; 515314094e7Schristos sa29200) 516314094e7Schristos basic_machine=a29k-amd 517924795e6Schristos basic_os=udi 518314094e7Schristos ;; 519314094e7Schristos sei) 520314094e7Schristos basic_machine=mips-sei 521924795e6Schristos basic_os=seiux 522314094e7Schristos ;; 523314094e7Schristos sequent) 524314094e7Schristos basic_machine=i386-sequent 525924795e6Schristos basic_os= 526314094e7Schristos ;; 527314094e7Schristos sps7) 528314094e7Schristos basic_machine=m68k-bull 529924795e6Schristos basic_os=sysv2 530314094e7Schristos ;; 531314094e7Schristos st2000) 532314094e7Schristos basic_machine=m68k-tandem 533924795e6Schristos basic_os= 534314094e7Schristos ;; 535314094e7Schristos stratus) 536314094e7Schristos basic_machine=i860-stratus 537924795e6Schristos basic_os=sysv4 538314094e7Schristos ;; 539314094e7Schristos sun2) 540314094e7Schristos basic_machine=m68000-sun 541924795e6Schristos basic_os= 542314094e7Schristos ;; 543314094e7Schristos sun2os3) 544314094e7Schristos basic_machine=m68000-sun 545924795e6Schristos basic_os=sunos3 546314094e7Schristos ;; 547314094e7Schristos sun2os4) 548314094e7Schristos basic_machine=m68000-sun 549924795e6Schristos basic_os=sunos4 550314094e7Schristos ;; 551314094e7Schristos sun3) 552314094e7Schristos basic_machine=m68k-sun 553924795e6Schristos basic_os= 554314094e7Schristos ;; 555314094e7Schristos sun3os3) 556314094e7Schristos basic_machine=m68k-sun 557924795e6Schristos basic_os=sunos3 558314094e7Schristos ;; 559314094e7Schristos sun3os4) 560314094e7Schristos basic_machine=m68k-sun 561924795e6Schristos basic_os=sunos4 562314094e7Schristos ;; 563314094e7Schristos sun4) 564314094e7Schristos basic_machine=sparc-sun 565924795e6Schristos basic_os= 566314094e7Schristos ;; 567314094e7Schristos sun4os3) 568314094e7Schristos basic_machine=sparc-sun 569924795e6Schristos basic_os=sunos3 570314094e7Schristos ;; 571314094e7Schristos sun4os4) 572314094e7Schristos basic_machine=sparc-sun 573924795e6Schristos basic_os=sunos4 574314094e7Schristos ;; 575314094e7Schristos sun4sol2) 576314094e7Schristos basic_machine=sparc-sun 577924795e6Schristos basic_os=solaris2 578314094e7Schristos ;; 579314094e7Schristos sun386 | sun386i | roadrunner) 580314094e7Schristos basic_machine=i386-sun 581924795e6Schristos basic_os= 582314094e7Schristos ;; 583314094e7Schristos sv1) 584314094e7Schristos basic_machine=sv1-cray 585924795e6Schristos basic_os=unicos 586314094e7Schristos ;; 587314094e7Schristos symmetry) 588314094e7Schristos basic_machine=i386-sequent 589924795e6Schristos basic_os=dynix 590314094e7Schristos ;; 591314094e7Schristos t3e) 592314094e7Schristos basic_machine=alphaev5-cray 593924795e6Schristos basic_os=unicos 594314094e7Schristos ;; 595314094e7Schristos t90) 596314094e7Schristos basic_machine=t90-cray 597924795e6Schristos basic_os=unicos 598314094e7Schristos ;; 599314094e7Schristos toad1) 600314094e7Schristos basic_machine=pdp10-xkl 601924795e6Schristos basic_os=tops20 602314094e7Schristos ;; 603314094e7Schristos tpf) 604314094e7Schristos basic_machine=s390x-ibm 605924795e6Schristos basic_os=tpf 606314094e7Schristos ;; 607314094e7Schristos udi29k) 608314094e7Schristos basic_machine=a29k-amd 609924795e6Schristos basic_os=udi 610314094e7Schristos ;; 611314094e7Schristos ultra3) 612314094e7Schristos basic_machine=a29k-nyu 613924795e6Schristos basic_os=sym1 614314094e7Schristos ;; 615314094e7Schristos v810 | necv810) 616314094e7Schristos basic_machine=v810-nec 617924795e6Schristos basic_os=none 618314094e7Schristos ;; 619314094e7Schristos vaxv) 620314094e7Schristos basic_machine=vax-dec 621924795e6Schristos basic_os=sysv 622314094e7Schristos ;; 623314094e7Schristos vms) 624314094e7Schristos basic_machine=vax-dec 625924795e6Schristos basic_os=vms 626314094e7Schristos ;; 627db9b8011Schristos vsta) 628db9b8011Schristos basic_machine=i386-pc 629924795e6Schristos basic_os=vsta 630db9b8011Schristos ;; 631314094e7Schristos vxworks960) 632314094e7Schristos basic_machine=i960-wrs 633924795e6Schristos basic_os=vxworks 634314094e7Schristos ;; 635314094e7Schristos vxworks68) 636314094e7Schristos basic_machine=m68k-wrs 637924795e6Schristos basic_os=vxworks 638314094e7Schristos ;; 639314094e7Schristos vxworks29k) 640314094e7Schristos basic_machine=a29k-wrs 641924795e6Schristos basic_os=vxworks 642314094e7Schristos ;; 643314094e7Schristos xbox) 644314094e7Schristos basic_machine=i686-pc 645924795e6Schristos basic_os=mingw32 646314094e7Schristos ;; 647314094e7Schristos ymp) 648314094e7Schristos basic_machine=ymp-cray 649924795e6Schristos basic_os=unicos 650314094e7Schristos ;; 651314094e7Schristos *) 652314094e7Schristos basic_machine=$1 653924795e6Schristos basic_os= 654314094e7Schristos ;; 655314094e7Schristos esac 656597410b8Schristos ;; 657597410b8Schristosesac 658597410b8Schristos 659314094e7Schristos# Decode 1-component or ad-hoc basic machines 660597410b8Schristoscase $basic_machine in 661314094e7Schristos # Here we handle the default manufacturer of certain CPU types. It is in 662314094e7Schristos # some cases the only manufacturer, in others, it is the most popular. 663314094e7Schristos w89k) 664314094e7Schristos cpu=hppa1.1 665314094e7Schristos vendor=winbond 666314094e7Schristos ;; 667314094e7Schristos op50n) 668314094e7Schristos cpu=hppa1.1 669314094e7Schristos vendor=oki 670314094e7Schristos ;; 671314094e7Schristos op60c) 672314094e7Schristos cpu=hppa1.1 673314094e7Schristos vendor=oki 674314094e7Schristos ;; 675314094e7Schristos ibm*) 676314094e7Schristos cpu=i370 677314094e7Schristos vendor=ibm 678314094e7Schristos ;; 679314094e7Schristos orion105) 680314094e7Schristos cpu=clipper 681314094e7Schristos vendor=highlevel 682314094e7Schristos ;; 683314094e7Schristos mac | mpw | mac-mpw) 684314094e7Schristos cpu=m68k 685314094e7Schristos vendor=apple 686314094e7Schristos ;; 687314094e7Schristos pmac | pmac-mpw) 688314094e7Schristos cpu=powerpc 689314094e7Schristos vendor=apple 690314094e7Schristos ;; 691314094e7Schristos 692314094e7Schristos # Recognize the various machine names and aliases which stand 693314094e7Schristos # for a CPU type and a company and sometimes even an OS. 694314094e7Schristos 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) 695314094e7Schristos cpu=m68000 696314094e7Schristos vendor=att 697314094e7Schristos ;; 698314094e7Schristos 3b*) 699314094e7Schristos cpu=we32k 700314094e7Schristos vendor=att 701314094e7Schristos ;; 702314094e7Schristos bluegene*) 703314094e7Schristos cpu=powerpc 704314094e7Schristos vendor=ibm 705924795e6Schristos basic_os=cnk 706314094e7Schristos ;; 707314094e7Schristos decsystem10* | dec10*) 708314094e7Schristos cpu=pdp10 709314094e7Schristos vendor=dec 710924795e6Schristos basic_os=tops10 711314094e7Schristos ;; 712314094e7Schristos decsystem20* | dec20*) 713314094e7Schristos cpu=pdp10 714314094e7Schristos vendor=dec 715924795e6Schristos basic_os=tops20 716314094e7Schristos ;; 717314094e7Schristos delta | 3300 | motorola-3300 | motorola-delta \ 718314094e7Schristos | 3300-motorola | delta-motorola) 719314094e7Schristos cpu=m68k 720314094e7Schristos vendor=motorola 721314094e7Schristos ;; 722314094e7Schristos dpx2*) 723314094e7Schristos cpu=m68k 724314094e7Schristos vendor=bull 725924795e6Schristos basic_os=sysv3 726314094e7Schristos ;; 727314094e7Schristos encore | umax | mmax) 728314094e7Schristos cpu=ns32k 729314094e7Schristos vendor=encore 730314094e7Schristos ;; 731314094e7Schristos elxsi) 732314094e7Schristos cpu=elxsi 733314094e7Schristos vendor=elxsi 734924795e6Schristos basic_os=${basic_os:-bsd} 735314094e7Schristos ;; 736314094e7Schristos fx2800) 737314094e7Schristos cpu=i860 738314094e7Schristos vendor=alliant 739314094e7Schristos ;; 740314094e7Schristos genix) 741314094e7Schristos cpu=ns32k 742314094e7Schristos vendor=ns 743314094e7Schristos ;; 744314094e7Schristos h3050r* | hiux*) 745314094e7Schristos cpu=hppa1.1 746314094e7Schristos vendor=hitachi 747924795e6Schristos basic_os=hiuxwe2 748314094e7Schristos ;; 749314094e7Schristos hp3k9[0-9][0-9] | hp9[0-9][0-9]) 750314094e7Schristos cpu=hppa1.0 751314094e7Schristos vendor=hp 752314094e7Schristos ;; 753314094e7Schristos hp9k2[0-9][0-9] | hp9k31[0-9]) 754314094e7Schristos cpu=m68000 755314094e7Schristos vendor=hp 756314094e7Schristos ;; 757314094e7Schristos hp9k3[2-9][0-9]) 758314094e7Schristos cpu=m68k 759314094e7Schristos vendor=hp 760314094e7Schristos ;; 761314094e7Schristos hp9k6[0-9][0-9] | hp6[0-9][0-9]) 762314094e7Schristos cpu=hppa1.0 763314094e7Schristos vendor=hp 764314094e7Schristos ;; 765314094e7Schristos hp9k7[0-79][0-9] | hp7[0-79][0-9]) 766314094e7Schristos cpu=hppa1.1 767314094e7Schristos vendor=hp 768314094e7Schristos ;; 769314094e7Schristos hp9k78[0-9] | hp78[0-9]) 770314094e7Schristos # FIXME: really hppa2.0-hp 771314094e7Schristos cpu=hppa1.1 772314094e7Schristos vendor=hp 773314094e7Schristos ;; 774314094e7Schristos hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) 775314094e7Schristos # FIXME: really hppa2.0-hp 776314094e7Schristos cpu=hppa1.1 777314094e7Schristos vendor=hp 778314094e7Schristos ;; 779314094e7Schristos hp9k8[0-9][13679] | hp8[0-9][13679]) 780314094e7Schristos cpu=hppa1.1 781314094e7Schristos vendor=hp 782314094e7Schristos ;; 783314094e7Schristos hp9k8[0-9][0-9] | hp8[0-9][0-9]) 784314094e7Schristos cpu=hppa1.0 785314094e7Schristos vendor=hp 786314094e7Schristos ;; 787314094e7Schristos i*86v32) 788314094e7Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 789314094e7Schristos vendor=pc 790924795e6Schristos basic_os=sysv32 791314094e7Schristos ;; 792314094e7Schristos i*86v4*) 793314094e7Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 794314094e7Schristos vendor=pc 795924795e6Schristos basic_os=sysv4 796314094e7Schristos ;; 797314094e7Schristos i*86v) 798314094e7Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 799314094e7Schristos vendor=pc 800924795e6Schristos basic_os=sysv 801314094e7Schristos ;; 802314094e7Schristos i*86sol2) 803314094e7Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 804314094e7Schristos vendor=pc 805924795e6Schristos basic_os=solaris2 806314094e7Schristos ;; 807314094e7Schristos j90 | j90-cray) 808314094e7Schristos cpu=j90 809314094e7Schristos vendor=cray 810924795e6Schristos basic_os=${basic_os:-unicos} 811314094e7Schristos ;; 812314094e7Schristos iris | iris4d) 813314094e7Schristos cpu=mips 814314094e7Schristos vendor=sgi 815924795e6Schristos case $basic_os in 816314094e7Schristos irix*) 817314094e7Schristos ;; 818314094e7Schristos *) 819924795e6Schristos basic_os=irix4 820314094e7Schristos ;; 821314094e7Schristos esac 822314094e7Schristos ;; 823314094e7Schristos miniframe) 824314094e7Schristos cpu=m68000 825314094e7Schristos vendor=convergent 826314094e7Schristos ;; 827314094e7Schristos *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) 828314094e7Schristos cpu=m68k 829314094e7Schristos vendor=atari 830924795e6Schristos basic_os=mint 831314094e7Schristos ;; 832314094e7Schristos news-3600 | risc-news) 833314094e7Schristos cpu=mips 834314094e7Schristos vendor=sony 835924795e6Schristos basic_os=newsos 836314094e7Schristos ;; 837314094e7Schristos next | m*-next) 838314094e7Schristos cpu=m68k 839314094e7Schristos vendor=next 840924795e6Schristos case $basic_os in 841db9b8011Schristos openstep*) 842db9b8011Schristos ;; 843314094e7Schristos nextstep*) 844314094e7Schristos ;; 845314094e7Schristos ns2*) 846924795e6Schristos basic_os=nextstep2 847314094e7Schristos ;; 848314094e7Schristos *) 849924795e6Schristos basic_os=nextstep3 850314094e7Schristos ;; 851314094e7Schristos esac 852314094e7Schristos ;; 853314094e7Schristos np1) 854314094e7Schristos cpu=np1 855314094e7Schristos vendor=gould 856314094e7Schristos ;; 857314094e7Schristos op50n-* | op60c-*) 858314094e7Schristos cpu=hppa1.1 859314094e7Schristos vendor=oki 860924795e6Schristos basic_os=proelf 861314094e7Schristos ;; 862314094e7Schristos pa-hitachi) 863314094e7Schristos cpu=hppa1.1 864314094e7Schristos vendor=hitachi 865924795e6Schristos basic_os=hiuxwe2 866314094e7Schristos ;; 867314094e7Schristos pbd) 868314094e7Schristos cpu=sparc 869314094e7Schristos vendor=tti 870314094e7Schristos ;; 871314094e7Schristos pbb) 872314094e7Schristos cpu=m68k 873314094e7Schristos vendor=tti 874314094e7Schristos ;; 875314094e7Schristos pc532) 876314094e7Schristos cpu=ns32k 877314094e7Schristos vendor=pc532 878314094e7Schristos ;; 879314094e7Schristos pn) 880314094e7Schristos cpu=pn 881314094e7Schristos vendor=gould 882314094e7Schristos ;; 883314094e7Schristos power) 884314094e7Schristos cpu=power 885314094e7Schristos vendor=ibm 886314094e7Schristos ;; 887314094e7Schristos ps2) 888314094e7Schristos cpu=i386 889314094e7Schristos vendor=ibm 890314094e7Schristos ;; 891314094e7Schristos rm[46]00) 892314094e7Schristos cpu=mips 893314094e7Schristos vendor=siemens 894314094e7Schristos ;; 895314094e7Schristos rtpc | rtpc-*) 896314094e7Schristos cpu=romp 897314094e7Schristos vendor=ibm 898314094e7Schristos ;; 899314094e7Schristos sde) 900314094e7Schristos cpu=mipsisa32 901314094e7Schristos vendor=sde 902924795e6Schristos basic_os=${basic_os:-elf} 903314094e7Schristos ;; 904314094e7Schristos simso-wrs) 905314094e7Schristos cpu=sparclite 906314094e7Schristos vendor=wrs 907924795e6Schristos basic_os=vxworks 908314094e7Schristos ;; 909314094e7Schristos tower | tower-32) 910314094e7Schristos cpu=m68k 911314094e7Schristos vendor=ncr 912314094e7Schristos ;; 913314094e7Schristos vpp*|vx|vx-*) 914314094e7Schristos cpu=f301 915314094e7Schristos vendor=fujitsu 916314094e7Schristos ;; 917314094e7Schristos w65) 918314094e7Schristos cpu=w65 919314094e7Schristos vendor=wdc 920314094e7Schristos ;; 921314094e7Schristos w89k-*) 922314094e7Schristos cpu=hppa1.1 923314094e7Schristos vendor=winbond 924924795e6Schristos basic_os=proelf 925314094e7Schristos ;; 926314094e7Schristos none) 927314094e7Schristos cpu=none 928314094e7Schristos vendor=none 929314094e7Schristos ;; 930314094e7Schristos leon|leon[3-9]) 931314094e7Schristos cpu=sparc 932314094e7Schristos vendor=$basic_machine 933314094e7Schristos ;; 934314094e7Schristos leon-*|leon[3-9]-*) 935314094e7Schristos cpu=sparc 936314094e7Schristos vendor=`echo "$basic_machine" | sed 's/-.*//'` 937314094e7Schristos ;; 938314094e7Schristos 939314094e7Schristos *-*) 940314094e7Schristos # shellcheck disable=SC2162 941924795e6Schristos saved_IFS=$IFS 942314094e7Schristos IFS="-" read cpu vendor <<EOF 943314094e7Schristos$basic_machine 944314094e7SchristosEOF 945924795e6Schristos IFS=$saved_IFS 946314094e7Schristos ;; 947*889f3bb0Schristos # We use 'pc' rather than 'unknown' 948314094e7Schristos # because (1) that's what they normally are, and 949314094e7Schristos # (2) the word "unknown" tends to confuse beginning users. 950314094e7Schristos i*86 | x86_64) 951314094e7Schristos cpu=$basic_machine 952314094e7Schristos vendor=pc 953314094e7Schristos ;; 954314094e7Schristos # These rules are duplicated from below for sake of the special case above; 955314094e7Schristos # i.e. things that normalized to x86 arches should also default to "pc" 956314094e7Schristos pc98) 957314094e7Schristos cpu=i386 958314094e7Schristos vendor=pc 959314094e7Schristos ;; 960314094e7Schristos x64 | amd64) 961314094e7Schristos cpu=x86_64 962314094e7Schristos vendor=pc 963314094e7Schristos ;; 964597410b8Schristos # Recognize the basic CPU types without company name. 965314094e7Schristos *) 966314094e7Schristos cpu=$basic_machine 967314094e7Schristos vendor=unknown 968314094e7Schristos ;; 969314094e7Schristosesac 970314094e7Schristos 971314094e7Schristosunset -v basic_machine 972314094e7Schristos 973314094e7Schristos# Decode basic machines in the full and proper CPU-Company form. 974314094e7Schristoscase $cpu-$vendor in 975314094e7Schristos # Here we handle the default manufacturer of certain CPU types in canonical form. It is in 976314094e7Schristos # some cases the only manufacturer, in others, it is the most popular. 977314094e7Schristos craynv-unknown) 978314094e7Schristos vendor=cray 979924795e6Schristos basic_os=${basic_os:-unicosmp} 980314094e7Schristos ;; 981314094e7Schristos c90-unknown | c90-cray) 982314094e7Schristos vendor=cray 983924795e6Schristos basic_os=${Basic_os:-unicos} 984314094e7Schristos ;; 985314094e7Schristos fx80-unknown) 986314094e7Schristos vendor=alliant 987314094e7Schristos ;; 988314094e7Schristos romp-unknown) 989314094e7Schristos vendor=ibm 990314094e7Schristos ;; 991314094e7Schristos mmix-unknown) 992314094e7Schristos vendor=knuth 993314094e7Schristos ;; 994314094e7Schristos microblaze-unknown | microblazeel-unknown) 995314094e7Schristos vendor=xilinx 996314094e7Schristos ;; 997314094e7Schristos rs6000-unknown) 998314094e7Schristos vendor=ibm 999314094e7Schristos ;; 1000314094e7Schristos vax-unknown) 1001314094e7Schristos vendor=dec 1002314094e7Schristos ;; 1003314094e7Schristos pdp11-unknown) 1004314094e7Schristos vendor=dec 1005314094e7Schristos ;; 1006314094e7Schristos we32k-unknown) 1007314094e7Schristos vendor=att 1008314094e7Schristos ;; 1009314094e7Schristos cydra-unknown) 1010314094e7Schristos vendor=cydrome 1011314094e7Schristos ;; 1012314094e7Schristos i370-ibm*) 1013314094e7Schristos vendor=ibm 1014314094e7Schristos ;; 1015314094e7Schristos orion-unknown) 1016314094e7Schristos vendor=highlevel 1017314094e7Schristos ;; 1018314094e7Schristos xps-unknown | xps100-unknown) 1019314094e7Schristos cpu=xps100 1020314094e7Schristos vendor=honeywell 1021314094e7Schristos ;; 1022314094e7Schristos 1023314094e7Schristos # Here we normalize CPU types with a missing or matching vendor 1024924795e6Schristos armh-unknown | armh-alt) 1025924795e6Schristos cpu=armv7l 1026924795e6Schristos vendor=alt 1027924795e6Schristos basic_os=${basic_os:-linux-gnueabihf} 1028924795e6Schristos ;; 1029314094e7Schristos dpx20-unknown | dpx20-bull) 1030314094e7Schristos cpu=rs6000 1031314094e7Schristos vendor=bull 1032924795e6Schristos basic_os=${basic_os:-bosx} 1033314094e7Schristos ;; 1034314094e7Schristos 1035314094e7Schristos # Here we normalize CPU types irrespective of the vendor 1036314094e7Schristos amd64-*) 1037314094e7Schristos cpu=x86_64 1038314094e7Schristos ;; 1039314094e7Schristos blackfin-*) 1040314094e7Schristos cpu=bfin 1041924795e6Schristos basic_os=linux 1042314094e7Schristos ;; 1043314094e7Schristos c54x-*) 1044314094e7Schristos cpu=tic54x 1045314094e7Schristos ;; 1046314094e7Schristos c55x-*) 1047314094e7Schristos cpu=tic55x 1048314094e7Schristos ;; 1049314094e7Schristos c6x-*) 1050314094e7Schristos cpu=tic6x 1051314094e7Schristos ;; 1052314094e7Schristos e500v[12]-*) 1053314094e7Schristos cpu=powerpc 1054924795e6Schristos basic_os=${basic_os}"spe" 1055314094e7Schristos ;; 1056314094e7Schristos mips3*-*) 1057314094e7Schristos cpu=mips64 1058314094e7Schristos ;; 1059314094e7Schristos ms1-*) 1060314094e7Schristos cpu=mt 1061314094e7Schristos ;; 1062314094e7Schristos m68knommu-*) 1063314094e7Schristos cpu=m68k 1064924795e6Schristos basic_os=linux 1065314094e7Schristos ;; 1066314094e7Schristos m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) 1067314094e7Schristos cpu=s12z 1068314094e7Schristos ;; 1069314094e7Schristos openrisc-*) 1070314094e7Schristos cpu=or32 1071314094e7Schristos ;; 1072314094e7Schristos parisc-*) 1073314094e7Schristos cpu=hppa 1074924795e6Schristos basic_os=linux 1075314094e7Schristos ;; 1076314094e7Schristos pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) 1077314094e7Schristos cpu=i586 1078314094e7Schristos ;; 1079*889f3bb0Schristos pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*) 1080314094e7Schristos cpu=i686 1081314094e7Schristos ;; 1082314094e7Schristos pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) 1083314094e7Schristos cpu=i686 1084314094e7Schristos ;; 1085314094e7Schristos pentium4-*) 1086314094e7Schristos cpu=i786 1087314094e7Schristos ;; 1088314094e7Schristos pc98-*) 1089314094e7Schristos cpu=i386 1090314094e7Schristos ;; 1091314094e7Schristos ppc-* | ppcbe-*) 1092314094e7Schristos cpu=powerpc 1093314094e7Schristos ;; 1094314094e7Schristos ppcle-* | powerpclittle-*) 1095314094e7Schristos cpu=powerpcle 1096314094e7Schristos ;; 1097314094e7Schristos ppc64-*) 1098314094e7Schristos cpu=powerpc64 1099314094e7Schristos ;; 1100314094e7Schristos ppc64le-* | powerpc64little-*) 1101314094e7Schristos cpu=powerpc64le 1102314094e7Schristos ;; 1103314094e7Schristos sb1-*) 1104314094e7Schristos cpu=mipsisa64sb1 1105314094e7Schristos ;; 1106314094e7Schristos sb1el-*) 1107314094e7Schristos cpu=mipsisa64sb1el 1108314094e7Schristos ;; 1109314094e7Schristos sh5e[lb]-*) 1110314094e7Schristos cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` 1111314094e7Schristos ;; 1112314094e7Schristos spur-*) 1113314094e7Schristos cpu=spur 1114314094e7Schristos ;; 1115314094e7Schristos strongarm-* | thumb-*) 1116314094e7Schristos cpu=arm 1117314094e7Schristos ;; 1118314094e7Schristos tx39-*) 1119314094e7Schristos cpu=mipstx39 1120314094e7Schristos ;; 1121314094e7Schristos tx39el-*) 1122314094e7Schristos cpu=mipstx39el 1123314094e7Schristos ;; 1124314094e7Schristos x64-*) 1125314094e7Schristos cpu=x86_64 1126314094e7Schristos ;; 1127314094e7Schristos xscale-* | xscalee[bl]-*) 1128314094e7Schristos cpu=`echo "$cpu" | sed 's/^xscale/arm/'` 1129314094e7Schristos ;; 1130924795e6Schristos arm64-* | aarch64le-*) 1131924795e6Schristos cpu=aarch64 1132924795e6Schristos ;; 1133314094e7Schristos 1134314094e7Schristos # Recognize the canonical CPU Types that limit and/or modify the 1135314094e7Schristos # company names they are paired with. 1136314094e7Schristos cr16-*) 1137924795e6Schristos basic_os=${basic_os:-elf} 1138314094e7Schristos ;; 1139314094e7Schristos crisv32-* | etraxfs*-*) 1140314094e7Schristos cpu=crisv32 1141314094e7Schristos vendor=axis 1142314094e7Schristos ;; 1143314094e7Schristos cris-* | etrax*-*) 1144314094e7Schristos cpu=cris 1145314094e7Schristos vendor=axis 1146314094e7Schristos ;; 1147314094e7Schristos crx-*) 1148924795e6Schristos basic_os=${basic_os:-elf} 1149314094e7Schristos ;; 1150314094e7Schristos neo-tandem) 1151314094e7Schristos cpu=neo 1152314094e7Schristos vendor=tandem 1153314094e7Schristos ;; 1154314094e7Schristos nse-tandem) 1155314094e7Schristos cpu=nse 1156314094e7Schristos vendor=tandem 1157314094e7Schristos ;; 1158314094e7Schristos nsr-tandem) 1159314094e7Schristos cpu=nsr 1160314094e7Schristos vendor=tandem 1161314094e7Schristos ;; 1162314094e7Schristos nsv-tandem) 1163314094e7Schristos cpu=nsv 1164314094e7Schristos vendor=tandem 1165314094e7Schristos ;; 1166314094e7Schristos nsx-tandem) 1167314094e7Schristos cpu=nsx 1168314094e7Schristos vendor=tandem 1169314094e7Schristos ;; 1170924795e6Schristos mipsallegrexel-sony) 1171924795e6Schristos cpu=mipsallegrexel 1172924795e6Schristos vendor=sony 1173314094e7Schristos ;; 1174314094e7Schristos tile*-*) 1175924795e6Schristos basic_os=${basic_os:-linux-gnu} 1176314094e7Schristos ;; 1177314094e7Schristos 1178314094e7Schristos *) 1179314094e7Schristos # Recognize the canonical CPU types that are allowed with any 1180314094e7Schristos # company name. 1181314094e7Schristos case $cpu in 1182597410b8Schristos 1750a | 580 \ 1183597410b8Schristos | a29k \ 1184*889f3bb0Schristos | aarch64 | aarch64_be | aarch64c | arm64ec \ 1185314094e7Schristos | abacus \ 1186314094e7Schristos | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ 1187314094e7Schristos | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ 1188314094e7Schristos | alphapca5[67] | alpha64pca5[67] \ 1189597410b8Schristos | am33_2.0 \ 1190314094e7Schristos | amdgcn \ 1191924795e6Schristos | arc | arceb | arc32 | arc64 \ 1192314094e7Schristos | arm | arm[lb]e | arme[lb] | armv* \ 1193387b2cebSchristos | avr | avr32 \ 1194314094e7Schristos | asmjs \ 1195c358683dSchristos | ba \ 1196387b2cebSchristos | be32 | be64 \ 1197db9b8011Schristos | bfin | bpf | bs2000 \ 1198314094e7Schristos | c[123]* | c30 | [cjt]90 | c4x \ 1199314094e7Schristos | c8051 | clipper | craynv | csky | cydra \ 1200597410b8Schristos | d10v | d30v | dlx | dsp16xx \ 1201314094e7Schristos | e2k | elxsi | epiphany \ 1202314094e7Schristos | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ 1203*889f3bb0Schristos | javascript \ 1204314094e7Schristos | h8300 | h8500 \ 1205314094e7Schristos | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ 1206387b2cebSchristos | hexagon \ 1207314094e7Schristos | i370 | i*86 | i860 | i960 | ia16 | ia64 \ 1208597410b8Schristos | ip2k | iq2000 \ 120978ce218aSchristos | k1om \ 1210*889f3bb0Schristos | kvx \ 1211387b2cebSchristos | le32 | le64 \ 1212597410b8Schristos | lm32 \ 1213*889f3bb0Schristos | loongarch32 | loongarch64 \ 1214314094e7Schristos | m32c | m32r | m32rle \ 1215db9b8011Schristos | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ 1216db9b8011Schristos | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ 1217314094e7Schristos | m88110 | m88k | maxq | mb | mcore | mep | metag \ 1218314094e7Schristos | microblaze | microblazeel \ 1219*889f3bb0Schristos | mips* \ 1220314094e7Schristos | mmix \ 1221597410b8Schristos | mn10200 | mn10300 \ 1222597410b8Schristos | moxie \ 1223597410b8Schristos | mt \ 1224597410b8Schristos | msp430 \ 1225597410b8Schristos | nds32 | nds32le | nds32be \ 1226314094e7Schristos | nfp \ 122778ce218aSchristos | nios | nios2 | nios2eb | nios2el \ 1228db9b8011Schristos | none | np1 | ns16k | ns32k | nvptx \ 1229314094e7Schristos | open8 \ 1230314094e7Schristos | or1k* \ 1231314094e7Schristos | or32 \ 1232314094e7Schristos | orion \ 1233db9b8011Schristos | picochip \ 1234314094e7Schristos | pdp10 | pdp11 | pj | pjl | pn | power \ 1235314094e7Schristos | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ 1236cc576e1dSsevan | pru \ 1237597410b8Schristos | pyramid \ 1238924795e6Schristos | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ 1239314094e7Schristos | rl78 | romp | rs6000 | rx \ 1240924795e6Schristos | s390 | s390x \ 1241597410b8Schristos | score \ 1242db9b8011Schristos | sh | shl \ 1243db9b8011Schristos | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ 1244314094e7Schristos | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ 1245314094e7Schristos | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ 1246314094e7Schristos | sparclite \ 1247314094e7Schristos | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ 1248597410b8Schristos | spu \ 1249314094e7Schristos | tahoe \ 1250924795e6Schristos | thumbv7* \ 1251314094e7Schristos | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ 1252314094e7Schristos | tron \ 1253597410b8Schristos | ubicom32 \ 1254db9b8011Schristos | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ 1255314094e7Schristos | vax \ 12569d1da10bSchristos | visium \ 1257db9b8011Schristos | w65 \ 1258db9b8011Schristos | wasm32 | wasm64 \ 1259597410b8Schristos | we32k \ 1260314094e7Schristos | x86 | x86_64 | xc16x | xgate | xps100 \ 1261314094e7Schristos | xstormy16 | xtensa* \ 1262314094e7Schristos | ymp \ 1263597410b8Schristos | z8k | z80) 1264597410b8Schristos ;; 1265597410b8Schristos 1266314094e7Schristos *) 1267*889f3bb0Schristos echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 1268597410b8Schristos exit 1 1269597410b8Schristos ;; 1270597410b8Schristos esac 1271597410b8Schristos ;; 1272597410b8Schristosesac 1273597410b8Schristos 1274597410b8Schristos# Here we canonicalize certain aliases for manufacturers. 1275314094e7Schristoscase $vendor in 1276314094e7Schristos digital*) 1277314094e7Schristos vendor=dec 1278597410b8Schristos ;; 1279314094e7Schristos commodore*) 1280314094e7Schristos vendor=cbm 1281597410b8Schristos ;; 1282597410b8Schristos *) 1283597410b8Schristos ;; 1284597410b8Schristosesac 1285597410b8Schristos 1286597410b8Schristos# Decode manufacturer-specific aliases for certain operating systems. 1287597410b8Schristos 1288*889f3bb0Schristosif test x"$basic_os" != x 1289597410b8Schristosthen 1290924795e6Schristos 1291924795e6Schristos# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just 1292924795e6Schristos# set os. 1293*889f3bb0Schristosobj= 1294924795e6Schristoscase $basic_os in 1295924795e6Schristos gnu/linux*) 1296924795e6Schristos kernel=linux 1297924795e6Schristos os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` 1298924795e6Schristos ;; 1299924795e6Schristos os2-emx) 1300924795e6Schristos kernel=os2 1301924795e6Schristos os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` 1302924795e6Schristos ;; 1303924795e6Schristos nto-qnx*) 1304924795e6Schristos kernel=nto 1305924795e6Schristos os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` 1306924795e6Schristos ;; 1307924795e6Schristos *-*) 1308924795e6Schristos # shellcheck disable=SC2162 1309924795e6Schristos saved_IFS=$IFS 1310924795e6Schristos IFS="-" read kernel os <<EOF 1311924795e6Schristos$basic_os 1312924795e6SchristosEOF 1313924795e6Schristos IFS=$saved_IFS 1314924795e6Schristos ;; 1315924795e6Schristos # Default OS when just kernel was specified 1316924795e6Schristos nto*) 1317924795e6Schristos kernel=nto 1318924795e6Schristos os=`echo "$basic_os" | sed -e 's|nto|qnx|'` 1319924795e6Schristos ;; 1320924795e6Schristos linux*) 1321924795e6Schristos kernel=linux 1322924795e6Schristos os=`echo "$basic_os" | sed -e 's|linux|gnu|'` 1323924795e6Schristos ;; 1324*889f3bb0Schristos managarm*) 1325*889f3bb0Schristos kernel=managarm 1326*889f3bb0Schristos os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'` 1327*889f3bb0Schristos ;; 1328924795e6Schristos *) 1329924795e6Schristos kernel= 1330924795e6Schristos os=$basic_os 1331924795e6Schristos ;; 1332924795e6Schristosesac 1333924795e6Schristos 1334924795e6Schristos# Now, normalize the OS (knowing we just have one component, it's not a kernel, 1335924795e6Schristos# etc.) 1336597410b8Schristoscase $os in 1337314094e7Schristos # First match some system type aliases that might get confused 1338314094e7Schristos # with valid system types. 1339314094e7Schristos # solaris* is a basic system type, with this one exception. 1340314094e7Schristos auroraux) 1341314094e7Schristos os=auroraux 1342597410b8Schristos ;; 1343314094e7Schristos bluegene*) 1344314094e7Schristos os=cnk 1345314094e7Schristos ;; 1346314094e7Schristos solaris1 | solaris1.*) 1347924795e6Schristos os=`echo "$os" | sed -e 's|solaris1|sunos4|'` 1348597410b8Schristos ;; 1349314094e7Schristos solaris) 1350314094e7Schristos os=solaris2 1351597410b8Schristos ;; 1352314094e7Schristos unixware*) 1353314094e7Schristos os=sysv4.2uw 1354597410b8Schristos ;; 1355314094e7Schristos # es1800 is here to avoid being matched by es* (a different OS) 1356314094e7Schristos es1800*) 1357314094e7Schristos os=ose 1358314094e7Schristos ;; 1359314094e7Schristos # Some version numbers need modification 1360314094e7Schristos chorusos*) 1361314094e7Schristos os=chorusos 1362314094e7Schristos ;; 1363314094e7Schristos isc) 1364314094e7Schristos os=isc2.2 1365314094e7Schristos ;; 1366314094e7Schristos sco6) 1367314094e7Schristos os=sco5v6 1368314094e7Schristos ;; 1369314094e7Schristos sco5) 1370314094e7Schristos os=sco3.2v5 1371314094e7Schristos ;; 1372314094e7Schristos sco4) 1373314094e7Schristos os=sco3.2v4 1374314094e7Schristos ;; 1375314094e7Schristos sco3.2.[4-9]*) 1376924795e6Schristos os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` 1377314094e7Schristos ;; 1378924795e6Schristos sco*v* | scout) 1379314094e7Schristos # Don't match below 1380314094e7Schristos ;; 1381314094e7Schristos sco*) 1382314094e7Schristos os=sco3.2v2 1383314094e7Schristos ;; 1384314094e7Schristos psos*) 1385314094e7Schristos os=psos 1386314094e7Schristos ;; 1387314094e7Schristos qnx*) 1388924795e6Schristos os=qnx 1389597410b8Schristos ;; 1390314094e7Schristos hiux*) 1391314094e7Schristos os=hiuxwe2 1392597410b8Schristos ;; 1393314094e7Schristos lynx*178) 1394314094e7Schristos os=lynxos178 1395597410b8Schristos ;; 1396314094e7Schristos lynx*5) 1397314094e7Schristos os=lynxos5 1398597410b8Schristos ;; 1399924795e6Schristos lynxos*) 1400924795e6Schristos # don't get caught up in next wildcard 1401924795e6Schristos ;; 1402314094e7Schristos lynx*) 1403314094e7Schristos os=lynxos 1404597410b8Schristos ;; 1405924795e6Schristos mac[0-9]*) 1406314094e7Schristos os=`echo "$os" | sed -e 's|mac|macos|'` 1407597410b8Schristos ;; 1408314094e7Schristos opened*) 1409314094e7Schristos os=openedition 1410597410b8Schristos ;; 1411314094e7Schristos os400*) 1412314094e7Schristos os=os400 1413597410b8Schristos ;; 1414314094e7Schristos sunos5*) 1415314094e7Schristos os=`echo "$os" | sed -e 's|sunos5|solaris2|'` 1416597410b8Schristos ;; 1417314094e7Schristos sunos6*) 1418314094e7Schristos os=`echo "$os" | sed -e 's|sunos6|solaris3|'` 1419597410b8Schristos ;; 1420314094e7Schristos wince*) 1421314094e7Schristos os=wince 1422597410b8Schristos ;; 1423314094e7Schristos utek*) 1424314094e7Schristos os=bsd 1425597410b8Schristos ;; 1426314094e7Schristos dynix*) 1427314094e7Schristos os=bsd 1428597410b8Schristos ;; 1429314094e7Schristos acis*) 1430314094e7Schristos os=aos 1431597410b8Schristos ;; 1432314094e7Schristos atheos*) 1433314094e7Schristos os=atheos 1434597410b8Schristos ;; 1435314094e7Schristos syllable*) 1436314094e7Schristos os=syllable 1437597410b8Schristos ;; 1438314094e7Schristos 386bsd) 1439314094e7Schristos os=bsd 1440597410b8Schristos ;; 1441314094e7Schristos ctix* | uts*) 1442314094e7Schristos os=sysv 1443597410b8Schristos ;; 1444314094e7Schristos nova*) 1445314094e7Schristos os=rtmk-nova 1446314094e7Schristos ;; 1447314094e7Schristos ns2) 1448314094e7Schristos os=nextstep2 1449314094e7Schristos ;; 1450597410b8Schristos # Preserve the version number of sinix5. 1451314094e7Schristos sinix5.*) 1452924795e6Schristos os=`echo "$os" | sed -e 's|sinix|sysv|'` 1453597410b8Schristos ;; 1454314094e7Schristos sinix*) 1455314094e7Schristos os=sysv4 1456597410b8Schristos ;; 1457314094e7Schristos tpf*) 1458314094e7Schristos os=tpf 1459597410b8Schristos ;; 1460314094e7Schristos triton*) 1461314094e7Schristos os=sysv3 1462597410b8Schristos ;; 1463314094e7Schristos oss*) 1464314094e7Schristos os=sysv3 1465597410b8Schristos ;; 1466314094e7Schristos svr4*) 1467314094e7Schristos os=sysv4 1468597410b8Schristos ;; 1469314094e7Schristos svr3) 1470314094e7Schristos os=sysv3 1471597410b8Schristos ;; 1472314094e7Schristos sysvr4) 1473314094e7Schristos os=sysv4 1474597410b8Schristos ;; 1475314094e7Schristos ose*) 1476314094e7Schristos os=ose 1477597410b8Schristos ;; 1478314094e7Schristos *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) 1479314094e7Schristos os=mint 1480597410b8Schristos ;; 1481314094e7Schristos dicos*) 1482314094e7Schristos os=dicos 1483597410b8Schristos ;; 1484314094e7Schristos pikeos*) 1485314094e7Schristos # Until real need of OS specific support for 1486314094e7Schristos # particular features comes up, bare metal 1487314094e7Schristos # configurations are quite functional. 1488314094e7Schristos case $cpu in 1489314094e7Schristos arm*) 1490314094e7Schristos os=eabi 1491597410b8Schristos ;; 1492597410b8Schristos *) 1493*889f3bb0Schristos os= 1494*889f3bb0Schristos obj=elf 1495314094e7Schristos ;; 1496314094e7Schristos esac 1497314094e7Schristos ;; 1498*889f3bb0Schristos aout* | coff* | elf* | pe*) 1499*889f3bb0Schristos # These are machine code file formats, not OSes 1500*889f3bb0Schristos obj=$os 1501*889f3bb0Schristos os= 1502*889f3bb0Schristos ;; 1503314094e7Schristos *) 1504924795e6Schristos # No normalization, but not necessarily accepted, that comes below. 1505597410b8Schristos ;; 1506597410b8Schristosesac 1507924795e6Schristos 1508597410b8Schristoselse 1509597410b8Schristos 1510597410b8Schristos# Here we handle the default operating systems that come with various machines. 1511597410b8Schristos# The value should be what the vendor currently ships out the door with their 1512597410b8Schristos# machine or put another way, the most popular os provided with the machine. 1513597410b8Schristos 1514597410b8Schristos# Note that if you're going to try to match "-MANUFACTURER" here (say, 1515597410b8Schristos# "-sun"), then you have to tell the case statement up towards the top 1516597410b8Schristos# that MANUFACTURER isn't an operating system. Otherwise, code above 1517597410b8Schristos# will signal an error saying that MANUFACTURER isn't an operating 1518597410b8Schristos# system, and we'll never get to this point. 1519597410b8Schristos 1520924795e6Schristoskernel= 1521*889f3bb0Schristosobj= 1522314094e7Schristoscase $cpu-$vendor in 1523597410b8Schristos score-*) 1524*889f3bb0Schristos os= 1525*889f3bb0Schristos obj=elf 1526597410b8Schristos ;; 1527597410b8Schristos spu-*) 1528*889f3bb0Schristos os= 1529*889f3bb0Schristos obj=elf 1530597410b8Schristos ;; 1531597410b8Schristos *-acorn) 1532314094e7Schristos os=riscix1.2 1533597410b8Schristos ;; 1534597410b8Schristos arm*-rebel) 1535924795e6Schristos kernel=linux 1536924795e6Schristos os=gnu 1537597410b8Schristos ;; 1538597410b8Schristos arm*-semi) 1539*889f3bb0Schristos os= 1540*889f3bb0Schristos obj=aout 1541597410b8Schristos ;; 1542597410b8Schristos c4x-* | tic4x-*) 1543*889f3bb0Schristos os= 1544*889f3bb0Schristos obj=coff 1545597410b8Schristos ;; 154678ce218aSchristos c8051-*) 1547*889f3bb0Schristos os= 1548*889f3bb0Schristos obj=elf 1549314094e7Schristos ;; 1550314094e7Schristos clipper-intergraph) 1551314094e7Schristos os=clix 155278ce218aSchristos ;; 1553387b2cebSchristos hexagon-*) 1554*889f3bb0Schristos os= 1555*889f3bb0Schristos obj=elf 1556387b2cebSchristos ;; 1557597410b8Schristos tic54x-*) 1558*889f3bb0Schristos os= 1559*889f3bb0Schristos obj=coff 1560597410b8Schristos ;; 1561597410b8Schristos tic55x-*) 1562*889f3bb0Schristos os= 1563*889f3bb0Schristos obj=coff 1564597410b8Schristos ;; 1565597410b8Schristos tic6x-*) 1566*889f3bb0Schristos os= 1567*889f3bb0Schristos obj=coff 1568597410b8Schristos ;; 1569597410b8Schristos # This must come before the *-dec entry. 1570597410b8Schristos pdp10-*) 1571314094e7Schristos os=tops20 1572597410b8Schristos ;; 1573597410b8Schristos pdp11-*) 1574314094e7Schristos os=none 1575597410b8Schristos ;; 1576597410b8Schristos *-dec | vax-*) 1577314094e7Schristos os=ultrix4.2 1578597410b8Schristos ;; 1579597410b8Schristos m68*-apollo) 1580314094e7Schristos os=domain 1581597410b8Schristos ;; 1582597410b8Schristos i386-sun) 1583314094e7Schristos os=sunos4.0.2 1584597410b8Schristos ;; 1585597410b8Schristos m68000-sun) 1586314094e7Schristos os=sunos3 1587597410b8Schristos ;; 1588597410b8Schristos m68*-cisco) 1589*889f3bb0Schristos os= 1590*889f3bb0Schristos obj=aout 1591597410b8Schristos ;; 1592597410b8Schristos mep-*) 1593*889f3bb0Schristos os= 1594*889f3bb0Schristos obj=elf 1595597410b8Schristos ;; 1596597410b8Schristos mips*-cisco) 1597*889f3bb0Schristos os= 1598*889f3bb0Schristos obj=elf 1599597410b8Schristos ;; 1600597410b8Schristos mips*-*) 1601*889f3bb0Schristos os= 1602*889f3bb0Schristos obj=elf 1603597410b8Schristos ;; 1604597410b8Schristos or32-*) 1605*889f3bb0Schristos os= 1606*889f3bb0Schristos obj=coff 1607597410b8Schristos ;; 1608597410b8Schristos *-tti) # must be before sparc entry or we get the wrong os. 1609314094e7Schristos os=sysv3 1610597410b8Schristos ;; 1611597410b8Schristos sparc-* | *-sun) 1612314094e7Schristos os=sunos4.1.1 1613597410b8Schristos ;; 1614cc576e1dSsevan pru-*) 1615*889f3bb0Schristos os= 1616*889f3bb0Schristos obj=elf 1617cc576e1dSsevan ;; 1618597410b8Schristos *-be) 1619314094e7Schristos os=beos 1620597410b8Schristos ;; 1621597410b8Schristos *-ibm) 1622314094e7Schristos os=aix 1623597410b8Schristos ;; 1624597410b8Schristos *-knuth) 1625314094e7Schristos os=mmixware 1626597410b8Schristos ;; 1627597410b8Schristos *-wec) 1628314094e7Schristos os=proelf 1629597410b8Schristos ;; 1630597410b8Schristos *-winbond) 1631314094e7Schristos os=proelf 1632597410b8Schristos ;; 1633597410b8Schristos *-oki) 1634314094e7Schristos os=proelf 1635597410b8Schristos ;; 1636597410b8Schristos *-hp) 1637314094e7Schristos os=hpux 1638597410b8Schristos ;; 1639597410b8Schristos *-hitachi) 1640314094e7Schristos os=hiux 1641597410b8Schristos ;; 1642597410b8Schristos i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) 1643314094e7Schristos os=sysv 1644597410b8Schristos ;; 1645597410b8Schristos *-cbm) 1646314094e7Schristos os=amigaos 1647597410b8Schristos ;; 1648597410b8Schristos *-dg) 1649314094e7Schristos os=dgux 1650597410b8Schristos ;; 1651597410b8Schristos *-dolphin) 1652314094e7Schristos os=sysv3 1653597410b8Schristos ;; 1654597410b8Schristos m68k-ccur) 1655314094e7Schristos os=rtu 1656597410b8Schristos ;; 1657597410b8Schristos m88k-omron*) 1658314094e7Schristos os=luna 1659597410b8Schristos ;; 1660597410b8Schristos *-next) 1661314094e7Schristos os=nextstep 1662597410b8Schristos ;; 1663597410b8Schristos *-sequent) 1664314094e7Schristos os=ptx 1665597410b8Schristos ;; 1666597410b8Schristos *-crds) 1667314094e7Schristos os=unos 1668597410b8Schristos ;; 1669597410b8Schristos *-ns) 1670314094e7Schristos os=genix 1671597410b8Schristos ;; 1672597410b8Schristos i370-*) 1673314094e7Schristos os=mvs 1674597410b8Schristos ;; 1675597410b8Schristos *-gould) 1676314094e7Schristos os=sysv 1677597410b8Schristos ;; 1678597410b8Schristos *-highlevel) 1679314094e7Schristos os=bsd 1680597410b8Schristos ;; 1681597410b8Schristos *-encore) 1682314094e7Schristos os=bsd 1683597410b8Schristos ;; 1684597410b8Schristos *-sgi) 1685314094e7Schristos os=irix 1686597410b8Schristos ;; 1687597410b8Schristos *-siemens) 1688314094e7Schristos os=sysv4 1689597410b8Schristos ;; 1690597410b8Schristos *-masscomp) 1691314094e7Schristos os=rtu 1692597410b8Schristos ;; 1693597410b8Schristos f30[01]-fujitsu | f700-fujitsu) 1694314094e7Schristos os=uxpv 1695597410b8Schristos ;; 1696597410b8Schristos *-rom68k) 1697*889f3bb0Schristos os= 1698*889f3bb0Schristos obj=coff 1699597410b8Schristos ;; 1700597410b8Schristos *-*bug) 1701*889f3bb0Schristos os= 1702*889f3bb0Schristos obj=coff 1703597410b8Schristos ;; 1704597410b8Schristos *-apple) 1705314094e7Schristos os=macos 1706597410b8Schristos ;; 1707597410b8Schristos *-atari*) 1708314094e7Schristos os=mint 1709314094e7Schristos ;; 1710314094e7Schristos *-wrs) 1711314094e7Schristos os=vxworks 1712597410b8Schristos ;; 1713597410b8Schristos *) 1714314094e7Schristos os=none 1715597410b8Schristos ;; 1716597410b8Schristosesac 1717924795e6Schristos 1718597410b8Schristosfi 1719597410b8Schristos 1720*889f3bb0Schristos# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). 1721*889f3bb0Schristos 1722924795e6Schristoscase $os in 1723924795e6Schristos # Sometimes we do "kernel-libc", so those need to count as OSes. 1724924795e6Schristos musl* | newlib* | relibc* | uclibc*) 1725924795e6Schristos ;; 1726924795e6Schristos # Likewise for "kernel-abi" 1727924795e6Schristos eabi* | gnueabi*) 1728924795e6Schristos ;; 1729924795e6Schristos # VxWorks passes extra cpu info in the 4th filed. 1730924795e6Schristos simlinux | simwindows | spe) 1731924795e6Schristos ;; 1732*889f3bb0Schristos # See `case $cpu-$os` validation below 1733*889f3bb0Schristos ghcjs) 1734*889f3bb0Schristos ;; 1735924795e6Schristos # Now accept the basic system types. 1736924795e6Schristos # The portable systems comes first. 1737924795e6Schristos # Each alternative MUST end in a * to match a version number. 1738924795e6Schristos gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ 1739924795e6Schristos | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ 1740924795e6Schristos | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ 1741924795e6Schristos | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ 1742924795e6Schristos | hiux* | abug | nacl* | netware* | windows* \ 1743*889f3bb0Schristos | os9* | macos* | osx* | ios* | tvos* | watchos* \ 1744924795e6Schristos | mpw* | magic* | mmixware* | mon960* | lnews* \ 1745924795e6Schristos | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ 1746924795e6Schristos | aos* | aros* | cloudabi* | sortix* | twizzler* \ 1747924795e6Schristos | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ 1748924795e6Schristos | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ 1749924795e6Schristos | mirbsd* | netbsd* | dicos* | openedition* | ose* \ 1750924795e6Schristos | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ 1751924795e6Schristos | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ 1752*889f3bb0Schristos | bosx* | nextstep* | cxux* | oabi* \ 1753*889f3bb0Schristos | ptx* | ecoff* | winnt* | domain* | vsta* \ 1754924795e6Schristos | udi* | lites* | ieee* | go32* | aux* | hcos* \ 1755924795e6Schristos | chorusrdb* | cegcc* | glidix* | serenity* \ 1756*889f3bb0Schristos | cygwin* | msys* | moss* | proelf* | rtems* \ 1757924795e6Schristos | midipix* | mingw32* | mingw64* | mint* \ 1758924795e6Schristos | uxpv* | beos* | mpeix* | udk* | moxiebox* \ 1759924795e6Schristos | interix* | uwin* | mks* | rhapsody* | darwin* \ 1760924795e6Schristos | openstep* | oskit* | conix* | pw32* | nonstopux* \ 1761924795e6Schristos | storm-chaos* | tops10* | tenex* | tops20* | its* \ 1762924795e6Schristos | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ 1763924795e6Schristos | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ 1764924795e6Schristos | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ 1765924795e6Schristos | skyos* | haiku* | rdos* | toppers* | drops* | es* \ 1766924795e6Schristos | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ 1767924795e6Schristos | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ 1768924795e6Schristos | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ 1769*889f3bb0Schristos | fiwix* | mlibc* | cos* | mbr* ) 1770924795e6Schristos ;; 1771924795e6Schristos # This one is extra strict with allowed versions 1772924795e6Schristos sco3.2v2 | sco3.2v[4-9]* | sco5v6*) 1773924795e6Schristos # Don't forget version if it is 3.2v4 or newer. 1774924795e6Schristos ;; 1775924795e6Schristos none) 1776924795e6Schristos ;; 1777*889f3bb0Schristos kernel* | msvc* ) 1778*889f3bb0Schristos # Restricted further below 1779*889f3bb0Schristos ;; 1780*889f3bb0Schristos '') 1781*889f3bb0Schristos if test x"$obj" = x 1782*889f3bb0Schristos then 1783*889f3bb0Schristos echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 1784*889f3bb0Schristos fi 1785*889f3bb0Schristos ;; 1786924795e6Schristos *) 1787*889f3bb0Schristos echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 1788*889f3bb0Schristos exit 1 1789*889f3bb0Schristos ;; 1790*889f3bb0Schristosesac 1791*889f3bb0Schristos 1792*889f3bb0Schristoscase $obj in 1793*889f3bb0Schristos aout* | coff* | elf* | pe*) 1794*889f3bb0Schristos ;; 1795*889f3bb0Schristos '') 1796*889f3bb0Schristos # empty is fine 1797*889f3bb0Schristos ;; 1798*889f3bb0Schristos *) 1799*889f3bb0Schristos echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 1800*889f3bb0Schristos exit 1 1801*889f3bb0Schristos ;; 1802*889f3bb0Schristosesac 1803*889f3bb0Schristos 1804*889f3bb0Schristos# Here we handle the constraint that a (synthetic) cpu and os are 1805*889f3bb0Schristos# valid only in combination with each other and nowhere else. 1806*889f3bb0Schristoscase $cpu-$os in 1807*889f3bb0Schristos # The "javascript-unknown-ghcjs" triple is used by GHC; we 1808*889f3bb0Schristos # accept it here in order to tolerate that, but reject any 1809*889f3bb0Schristos # variations. 1810*889f3bb0Schristos javascript-ghcjs) 1811*889f3bb0Schristos ;; 1812*889f3bb0Schristos javascript-* | *-ghcjs) 1813*889f3bb0Schristos echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 1814924795e6Schristos exit 1 1815924795e6Schristos ;; 1816924795e6Schristosesac 1817924795e6Schristos 1818924795e6Schristos# As a final step for OS-related things, validate the OS-kernel combination 1819924795e6Schristos# (given a valid OS), if there is a kernel. 1820*889f3bb0Schristoscase $kernel-$os-$obj in 1821*889f3bb0Schristos linux-gnu*- | linux-dietlibc*- | linux-android*- | linux-newlib*- \ 1822*889f3bb0Schristos | linux-musl*- | linux-relibc*- | linux-uclibc*- | linux-mlibc*- ) 1823924795e6Schristos ;; 1824*889f3bb0Schristos uclinux-uclibc*- ) 1825924795e6Schristos ;; 1826*889f3bb0Schristos managarm-mlibc*- | managarm-kernel*- ) 1827*889f3bb0Schristos ;; 1828*889f3bb0Schristos windows*-msvc*-) 1829*889f3bb0Schristos ;; 1830*889f3bb0Schristos -dietlibc*- | -newlib*- | -musl*- | -relibc*- | -uclibc*- | -mlibc*- ) 1831924795e6Schristos # These are just libc implementations, not actual OSes, and thus 1832924795e6Schristos # require a kernel. 1833*889f3bb0Schristos echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 1834924795e6Schristos exit 1 1835924795e6Schristos ;; 1836*889f3bb0Schristos -kernel*- ) 1837*889f3bb0Schristos echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 1838*889f3bb0Schristos exit 1 1839924795e6Schristos ;; 1840*889f3bb0Schristos *-kernel*- ) 1841*889f3bb0Schristos echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 1842*889f3bb0Schristos exit 1 1843924795e6Schristos ;; 1844*889f3bb0Schristos *-msvc*- ) 1845*889f3bb0Schristos echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 1846*889f3bb0Schristos exit 1 1847924795e6Schristos ;; 1848*889f3bb0Schristos kfreebsd*-gnu*- | kopensolaris*-gnu*-) 1849924795e6Schristos ;; 1850*889f3bb0Schristos vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) 1851924795e6Schristos ;; 1852*889f3bb0Schristos nto-qnx*-) 1853*889f3bb0Schristos ;; 1854*889f3bb0Schristos os2-emx-) 1855*889f3bb0Schristos ;; 1856*889f3bb0Schristos *-eabi*- | *-gnueabi*-) 1857*889f3bb0Schristos ;; 1858*889f3bb0Schristos none--*) 1859*889f3bb0Schristos # None (no kernel, i.e. freestanding / bare metal), 1860*889f3bb0Schristos # can be paired with an machine code file format 1861*889f3bb0Schristos ;; 1862*889f3bb0Schristos -*-) 1863924795e6Schristos # Blank kernel with real OS is always fine. 1864924795e6Schristos ;; 1865*889f3bb0Schristos --*) 1866*889f3bb0Schristos # Blank kernel and OS with real machine code file format is always fine. 1867*889f3bb0Schristos ;; 1868*889f3bb0Schristos *-*-*) 1869*889f3bb0Schristos echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 1870924795e6Schristos exit 1 1871924795e6Schristos ;; 1872924795e6Schristosesac 1873924795e6Schristos 1874597410b8Schristos# Here we handle the case where we know the os, and the CPU type, but not the 1875597410b8Schristos# manufacturer. We pick the logical manufacturer. 1876314094e7Schristoscase $vendor in 1877314094e7Schristos unknown) 1878924795e6Schristos case $cpu-$os in 1879924795e6Schristos *-riscix*) 1880597410b8Schristos vendor=acorn 1881597410b8Schristos ;; 1882924795e6Schristos *-sunos*) 1883597410b8Schristos vendor=sun 1884597410b8Schristos ;; 1885924795e6Schristos *-cnk* | *-aix*) 1886597410b8Schristos vendor=ibm 1887597410b8Schristos ;; 1888924795e6Schristos *-beos*) 1889597410b8Schristos vendor=be 1890597410b8Schristos ;; 1891924795e6Schristos *-hpux*) 1892597410b8Schristos vendor=hp 1893597410b8Schristos ;; 1894924795e6Schristos *-mpeix*) 1895597410b8Schristos vendor=hp 1896597410b8Schristos ;; 1897924795e6Schristos *-hiux*) 1898597410b8Schristos vendor=hitachi 1899597410b8Schristos ;; 1900924795e6Schristos *-unos*) 1901597410b8Schristos vendor=crds 1902597410b8Schristos ;; 1903924795e6Schristos *-dgux*) 1904597410b8Schristos vendor=dg 1905597410b8Schristos ;; 1906924795e6Schristos *-luna*) 1907597410b8Schristos vendor=omron 1908597410b8Schristos ;; 1909924795e6Schristos *-genix*) 1910597410b8Schristos vendor=ns 1911597410b8Schristos ;; 1912924795e6Schristos *-clix*) 1913314094e7Schristos vendor=intergraph 1914314094e7Schristos ;; 1915924795e6Schristos *-mvs* | *-opened*) 1916597410b8Schristos vendor=ibm 1917597410b8Schristos ;; 1918924795e6Schristos *-os400*) 1919597410b8Schristos vendor=ibm 1920597410b8Schristos ;; 1921924795e6Schristos s390-* | s390x-*) 1922924795e6Schristos vendor=ibm 1923924795e6Schristos ;; 1924924795e6Schristos *-ptx*) 1925597410b8Schristos vendor=sequent 1926597410b8Schristos ;; 1927924795e6Schristos *-tpf*) 1928597410b8Schristos vendor=ibm 1929597410b8Schristos ;; 1930924795e6Schristos *-vxsim* | *-vxworks* | *-windiss*) 1931597410b8Schristos vendor=wrs 1932597410b8Schristos ;; 1933924795e6Schristos *-aux*) 1934597410b8Schristos vendor=apple 1935597410b8Schristos ;; 1936924795e6Schristos *-hms*) 1937597410b8Schristos vendor=hitachi 1938597410b8Schristos ;; 1939924795e6Schristos *-mpw* | *-macos*) 1940597410b8Schristos vendor=apple 1941597410b8Schristos ;; 1942924795e6Schristos *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) 1943597410b8Schristos vendor=atari 1944597410b8Schristos ;; 1945924795e6Schristos *-vos*) 1946597410b8Schristos vendor=stratus 1947597410b8Schristos ;; 1948597410b8Schristos esac 1949597410b8Schristos ;; 1950597410b8Schristosesac 1951597410b8Schristos 1952*889f3bb0Schristosecho "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" 1953597410b8Schristosexit 1954597410b8Schristos 1955597410b8Schristos# Local variables: 1956314094e7Schristos# eval: (add-hook 'before-save-hook 'time-stamp) 1957597410b8Schristos# time-stamp-start: "timestamp='" 1958597410b8Schristos# time-stamp-format: "%:y-%02m-%02d" 1959597410b8Schristos# time-stamp-end: "'" 1960597410b8Schristos# End: 1961