10f74e101Schristos#! /bin/sh 20f74e101Schristos# Configuration validation subroutine script. 3*26ba0b50Schristos# Copyright 1992-2024 Free Software Foundation, Inc. 40f74e101Schristos 5c74ad251Schristos# shellcheck disable=SC2006,SC2268 # see below for rationale 6c74ad251Schristos 7*26ba0b50Schristostimestamp='2024-01-01' 80f74e101Schristos 93d25ea14Schristos# This file is free software; you can redistribute it and/or modify it 103d25ea14Schristos# under the terms of the GNU General Public License as published by 11c74ad251Schristos# the Free Software Foundation, either version 3 of the License, or 120f74e101Schristos# (at your option) any later version. 130f74e101Schristos# 143d25ea14Schristos# This program is distributed in the hope that it will be useful, but 153d25ea14Schristos# WITHOUT ANY WARRANTY; without even the implied warranty of 163d25ea14Schristos# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 173d25ea14Schristos# General Public License for more details. 180f74e101Schristos# 190f74e101Schristos# You should have received a copy of the GNU General Public License 20817e9a7eSchristos# along with this program; if not, see <https://www.gnu.org/licenses/>. 210f74e101Schristos# 220f74e101Schristos# As a special exception to the GNU General Public License, if you 230f74e101Schristos# distribute this file as part of a program that contains a 240f74e101Schristos# configuration script generated by Autoconf, you may include it under 253d25ea14Schristos# the same distribution terms that you use for the rest of that 263d25ea14Schristos# program. This Exception is an additional permission under section 7 273d25ea14Schristos# of the GNU General Public License, version 3 ("GPLv3"). 280f74e101Schristos 290f74e101Schristos 303d25ea14Schristos# Please send patches to <config-patches@gnu.org>. 310f74e101Schristos# 320f74e101Schristos# Configuration subroutine to validate and canonicalize a configuration type. 330f74e101Schristos# Supply the specified configuration type as an argument. 340f74e101Schristos# If it is invalid, we print an error message on stderr and exit with code 1. 350f74e101Schristos# Otherwise, we print the canonical config type on stdout and succeed. 360f74e101Schristos 370f74e101Schristos# You can get the latest version of this script from: 38c74ad251Schristos# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub 390f74e101Schristos 400f74e101Schristos# This file is supposed to be the same for all GNU packages 410f74e101Schristos# and recognize all the CPU types, system types and aliases 420f74e101Schristos# that are meaningful with *any* GNU software. 430f74e101Schristos# Each package is responsible for reporting which valid configurations 440f74e101Schristos# it does not support. The user should be able to distinguish 450f74e101Schristos# a failure to support a valid configuration from a meaningless 460f74e101Schristos# configuration. 470f74e101Schristos 480f74e101Schristos# The goal of this file is to map all the various variations of a given 490f74e101Schristos# machine specification into a single specification in the form: 500f74e101Schristos# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM 510f74e101Schristos# or in some cases, the newer four-part form: 520f74e101Schristos# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM 530f74e101Schristos# It is wrong to echo any other type of specification. 540f74e101Schristos 55c74ad251Schristos# The "shellcheck disable" line above the timestamp inhibits complaints 56c74ad251Schristos# about features and limitations of the classic Bourne shell that were 57c74ad251Schristos# superseded or lifted in POSIX. However, this script identifies a wide 58c74ad251Schristos# variety of pre-POSIX systems that do not have POSIX shells at all, and 59c74ad251Schristos# even some reasonably current systems (Solaris 10 as case-in-point) still 60c74ad251Schristos# have a pre-POSIX /bin/sh. 61c74ad251Schristos 620f74e101Schristosme=`echo "$0" | sed -e 's,.*/,,'` 630f74e101Schristos 640f74e101Schristosusage="\ 65cc576e1dSsevanUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS 660f74e101Schristos 670f74e101SchristosCanonicalize a configuration name. 680f74e101Schristos 69817e9a7eSchristosOptions: 700f74e101Schristos -h, --help print this help, then exit 710f74e101Schristos -t, --time-stamp print date of last modification, then exit 720f74e101Schristos -v, --version print version number, then exit 730f74e101Schristos 740f74e101SchristosReport bugs and patches to <config-patches@gnu.org>." 750f74e101Schristos 760f74e101Schristosversion="\ 770f74e101SchristosGNU config.sub ($timestamp) 780f74e101Schristos 79*26ba0b50SchristosCopyright 1992-2024 Free Software Foundation, Inc. 800f74e101Schristos 810f74e101SchristosThis is free software; see the source for copying conditions. There is NO 820f74e101Schristoswarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 830f74e101Schristos 840f74e101Schristoshelp=" 85*26ba0b50SchristosTry '$me --help' for more information." 860f74e101Schristos 870f74e101Schristos# Parse command line 880f74e101Schristoswhile test $# -gt 0 ; do 890f74e101Schristos case $1 in 900f74e101Schristos --time-stamp | --time* | -t ) 910f74e101Schristos echo "$timestamp" ; exit ;; 920f74e101Schristos --version | -v ) 930f74e101Schristos echo "$version" ; exit ;; 940f74e101Schristos --help | --h* | -h ) 950f74e101Schristos echo "$usage"; exit ;; 960f74e101Schristos -- ) # Stop option processing 970f74e101Schristos shift; break ;; 980f74e101Schristos - ) # Use stdin as input. 990f74e101Schristos break ;; 1000f74e101Schristos -* ) 101c74ad251Schristos echo "$me: invalid option $1$help" >&2 1020f74e101Schristos exit 1 ;; 1030f74e101Schristos 1040f74e101Schristos *local*) 1050f74e101Schristos # First pass through any local machine types. 106817e9a7eSchristos echo "$1" 1070f74e101Schristos exit ;; 1080f74e101Schristos 1090f74e101Schristos * ) 1100f74e101Schristos break ;; 1110f74e101Schristos esac 1120f74e101Schristosdone 1130f74e101Schristos 1140f74e101Schristoscase $# in 1150f74e101Schristos 0) echo "$me: missing argument$help" >&2 1160f74e101Schristos exit 1;; 1170f74e101Schristos 1) ;; 1180f74e101Schristos *) echo "$me: too many arguments$help" >&2 1190f74e101Schristos exit 1;; 1200f74e101Schristosesac 1210f74e101Schristos 122817e9a7eSchristos# Split fields of configuration type 123c74ad251Schristos# shellcheck disable=SC2162 124c74ad251Schristossaved_IFS=$IFS 125c74ad251SchristosIFS="-" read field1 field2 field3 field4 <<EOF 126817e9a7eSchristos$1 127817e9a7eSchristosEOF 128c74ad251SchristosIFS=$saved_IFS 129817e9a7eSchristos 130817e9a7eSchristos# Separate into logical components for further validation 131817e9a7eSchristoscase $1 in 132817e9a7eSchristos *-*-*-*-*) 133*26ba0b50Schristos echo "Invalid configuration '$1': more than four components" >&2 134817e9a7eSchristos exit 1 135817e9a7eSchristos ;; 136817e9a7eSchristos *-*-*-*) 137817e9a7eSchristos basic_machine=$field1-$field2 138c74ad251Schristos basic_os=$field3-$field4 139817e9a7eSchristos ;; 140817e9a7eSchristos *-*-*) 141817e9a7eSchristos # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two 142817e9a7eSchristos # parts 143817e9a7eSchristos maybe_os=$field2-$field3 1440f74e101Schristos case $maybe_os in 145c74ad251Schristos nto-qnx* | linux-* | uclinux-uclibc* \ 146817e9a7eSchristos | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ 147817e9a7eSchristos | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ 148*26ba0b50Schristos | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ 149*26ba0b50Schristos | windows-* ) 150817e9a7eSchristos basic_machine=$field1 151c74ad251Schristos basic_os=$maybe_os 1520f74e101Schristos ;; 153c47fd378Schristos android-linux) 154817e9a7eSchristos basic_machine=$field1-unknown 155c74ad251Schristos basic_os=linux-android 156c47fd378Schristos ;; 1570f74e101Schristos *) 158817e9a7eSchristos basic_machine=$field1-$field2 159c74ad251Schristos basic_os=$field3 1600f74e101Schristos ;; 1610f74e101Schristos esac 1620f74e101Schristos ;; 163817e9a7eSchristos *-*) 164c74ad251Schristos # A lone config we happen to match not fitting any pattern 165c74ad251Schristos case $field1-$field2 in 166c74ad251Schristos decstation-3100) 167c74ad251Schristos basic_machine=mips-dec 168c74ad251Schristos basic_os= 169c74ad251Schristos ;; 170c74ad251Schristos *-*) 171817e9a7eSchristos # Second component is usually, but not always the OS 172817e9a7eSchristos case $field2 in 173817e9a7eSchristos # Prevent following clause from handling this valid os 174817e9a7eSchristos sun*os*) 175817e9a7eSchristos basic_machine=$field1 176c74ad251Schristos basic_os=$field2 177c74ad251Schristos ;; 178c74ad251Schristos zephyr*) 179c74ad251Schristos basic_machine=$field1-unknown 180c74ad251Schristos basic_os=$field2 181817e9a7eSchristos ;; 182817e9a7eSchristos # Manufacturers 183c74ad251Schristos dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ 184817e9a7eSchristos | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ 185817e9a7eSchristos | unicom* | ibm* | next | hp | isi* | apollo | altos* \ 186c74ad251Schristos | convergent* | ncr* | news | 32* | 3600* | 3100* \ 187c74ad251Schristos | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ 188c74ad251Schristos | ultra | tti* | harris | dolphin | highlevel | gould \ 189c74ad251Schristos | cbm | ns | masscomp | apple | axis | knuth | cray \ 190c74ad251Schristos | microblaze* | sim | cisco \ 191c74ad251Schristos | oki | wec | wrs | winbond) 192817e9a7eSchristos basic_machine=$field1-$field2 193c74ad251Schristos basic_os= 194817e9a7eSchristos ;; 195817e9a7eSchristos *) 196817e9a7eSchristos basic_machine=$field1 197c74ad251Schristos basic_os=$field2 198c74ad251Schristos ;; 199c74ad251Schristos esac 200817e9a7eSchristos ;; 201817e9a7eSchristos esac 202817e9a7eSchristos ;; 203817e9a7eSchristos *) 204817e9a7eSchristos # Convert single-component short-hands not valid as part of 205817e9a7eSchristos # multi-component configurations. 206817e9a7eSchristos case $field1 in 207817e9a7eSchristos 386bsd) 208817e9a7eSchristos basic_machine=i386-pc 209c74ad251Schristos basic_os=bsd 210817e9a7eSchristos ;; 211817e9a7eSchristos a29khif) 212817e9a7eSchristos basic_machine=a29k-amd 213c74ad251Schristos basic_os=udi 214817e9a7eSchristos ;; 215817e9a7eSchristos adobe68k) 216817e9a7eSchristos basic_machine=m68010-adobe 217c74ad251Schristos basic_os=scout 218c74ad251Schristos ;; 219c74ad251Schristos alliant) 220c74ad251Schristos basic_machine=fx80-alliant 221c74ad251Schristos basic_os= 222c74ad251Schristos ;; 223c74ad251Schristos altos | altos3068) 224c74ad251Schristos basic_machine=m68k-altos 225c74ad251Schristos basic_os= 226817e9a7eSchristos ;; 227817e9a7eSchristos am29k) 228817e9a7eSchristos basic_machine=a29k-none 229c74ad251Schristos basic_os=bsd 230817e9a7eSchristos ;; 231817e9a7eSchristos amdahl) 232817e9a7eSchristos basic_machine=580-amdahl 233c74ad251Schristos basic_os=sysv 234c74ad251Schristos ;; 235c74ad251Schristos amiga) 236c74ad251Schristos basic_machine=m68k-unknown 237c74ad251Schristos basic_os= 238817e9a7eSchristos ;; 239817e9a7eSchristos amigaos | amigados) 240817e9a7eSchristos basic_machine=m68k-unknown 241c74ad251Schristos basic_os=amigaos 242817e9a7eSchristos ;; 243817e9a7eSchristos amigaunix | amix) 244817e9a7eSchristos basic_machine=m68k-unknown 245c74ad251Schristos basic_os=sysv4 246817e9a7eSchristos ;; 247817e9a7eSchristos apollo68) 248817e9a7eSchristos basic_machine=m68k-apollo 249c74ad251Schristos basic_os=sysv 250817e9a7eSchristos ;; 251817e9a7eSchristos apollo68bsd) 252817e9a7eSchristos basic_machine=m68k-apollo 253c74ad251Schristos basic_os=bsd 254817e9a7eSchristos ;; 255817e9a7eSchristos aros) 256817e9a7eSchristos basic_machine=i386-pc 257c74ad251Schristos basic_os=aros 258817e9a7eSchristos ;; 259817e9a7eSchristos aux) 260817e9a7eSchristos basic_machine=m68k-apple 261c74ad251Schristos basic_os=aux 262817e9a7eSchristos ;; 263817e9a7eSchristos balance) 264817e9a7eSchristos basic_machine=ns32k-sequent 265c74ad251Schristos basic_os=dynix 266817e9a7eSchristos ;; 267817e9a7eSchristos blackfin) 268817e9a7eSchristos basic_machine=bfin-unknown 269c74ad251Schristos basic_os=linux 270817e9a7eSchristos ;; 271817e9a7eSchristos cegcc) 272817e9a7eSchristos basic_machine=arm-unknown 273c74ad251Schristos basic_os=cegcc 274c74ad251Schristos ;; 275c74ad251Schristos convex-c1) 276c74ad251Schristos basic_machine=c1-convex 277c74ad251Schristos basic_os=bsd 278c74ad251Schristos ;; 279c74ad251Schristos convex-c2) 280c74ad251Schristos basic_machine=c2-convex 281c74ad251Schristos basic_os=bsd 282c74ad251Schristos ;; 283c74ad251Schristos convex-c32) 284c74ad251Schristos basic_machine=c32-convex 285c74ad251Schristos basic_os=bsd 286c74ad251Schristos ;; 287c74ad251Schristos convex-c34) 288c74ad251Schristos basic_machine=c34-convex 289c74ad251Schristos basic_os=bsd 290c74ad251Schristos ;; 291c74ad251Schristos convex-c38) 292c74ad251Schristos basic_machine=c38-convex 293c74ad251Schristos basic_os=bsd 294817e9a7eSchristos ;; 295817e9a7eSchristos cray) 296817e9a7eSchristos basic_machine=j90-cray 297c74ad251Schristos basic_os=unicos 298817e9a7eSchristos ;; 299c74ad251Schristos crds | unos) 300c74ad251Schristos basic_machine=m68k-crds 301c74ad251Schristos basic_os= 302c74ad251Schristos ;; 303c74ad251Schristos da30) 304c74ad251Schristos basic_machine=m68k-da30 305c74ad251Schristos basic_os= 306c74ad251Schristos ;; 307c74ad251Schristos decstation | pmax | pmin | dec3100 | decstatn) 308c74ad251Schristos basic_machine=mips-dec 309c74ad251Schristos basic_os= 310817e9a7eSchristos ;; 311817e9a7eSchristos delta88) 312817e9a7eSchristos basic_machine=m88k-motorola 313c74ad251Schristos basic_os=sysv3 314817e9a7eSchristos ;; 315817e9a7eSchristos dicos) 316817e9a7eSchristos basic_machine=i686-pc 317c74ad251Schristos basic_os=dicos 318817e9a7eSchristos ;; 319817e9a7eSchristos djgpp) 320817e9a7eSchristos basic_machine=i586-pc 321c74ad251Schristos basic_os=msdosdjgpp 322817e9a7eSchristos ;; 323817e9a7eSchristos ebmon29k) 324817e9a7eSchristos basic_machine=a29k-amd 325c74ad251Schristos basic_os=ebmon 326817e9a7eSchristos ;; 327817e9a7eSchristos es1800 | OSE68k | ose68k | ose | OSE) 328817e9a7eSchristos basic_machine=m68k-ericsson 329c74ad251Schristos basic_os=ose 330817e9a7eSchristos ;; 331817e9a7eSchristos gmicro) 332817e9a7eSchristos basic_machine=tron-gmicro 333c74ad251Schristos basic_os=sysv 334817e9a7eSchristos ;; 335817e9a7eSchristos go32) 336817e9a7eSchristos basic_machine=i386-pc 337c74ad251Schristos basic_os=go32 338817e9a7eSchristos ;; 339817e9a7eSchristos h8300hms) 340817e9a7eSchristos basic_machine=h8300-hitachi 341c74ad251Schristos basic_os=hms 342817e9a7eSchristos ;; 343817e9a7eSchristos h8300xray) 344817e9a7eSchristos basic_machine=h8300-hitachi 345c74ad251Schristos basic_os=xray 346817e9a7eSchristos ;; 347817e9a7eSchristos h8500hms) 348817e9a7eSchristos basic_machine=h8500-hitachi 349c74ad251Schristos basic_os=hms 350817e9a7eSchristos ;; 351817e9a7eSchristos harris) 352817e9a7eSchristos basic_machine=m88k-harris 353c74ad251Schristos basic_os=sysv3 354c74ad251Schristos ;; 355c74ad251Schristos hp300 | hp300hpux) 356c74ad251Schristos basic_machine=m68k-hp 357c74ad251Schristos basic_os=hpux 358817e9a7eSchristos ;; 359817e9a7eSchristos hp300bsd) 360817e9a7eSchristos basic_machine=m68k-hp 361c74ad251Schristos basic_os=bsd 362817e9a7eSchristos ;; 363817e9a7eSchristos hppaosf) 364817e9a7eSchristos basic_machine=hppa1.1-hp 365c74ad251Schristos basic_os=osf 366817e9a7eSchristos ;; 367817e9a7eSchristos hppro) 368817e9a7eSchristos basic_machine=hppa1.1-hp 369c74ad251Schristos basic_os=proelf 370817e9a7eSchristos ;; 371817e9a7eSchristos i386mach) 372817e9a7eSchristos basic_machine=i386-mach 373c74ad251Schristos basic_os=mach 374817e9a7eSchristos ;; 375817e9a7eSchristos isi68 | isi) 376817e9a7eSchristos basic_machine=m68k-isi 377c74ad251Schristos basic_os=sysv 378817e9a7eSchristos ;; 379817e9a7eSchristos m68knommu) 380817e9a7eSchristos basic_machine=m68k-unknown 381c74ad251Schristos basic_os=linux 382817e9a7eSchristos ;; 383817e9a7eSchristos magnum | m3230) 384817e9a7eSchristos basic_machine=mips-mips 385c74ad251Schristos basic_os=sysv 386817e9a7eSchristos ;; 387817e9a7eSchristos merlin) 388817e9a7eSchristos basic_machine=ns32k-utek 389c74ad251Schristos basic_os=sysv 390817e9a7eSchristos ;; 391817e9a7eSchristos mingw64) 392817e9a7eSchristos basic_machine=x86_64-pc 393c74ad251Schristos basic_os=mingw64 394817e9a7eSchristos ;; 395817e9a7eSchristos mingw32) 396817e9a7eSchristos basic_machine=i686-pc 397c74ad251Schristos basic_os=mingw32 398817e9a7eSchristos ;; 399817e9a7eSchristos mingw32ce) 400817e9a7eSchristos basic_machine=arm-unknown 401c74ad251Schristos basic_os=mingw32ce 402817e9a7eSchristos ;; 403817e9a7eSchristos monitor) 404817e9a7eSchristos basic_machine=m68k-rom68k 405c74ad251Schristos basic_os=coff 406817e9a7eSchristos ;; 407817e9a7eSchristos morphos) 408817e9a7eSchristos basic_machine=powerpc-unknown 409c74ad251Schristos basic_os=morphos 410817e9a7eSchristos ;; 411817e9a7eSchristos moxiebox) 412817e9a7eSchristos basic_machine=moxie-unknown 413c74ad251Schristos basic_os=moxiebox 414817e9a7eSchristos ;; 415817e9a7eSchristos msdos) 416817e9a7eSchristos basic_machine=i386-pc 417c74ad251Schristos basic_os=msdos 418817e9a7eSchristos ;; 419817e9a7eSchristos msys) 420817e9a7eSchristos basic_machine=i686-pc 421c74ad251Schristos basic_os=msys 422817e9a7eSchristos ;; 423817e9a7eSchristos mvs) 424817e9a7eSchristos basic_machine=i370-ibm 425c74ad251Schristos basic_os=mvs 426817e9a7eSchristos ;; 427817e9a7eSchristos nacl) 428817e9a7eSchristos basic_machine=le32-unknown 429c74ad251Schristos basic_os=nacl 430817e9a7eSchristos ;; 431817e9a7eSchristos ncr3000) 432817e9a7eSchristos basic_machine=i486-ncr 433c74ad251Schristos basic_os=sysv4 434817e9a7eSchristos ;; 435817e9a7eSchristos netbsd386) 436c74ad251Schristos basic_machine=i386-pc 437c74ad251Schristos basic_os=netbsd 438817e9a7eSchristos ;; 439817e9a7eSchristos netwinder) 440817e9a7eSchristos basic_machine=armv4l-rebel 441c74ad251Schristos basic_os=linux 442817e9a7eSchristos ;; 443817e9a7eSchristos news | news700 | news800 | news900) 444817e9a7eSchristos basic_machine=m68k-sony 445c74ad251Schristos basic_os=newsos 446817e9a7eSchristos ;; 447817e9a7eSchristos news1000) 448817e9a7eSchristos basic_machine=m68030-sony 449c74ad251Schristos basic_os=newsos 450817e9a7eSchristos ;; 451817e9a7eSchristos necv70) 452817e9a7eSchristos basic_machine=v70-nec 453c74ad251Schristos basic_os=sysv 454817e9a7eSchristos ;; 455817e9a7eSchristos nh3000) 456817e9a7eSchristos basic_machine=m68k-harris 457c74ad251Schristos basic_os=cxux 458817e9a7eSchristos ;; 459817e9a7eSchristos nh[45]000) 460817e9a7eSchristos basic_machine=m88k-harris 461c74ad251Schristos basic_os=cxux 462817e9a7eSchristos ;; 463817e9a7eSchristos nindy960) 464817e9a7eSchristos basic_machine=i960-intel 465c74ad251Schristos basic_os=nindy 466817e9a7eSchristos ;; 467817e9a7eSchristos mon960) 468817e9a7eSchristos basic_machine=i960-intel 469c74ad251Schristos basic_os=mon960 470817e9a7eSchristos ;; 471817e9a7eSchristos nonstopux) 472817e9a7eSchristos basic_machine=mips-compaq 473c74ad251Schristos basic_os=nonstopux 474817e9a7eSchristos ;; 475817e9a7eSchristos os400) 476817e9a7eSchristos basic_machine=powerpc-ibm 477c74ad251Schristos basic_os=os400 478817e9a7eSchristos ;; 479817e9a7eSchristos OSE68000 | ose68000) 480817e9a7eSchristos basic_machine=m68000-ericsson 481c74ad251Schristos basic_os=ose 482817e9a7eSchristos ;; 483817e9a7eSchristos os68k) 484817e9a7eSchristos basic_machine=m68k-none 485c74ad251Schristos basic_os=os68k 486817e9a7eSchristos ;; 487817e9a7eSchristos paragon) 488817e9a7eSchristos basic_machine=i860-intel 489c74ad251Schristos basic_os=osf 490817e9a7eSchristos ;; 491817e9a7eSchristos parisc) 492817e9a7eSchristos basic_machine=hppa-unknown 493c74ad251Schristos basic_os=linux 494c74ad251Schristos ;; 495c74ad251Schristos psp) 496c74ad251Schristos basic_machine=mipsallegrexel-sony 497c74ad251Schristos basic_os=psp 498817e9a7eSchristos ;; 499817e9a7eSchristos pw32) 500817e9a7eSchristos basic_machine=i586-unknown 501c74ad251Schristos basic_os=pw32 502817e9a7eSchristos ;; 503817e9a7eSchristos rdos | rdos64) 504817e9a7eSchristos basic_machine=x86_64-pc 505c74ad251Schristos basic_os=rdos 506817e9a7eSchristos ;; 507817e9a7eSchristos rdos32) 508817e9a7eSchristos basic_machine=i386-pc 509c74ad251Schristos basic_os=rdos 510817e9a7eSchristos ;; 511817e9a7eSchristos rom68k) 512817e9a7eSchristos basic_machine=m68k-rom68k 513c74ad251Schristos basic_os=coff 514817e9a7eSchristos ;; 515817e9a7eSchristos sa29200) 516817e9a7eSchristos basic_machine=a29k-amd 517c74ad251Schristos basic_os=udi 518817e9a7eSchristos ;; 519817e9a7eSchristos sei) 520817e9a7eSchristos basic_machine=mips-sei 521c74ad251Schristos basic_os=seiux 522c74ad251Schristos ;; 523c74ad251Schristos sequent) 524c74ad251Schristos basic_machine=i386-sequent 525c74ad251Schristos basic_os= 526817e9a7eSchristos ;; 527817e9a7eSchristos sps7) 528817e9a7eSchristos basic_machine=m68k-bull 529c74ad251Schristos basic_os=sysv2 530c74ad251Schristos ;; 531c74ad251Schristos st2000) 532c74ad251Schristos basic_machine=m68k-tandem 533c74ad251Schristos basic_os= 534817e9a7eSchristos ;; 535817e9a7eSchristos stratus) 536817e9a7eSchristos basic_machine=i860-stratus 537c74ad251Schristos basic_os=sysv4 538c74ad251Schristos ;; 539c74ad251Schristos sun2) 540c74ad251Schristos basic_machine=m68000-sun 541c74ad251Schristos basic_os= 542817e9a7eSchristos ;; 543817e9a7eSchristos sun2os3) 544817e9a7eSchristos basic_machine=m68000-sun 545c74ad251Schristos basic_os=sunos3 546817e9a7eSchristos ;; 547817e9a7eSchristos sun2os4) 548817e9a7eSchristos basic_machine=m68000-sun 549c74ad251Schristos basic_os=sunos4 550c74ad251Schristos ;; 551c74ad251Schristos sun3) 552c74ad251Schristos basic_machine=m68k-sun 553c74ad251Schristos basic_os= 554817e9a7eSchristos ;; 555817e9a7eSchristos sun3os3) 556817e9a7eSchristos basic_machine=m68k-sun 557c74ad251Schristos basic_os=sunos3 558817e9a7eSchristos ;; 559817e9a7eSchristos sun3os4) 560817e9a7eSchristos basic_machine=m68k-sun 561c74ad251Schristos basic_os=sunos4 562c74ad251Schristos ;; 563c74ad251Schristos sun4) 564c74ad251Schristos basic_machine=sparc-sun 565c74ad251Schristos basic_os= 566817e9a7eSchristos ;; 567817e9a7eSchristos sun4os3) 568817e9a7eSchristos basic_machine=sparc-sun 569c74ad251Schristos basic_os=sunos3 570817e9a7eSchristos ;; 571817e9a7eSchristos sun4os4) 572817e9a7eSchristos basic_machine=sparc-sun 573c74ad251Schristos basic_os=sunos4 574817e9a7eSchristos ;; 575817e9a7eSchristos sun4sol2) 576817e9a7eSchristos basic_machine=sparc-sun 577c74ad251Schristos basic_os=solaris2 578c74ad251Schristos ;; 579c74ad251Schristos sun386 | sun386i | roadrunner) 580c74ad251Schristos basic_machine=i386-sun 581c74ad251Schristos basic_os= 582817e9a7eSchristos ;; 583817e9a7eSchristos sv1) 584817e9a7eSchristos basic_machine=sv1-cray 585c74ad251Schristos basic_os=unicos 586817e9a7eSchristos ;; 587817e9a7eSchristos symmetry) 588817e9a7eSchristos basic_machine=i386-sequent 589c74ad251Schristos basic_os=dynix 590817e9a7eSchristos ;; 591817e9a7eSchristos t3e) 592817e9a7eSchristos basic_machine=alphaev5-cray 593c74ad251Schristos basic_os=unicos 594817e9a7eSchristos ;; 595817e9a7eSchristos t90) 596817e9a7eSchristos basic_machine=t90-cray 597c74ad251Schristos basic_os=unicos 598817e9a7eSchristos ;; 599817e9a7eSchristos toad1) 600817e9a7eSchristos basic_machine=pdp10-xkl 601c74ad251Schristos basic_os=tops20 602817e9a7eSchristos ;; 603817e9a7eSchristos tpf) 604817e9a7eSchristos basic_machine=s390x-ibm 605c74ad251Schristos basic_os=tpf 606817e9a7eSchristos ;; 607817e9a7eSchristos udi29k) 608817e9a7eSchristos basic_machine=a29k-amd 609c74ad251Schristos basic_os=udi 610817e9a7eSchristos ;; 611817e9a7eSchristos ultra3) 612817e9a7eSchristos basic_machine=a29k-nyu 613c74ad251Schristos basic_os=sym1 614817e9a7eSchristos ;; 615817e9a7eSchristos v810 | necv810) 616817e9a7eSchristos basic_machine=v810-nec 617c74ad251Schristos basic_os=none 618817e9a7eSchristos ;; 619817e9a7eSchristos vaxv) 620817e9a7eSchristos basic_machine=vax-dec 621c74ad251Schristos basic_os=sysv 622817e9a7eSchristos ;; 623817e9a7eSchristos vms) 624817e9a7eSchristos basic_machine=vax-dec 625c74ad251Schristos basic_os=vms 626c74ad251Schristos ;; 627c74ad251Schristos vsta) 628c74ad251Schristos basic_machine=i386-pc 629c74ad251Schristos basic_os=vsta 630817e9a7eSchristos ;; 631817e9a7eSchristos vxworks960) 632817e9a7eSchristos basic_machine=i960-wrs 633c74ad251Schristos basic_os=vxworks 634817e9a7eSchristos ;; 635817e9a7eSchristos vxworks68) 636817e9a7eSchristos basic_machine=m68k-wrs 637c74ad251Schristos basic_os=vxworks 638817e9a7eSchristos ;; 639817e9a7eSchristos vxworks29k) 640817e9a7eSchristos basic_machine=a29k-wrs 641c74ad251Schristos basic_os=vxworks 642817e9a7eSchristos ;; 643817e9a7eSchristos xbox) 644817e9a7eSchristos basic_machine=i686-pc 645c74ad251Schristos basic_os=mingw32 646817e9a7eSchristos ;; 647817e9a7eSchristos ymp) 648817e9a7eSchristos basic_machine=ymp-cray 649c74ad251Schristos basic_os=unicos 650817e9a7eSchristos ;; 651817e9a7eSchristos *) 6520f74e101Schristos basic_machine=$1 653c74ad251Schristos basic_os= 6540f74e101Schristos ;; 655817e9a7eSchristos esac 6560f74e101Schristos ;; 6570f74e101Schristosesac 6580f74e101Schristos 659c74ad251Schristos# Decode 1-component or ad-hoc basic machines 6600f74e101Schristoscase $basic_machine in 661c74ad251Schristos # Here we handle the default manufacturer of certain CPU types. It is in 662c74ad251Schristos # some cases the only manufacturer, in others, it is the most popular. 663c74ad251Schristos w89k) 664c74ad251Schristos cpu=hppa1.1 665c74ad251Schristos vendor=winbond 666c74ad251Schristos ;; 667c74ad251Schristos op50n) 668c74ad251Schristos cpu=hppa1.1 669c74ad251Schristos vendor=oki 670c74ad251Schristos ;; 671c74ad251Schristos op60c) 672c74ad251Schristos cpu=hppa1.1 673c74ad251Schristos vendor=oki 674c74ad251Schristos ;; 675c74ad251Schristos ibm*) 676c74ad251Schristos cpu=i370 677c74ad251Schristos vendor=ibm 678c74ad251Schristos ;; 679c74ad251Schristos orion105) 680c74ad251Schristos cpu=clipper 681c74ad251Schristos vendor=highlevel 682c74ad251Schristos ;; 683c74ad251Schristos mac | mpw | mac-mpw) 684c74ad251Schristos cpu=m68k 685c74ad251Schristos vendor=apple 686c74ad251Schristos ;; 687c74ad251Schristos pmac | pmac-mpw) 688c74ad251Schristos cpu=powerpc 689c74ad251Schristos vendor=apple 690c74ad251Schristos ;; 691c74ad251Schristos 692c74ad251Schristos # Recognize the various machine names and aliases which stand 693c74ad251Schristos # for a CPU type and a company and sometimes even an OS. 694c74ad251Schristos 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) 695c74ad251Schristos cpu=m68000 696c74ad251Schristos vendor=att 697c74ad251Schristos ;; 698c74ad251Schristos 3b*) 699c74ad251Schristos cpu=we32k 700c74ad251Schristos vendor=att 701c74ad251Schristos ;; 702c74ad251Schristos bluegene*) 703c74ad251Schristos cpu=powerpc 704c74ad251Schristos vendor=ibm 705c74ad251Schristos basic_os=cnk 706c74ad251Schristos ;; 707c74ad251Schristos decsystem10* | dec10*) 708c74ad251Schristos cpu=pdp10 709c74ad251Schristos vendor=dec 710c74ad251Schristos basic_os=tops10 711c74ad251Schristos ;; 712c74ad251Schristos decsystem20* | dec20*) 713c74ad251Schristos cpu=pdp10 714c74ad251Schristos vendor=dec 715c74ad251Schristos basic_os=tops20 716c74ad251Schristos ;; 717c74ad251Schristos delta | 3300 | motorola-3300 | motorola-delta \ 718c74ad251Schristos | 3300-motorola | delta-motorola) 719c74ad251Schristos cpu=m68k 720c74ad251Schristos vendor=motorola 721c74ad251Schristos ;; 722c74ad251Schristos dpx2*) 723c74ad251Schristos cpu=m68k 724c74ad251Schristos vendor=bull 725c74ad251Schristos basic_os=sysv3 726c74ad251Schristos ;; 727c74ad251Schristos encore | umax | mmax) 728c74ad251Schristos cpu=ns32k 729c74ad251Schristos vendor=encore 730c74ad251Schristos ;; 731c74ad251Schristos elxsi) 732c74ad251Schristos cpu=elxsi 733c74ad251Schristos vendor=elxsi 734c74ad251Schristos basic_os=${basic_os:-bsd} 735c74ad251Schristos ;; 736c74ad251Schristos fx2800) 737c74ad251Schristos cpu=i860 738c74ad251Schristos vendor=alliant 739c74ad251Schristos ;; 740c74ad251Schristos genix) 741c74ad251Schristos cpu=ns32k 742c74ad251Schristos vendor=ns 743c74ad251Schristos ;; 744c74ad251Schristos h3050r* | hiux*) 745c74ad251Schristos cpu=hppa1.1 746c74ad251Schristos vendor=hitachi 747c74ad251Schristos basic_os=hiuxwe2 748c74ad251Schristos ;; 749c74ad251Schristos hp3k9[0-9][0-9] | hp9[0-9][0-9]) 750c74ad251Schristos cpu=hppa1.0 751c74ad251Schristos vendor=hp 752c74ad251Schristos ;; 753c74ad251Schristos hp9k2[0-9][0-9] | hp9k31[0-9]) 754c74ad251Schristos cpu=m68000 755c74ad251Schristos vendor=hp 756c74ad251Schristos ;; 757c74ad251Schristos hp9k3[2-9][0-9]) 758c74ad251Schristos cpu=m68k 759c74ad251Schristos vendor=hp 760c74ad251Schristos ;; 761c74ad251Schristos hp9k6[0-9][0-9] | hp6[0-9][0-9]) 762c74ad251Schristos cpu=hppa1.0 763c74ad251Schristos vendor=hp 764c74ad251Schristos ;; 765c74ad251Schristos hp9k7[0-79][0-9] | hp7[0-79][0-9]) 766c74ad251Schristos cpu=hppa1.1 767c74ad251Schristos vendor=hp 768c74ad251Schristos ;; 769c74ad251Schristos hp9k78[0-9] | hp78[0-9]) 770c74ad251Schristos # FIXME: really hppa2.0-hp 771c74ad251Schristos cpu=hppa1.1 772c74ad251Schristos vendor=hp 773c74ad251Schristos ;; 774c74ad251Schristos hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) 775c74ad251Schristos # FIXME: really hppa2.0-hp 776c74ad251Schristos cpu=hppa1.1 777c74ad251Schristos vendor=hp 778c74ad251Schristos ;; 779c74ad251Schristos hp9k8[0-9][13679] | hp8[0-9][13679]) 780c74ad251Schristos cpu=hppa1.1 781c74ad251Schristos vendor=hp 782c74ad251Schristos ;; 783c74ad251Schristos hp9k8[0-9][0-9] | hp8[0-9][0-9]) 784c74ad251Schristos cpu=hppa1.0 785c74ad251Schristos vendor=hp 786c74ad251Schristos ;; 787c74ad251Schristos i*86v32) 788c74ad251Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 789c74ad251Schristos vendor=pc 790c74ad251Schristos basic_os=sysv32 791c74ad251Schristos ;; 792c74ad251Schristos i*86v4*) 793c74ad251Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 794c74ad251Schristos vendor=pc 795c74ad251Schristos basic_os=sysv4 796c74ad251Schristos ;; 797c74ad251Schristos i*86v) 798c74ad251Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 799c74ad251Schristos vendor=pc 800c74ad251Schristos basic_os=sysv 801c74ad251Schristos ;; 802c74ad251Schristos i*86sol2) 803c74ad251Schristos cpu=`echo "$1" | sed -e 's/86.*/86/'` 804c74ad251Schristos vendor=pc 805c74ad251Schristos basic_os=solaris2 806c74ad251Schristos ;; 807c74ad251Schristos j90 | j90-cray) 808c74ad251Schristos cpu=j90 809c74ad251Schristos vendor=cray 810c74ad251Schristos basic_os=${basic_os:-unicos} 811c74ad251Schristos ;; 812c74ad251Schristos iris | iris4d) 813c74ad251Schristos cpu=mips 814c74ad251Schristos vendor=sgi 815c74ad251Schristos case $basic_os in 816c74ad251Schristos irix*) 817c74ad251Schristos ;; 818c74ad251Schristos *) 819c74ad251Schristos basic_os=irix4 820c74ad251Schristos ;; 821c74ad251Schristos esac 822c74ad251Schristos ;; 823c74ad251Schristos miniframe) 824c74ad251Schristos cpu=m68000 825c74ad251Schristos vendor=convergent 826c74ad251Schristos ;; 827c74ad251Schristos *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) 828c74ad251Schristos cpu=m68k 829c74ad251Schristos vendor=atari 830c74ad251Schristos basic_os=mint 831c74ad251Schristos ;; 832c74ad251Schristos news-3600 | risc-news) 833c74ad251Schristos cpu=mips 834c74ad251Schristos vendor=sony 835c74ad251Schristos basic_os=newsos 836c74ad251Schristos ;; 837c74ad251Schristos next | m*-next) 838c74ad251Schristos cpu=m68k 839c74ad251Schristos vendor=next 840c74ad251Schristos case $basic_os in 841c74ad251Schristos openstep*) 842c74ad251Schristos ;; 843c74ad251Schristos nextstep*) 844c74ad251Schristos ;; 845c74ad251Schristos ns2*) 846c74ad251Schristos basic_os=nextstep2 847c74ad251Schristos ;; 848c74ad251Schristos *) 849c74ad251Schristos basic_os=nextstep3 850c74ad251Schristos ;; 851c74ad251Schristos esac 852c74ad251Schristos ;; 853c74ad251Schristos np1) 854c74ad251Schristos cpu=np1 855c74ad251Schristos vendor=gould 856c74ad251Schristos ;; 857c74ad251Schristos op50n-* | op60c-*) 858c74ad251Schristos cpu=hppa1.1 859c74ad251Schristos vendor=oki 860c74ad251Schristos basic_os=proelf 861c74ad251Schristos ;; 862c74ad251Schristos pa-hitachi) 863c74ad251Schristos cpu=hppa1.1 864c74ad251Schristos vendor=hitachi 865c74ad251Schristos basic_os=hiuxwe2 866c74ad251Schristos ;; 867c74ad251Schristos pbd) 868c74ad251Schristos cpu=sparc 869c74ad251Schristos vendor=tti 870c74ad251Schristos ;; 871c74ad251Schristos pbb) 872c74ad251Schristos cpu=m68k 873c74ad251Schristos vendor=tti 874c74ad251Schristos ;; 875c74ad251Schristos pc532) 876c74ad251Schristos cpu=ns32k 877c74ad251Schristos vendor=pc532 878c74ad251Schristos ;; 879c74ad251Schristos pn) 880c74ad251Schristos cpu=pn 881c74ad251Schristos vendor=gould 882c74ad251Schristos ;; 883c74ad251Schristos power) 884c74ad251Schristos cpu=power 885c74ad251Schristos vendor=ibm 886c74ad251Schristos ;; 887c74ad251Schristos ps2) 888c74ad251Schristos cpu=i386 889c74ad251Schristos vendor=ibm 890c74ad251Schristos ;; 891c74ad251Schristos rm[46]00) 892c74ad251Schristos cpu=mips 893c74ad251Schristos vendor=siemens 894c74ad251Schristos ;; 895c74ad251Schristos rtpc | rtpc-*) 896c74ad251Schristos cpu=romp 897c74ad251Schristos vendor=ibm 898c74ad251Schristos ;; 899c74ad251Schristos sde) 900c74ad251Schristos cpu=mipsisa32 901c74ad251Schristos vendor=sde 902c74ad251Schristos basic_os=${basic_os:-elf} 903c74ad251Schristos ;; 904c74ad251Schristos simso-wrs) 905c74ad251Schristos cpu=sparclite 906c74ad251Schristos vendor=wrs 907c74ad251Schristos basic_os=vxworks 908c74ad251Schristos ;; 909c74ad251Schristos tower | tower-32) 910c74ad251Schristos cpu=m68k 911c74ad251Schristos vendor=ncr 912c74ad251Schristos ;; 913c74ad251Schristos vpp*|vx|vx-*) 914c74ad251Schristos cpu=f301 915c74ad251Schristos vendor=fujitsu 916c74ad251Schristos ;; 917c74ad251Schristos w65) 918c74ad251Schristos cpu=w65 919c74ad251Schristos vendor=wdc 920c74ad251Schristos ;; 921c74ad251Schristos w89k-*) 922c74ad251Schristos cpu=hppa1.1 923c74ad251Schristos vendor=winbond 924c74ad251Schristos basic_os=proelf 925c74ad251Schristos ;; 926c74ad251Schristos none) 927c74ad251Schristos cpu=none 928c74ad251Schristos vendor=none 929c74ad251Schristos ;; 930c74ad251Schristos leon|leon[3-9]) 931c74ad251Schristos cpu=sparc 932c74ad251Schristos vendor=$basic_machine 933c74ad251Schristos ;; 934c74ad251Schristos leon-*|leon[3-9]-*) 935c74ad251Schristos cpu=sparc 936c74ad251Schristos vendor=`echo "$basic_machine" | sed 's/-.*//'` 937c74ad251Schristos ;; 938c74ad251Schristos 939c74ad251Schristos *-*) 940c74ad251Schristos # shellcheck disable=SC2162 941c74ad251Schristos saved_IFS=$IFS 942c74ad251Schristos IFS="-" read cpu vendor <<EOF 943c74ad251Schristos$basic_machine 944c74ad251SchristosEOF 945c74ad251Schristos IFS=$saved_IFS 946c74ad251Schristos ;; 947*26ba0b50Schristos # We use 'pc' rather than 'unknown' 948c74ad251Schristos # because (1) that's what they normally are, and 949c74ad251Schristos # (2) the word "unknown" tends to confuse beginning users. 950c74ad251Schristos i*86 | x86_64) 951c74ad251Schristos cpu=$basic_machine 952c74ad251Schristos vendor=pc 953c74ad251Schristos ;; 954c74ad251Schristos # These rules are duplicated from below for sake of the special case above; 955c74ad251Schristos # i.e. things that normalized to x86 arches should also default to "pc" 956c74ad251Schristos pc98) 957c74ad251Schristos cpu=i386 958c74ad251Schristos vendor=pc 959c74ad251Schristos ;; 960c74ad251Schristos x64 | amd64) 961c74ad251Schristos cpu=x86_64 962c74ad251Schristos vendor=pc 963c74ad251Schristos ;; 9640f74e101Schristos # Recognize the basic CPU types without company name. 965c74ad251Schristos *) 966c74ad251Schristos cpu=$basic_machine 967c74ad251Schristos vendor=unknown 968c74ad251Schristos ;; 969c74ad251Schristosesac 970c74ad251Schristos 971c74ad251Schristosunset -v basic_machine 972c74ad251Schristos 973c74ad251Schristos# Decode basic machines in the full and proper CPU-Company form. 974c74ad251Schristoscase $cpu-$vendor in 975c74ad251Schristos # Here we handle the default manufacturer of certain CPU types in canonical form. It is in 976c74ad251Schristos # some cases the only manufacturer, in others, it is the most popular. 977c74ad251Schristos craynv-unknown) 978c74ad251Schristos vendor=cray 979c74ad251Schristos basic_os=${basic_os:-unicosmp} 980c74ad251Schristos ;; 981c74ad251Schristos c90-unknown | c90-cray) 982c74ad251Schristos vendor=cray 983c74ad251Schristos basic_os=${Basic_os:-unicos} 984c74ad251Schristos ;; 985c74ad251Schristos fx80-unknown) 986c74ad251Schristos vendor=alliant 987c74ad251Schristos ;; 988c74ad251Schristos romp-unknown) 989c74ad251Schristos vendor=ibm 990c74ad251Schristos ;; 991c74ad251Schristos mmix-unknown) 992c74ad251Schristos vendor=knuth 993c74ad251Schristos ;; 994c74ad251Schristos microblaze-unknown | microblazeel-unknown) 995c74ad251Schristos vendor=xilinx 996c74ad251Schristos ;; 997c74ad251Schristos rs6000-unknown) 998c74ad251Schristos vendor=ibm 999c74ad251Schristos ;; 1000c74ad251Schristos vax-unknown) 1001c74ad251Schristos vendor=dec 1002c74ad251Schristos ;; 1003c74ad251Schristos pdp11-unknown) 1004c74ad251Schristos vendor=dec 1005c74ad251Schristos ;; 1006c74ad251Schristos we32k-unknown) 1007c74ad251Schristos vendor=att 1008c74ad251Schristos ;; 1009c74ad251Schristos cydra-unknown) 1010c74ad251Schristos vendor=cydrome 1011c74ad251Schristos ;; 1012c74ad251Schristos i370-ibm*) 1013c74ad251Schristos vendor=ibm 1014c74ad251Schristos ;; 1015c74ad251Schristos orion-unknown) 1016c74ad251Schristos vendor=highlevel 1017c74ad251Schristos ;; 1018c74ad251Schristos xps-unknown | xps100-unknown) 1019c74ad251Schristos cpu=xps100 1020c74ad251Schristos vendor=honeywell 1021c74ad251Schristos ;; 1022c74ad251Schristos 1023c74ad251Schristos # Here we normalize CPU types with a missing or matching vendor 1024c74ad251Schristos armh-unknown | armh-alt) 1025c74ad251Schristos cpu=armv7l 1026c74ad251Schristos vendor=alt 1027c74ad251Schristos basic_os=${basic_os:-linux-gnueabihf} 1028c74ad251Schristos ;; 1029c74ad251Schristos dpx20-unknown | dpx20-bull) 1030c74ad251Schristos cpu=rs6000 1031c74ad251Schristos vendor=bull 1032c74ad251Schristos basic_os=${basic_os:-bosx} 1033c74ad251Schristos ;; 1034c74ad251Schristos 1035c74ad251Schristos # Here we normalize CPU types irrespective of the vendor 1036c74ad251Schristos amd64-*) 1037c74ad251Schristos cpu=x86_64 1038c74ad251Schristos ;; 1039c74ad251Schristos blackfin-*) 1040c74ad251Schristos cpu=bfin 1041c74ad251Schristos basic_os=linux 1042c74ad251Schristos ;; 1043c74ad251Schristos c54x-*) 1044c74ad251Schristos cpu=tic54x 1045c74ad251Schristos ;; 1046c74ad251Schristos c55x-*) 1047c74ad251Schristos cpu=tic55x 1048c74ad251Schristos ;; 1049c74ad251Schristos c6x-*) 1050c74ad251Schristos cpu=tic6x 1051c74ad251Schristos ;; 1052c74ad251Schristos e500v[12]-*) 1053c74ad251Schristos cpu=powerpc 1054c74ad251Schristos basic_os=${basic_os}"spe" 1055c74ad251Schristos ;; 1056c74ad251Schristos mips3*-*) 1057c74ad251Schristos cpu=mips64 1058c74ad251Schristos ;; 1059c74ad251Schristos ms1-*) 1060c74ad251Schristos cpu=mt 1061c74ad251Schristos ;; 1062c74ad251Schristos m68knommu-*) 1063c74ad251Schristos cpu=m68k 1064c74ad251Schristos basic_os=linux 1065c74ad251Schristos ;; 1066c74ad251Schristos m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) 1067c74ad251Schristos cpu=s12z 1068c74ad251Schristos ;; 1069c74ad251Schristos openrisc-*) 1070c74ad251Schristos cpu=or32 1071c74ad251Schristos ;; 1072c74ad251Schristos parisc-*) 1073c74ad251Schristos cpu=hppa 1074c74ad251Schristos basic_os=linux 1075c74ad251Schristos ;; 1076c74ad251Schristos pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) 1077c74ad251Schristos cpu=i586 1078c74ad251Schristos ;; 1079c74ad251Schristos pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*) 1080c74ad251Schristos cpu=i686 1081c74ad251Schristos ;; 1082c74ad251Schristos pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) 1083c74ad251Schristos cpu=i686 1084c74ad251Schristos ;; 1085c74ad251Schristos pentium4-*) 1086c74ad251Schristos cpu=i786 1087c74ad251Schristos ;; 1088c74ad251Schristos pc98-*) 1089c74ad251Schristos cpu=i386 1090c74ad251Schristos ;; 1091c74ad251Schristos ppc-* | ppcbe-*) 1092c74ad251Schristos cpu=powerpc 1093c74ad251Schristos ;; 1094c74ad251Schristos ppcle-* | powerpclittle-*) 1095c74ad251Schristos cpu=powerpcle 1096c74ad251Schristos ;; 1097c74ad251Schristos ppc64-*) 1098c74ad251Schristos cpu=powerpc64 1099c74ad251Schristos ;; 1100c74ad251Schristos ppc64le-* | powerpc64little-*) 1101c74ad251Schristos cpu=powerpc64le 1102c74ad251Schristos ;; 1103c74ad251Schristos sb1-*) 1104c74ad251Schristos cpu=mipsisa64sb1 1105c74ad251Schristos ;; 1106c74ad251Schristos sb1el-*) 1107c74ad251Schristos cpu=mipsisa64sb1el 1108c74ad251Schristos ;; 1109c74ad251Schristos sh5e[lb]-*) 1110c74ad251Schristos cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` 1111c74ad251Schristos ;; 1112c74ad251Schristos spur-*) 1113c74ad251Schristos cpu=spur 1114c74ad251Schristos ;; 1115c74ad251Schristos strongarm-* | thumb-*) 1116c74ad251Schristos cpu=arm 1117c74ad251Schristos ;; 1118c74ad251Schristos tx39-*) 1119c74ad251Schristos cpu=mipstx39 1120c74ad251Schristos ;; 1121c74ad251Schristos tx39el-*) 1122c74ad251Schristos cpu=mipstx39el 1123c74ad251Schristos ;; 1124c74ad251Schristos x64-*) 1125c74ad251Schristos cpu=x86_64 1126c74ad251Schristos ;; 1127c74ad251Schristos xscale-* | xscalee[bl]-*) 1128c74ad251Schristos cpu=`echo "$cpu" | sed 's/^xscale/arm/'` 1129c74ad251Schristos ;; 1130c74ad251Schristos arm64-* | aarch64le-*) 1131c74ad251Schristos cpu=aarch64 1132c74ad251Schristos ;; 1133c74ad251Schristos 1134c74ad251Schristos # Recognize the canonical CPU Types that limit and/or modify the 1135c74ad251Schristos # company names they are paired with. 1136c74ad251Schristos cr16-*) 1137c74ad251Schristos basic_os=${basic_os:-elf} 1138c74ad251Schristos ;; 1139c74ad251Schristos crisv32-* | etraxfs*-*) 1140c74ad251Schristos cpu=crisv32 1141c74ad251Schristos vendor=axis 1142c74ad251Schristos ;; 1143c74ad251Schristos cris-* | etrax*-*) 1144c74ad251Schristos cpu=cris 1145c74ad251Schristos vendor=axis 1146c74ad251Schristos ;; 1147c74ad251Schristos crx-*) 1148c74ad251Schristos basic_os=${basic_os:-elf} 1149c74ad251Schristos ;; 1150c74ad251Schristos neo-tandem) 1151c74ad251Schristos cpu=neo 1152c74ad251Schristos vendor=tandem 1153c74ad251Schristos ;; 1154c74ad251Schristos nse-tandem) 1155c74ad251Schristos cpu=nse 1156c74ad251Schristos vendor=tandem 1157c74ad251Schristos ;; 1158c74ad251Schristos nsr-tandem) 1159c74ad251Schristos cpu=nsr 1160c74ad251Schristos vendor=tandem 1161c74ad251Schristos ;; 1162c74ad251Schristos nsv-tandem) 1163c74ad251Schristos cpu=nsv 1164c74ad251Schristos vendor=tandem 1165c74ad251Schristos ;; 1166c74ad251Schristos nsx-tandem) 1167c74ad251Schristos cpu=nsx 1168c74ad251Schristos vendor=tandem 1169c74ad251Schristos ;; 1170c74ad251Schristos mipsallegrexel-sony) 1171c74ad251Schristos cpu=mipsallegrexel 1172c74ad251Schristos vendor=sony 1173c74ad251Schristos ;; 1174c74ad251Schristos tile*-*) 1175c74ad251Schristos basic_os=${basic_os:-linux-gnu} 1176c74ad251Schristos ;; 1177c74ad251Schristos 1178c74ad251Schristos *) 1179c74ad251Schristos # Recognize the canonical CPU types that are allowed with any 1180c74ad251Schristos # company name. 1181c74ad251Schristos case $cpu in 11820f74e101Schristos 1750a | 580 \ 11830f74e101Schristos | a29k \ 1184*26ba0b50Schristos | aarch64 | aarch64_be | aarch64c | arm64ec \ 1185c74ad251Schristos | abacus \ 1186c74ad251Schristos | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ 1187c74ad251Schristos | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ 1188c74ad251Schristos | alphapca5[67] | alpha64pca5[67] \ 11890f74e101Schristos | am33_2.0 \ 1190c74ad251Schristos | amdgcn \ 1191c74ad251Schristos | arc | arceb | arc32 | arc64 \ 1192c74ad251Schristos | arm | arm[lb]e | arme[lb] | armv* \ 11933d25ea14Schristos | avr | avr32 \ 1194c74ad251Schristos | asmjs \ 1195cc576e1dSsevan | ba \ 1196c47fd378Schristos | be32 | be64 \ 1197c74ad251Schristos | bfin | bpf | bs2000 \ 1198c74ad251Schristos | c[123]* | c30 | [cjt]90 | c4x \ 1199c74ad251Schristos | c8051 | clipper | craynv | csky | cydra \ 12000f74e101Schristos | d10v | d30v | dlx | dsp16xx \ 1201c74ad251Schristos | e2k | elxsi | epiphany \ 1202c74ad251Schristos | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ 1203*26ba0b50Schristos | javascript \ 1204c74ad251Schristos | h8300 | h8500 \ 1205c74ad251Schristos | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ 1206c47fd378Schristos | hexagon \ 1207c74ad251Schristos | i370 | i*86 | i860 | i960 | ia16 | ia64 \ 12080f74e101Schristos | ip2k | iq2000 \ 12093d25ea14Schristos | k1om \ 1210*26ba0b50Schristos | kvx \ 1211c47fd378Schristos | le32 | le64 \ 12120f74e101Schristos | lm32 \ 1213c74ad251Schristos | loongarch32 | loongarch64 \ 1214c74ad251Schristos | m32c | m32r | m32rle \ 1215c74ad251Schristos | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ 1216c74ad251Schristos | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ 1217c74ad251Schristos | m88110 | m88k | maxq | mb | mcore | mep | metag \ 1218c74ad251Schristos | microblaze | microblazeel \ 1219*26ba0b50Schristos | mips* \ 1220c74ad251Schristos | mmix \ 12210f74e101Schristos | mn10200 | mn10300 \ 12220f74e101Schristos | moxie \ 12230f74e101Schristos | mt \ 12240f74e101Schristos | msp430 \ 1225*26ba0b50Schristos | nanomips* \ 1226c47fd378Schristos | nds32 | nds32le | nds32be \ 1227817e9a7eSchristos | nfp \ 12283d25ea14Schristos | nios | nios2 | nios2eb | nios2el \ 1229c74ad251Schristos | none | np1 | ns16k | ns32k | nvptx \ 1230c74ad251Schristos | open8 \ 1231c74ad251Schristos | or1k* \ 1232c74ad251Schristos | or32 \ 1233c74ad251Schristos | orion \ 1234c74ad251Schristos | picochip \ 1235c74ad251Schristos | pdp10 | pdp11 | pj | pjl | pn | power \ 1236c74ad251Schristos | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ 1237cc576e1dSsevan | pru \ 12380f74e101Schristos | pyramid \ 1239c74ad251Schristos | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ 1240c74ad251Schristos | rl78 | romp | rs6000 | rx \ 1241c74ad251Schristos | s390 | s390x \ 12420f74e101Schristos | score \ 1243c74ad251Schristos | sh | shl \ 1244c74ad251Schristos | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ 1245c74ad251Schristos | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ 1246c74ad251Schristos | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ 1247c74ad251Schristos | sparclite \ 1248c74ad251Schristos | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ 1249c47fd378Schristos | spu \ 1250c74ad251Schristos | tahoe \ 1251c74ad251Schristos | thumbv7* \ 1252c74ad251Schristos | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ 1253c74ad251Schristos | tron \ 12540f74e101Schristos | ubicom32 \ 1255c74ad251Schristos | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ 1256c74ad251Schristos | vax \ 1257*26ba0b50Schristos | vc4 \ 12583d25ea14Schristos | visium \ 1259c74ad251Schristos | w65 \ 1260c74ad251Schristos | wasm32 | wasm64 \ 1261c74ad251Schristos | we32k \ 1262c74ad251Schristos | x86 | x86_64 | xc16x | xgate | xps100 \ 1263c74ad251Schristos | xstormy16 | xtensa* \ 1264c74ad251Schristos | ymp \ 12650f74e101Schristos | z8k | z80) 1266c47fd378Schristos ;; 1267c47fd378Schristos 12680f74e101Schristos *) 1269*26ba0b50Schristos echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 12700f74e101Schristos exit 1 12710f74e101Schristos ;; 12720f74e101Schristos esac 1273c74ad251Schristos ;; 1274c74ad251Schristosesac 12750f74e101Schristos 12760f74e101Schristos# Here we canonicalize certain aliases for manufacturers. 1277c74ad251Schristoscase $vendor in 1278c74ad251Schristos digital*) 1279c74ad251Schristos vendor=dec 12800f74e101Schristos ;; 1281c74ad251Schristos commodore*) 1282c74ad251Schristos vendor=cbm 12830f74e101Schristos ;; 12840f74e101Schristos *) 12850f74e101Schristos ;; 12860f74e101Schristosesac 12870f74e101Schristos 12880f74e101Schristos# Decode manufacturer-specific aliases for certain operating systems. 12890f74e101Schristos 1290*26ba0b50Schristosif test x"$basic_os" != x 12910f74e101Schristosthen 1292c74ad251Schristos 1293c74ad251Schristos# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just 1294c74ad251Schristos# set os. 1295*26ba0b50Schristosobj= 1296c74ad251Schristoscase $basic_os in 1297c74ad251Schristos gnu/linux*) 1298c74ad251Schristos kernel=linux 1299c74ad251Schristos os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` 1300c74ad251Schristos ;; 1301c74ad251Schristos os2-emx) 1302c74ad251Schristos kernel=os2 1303c74ad251Schristos os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` 1304c74ad251Schristos ;; 1305c74ad251Schristos nto-qnx*) 1306c74ad251Schristos kernel=nto 1307c74ad251Schristos os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` 1308c74ad251Schristos ;; 1309c74ad251Schristos *-*) 1310c74ad251Schristos # shellcheck disable=SC2162 1311c74ad251Schristos saved_IFS=$IFS 1312c74ad251Schristos IFS="-" read kernel os <<EOF 1313c74ad251Schristos$basic_os 1314c74ad251SchristosEOF 1315c74ad251Schristos IFS=$saved_IFS 1316c74ad251Schristos ;; 1317c74ad251Schristos # Default OS when just kernel was specified 1318c74ad251Schristos nto*) 1319c74ad251Schristos kernel=nto 1320c74ad251Schristos os=`echo "$basic_os" | sed -e 's|nto|qnx|'` 1321c74ad251Schristos ;; 1322c74ad251Schristos linux*) 1323c74ad251Schristos kernel=linux 1324c74ad251Schristos os=`echo "$basic_os" | sed -e 's|linux|gnu|'` 1325c74ad251Schristos ;; 1326c74ad251Schristos managarm*) 1327c74ad251Schristos kernel=managarm 1328c74ad251Schristos os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'` 1329c74ad251Schristos ;; 1330c74ad251Schristos *) 1331c74ad251Schristos kernel= 1332c74ad251Schristos os=$basic_os 1333c74ad251Schristos ;; 1334c74ad251Schristosesac 1335c74ad251Schristos 1336c74ad251Schristos# Now, normalize the OS (knowing we just have one component, it's not a kernel, 1337c74ad251Schristos# etc.) 13380f74e101Schristoscase $os in 1339817e9a7eSchristos # First match some system type aliases that might get confused 1340817e9a7eSchristos # with valid system types. 1341817e9a7eSchristos # solaris* is a basic system type, with this one exception. 1342817e9a7eSchristos auroraux) 1343817e9a7eSchristos os=auroraux 13440f74e101Schristos ;; 1345817e9a7eSchristos bluegene*) 1346817e9a7eSchristos os=cnk 1347817e9a7eSchristos ;; 1348817e9a7eSchristos solaris1 | solaris1.*) 1349c74ad251Schristos os=`echo "$os" | sed -e 's|solaris1|sunos4|'` 13500f74e101Schristos ;; 1351817e9a7eSchristos solaris) 1352817e9a7eSchristos os=solaris2 13530f74e101Schristos ;; 1354817e9a7eSchristos unixware*) 1355817e9a7eSchristos os=sysv4.2uw 13560f74e101Schristos ;; 1357817e9a7eSchristos # es1800 is here to avoid being matched by es* (a different OS) 1358817e9a7eSchristos es1800*) 1359817e9a7eSchristos os=ose 1360817e9a7eSchristos ;; 1361817e9a7eSchristos # Some version numbers need modification 1362817e9a7eSchristos chorusos*) 1363817e9a7eSchristos os=chorusos 1364817e9a7eSchristos ;; 1365817e9a7eSchristos isc) 1366817e9a7eSchristos os=isc2.2 1367817e9a7eSchristos ;; 1368817e9a7eSchristos sco6) 1369817e9a7eSchristos os=sco5v6 1370817e9a7eSchristos ;; 1371817e9a7eSchristos sco5) 1372817e9a7eSchristos os=sco3.2v5 1373817e9a7eSchristos ;; 1374817e9a7eSchristos sco4) 1375817e9a7eSchristos os=sco3.2v4 1376817e9a7eSchristos ;; 1377817e9a7eSchristos sco3.2.[4-9]*) 1378c74ad251Schristos os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` 1379817e9a7eSchristos ;; 1380c74ad251Schristos sco*v* | scout) 1381817e9a7eSchristos # Don't match below 1382817e9a7eSchristos ;; 1383817e9a7eSchristos sco*) 1384817e9a7eSchristos os=sco3.2v2 1385817e9a7eSchristos ;; 1386817e9a7eSchristos psos*) 1387817e9a7eSchristos os=psos 1388817e9a7eSchristos ;; 1389817e9a7eSchristos qnx*) 1390c74ad251Schristos os=qnx 13910f74e101Schristos ;; 1392817e9a7eSchristos hiux*) 1393817e9a7eSchristos os=hiuxwe2 13940f74e101Schristos ;; 1395817e9a7eSchristos lynx*178) 1396817e9a7eSchristos os=lynxos178 13970f74e101Schristos ;; 1398817e9a7eSchristos lynx*5) 1399817e9a7eSchristos os=lynxos5 14000f74e101Schristos ;; 1401c74ad251Schristos lynxos*) 1402c74ad251Schristos # don't get caught up in next wildcard 1403c74ad251Schristos ;; 1404817e9a7eSchristos lynx*) 1405817e9a7eSchristos os=lynxos 14060f74e101Schristos ;; 1407c74ad251Schristos mac[0-9]*) 1408817e9a7eSchristos os=`echo "$os" | sed -e 's|mac|macos|'` 14090f74e101Schristos ;; 1410817e9a7eSchristos opened*) 1411817e9a7eSchristos os=openedition 14120f74e101Schristos ;; 1413817e9a7eSchristos os400*) 1414817e9a7eSchristos os=os400 14150f74e101Schristos ;; 1416817e9a7eSchristos sunos5*) 1417817e9a7eSchristos os=`echo "$os" | sed -e 's|sunos5|solaris2|'` 14180f74e101Schristos ;; 1419817e9a7eSchristos sunos6*) 1420817e9a7eSchristos os=`echo "$os" | sed -e 's|sunos6|solaris3|'` 14210f74e101Schristos ;; 1422817e9a7eSchristos wince*) 1423817e9a7eSchristos os=wince 14240f74e101Schristos ;; 1425817e9a7eSchristos utek*) 1426817e9a7eSchristos os=bsd 14270f74e101Schristos ;; 1428817e9a7eSchristos dynix*) 1429817e9a7eSchristos os=bsd 14300f74e101Schristos ;; 1431817e9a7eSchristos acis*) 1432817e9a7eSchristos os=aos 14330f74e101Schristos ;; 1434817e9a7eSchristos atheos*) 1435817e9a7eSchristos os=atheos 14360f74e101Schristos ;; 1437817e9a7eSchristos syllable*) 1438817e9a7eSchristos os=syllable 14390f74e101Schristos ;; 1440817e9a7eSchristos 386bsd) 1441817e9a7eSchristos os=bsd 14420f74e101Schristos ;; 1443817e9a7eSchristos ctix* | uts*) 1444817e9a7eSchristos os=sysv 14450f74e101Schristos ;; 1446817e9a7eSchristos nova*) 1447817e9a7eSchristos os=rtmk-nova 1448817e9a7eSchristos ;; 1449817e9a7eSchristos ns2) 1450817e9a7eSchristos os=nextstep2 1451817e9a7eSchristos ;; 14520f74e101Schristos # Preserve the version number of sinix5. 1453817e9a7eSchristos sinix5.*) 1454c74ad251Schristos os=`echo "$os" | sed -e 's|sinix|sysv|'` 14550f74e101Schristos ;; 1456817e9a7eSchristos sinix*) 1457817e9a7eSchristos os=sysv4 14580f74e101Schristos ;; 1459817e9a7eSchristos tpf*) 1460817e9a7eSchristos os=tpf 14610f74e101Schristos ;; 1462817e9a7eSchristos triton*) 1463817e9a7eSchristos os=sysv3 14640f74e101Schristos ;; 1465817e9a7eSchristos oss*) 1466817e9a7eSchristos os=sysv3 14670f74e101Schristos ;; 1468817e9a7eSchristos svr4*) 1469817e9a7eSchristos os=sysv4 14700f74e101Schristos ;; 1471817e9a7eSchristos svr3) 1472817e9a7eSchristos os=sysv3 14730f74e101Schristos ;; 1474817e9a7eSchristos sysvr4) 1475817e9a7eSchristos os=sysv4 14760f74e101Schristos ;; 1477817e9a7eSchristos ose*) 1478817e9a7eSchristos os=ose 14790f74e101Schristos ;; 1480817e9a7eSchristos *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) 1481817e9a7eSchristos os=mint 14820f74e101Schristos ;; 1483817e9a7eSchristos dicos*) 1484817e9a7eSchristos os=dicos 14850f74e101Schristos ;; 1486817e9a7eSchristos pikeos*) 1487817e9a7eSchristos # Until real need of OS specific support for 1488817e9a7eSchristos # particular features comes up, bare metal 1489817e9a7eSchristos # configurations are quite functional. 1490c74ad251Schristos case $cpu in 1491817e9a7eSchristos arm*) 1492817e9a7eSchristos os=eabi 14930f74e101Schristos ;; 14940f74e101Schristos *) 1495*26ba0b50Schristos os= 1496*26ba0b50Schristos obj=elf 1497817e9a7eSchristos ;; 1498817e9a7eSchristos esac 1499817e9a7eSchristos ;; 1500*26ba0b50Schristos aout* | coff* | elf* | pe*) 1501*26ba0b50Schristos # These are machine code file formats, not OSes 1502*26ba0b50Schristos obj=$os 1503*26ba0b50Schristos os= 1504*26ba0b50Schristos ;; 1505817e9a7eSchristos *) 1506c74ad251Schristos # No normalization, but not necessarily accepted, that comes below. 15070f74e101Schristos ;; 15080f74e101Schristosesac 1509c74ad251Schristos 15100f74e101Schristoselse 15110f74e101Schristos 15120f74e101Schristos# Here we handle the default operating systems that come with various machines. 15130f74e101Schristos# The value should be what the vendor currently ships out the door with their 15140f74e101Schristos# machine or put another way, the most popular os provided with the machine. 15150f74e101Schristos 15160f74e101Schristos# Note that if you're going to try to match "-MANUFACTURER" here (say, 15170f74e101Schristos# "-sun"), then you have to tell the case statement up towards the top 15180f74e101Schristos# that MANUFACTURER isn't an operating system. Otherwise, code above 15190f74e101Schristos# will signal an error saying that MANUFACTURER isn't an operating 15200f74e101Schristos# system, and we'll never get to this point. 15210f74e101Schristos 1522c74ad251Schristoskernel= 1523*26ba0b50Schristosobj= 1524c74ad251Schristoscase $cpu-$vendor in 15250f74e101Schristos score-*) 1526*26ba0b50Schristos os= 1527*26ba0b50Schristos obj=elf 15280f74e101Schristos ;; 15290f74e101Schristos spu-*) 1530*26ba0b50Schristos os= 1531*26ba0b50Schristos obj=elf 15320f74e101Schristos ;; 15330f74e101Schristos *-acorn) 1534817e9a7eSchristos os=riscix1.2 15350f74e101Schristos ;; 15360f74e101Schristos arm*-rebel) 1537c74ad251Schristos kernel=linux 1538c74ad251Schristos os=gnu 15390f74e101Schristos ;; 15400f74e101Schristos arm*-semi) 1541*26ba0b50Schristos os= 1542*26ba0b50Schristos obj=aout 15430f74e101Schristos ;; 15440f74e101Schristos c4x-* | tic4x-*) 1545*26ba0b50Schristos os= 1546*26ba0b50Schristos obj=coff 15470f74e101Schristos ;; 15483d25ea14Schristos c8051-*) 1549*26ba0b50Schristos os= 1550*26ba0b50Schristos obj=elf 1551817e9a7eSchristos ;; 1552817e9a7eSchristos clipper-intergraph) 1553817e9a7eSchristos os=clix 15543d25ea14Schristos ;; 15553d25ea14Schristos hexagon-*) 1556*26ba0b50Schristos os= 1557*26ba0b50Schristos obj=elf 15583d25ea14Schristos ;; 1559c47fd378Schristos tic54x-*) 1560*26ba0b50Schristos os= 1561*26ba0b50Schristos obj=coff 1562c47fd378Schristos ;; 1563c47fd378Schristos tic55x-*) 1564*26ba0b50Schristos os= 1565*26ba0b50Schristos obj=coff 1566c47fd378Schristos ;; 1567c47fd378Schristos tic6x-*) 1568*26ba0b50Schristos os= 1569*26ba0b50Schristos obj=coff 1570c47fd378Schristos ;; 15710f74e101Schristos # This must come before the *-dec entry. 15720f74e101Schristos pdp10-*) 1573817e9a7eSchristos os=tops20 15740f74e101Schristos ;; 15750f74e101Schristos pdp11-*) 1576817e9a7eSchristos os=none 15770f74e101Schristos ;; 15780f74e101Schristos *-dec | vax-*) 1579817e9a7eSchristos os=ultrix4.2 15800f74e101Schristos ;; 15810f74e101Schristos m68*-apollo) 1582817e9a7eSchristos os=domain 15830f74e101Schristos ;; 15840f74e101Schristos i386-sun) 1585817e9a7eSchristos os=sunos4.0.2 15860f74e101Schristos ;; 15870f74e101Schristos m68000-sun) 1588817e9a7eSchristos os=sunos3 15890f74e101Schristos ;; 15900f74e101Schristos m68*-cisco) 1591*26ba0b50Schristos os= 1592*26ba0b50Schristos obj=aout 15930f74e101Schristos ;; 15940f74e101Schristos mep-*) 1595*26ba0b50Schristos os= 1596*26ba0b50Schristos obj=elf 15970f74e101Schristos ;; 15980f74e101Schristos mips*-cisco) 1599*26ba0b50Schristos os= 1600*26ba0b50Schristos obj=elf 16010f74e101Schristos ;; 1602*26ba0b50Schristos mips*-*|nanomips*-*) 1603*26ba0b50Schristos os= 1604*26ba0b50Schristos obj=elf 16050f74e101Schristos ;; 16060f74e101Schristos or32-*) 1607*26ba0b50Schristos os= 1608*26ba0b50Schristos obj=coff 16090f74e101Schristos ;; 16100f74e101Schristos *-tti) # must be before sparc entry or we get the wrong os. 1611817e9a7eSchristos os=sysv3 16120f74e101Schristos ;; 16130f74e101Schristos sparc-* | *-sun) 1614817e9a7eSchristos os=sunos4.1.1 16150f74e101Schristos ;; 1616cc576e1dSsevan pru-*) 1617*26ba0b50Schristos os= 1618*26ba0b50Schristos obj=elf 1619cc576e1dSsevan ;; 16200f74e101Schristos *-be) 1621817e9a7eSchristos os=beos 16220f74e101Schristos ;; 16230f74e101Schristos *-ibm) 1624817e9a7eSchristos os=aix 16250f74e101Schristos ;; 16260f74e101Schristos *-knuth) 1627817e9a7eSchristos os=mmixware 16280f74e101Schristos ;; 16290f74e101Schristos *-wec) 1630817e9a7eSchristos os=proelf 16310f74e101Schristos ;; 16320f74e101Schristos *-winbond) 1633817e9a7eSchristos os=proelf 16340f74e101Schristos ;; 16350f74e101Schristos *-oki) 1636817e9a7eSchristos os=proelf 16370f74e101Schristos ;; 16380f74e101Schristos *-hp) 1639817e9a7eSchristos os=hpux 16400f74e101Schristos ;; 16410f74e101Schristos *-hitachi) 1642817e9a7eSchristos os=hiux 16430f74e101Schristos ;; 16440f74e101Schristos i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) 1645817e9a7eSchristos os=sysv 16460f74e101Schristos ;; 16470f74e101Schristos *-cbm) 1648817e9a7eSchristos os=amigaos 16490f74e101Schristos ;; 16500f74e101Schristos *-dg) 1651817e9a7eSchristos os=dgux 16520f74e101Schristos ;; 16530f74e101Schristos *-dolphin) 1654817e9a7eSchristos os=sysv3 16550f74e101Schristos ;; 16560f74e101Schristos m68k-ccur) 1657817e9a7eSchristos os=rtu 16580f74e101Schristos ;; 16590f74e101Schristos m88k-omron*) 1660817e9a7eSchristos os=luna 16610f74e101Schristos ;; 16620f74e101Schristos *-next) 1663817e9a7eSchristos os=nextstep 16640f74e101Schristos ;; 16650f74e101Schristos *-sequent) 1666817e9a7eSchristos os=ptx 16670f74e101Schristos ;; 16680f74e101Schristos *-crds) 1669817e9a7eSchristos os=unos 16700f74e101Schristos ;; 16710f74e101Schristos *-ns) 1672817e9a7eSchristos os=genix 16730f74e101Schristos ;; 16740f74e101Schristos i370-*) 1675817e9a7eSchristos os=mvs 16760f74e101Schristos ;; 16770f74e101Schristos *-gould) 1678817e9a7eSchristos os=sysv 16790f74e101Schristos ;; 16800f74e101Schristos *-highlevel) 1681817e9a7eSchristos os=bsd 16820f74e101Schristos ;; 16830f74e101Schristos *-encore) 1684817e9a7eSchristos os=bsd 16850f74e101Schristos ;; 16860f74e101Schristos *-sgi) 1687817e9a7eSchristos os=irix 16880f74e101Schristos ;; 16890f74e101Schristos *-siemens) 1690817e9a7eSchristos os=sysv4 16910f74e101Schristos ;; 16920f74e101Schristos *-masscomp) 1693817e9a7eSchristos os=rtu 16940f74e101Schristos ;; 16950f74e101Schristos f30[01]-fujitsu | f700-fujitsu) 1696817e9a7eSchristos os=uxpv 16970f74e101Schristos ;; 16980f74e101Schristos *-rom68k) 1699*26ba0b50Schristos os= 1700*26ba0b50Schristos obj=coff 17010f74e101Schristos ;; 17020f74e101Schristos *-*bug) 1703*26ba0b50Schristos os= 1704*26ba0b50Schristos obj=coff 17050f74e101Schristos ;; 17060f74e101Schristos *-apple) 1707817e9a7eSchristos os=macos 17080f74e101Schristos ;; 17090f74e101Schristos *-atari*) 1710817e9a7eSchristos os=mint 1711817e9a7eSchristos ;; 1712817e9a7eSchristos *-wrs) 1713817e9a7eSchristos os=vxworks 17140f74e101Schristos ;; 17150f74e101Schristos *) 1716817e9a7eSchristos os=none 17170f74e101Schristos ;; 17180f74e101Schristosesac 1719c74ad251Schristos 17200f74e101Schristosfi 17210f74e101Schristos 1722*26ba0b50Schristos# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). 1723*26ba0b50Schristos 1724c74ad251Schristoscase $os in 1725c74ad251Schristos # Sometimes we do "kernel-libc", so those need to count as OSes. 1726*26ba0b50Schristos llvm* | musl* | newlib* | relibc* | uclibc*) 1727c74ad251Schristos ;; 1728c74ad251Schristos # Likewise for "kernel-abi" 1729c74ad251Schristos eabi* | gnueabi*) 1730c74ad251Schristos ;; 1731c74ad251Schristos # VxWorks passes extra cpu info in the 4th filed. 1732c74ad251Schristos simlinux | simwindows | spe) 1733c74ad251Schristos ;; 1734*26ba0b50Schristos # See `case $cpu-$os` validation below 1735*26ba0b50Schristos ghcjs) 1736*26ba0b50Schristos ;; 1737c74ad251Schristos # Now accept the basic system types. 1738c74ad251Schristos # The portable systems comes first. 1739c74ad251Schristos # Each alternative MUST end in a * to match a version number. 1740c74ad251Schristos gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ 1741c74ad251Schristos | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ 1742c74ad251Schristos | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ 1743c74ad251Schristos | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ 1744c74ad251Schristos | hiux* | abug | nacl* | netware* | windows* \ 1745*26ba0b50Schristos | os9* | macos* | osx* | ios* | tvos* | watchos* \ 1746c74ad251Schristos | mpw* | magic* | mmixware* | mon960* | lnews* \ 1747c74ad251Schristos | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ 1748c74ad251Schristos | aos* | aros* | cloudabi* | sortix* | twizzler* \ 1749c74ad251Schristos | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ 1750c74ad251Schristos | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ 1751c74ad251Schristos | mirbsd* | netbsd* | dicos* | openedition* | ose* \ 1752c74ad251Schristos | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ 1753c74ad251Schristos | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ 1754*26ba0b50Schristos | bosx* | nextstep* | cxux* | oabi* \ 1755*26ba0b50Schristos | ptx* | ecoff* | winnt* | domain* | vsta* \ 1756c74ad251Schristos | udi* | lites* | ieee* | go32* | aux* | hcos* \ 1757c74ad251Schristos | chorusrdb* | cegcc* | glidix* | serenity* \ 1758*26ba0b50Schristos | cygwin* | msys* | moss* | proelf* | rtems* \ 1759c74ad251Schristos | midipix* | mingw32* | mingw64* | mint* \ 1760c74ad251Schristos | uxpv* | beos* | mpeix* | udk* | moxiebox* \ 1761c74ad251Schristos | interix* | uwin* | mks* | rhapsody* | darwin* \ 1762c74ad251Schristos | openstep* | oskit* | conix* | pw32* | nonstopux* \ 1763c74ad251Schristos | storm-chaos* | tops10* | tenex* | tops20* | its* \ 1764c74ad251Schristos | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ 1765c74ad251Schristos | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ 1766c74ad251Schristos | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ 1767c74ad251Schristos | skyos* | haiku* | rdos* | toppers* | drops* | es* \ 1768c74ad251Schristos | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ 1769c74ad251Schristos | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ 1770c74ad251Schristos | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ 1771*26ba0b50Schristos | fiwix* | mlibc* | cos* | mbr* | ironclad* ) 1772c74ad251Schristos ;; 1773c74ad251Schristos # This one is extra strict with allowed versions 1774c74ad251Schristos sco3.2v2 | sco3.2v[4-9]* | sco5v6*) 1775c74ad251Schristos # Don't forget version if it is 3.2v4 or newer. 1776c74ad251Schristos ;; 1777*26ba0b50Schristos # This refers to builds using the UEFI calling convention 1778*26ba0b50Schristos # (which depends on the architecture) and PE file format. 1779*26ba0b50Schristos # Note that this is both a different calling convention and 1780*26ba0b50Schristos # different file format than that of GNU-EFI 1781*26ba0b50Schristos # (x86_64-w64-mingw32). 1782*26ba0b50Schristos uefi) 1783*26ba0b50Schristos ;; 1784c74ad251Schristos none) 1785c74ad251Schristos ;; 1786*26ba0b50Schristos kernel* | msvc* ) 1787c74ad251Schristos # Restricted further below 1788c74ad251Schristos ;; 1789*26ba0b50Schristos '') 1790*26ba0b50Schristos if test x"$obj" = x 1791*26ba0b50Schristos then 1792*26ba0b50Schristos echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 1793*26ba0b50Schristos fi 1794*26ba0b50Schristos ;; 1795c74ad251Schristos *) 1796*26ba0b50Schristos echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 1797*26ba0b50Schristos exit 1 1798*26ba0b50Schristos ;; 1799*26ba0b50Schristosesac 1800*26ba0b50Schristos 1801*26ba0b50Schristoscase $obj in 1802*26ba0b50Schristos aout* | coff* | elf* | pe*) 1803*26ba0b50Schristos ;; 1804*26ba0b50Schristos '') 1805*26ba0b50Schristos # empty is fine 1806*26ba0b50Schristos ;; 1807*26ba0b50Schristos *) 1808*26ba0b50Schristos echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 1809*26ba0b50Schristos exit 1 1810*26ba0b50Schristos ;; 1811*26ba0b50Schristosesac 1812*26ba0b50Schristos 1813*26ba0b50Schristos# Here we handle the constraint that a (synthetic) cpu and os are 1814*26ba0b50Schristos# valid only in combination with each other and nowhere else. 1815*26ba0b50Schristoscase $cpu-$os in 1816*26ba0b50Schristos # The "javascript-unknown-ghcjs" triple is used by GHC; we 1817*26ba0b50Schristos # accept it here in order to tolerate that, but reject any 1818*26ba0b50Schristos # variations. 1819*26ba0b50Schristos javascript-ghcjs) 1820*26ba0b50Schristos ;; 1821*26ba0b50Schristos javascript-* | *-ghcjs) 1822*26ba0b50Schristos echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 1823c74ad251Schristos exit 1 1824c74ad251Schristos ;; 1825c74ad251Schristosesac 1826c74ad251Schristos 1827c74ad251Schristos# As a final step for OS-related things, validate the OS-kernel combination 1828c74ad251Schristos# (given a valid OS), if there is a kernel. 1829*26ba0b50Schristoscase $kernel-$os-$obj in 1830*26ba0b50Schristos linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ 1831*26ba0b50Schristos | linux-mlibc*- | linux-musl*- | linux-newlib*- \ 1832*26ba0b50Schristos | linux-relibc*- | linux-uclibc*- ) 1833c74ad251Schristos ;; 1834*26ba0b50Schristos uclinux-uclibc*- ) 1835c74ad251Schristos ;; 1836*26ba0b50Schristos managarm-mlibc*- | managarm-kernel*- ) 1837c74ad251Schristos ;; 1838*26ba0b50Schristos windows*-msvc*-) 1839*26ba0b50Schristos ;; 1840*26ba0b50Schristos -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ 1841*26ba0b50Schristos | -uclibc*- ) 1842c74ad251Schristos # These are just libc implementations, not actual OSes, and thus 1843c74ad251Schristos # require a kernel. 1844*26ba0b50Schristos echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 1845c74ad251Schristos exit 1 1846c74ad251Schristos ;; 1847*26ba0b50Schristos -kernel*- ) 1848*26ba0b50Schristos echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 1849c74ad251Schristos exit 1 1850c74ad251Schristos ;; 1851*26ba0b50Schristos *-kernel*- ) 1852*26ba0b50Schristos echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 1853c74ad251Schristos exit 1 1854c74ad251Schristos ;; 1855*26ba0b50Schristos *-msvc*- ) 1856*26ba0b50Schristos echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 1857*26ba0b50Schristos exit 1 1858c74ad251Schristos ;; 1859*26ba0b50Schristos kfreebsd*-gnu*- | kopensolaris*-gnu*-) 1860c74ad251Schristos ;; 1861*26ba0b50Schristos vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) 1862c74ad251Schristos ;; 1863*26ba0b50Schristos nto-qnx*-) 1864c74ad251Schristos ;; 1865*26ba0b50Schristos os2-emx-) 1866c74ad251Schristos ;; 1867*26ba0b50Schristos *-eabi*- | *-gnueabi*-) 1868*26ba0b50Schristos ;; 1869*26ba0b50Schristos none--*) 1870*26ba0b50Schristos # None (no kernel, i.e. freestanding / bare metal), 1871*26ba0b50Schristos # can be paired with an machine code file format 1872*26ba0b50Schristos ;; 1873*26ba0b50Schristos -*-) 1874c74ad251Schristos # Blank kernel with real OS is always fine. 1875c74ad251Schristos ;; 1876*26ba0b50Schristos --*) 1877*26ba0b50Schristos # Blank kernel and OS with real machine code file format is always fine. 1878*26ba0b50Schristos ;; 1879*26ba0b50Schristos *-*-*) 1880*26ba0b50Schristos echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 1881c74ad251Schristos exit 1 1882c74ad251Schristos ;; 1883c74ad251Schristosesac 1884c74ad251Schristos 18850f74e101Schristos# Here we handle the case where we know the os, and the CPU type, but not the 18860f74e101Schristos# manufacturer. We pick the logical manufacturer. 1887c74ad251Schristoscase $vendor in 1888c74ad251Schristos unknown) 1889c74ad251Schristos case $cpu-$os in 1890c74ad251Schristos *-riscix*) 18910f74e101Schristos vendor=acorn 18920f74e101Schristos ;; 1893c74ad251Schristos *-sunos*) 18940f74e101Schristos vendor=sun 18950f74e101Schristos ;; 1896c74ad251Schristos *-cnk* | *-aix*) 18970f74e101Schristos vendor=ibm 18980f74e101Schristos ;; 1899c74ad251Schristos *-beos*) 19000f74e101Schristos vendor=be 19010f74e101Schristos ;; 1902c74ad251Schristos *-hpux*) 19030f74e101Schristos vendor=hp 19040f74e101Schristos ;; 1905c74ad251Schristos *-mpeix*) 19060f74e101Schristos vendor=hp 19070f74e101Schristos ;; 1908c74ad251Schristos *-hiux*) 19090f74e101Schristos vendor=hitachi 19100f74e101Schristos ;; 1911c74ad251Schristos *-unos*) 19120f74e101Schristos vendor=crds 19130f74e101Schristos ;; 1914c74ad251Schristos *-dgux*) 19150f74e101Schristos vendor=dg 19160f74e101Schristos ;; 1917c74ad251Schristos *-luna*) 19180f74e101Schristos vendor=omron 19190f74e101Schristos ;; 1920c74ad251Schristos *-genix*) 19210f74e101Schristos vendor=ns 19220f74e101Schristos ;; 1923c74ad251Schristos *-clix*) 1924817e9a7eSchristos vendor=intergraph 1925817e9a7eSchristos ;; 1926c74ad251Schristos *-mvs* | *-opened*) 19270f74e101Schristos vendor=ibm 19280f74e101Schristos ;; 1929c74ad251Schristos *-os400*) 19300f74e101Schristos vendor=ibm 19310f74e101Schristos ;; 1932c74ad251Schristos s390-* | s390x-*) 1933c74ad251Schristos vendor=ibm 1934c74ad251Schristos ;; 1935c74ad251Schristos *-ptx*) 19360f74e101Schristos vendor=sequent 19370f74e101Schristos ;; 1938c74ad251Schristos *-tpf*) 19390f74e101Schristos vendor=ibm 19400f74e101Schristos ;; 1941c74ad251Schristos *-vxsim* | *-vxworks* | *-windiss*) 19420f74e101Schristos vendor=wrs 19430f74e101Schristos ;; 1944c74ad251Schristos *-aux*) 19450f74e101Schristos vendor=apple 19460f74e101Schristos ;; 1947c74ad251Schristos *-hms*) 19480f74e101Schristos vendor=hitachi 19490f74e101Schristos ;; 1950c74ad251Schristos *-mpw* | *-macos*) 19510f74e101Schristos vendor=apple 19520f74e101Schristos ;; 1953c74ad251Schristos *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) 19540f74e101Schristos vendor=atari 19550f74e101Schristos ;; 1956c74ad251Schristos *-vos*) 19570f74e101Schristos vendor=stratus 19580f74e101Schristos ;; 19590f74e101Schristos esac 19600f74e101Schristos ;; 19610f74e101Schristosesac 19620f74e101Schristos 1963*26ba0b50Schristosecho "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" 19640f74e101Schristosexit 19650f74e101Schristos 19660f74e101Schristos# Local variables: 1967817e9a7eSchristos# eval: (add-hook 'before-save-hook 'time-stamp) 19680f74e101Schristos# time-stamp-start: "timestamp='" 19690f74e101Schristos# time-stamp-format: "%:y-%02m-%02d" 19700f74e101Schristos# time-stamp-end: "'" 19710f74e101Schristos# End: 1972