1ed6f5d66Smrg#! /bin/sh 2ed6f5d66Smrg# Configuration validation subroutine script. 3a3680546Smrg# Copyright 1992-2024 Free Software Foundation, Inc. 4ed6f5d66Smrg 53d05230fSmrg# shellcheck disable=SC2006,SC2268 # see below for rationale 63d05230fSmrg 7a3680546Smrgtimestamp='2024-01-01' 8ed6f5d66Smrg 9ed6f5d66Smrg# This file is free software; you can redistribute it and/or modify it 10ed6f5d66Smrg# under the terms of the GNU General Public License as published by 11139359d2Smrg# the Free Software Foundation, either version 3 of the License, or 12ed6f5d66Smrg# (at your option) any later version. 13ed6f5d66Smrg# 14ed6f5d66Smrg# This program is distributed in the hope that it will be useful, but 15ed6f5d66Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 16ed6f5d66Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17ed6f5d66Smrg# General Public License for more details. 18ed6f5d66Smrg# 19ed6f5d66Smrg# You should have received a copy of the GNU General Public License 203d05230fSmrg# along with this program; if not, see <https://www.gnu.org/licenses/>. 21ed6f5d66Smrg# 22ed6f5d66Smrg# As a special exception to the GNU General Public License, if you 23ed6f5d66Smrg# distribute this file as part of a program that contains a 24ed6f5d66Smrg# configuration script generated by Autoconf, you may include it under 25ed6f5d66Smrg# the same distribution terms that you use for the rest of that 26ed6f5d66Smrg# program. This Exception is an additional permission under section 7 27ed6f5d66Smrg# of the GNU General Public License, version 3 ("GPLv3"). 28ed6f5d66Smrg 29ed6f5d66Smrg 30fbc03982Smrg# Please send patches to <config-patches@gnu.org>. 31ed6f5d66Smrg# 32ed6f5d66Smrg# Configuration subroutine to validate and canonicalize a configuration type. 33ed6f5d66Smrg# Supply the specified configuration type as an argument. 34ed6f5d66Smrg# If it is invalid, we print an error message on stderr and exit with code 1. 35ed6f5d66Smrg# Otherwise, we print the canonical config type on stdout and succeed. 36ed6f5d66Smrg 37ed6f5d66Smrg# You can get the latest version of this script from: 383d05230fSmrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub 39ed6f5d66Smrg 40ed6f5d66Smrg# This file is supposed to be the same for all GNU packages 41ed6f5d66Smrg# and recognize all the CPU types, system types and aliases 42ed6f5d66Smrg# that are meaningful with *any* GNU software. 43ed6f5d66Smrg# Each package is responsible for reporting which valid configurations 44ed6f5d66Smrg# it does not support. The user should be able to distinguish 45ed6f5d66Smrg# a failure to support a valid configuration from a meaningless 46ed6f5d66Smrg# configuration. 47ed6f5d66Smrg 48ed6f5d66Smrg# The goal of this file is to map all the various variations of a given 49ed6f5d66Smrg# machine specification into a single specification in the form: 50ed6f5d66Smrg# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM 51ed6f5d66Smrg# or in some cases, the newer four-part form: 52ed6f5d66Smrg# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM 53ed6f5d66Smrg# It is wrong to echo any other type of specification. 54ed6f5d66Smrg 553d05230fSmrg# The "shellcheck disable" line above the timestamp inhibits complaints 563d05230fSmrg# about features and limitations of the classic Bourne shell that were 573d05230fSmrg# superseded or lifted in POSIX. However, this script identifies a wide 583d05230fSmrg# variety of pre-POSIX systems that do not have POSIX shells at all, and 593d05230fSmrg# even some reasonably current systems (Solaris 10 as case-in-point) still 603d05230fSmrg# have a pre-POSIX /bin/sh. 613d05230fSmrg 62ed6f5d66Smrgme=`echo "$0" | sed -e 's,.*/,,'` 63ed6f5d66Smrg 64ed6f5d66Smrgusage="\ 65fbc03982SmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS 66ed6f5d66Smrg 67ed6f5d66SmrgCanonicalize a configuration name. 68ed6f5d66Smrg 693d05230fSmrgOptions: 70ed6f5d66Smrg -h, --help print this help, then exit 71ed6f5d66Smrg -t, --time-stamp print date of last modification, then exit 72ed6f5d66Smrg -v, --version print version number, then exit 73ed6f5d66Smrg 74ed6f5d66SmrgReport bugs and patches to <config-patches@gnu.org>." 75ed6f5d66Smrg 76ed6f5d66Smrgversion="\ 77ed6f5d66SmrgGNU config.sub ($timestamp) 78ed6f5d66Smrg 79a3680546SmrgCopyright 1992-2024 Free Software Foundation, Inc. 80ed6f5d66Smrg 81ed6f5d66SmrgThis is free software; see the source for copying conditions. There is NO 82ed6f5d66Smrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 83ed6f5d66Smrg 84ed6f5d66Smrghelp=" 85a3680546SmrgTry '$me --help' for more information." 86ed6f5d66Smrg 87ed6f5d66Smrg# Parse command line 88ed6f5d66Smrgwhile test $# -gt 0 ; do 89ed6f5d66Smrg case $1 in 90ed6f5d66Smrg --time-stamp | --time* | -t ) 91ed6f5d66Smrg echo "$timestamp" ; exit ;; 92ed6f5d66Smrg --version | -v ) 93ed6f5d66Smrg echo "$version" ; exit ;; 94ed6f5d66Smrg --help | --h* | -h ) 95ed6f5d66Smrg echo "$usage"; exit ;; 96ed6f5d66Smrg -- ) # Stop option processing 97ed6f5d66Smrg shift; break ;; 98ed6f5d66Smrg - ) # Use stdin as input. 99ed6f5d66Smrg break ;; 100ed6f5d66Smrg -* ) 1013d05230fSmrg echo "$me: invalid option $1$help" >&2 102ed6f5d66Smrg exit 1 ;; 103ed6f5d66Smrg 104ed6f5d66Smrg *local*) 105ed6f5d66Smrg # First pass through any local machine types. 1063d05230fSmrg echo "$1" 107ed6f5d66Smrg exit ;; 108ed6f5d66Smrg 109ed6f5d66Smrg * ) 110ed6f5d66Smrg break ;; 111ed6f5d66Smrg esac 112ed6f5d66Smrgdone 113ed6f5d66Smrg 114ed6f5d66Smrgcase $# in 115ed6f5d66Smrg 0) echo "$me: missing argument$help" >&2 116ed6f5d66Smrg exit 1;; 117ed6f5d66Smrg 1) ;; 118ed6f5d66Smrg *) echo "$me: too many arguments$help" >&2 119ed6f5d66Smrg exit 1;; 120ed6f5d66Smrgesac 121ed6f5d66Smrg 1223d05230fSmrg# Split fields of configuration type 1233d05230fSmrg# shellcheck disable=SC2162 1243d05230fSmrgsaved_IFS=$IFS 1253d05230fSmrgIFS="-" read field1 field2 field3 field4 <<EOF 1263d05230fSmrg$1 1273d05230fSmrgEOF 1283d05230fSmrgIFS=$saved_IFS 129ed6f5d66Smrg 1303d05230fSmrg# Separate into logical components for further validation 1313d05230fSmrgcase $1 in 1323d05230fSmrg *-*-*-*-*) 133a3680546Smrg echo "Invalid configuration '$1': more than four components" >&2 1343d05230fSmrg exit 1 135ed6f5d66Smrg ;; 1363d05230fSmrg *-*-*-*) 1373d05230fSmrg basic_machine=$field1-$field2 1383d05230fSmrg basic_os=$field3-$field4 139ed6f5d66Smrg ;; 1403d05230fSmrg *-*-*) 1413d05230fSmrg # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two 1423d05230fSmrg # parts 1433d05230fSmrg maybe_os=$field2-$field3 1443d05230fSmrg case $maybe_os in 1453d05230fSmrg nto-qnx* | linux-* | uclinux-uclibc* \ 1463d05230fSmrg | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ 1473d05230fSmrg | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ 148a3680546Smrg | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ 149a3680546Smrg | windows-* ) 1503d05230fSmrg basic_machine=$field1 1513d05230fSmrg basic_os=$maybe_os 1523d05230fSmrg ;; 1533d05230fSmrg android-linux) 1543d05230fSmrg basic_machine=$field1-unknown 1553d05230fSmrg basic_os=linux-android 1563d05230fSmrg ;; 1573d05230fSmrg *) 1583d05230fSmrg basic_machine=$field1-$field2 1593d05230fSmrg basic_os=$field3 1603d05230fSmrg ;; 1613d05230fSmrg esac 162ed6f5d66Smrg ;; 1633d05230fSmrg *-*) 1643d05230fSmrg # A lone config we happen to match not fitting any pattern 1653d05230fSmrg case $field1-$field2 in 1663d05230fSmrg decstation-3100) 1673d05230fSmrg basic_machine=mips-dec 1683d05230fSmrg basic_os= 1693d05230fSmrg ;; 1703d05230fSmrg *-*) 1713d05230fSmrg # Second component is usually, but not always the OS 1723d05230fSmrg case $field2 in 1733d05230fSmrg # Prevent following clause from handling this valid os 1743d05230fSmrg sun*os*) 1753d05230fSmrg basic_machine=$field1 1763d05230fSmrg basic_os=$field2 1773d05230fSmrg ;; 1783d05230fSmrg zephyr*) 1793d05230fSmrg basic_machine=$field1-unknown 1803d05230fSmrg basic_os=$field2 1813d05230fSmrg ;; 1823d05230fSmrg # Manufacturers 1833d05230fSmrg dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ 1843d05230fSmrg | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ 1853d05230fSmrg | unicom* | ibm* | next | hp | isi* | apollo | altos* \ 1863d05230fSmrg | convergent* | ncr* | news | 32* | 3600* | 3100* \ 1873d05230fSmrg | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ 1883d05230fSmrg | ultra | tti* | harris | dolphin | highlevel | gould \ 1893d05230fSmrg | cbm | ns | masscomp | apple | axis | knuth | cray \ 1903d05230fSmrg | microblaze* | sim | cisco \ 1913d05230fSmrg | oki | wec | wrs | winbond) 1923d05230fSmrg basic_machine=$field1-$field2 1933d05230fSmrg basic_os= 1943d05230fSmrg ;; 1953d05230fSmrg *) 1963d05230fSmrg basic_machine=$field1 1973d05230fSmrg basic_os=$field2 1983d05230fSmrg ;; 1993d05230fSmrg esac 2003d05230fSmrg ;; 2013d05230fSmrg esac 202ed6f5d66Smrg ;; 2033d05230fSmrg *) 2043d05230fSmrg # Convert single-component short-hands not valid as part of 2053d05230fSmrg # multi-component configurations. 2063d05230fSmrg case $field1 in 2073d05230fSmrg 386bsd) 2083d05230fSmrg basic_machine=i386-pc 2093d05230fSmrg basic_os=bsd 2103d05230fSmrg ;; 2113d05230fSmrg a29khif) 2123d05230fSmrg basic_machine=a29k-amd 2133d05230fSmrg basic_os=udi 2143d05230fSmrg ;; 2153d05230fSmrg adobe68k) 2163d05230fSmrg basic_machine=m68010-adobe 2173d05230fSmrg basic_os=scout 2183d05230fSmrg ;; 2193d05230fSmrg alliant) 2203d05230fSmrg basic_machine=fx80-alliant 2213d05230fSmrg basic_os= 2223d05230fSmrg ;; 2233d05230fSmrg altos | altos3068) 2243d05230fSmrg basic_machine=m68k-altos 2253d05230fSmrg basic_os= 2263d05230fSmrg ;; 2273d05230fSmrg am29k) 2283d05230fSmrg basic_machine=a29k-none 2293d05230fSmrg basic_os=bsd 2303d05230fSmrg ;; 2313d05230fSmrg amdahl) 2323d05230fSmrg basic_machine=580-amdahl 2333d05230fSmrg basic_os=sysv 2343d05230fSmrg ;; 2353d05230fSmrg amiga) 2363d05230fSmrg basic_machine=m68k-unknown 2373d05230fSmrg basic_os= 2383d05230fSmrg ;; 2393d05230fSmrg amigaos | amigados) 2403d05230fSmrg basic_machine=m68k-unknown 2413d05230fSmrg basic_os=amigaos 2423d05230fSmrg ;; 2433d05230fSmrg amigaunix | amix) 2443d05230fSmrg basic_machine=m68k-unknown 2453d05230fSmrg basic_os=sysv4 2463d05230fSmrg ;; 2473d05230fSmrg apollo68) 2483d05230fSmrg basic_machine=m68k-apollo 2493d05230fSmrg basic_os=sysv 2503d05230fSmrg ;; 2513d05230fSmrg apollo68bsd) 2523d05230fSmrg basic_machine=m68k-apollo 2533d05230fSmrg basic_os=bsd 2543d05230fSmrg ;; 2553d05230fSmrg aros) 2563d05230fSmrg basic_machine=i386-pc 2573d05230fSmrg basic_os=aros 2583d05230fSmrg ;; 2593d05230fSmrg aux) 2603d05230fSmrg basic_machine=m68k-apple 2613d05230fSmrg basic_os=aux 2623d05230fSmrg ;; 2633d05230fSmrg balance) 2643d05230fSmrg basic_machine=ns32k-sequent 2653d05230fSmrg basic_os=dynix 2663d05230fSmrg ;; 2673d05230fSmrg blackfin) 2683d05230fSmrg basic_machine=bfin-unknown 2693d05230fSmrg basic_os=linux 2703d05230fSmrg ;; 2713d05230fSmrg cegcc) 2723d05230fSmrg basic_machine=arm-unknown 2733d05230fSmrg basic_os=cegcc 2743d05230fSmrg ;; 2753d05230fSmrg convex-c1) 2763d05230fSmrg basic_machine=c1-convex 2773d05230fSmrg basic_os=bsd 2783d05230fSmrg ;; 2793d05230fSmrg convex-c2) 2803d05230fSmrg basic_machine=c2-convex 2813d05230fSmrg basic_os=bsd 2823d05230fSmrg ;; 2833d05230fSmrg convex-c32) 2843d05230fSmrg basic_machine=c32-convex 2853d05230fSmrg basic_os=bsd 2863d05230fSmrg ;; 2873d05230fSmrg convex-c34) 2883d05230fSmrg basic_machine=c34-convex 2893d05230fSmrg basic_os=bsd 2903d05230fSmrg ;; 2913d05230fSmrg convex-c38) 2923d05230fSmrg basic_machine=c38-convex 2933d05230fSmrg basic_os=bsd 2943d05230fSmrg ;; 2953d05230fSmrg cray) 2963d05230fSmrg basic_machine=j90-cray 2973d05230fSmrg basic_os=unicos 2983d05230fSmrg ;; 2993d05230fSmrg crds | unos) 3003d05230fSmrg basic_machine=m68k-crds 3013d05230fSmrg basic_os= 3023d05230fSmrg ;; 3033d05230fSmrg da30) 3043d05230fSmrg basic_machine=m68k-da30 3053d05230fSmrg basic_os= 3063d05230fSmrg ;; 3073d05230fSmrg decstation | pmax | pmin | dec3100 | decstatn) 3083d05230fSmrg basic_machine=mips-dec 3093d05230fSmrg basic_os= 3103d05230fSmrg ;; 3113d05230fSmrg delta88) 3123d05230fSmrg basic_machine=m88k-motorola 3133d05230fSmrg basic_os=sysv3 3143d05230fSmrg ;; 3153d05230fSmrg dicos) 3163d05230fSmrg basic_machine=i686-pc 3173d05230fSmrg basic_os=dicos 3183d05230fSmrg ;; 3193d05230fSmrg djgpp) 3203d05230fSmrg basic_machine=i586-pc 3213d05230fSmrg basic_os=msdosdjgpp 3223d05230fSmrg ;; 3233d05230fSmrg ebmon29k) 3243d05230fSmrg basic_machine=a29k-amd 3253d05230fSmrg basic_os=ebmon 3263d05230fSmrg ;; 3273d05230fSmrg es1800 | OSE68k | ose68k | ose | OSE) 3283d05230fSmrg basic_machine=m68k-ericsson 3293d05230fSmrg basic_os=ose 3303d05230fSmrg ;; 3313d05230fSmrg gmicro) 3323d05230fSmrg basic_machine=tron-gmicro 3333d05230fSmrg basic_os=sysv 3343d05230fSmrg ;; 3353d05230fSmrg go32) 3363d05230fSmrg basic_machine=i386-pc 3373d05230fSmrg basic_os=go32 3383d05230fSmrg ;; 3393d05230fSmrg h8300hms) 3403d05230fSmrg basic_machine=h8300-hitachi 3413d05230fSmrg basic_os=hms 3423d05230fSmrg ;; 3433d05230fSmrg h8300xray) 3443d05230fSmrg basic_machine=h8300-hitachi 3453d05230fSmrg basic_os=xray 3463d05230fSmrg ;; 3473d05230fSmrg h8500hms) 3483d05230fSmrg basic_machine=h8500-hitachi 3493d05230fSmrg basic_os=hms 3503d05230fSmrg ;; 3513d05230fSmrg harris) 3523d05230fSmrg basic_machine=m88k-harris 3533d05230fSmrg basic_os=sysv3 3543d05230fSmrg ;; 3553d05230fSmrg hp300 | hp300hpux) 3563d05230fSmrg basic_machine=m68k-hp 3573d05230fSmrg basic_os=hpux 3583d05230fSmrg ;; 3593d05230fSmrg hp300bsd) 3603d05230fSmrg basic_machine=m68k-hp 3613d05230fSmrg basic_os=bsd 3623d05230fSmrg ;; 3633d05230fSmrg hppaosf) 3643d05230fSmrg basic_machine=hppa1.1-hp 3653d05230fSmrg basic_os=osf 3663d05230fSmrg ;; 3673d05230fSmrg hppro) 3683d05230fSmrg basic_machine=hppa1.1-hp 3693d05230fSmrg basic_os=proelf 3703d05230fSmrg ;; 3713d05230fSmrg i386mach) 3723d05230fSmrg basic_machine=i386-mach 3733d05230fSmrg basic_os=mach 3743d05230fSmrg ;; 3753d05230fSmrg isi68 | isi) 3763d05230fSmrg basic_machine=m68k-isi 3773d05230fSmrg basic_os=sysv 3783d05230fSmrg ;; 3793d05230fSmrg m68knommu) 3803d05230fSmrg basic_machine=m68k-unknown 3813d05230fSmrg basic_os=linux 3823d05230fSmrg ;; 3833d05230fSmrg magnum | m3230) 3843d05230fSmrg basic_machine=mips-mips 3853d05230fSmrg basic_os=sysv 3863d05230fSmrg ;; 3873d05230fSmrg merlin) 3883d05230fSmrg basic_machine=ns32k-utek 3893d05230fSmrg basic_os=sysv 3903d05230fSmrg ;; 3913d05230fSmrg mingw64) 3923d05230fSmrg basic_machine=x86_64-pc 3933d05230fSmrg basic_os=mingw64 3943d05230fSmrg ;; 3953d05230fSmrg mingw32) 3963d05230fSmrg basic_machine=i686-pc 3973d05230fSmrg basic_os=mingw32 3983d05230fSmrg ;; 3993d05230fSmrg mingw32ce) 4003d05230fSmrg basic_machine=arm-unknown 4013d05230fSmrg basic_os=mingw32ce 4023d05230fSmrg ;; 4033d05230fSmrg monitor) 4043d05230fSmrg basic_machine=m68k-rom68k 4053d05230fSmrg basic_os=coff 4063d05230fSmrg ;; 4073d05230fSmrg morphos) 4083d05230fSmrg basic_machine=powerpc-unknown 4093d05230fSmrg basic_os=morphos 4103d05230fSmrg ;; 4113d05230fSmrg moxiebox) 4123d05230fSmrg basic_machine=moxie-unknown 4133d05230fSmrg basic_os=moxiebox 4143d05230fSmrg ;; 4153d05230fSmrg msdos) 4163d05230fSmrg basic_machine=i386-pc 4173d05230fSmrg basic_os=msdos 4183d05230fSmrg ;; 4193d05230fSmrg msys) 4203d05230fSmrg basic_machine=i686-pc 4213d05230fSmrg basic_os=msys 4223d05230fSmrg ;; 4233d05230fSmrg mvs) 4243d05230fSmrg basic_machine=i370-ibm 4253d05230fSmrg basic_os=mvs 4263d05230fSmrg ;; 4273d05230fSmrg nacl) 4283d05230fSmrg basic_machine=le32-unknown 4293d05230fSmrg basic_os=nacl 4303d05230fSmrg ;; 4313d05230fSmrg ncr3000) 4323d05230fSmrg basic_machine=i486-ncr 4333d05230fSmrg basic_os=sysv4 4343d05230fSmrg ;; 4353d05230fSmrg netbsd386) 4363d05230fSmrg basic_machine=i386-pc 4373d05230fSmrg basic_os=netbsd 4383d05230fSmrg ;; 4393d05230fSmrg netwinder) 4403d05230fSmrg basic_machine=armv4l-rebel 4413d05230fSmrg basic_os=linux 4423d05230fSmrg ;; 4433d05230fSmrg news | news700 | news800 | news900) 4443d05230fSmrg basic_machine=m68k-sony 4453d05230fSmrg basic_os=newsos 4463d05230fSmrg ;; 4473d05230fSmrg news1000) 4483d05230fSmrg basic_machine=m68030-sony 4493d05230fSmrg basic_os=newsos 4503d05230fSmrg ;; 4513d05230fSmrg necv70) 4523d05230fSmrg basic_machine=v70-nec 4533d05230fSmrg basic_os=sysv 4543d05230fSmrg ;; 4553d05230fSmrg nh3000) 4563d05230fSmrg basic_machine=m68k-harris 4573d05230fSmrg basic_os=cxux 4583d05230fSmrg ;; 4593d05230fSmrg nh[45]000) 4603d05230fSmrg basic_machine=m88k-harris 4613d05230fSmrg basic_os=cxux 4623d05230fSmrg ;; 4633d05230fSmrg nindy960) 4643d05230fSmrg basic_machine=i960-intel 4653d05230fSmrg basic_os=nindy 4663d05230fSmrg ;; 4673d05230fSmrg mon960) 4683d05230fSmrg basic_machine=i960-intel 4693d05230fSmrg basic_os=mon960 4703d05230fSmrg ;; 4713d05230fSmrg nonstopux) 4723d05230fSmrg basic_machine=mips-compaq 4733d05230fSmrg basic_os=nonstopux 4743d05230fSmrg ;; 4753d05230fSmrg os400) 4763d05230fSmrg basic_machine=powerpc-ibm 4773d05230fSmrg basic_os=os400 4783d05230fSmrg ;; 4793d05230fSmrg OSE68000 | ose68000) 4803d05230fSmrg basic_machine=m68000-ericsson 4813d05230fSmrg basic_os=ose 4823d05230fSmrg ;; 4833d05230fSmrg os68k) 4843d05230fSmrg basic_machine=m68k-none 4853d05230fSmrg basic_os=os68k 4863d05230fSmrg ;; 4873d05230fSmrg paragon) 4883d05230fSmrg basic_machine=i860-intel 4893d05230fSmrg basic_os=osf 4903d05230fSmrg ;; 4913d05230fSmrg parisc) 4923d05230fSmrg basic_machine=hppa-unknown 4933d05230fSmrg basic_os=linux 4943d05230fSmrg ;; 4953d05230fSmrg psp) 4963d05230fSmrg basic_machine=mipsallegrexel-sony 4973d05230fSmrg basic_os=psp 4983d05230fSmrg ;; 4993d05230fSmrg pw32) 5003d05230fSmrg basic_machine=i586-unknown 5013d05230fSmrg basic_os=pw32 5023d05230fSmrg ;; 5033d05230fSmrg rdos | rdos64) 5043d05230fSmrg basic_machine=x86_64-pc 5053d05230fSmrg basic_os=rdos 5063d05230fSmrg ;; 5073d05230fSmrg rdos32) 5083d05230fSmrg basic_machine=i386-pc 5093d05230fSmrg basic_os=rdos 5103d05230fSmrg ;; 5113d05230fSmrg rom68k) 5123d05230fSmrg basic_machine=m68k-rom68k 5133d05230fSmrg basic_os=coff 5143d05230fSmrg ;; 5153d05230fSmrg sa29200) 5163d05230fSmrg basic_machine=a29k-amd 5173d05230fSmrg basic_os=udi 5183d05230fSmrg ;; 5193d05230fSmrg sei) 5203d05230fSmrg basic_machine=mips-sei 5213d05230fSmrg basic_os=seiux 5223d05230fSmrg ;; 5233d05230fSmrg sequent) 5243d05230fSmrg basic_machine=i386-sequent 5253d05230fSmrg basic_os= 5263d05230fSmrg ;; 5273d05230fSmrg sps7) 5283d05230fSmrg basic_machine=m68k-bull 5293d05230fSmrg basic_os=sysv2 5303d05230fSmrg ;; 5313d05230fSmrg st2000) 5323d05230fSmrg basic_machine=m68k-tandem 5333d05230fSmrg basic_os= 5343d05230fSmrg ;; 5353d05230fSmrg stratus) 5363d05230fSmrg basic_machine=i860-stratus 5373d05230fSmrg basic_os=sysv4 5383d05230fSmrg ;; 5393d05230fSmrg sun2) 5403d05230fSmrg basic_machine=m68000-sun 5413d05230fSmrg basic_os= 5423d05230fSmrg ;; 5433d05230fSmrg sun2os3) 5443d05230fSmrg basic_machine=m68000-sun 5453d05230fSmrg basic_os=sunos3 5463d05230fSmrg ;; 5473d05230fSmrg sun2os4) 5483d05230fSmrg basic_machine=m68000-sun 5493d05230fSmrg basic_os=sunos4 5503d05230fSmrg ;; 5513d05230fSmrg sun3) 5523d05230fSmrg basic_machine=m68k-sun 5533d05230fSmrg basic_os= 5543d05230fSmrg ;; 5553d05230fSmrg sun3os3) 5563d05230fSmrg basic_machine=m68k-sun 5573d05230fSmrg basic_os=sunos3 5583d05230fSmrg ;; 5593d05230fSmrg sun3os4) 5603d05230fSmrg basic_machine=m68k-sun 5613d05230fSmrg basic_os=sunos4 5623d05230fSmrg ;; 5633d05230fSmrg sun4) 5643d05230fSmrg basic_machine=sparc-sun 5653d05230fSmrg basic_os= 5663d05230fSmrg ;; 5673d05230fSmrg sun4os3) 5683d05230fSmrg basic_machine=sparc-sun 5693d05230fSmrg basic_os=sunos3 5703d05230fSmrg ;; 5713d05230fSmrg sun4os4) 5723d05230fSmrg basic_machine=sparc-sun 5733d05230fSmrg basic_os=sunos4 5743d05230fSmrg ;; 5753d05230fSmrg sun4sol2) 5763d05230fSmrg basic_machine=sparc-sun 5773d05230fSmrg basic_os=solaris2 5783d05230fSmrg ;; 5793d05230fSmrg sun386 | sun386i | roadrunner) 5803d05230fSmrg basic_machine=i386-sun 5813d05230fSmrg basic_os= 5823d05230fSmrg ;; 5833d05230fSmrg sv1) 5843d05230fSmrg basic_machine=sv1-cray 5853d05230fSmrg basic_os=unicos 5863d05230fSmrg ;; 5873d05230fSmrg symmetry) 5883d05230fSmrg basic_machine=i386-sequent 5893d05230fSmrg basic_os=dynix 5903d05230fSmrg ;; 5913d05230fSmrg t3e) 5923d05230fSmrg basic_machine=alphaev5-cray 5933d05230fSmrg basic_os=unicos 5943d05230fSmrg ;; 5953d05230fSmrg t90) 5963d05230fSmrg basic_machine=t90-cray 5973d05230fSmrg basic_os=unicos 5983d05230fSmrg ;; 5993d05230fSmrg toad1) 6003d05230fSmrg basic_machine=pdp10-xkl 6013d05230fSmrg basic_os=tops20 6023d05230fSmrg ;; 6033d05230fSmrg tpf) 6043d05230fSmrg basic_machine=s390x-ibm 6053d05230fSmrg basic_os=tpf 6063d05230fSmrg ;; 6073d05230fSmrg udi29k) 6083d05230fSmrg basic_machine=a29k-amd 6093d05230fSmrg basic_os=udi 6103d05230fSmrg ;; 6113d05230fSmrg ultra3) 6123d05230fSmrg basic_machine=a29k-nyu 6133d05230fSmrg basic_os=sym1 6143d05230fSmrg ;; 6153d05230fSmrg v810 | necv810) 6163d05230fSmrg basic_machine=v810-nec 6173d05230fSmrg basic_os=none 6183d05230fSmrg ;; 6193d05230fSmrg vaxv) 6203d05230fSmrg basic_machine=vax-dec 6213d05230fSmrg basic_os=sysv 6223d05230fSmrg ;; 6233d05230fSmrg vms) 6243d05230fSmrg basic_machine=vax-dec 6253d05230fSmrg basic_os=vms 6263d05230fSmrg ;; 6273d05230fSmrg vsta) 6283d05230fSmrg basic_machine=i386-pc 6293d05230fSmrg basic_os=vsta 6303d05230fSmrg ;; 6313d05230fSmrg vxworks960) 6323d05230fSmrg basic_machine=i960-wrs 6333d05230fSmrg basic_os=vxworks 6343d05230fSmrg ;; 6353d05230fSmrg vxworks68) 6363d05230fSmrg basic_machine=m68k-wrs 6373d05230fSmrg basic_os=vxworks 6383d05230fSmrg ;; 6393d05230fSmrg vxworks29k) 6403d05230fSmrg basic_machine=a29k-wrs 6413d05230fSmrg basic_os=vxworks 6423d05230fSmrg ;; 6433d05230fSmrg xbox) 6443d05230fSmrg basic_machine=i686-pc 6453d05230fSmrg basic_os=mingw32 6463d05230fSmrg ;; 6473d05230fSmrg ymp) 6483d05230fSmrg basic_machine=ymp-cray 6493d05230fSmrg basic_os=unicos 6503d05230fSmrg ;; 6513d05230fSmrg *) 6523d05230fSmrg basic_machine=$1 6533d05230fSmrg basic_os= 6543d05230fSmrg ;; 6553d05230fSmrg esac 656ed6f5d66Smrg ;; 657ed6f5d66Smrgesac 658ed6f5d66Smrg 6593d05230fSmrg# Decode 1-component or ad-hoc basic machines 660ed6f5d66Smrgcase $basic_machine in 6613d05230fSmrg # Here we handle the default manufacturer of certain CPU types. It is in 6623d05230fSmrg # some cases the only manufacturer, in others, it is the most popular. 6633d05230fSmrg w89k) 6643d05230fSmrg cpu=hppa1.1 6653d05230fSmrg vendor=winbond 666ed6f5d66Smrg ;; 6673d05230fSmrg op50n) 6683d05230fSmrg cpu=hppa1.1 6693d05230fSmrg vendor=oki 670ed6f5d66Smrg ;; 6713d05230fSmrg op60c) 6723d05230fSmrg cpu=hppa1.1 6733d05230fSmrg vendor=oki 674ed6f5d66Smrg ;; 6753d05230fSmrg ibm*) 6763d05230fSmrg cpu=i370 6773d05230fSmrg vendor=ibm 678ed6f5d66Smrg ;; 6793d05230fSmrg orion105) 6803d05230fSmrg cpu=clipper 6813d05230fSmrg vendor=highlevel 682ed6f5d66Smrg ;; 6833d05230fSmrg mac | mpw | mac-mpw) 6843d05230fSmrg cpu=m68k 6853d05230fSmrg vendor=apple 686ed6f5d66Smrg ;; 6873d05230fSmrg pmac | pmac-mpw) 6883d05230fSmrg cpu=powerpc 6893d05230fSmrg vendor=apple 690ed6f5d66Smrg ;; 691ed6f5d66Smrg 692ed6f5d66Smrg # Recognize the various machine names and aliases which stand 693ed6f5d66Smrg # for a CPU type and a company and sometimes even an OS. 694ed6f5d66Smrg 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) 6953d05230fSmrg cpu=m68000 6963d05230fSmrg vendor=att 697ed6f5d66Smrg ;; 698ed6f5d66Smrg 3b*) 6993d05230fSmrg cpu=we32k 7003d05230fSmrg vendor=att 701ed6f5d66Smrg ;; 702ed6f5d66Smrg bluegene*) 7033d05230fSmrg cpu=powerpc 7043d05230fSmrg vendor=ibm 7053d05230fSmrg basic_os=cnk 706ed6f5d66Smrg ;; 707ed6f5d66Smrg decsystem10* | dec10*) 7083d05230fSmrg cpu=pdp10 7093d05230fSmrg vendor=dec 7103d05230fSmrg basic_os=tops10 711ed6f5d66Smrg ;; 712ed6f5d66Smrg decsystem20* | dec20*) 7133d05230fSmrg cpu=pdp10 7143d05230fSmrg vendor=dec 7153d05230fSmrg basic_os=tops20 716ed6f5d66Smrg ;; 717ed6f5d66Smrg delta | 3300 | motorola-3300 | motorola-delta \ 718ed6f5d66Smrg | 3300-motorola | delta-motorola) 7193d05230fSmrg cpu=m68k 7203d05230fSmrg vendor=motorola 721ed6f5d66Smrg ;; 7223d05230fSmrg dpx2*) 7233d05230fSmrg cpu=m68k 7243d05230fSmrg vendor=bull 7253d05230fSmrg basic_os=sysv3 726ed6f5d66Smrg ;; 727ed6f5d66Smrg encore | umax | mmax) 7283d05230fSmrg cpu=ns32k 7293d05230fSmrg vendor=encore 730ed6f5d66Smrg ;; 7313d05230fSmrg elxsi) 7323d05230fSmrg cpu=elxsi 7333d05230fSmrg vendor=elxsi 7343d05230fSmrg basic_os=${basic_os:-bsd} 735ed6f5d66Smrg ;; 736ed6f5d66Smrg fx2800) 7373d05230fSmrg cpu=i860 7383d05230fSmrg vendor=alliant 739ed6f5d66Smrg ;; 740ed6f5d66Smrg genix) 7413d05230fSmrg cpu=ns32k 7423d05230fSmrg vendor=ns 743ed6f5d66Smrg ;; 744ed6f5d66Smrg h3050r* | hiux*) 7453d05230fSmrg cpu=hppa1.1 7463d05230fSmrg vendor=hitachi 7473d05230fSmrg basic_os=hiuxwe2 748ed6f5d66Smrg ;; 749ed6f5d66Smrg hp3k9[0-9][0-9] | hp9[0-9][0-9]) 7503d05230fSmrg cpu=hppa1.0 7513d05230fSmrg vendor=hp 752ed6f5d66Smrg ;; 753ed6f5d66Smrg hp9k2[0-9][0-9] | hp9k31[0-9]) 7543d05230fSmrg cpu=m68000 7553d05230fSmrg vendor=hp 756ed6f5d66Smrg ;; 757ed6f5d66Smrg hp9k3[2-9][0-9]) 7583d05230fSmrg cpu=m68k 7593d05230fSmrg vendor=hp 760ed6f5d66Smrg ;; 761ed6f5d66Smrg hp9k6[0-9][0-9] | hp6[0-9][0-9]) 7623d05230fSmrg cpu=hppa1.0 7633d05230fSmrg vendor=hp 764ed6f5d66Smrg ;; 765ed6f5d66Smrg hp9k7[0-79][0-9] | hp7[0-79][0-9]) 7663d05230fSmrg cpu=hppa1.1 7673d05230fSmrg vendor=hp 768ed6f5d66Smrg ;; 769ed6f5d66Smrg hp9k78[0-9] | hp78[0-9]) 770ed6f5d66Smrg # FIXME: really hppa2.0-hp 7713d05230fSmrg cpu=hppa1.1 7723d05230fSmrg vendor=hp 773ed6f5d66Smrg ;; 774ed6f5d66Smrg hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) 775ed6f5d66Smrg # FIXME: really hppa2.0-hp 7763d05230fSmrg cpu=hppa1.1 7773d05230fSmrg vendor=hp 778ed6f5d66Smrg ;; 779ed6f5d66Smrg hp9k8[0-9][13679] | hp8[0-9][13679]) 7803d05230fSmrg cpu=hppa1.1 7813d05230fSmrg vendor=hp 782ed6f5d66Smrg ;; 783ed6f5d66Smrg hp9k8[0-9][0-9] | hp8[0-9][0-9]) 7843d05230fSmrg cpu=hppa1.0 7853d05230fSmrg vendor=hp 786ed6f5d66Smrg ;; 787ed6f5d66Smrg i*86v32) 7883d05230fSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 7893d05230fSmrg vendor=pc 7903d05230fSmrg basic_os=sysv32 791ed6f5d66Smrg ;; 792ed6f5d66Smrg i*86v4*) 7933d05230fSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 7943d05230fSmrg vendor=pc 7953d05230fSmrg basic_os=sysv4 796ed6f5d66Smrg ;; 797ed6f5d66Smrg i*86v) 7983d05230fSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 7993d05230fSmrg vendor=pc 8003d05230fSmrg basic_os=sysv 801ed6f5d66Smrg ;; 802ed6f5d66Smrg i*86sol2) 8033d05230fSmrg cpu=`echo "$1" | sed -e 's/86.*/86/'` 8043d05230fSmrg vendor=pc 8053d05230fSmrg basic_os=solaris2 806ed6f5d66Smrg ;; 8073d05230fSmrg j90 | j90-cray) 8083d05230fSmrg cpu=j90 8093d05230fSmrg vendor=cray 8103d05230fSmrg basic_os=${basic_os:-unicos} 811ed6f5d66Smrg ;; 812ed6f5d66Smrg iris | iris4d) 8133d05230fSmrg cpu=mips 8143d05230fSmrg vendor=sgi 8153d05230fSmrg case $basic_os in 8163d05230fSmrg irix*) 817ed6f5d66Smrg ;; 818ed6f5d66Smrg *) 8193d05230fSmrg basic_os=irix4 820ed6f5d66Smrg ;; 821ed6f5d66Smrg esac 822ed6f5d66Smrg ;; 823ed6f5d66Smrg miniframe) 8243d05230fSmrg cpu=m68000 8253d05230fSmrg vendor=convergent 826ed6f5d66Smrg ;; 8273d05230fSmrg *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) 8283d05230fSmrg cpu=m68k 8293d05230fSmrg vendor=atari 8303d05230fSmrg basic_os=mint 831ed6f5d66Smrg ;; 832ed6f5d66Smrg news-3600 | risc-news) 8333d05230fSmrg cpu=mips 8343d05230fSmrg vendor=sony 8353d05230fSmrg basic_os=newsos 8363d05230fSmrg ;; 8373d05230fSmrg next | m*-next) 8383d05230fSmrg cpu=m68k 8393d05230fSmrg vendor=next 8403d05230fSmrg case $basic_os in 8413d05230fSmrg openstep*) 8423d05230fSmrg ;; 8433d05230fSmrg nextstep*) 844ed6f5d66Smrg ;; 8453d05230fSmrg ns2*) 8463d05230fSmrg basic_os=nextstep2 847ed6f5d66Smrg ;; 848ed6f5d66Smrg *) 8493d05230fSmrg basic_os=nextstep3 850ed6f5d66Smrg ;; 851ed6f5d66Smrg esac 852ed6f5d66Smrg ;; 853ed6f5d66Smrg np1) 8543d05230fSmrg cpu=np1 8553d05230fSmrg vendor=gould 856ed6f5d66Smrg ;; 857ed6f5d66Smrg op50n-* | op60c-*) 8583d05230fSmrg cpu=hppa1.1 8593d05230fSmrg vendor=oki 8603d05230fSmrg basic_os=proelf 861ed6f5d66Smrg ;; 862ed6f5d66Smrg pa-hitachi) 8633d05230fSmrg cpu=hppa1.1 8643d05230fSmrg vendor=hitachi 8653d05230fSmrg basic_os=hiuxwe2 866ed6f5d66Smrg ;; 867ed6f5d66Smrg pbd) 8683d05230fSmrg cpu=sparc 8693d05230fSmrg vendor=tti 870ed6f5d66Smrg ;; 871ed6f5d66Smrg pbb) 8723d05230fSmrg cpu=m68k 8733d05230fSmrg vendor=tti 874ed6f5d66Smrg ;; 8753d05230fSmrg pc532) 8763d05230fSmrg cpu=ns32k 8773d05230fSmrg vendor=pc532 878ed6f5d66Smrg ;; 879ed6f5d66Smrg pn) 8803d05230fSmrg cpu=pn 8813d05230fSmrg vendor=gould 882ed6f5d66Smrg ;; 8833d05230fSmrg power) 8843d05230fSmrg cpu=power 8853d05230fSmrg vendor=ibm 886ed6f5d66Smrg ;; 887ed6f5d66Smrg ps2) 8883d05230fSmrg cpu=i386 8893d05230fSmrg vendor=ibm 890ed6f5d66Smrg ;; 891ed6f5d66Smrg rm[46]00) 8923d05230fSmrg cpu=mips 8933d05230fSmrg vendor=siemens 894ed6f5d66Smrg ;; 895ed6f5d66Smrg rtpc | rtpc-*) 8963d05230fSmrg cpu=romp 8973d05230fSmrg vendor=ibm 898ed6f5d66Smrg ;; 8993d05230fSmrg sde) 9003d05230fSmrg cpu=mipsisa32 9013d05230fSmrg vendor=sde 9023d05230fSmrg basic_os=${basic_os:-elf} 903ed6f5d66Smrg ;; 9043d05230fSmrg simso-wrs) 9053d05230fSmrg cpu=sparclite 9063d05230fSmrg vendor=wrs 9073d05230fSmrg basic_os=vxworks 908ed6f5d66Smrg ;; 9093d05230fSmrg tower | tower-32) 9103d05230fSmrg cpu=m68k 9113d05230fSmrg vendor=ncr 912ed6f5d66Smrg ;; 9133d05230fSmrg vpp*|vx|vx-*) 9143d05230fSmrg cpu=f301 9153d05230fSmrg vendor=fujitsu 916ed6f5d66Smrg ;; 9173d05230fSmrg w65) 9183d05230fSmrg cpu=w65 9193d05230fSmrg vendor=wdc 920ed6f5d66Smrg ;; 9213d05230fSmrg w89k-*) 9223d05230fSmrg cpu=hppa1.1 9233d05230fSmrg vendor=winbond 9243d05230fSmrg basic_os=proelf 925ed6f5d66Smrg ;; 9263d05230fSmrg none) 9273d05230fSmrg cpu=none 9283d05230fSmrg vendor=none 929ed6f5d66Smrg ;; 9303d05230fSmrg leon|leon[3-9]) 9313d05230fSmrg cpu=sparc 9323d05230fSmrg vendor=$basic_machine 933ed6f5d66Smrg ;; 9343d05230fSmrg leon-*|leon[3-9]-*) 9353d05230fSmrg cpu=sparc 9363d05230fSmrg vendor=`echo "$basic_machine" | sed 's/-.*//'` 937ed6f5d66Smrg ;; 9383d05230fSmrg 9393d05230fSmrg *-*) 9403d05230fSmrg # shellcheck disable=SC2162 9413d05230fSmrg saved_IFS=$IFS 9423d05230fSmrg IFS="-" read cpu vendor <<EOF 9433d05230fSmrg$basic_machine 9443d05230fSmrgEOF 9453d05230fSmrg IFS=$saved_IFS 946ed6f5d66Smrg ;; 947a3680546Smrg # We use 'pc' rather than 'unknown' 9483d05230fSmrg # because (1) that's what they normally are, and 9493d05230fSmrg # (2) the word "unknown" tends to confuse beginning users. 9503d05230fSmrg i*86 | x86_64) 9513d05230fSmrg cpu=$basic_machine 9523d05230fSmrg vendor=pc 953ed6f5d66Smrg ;; 9543d05230fSmrg # These rules are duplicated from below for sake of the special case above; 9553d05230fSmrg # i.e. things that normalized to x86 arches should also default to "pc" 9563d05230fSmrg pc98) 9573d05230fSmrg cpu=i386 9583d05230fSmrg vendor=pc 959ed6f5d66Smrg ;; 9603d05230fSmrg x64 | amd64) 9613d05230fSmrg cpu=x86_64 9623d05230fSmrg vendor=pc 963ed6f5d66Smrg ;; 9643d05230fSmrg # Recognize the basic CPU types without company name. 9653d05230fSmrg *) 9663d05230fSmrg cpu=$basic_machine 9673d05230fSmrg vendor=unknown 968ed6f5d66Smrg ;; 9693d05230fSmrgesac 9703d05230fSmrg 9713d05230fSmrgunset -v basic_machine 9723d05230fSmrg 9733d05230fSmrg# Decode basic machines in the full and proper CPU-Company form. 9743d05230fSmrgcase $cpu-$vendor in 9753d05230fSmrg # Here we handle the default manufacturer of certain CPU types in canonical form. It is in 9763d05230fSmrg # some cases the only manufacturer, in others, it is the most popular. 9773d05230fSmrg craynv-unknown) 9783d05230fSmrg vendor=cray 9793d05230fSmrg basic_os=${basic_os:-unicosmp} 980ed6f5d66Smrg ;; 9813d05230fSmrg c90-unknown | c90-cray) 9823d05230fSmrg vendor=cray 9833d05230fSmrg basic_os=${Basic_os:-unicos} 984ed6f5d66Smrg ;; 9853d05230fSmrg fx80-unknown) 9863d05230fSmrg vendor=alliant 987ed6f5d66Smrg ;; 9883d05230fSmrg romp-unknown) 9893d05230fSmrg vendor=ibm 990ed6f5d66Smrg ;; 9913d05230fSmrg mmix-unknown) 9923d05230fSmrg vendor=knuth 993ed6f5d66Smrg ;; 9943d05230fSmrg microblaze-unknown | microblazeel-unknown) 9953d05230fSmrg vendor=xilinx 996ed6f5d66Smrg ;; 9973d05230fSmrg rs6000-unknown) 9983d05230fSmrg vendor=ibm 999ed6f5d66Smrg ;; 10003d05230fSmrg vax-unknown) 10013d05230fSmrg vendor=dec 1002ed6f5d66Smrg ;; 10033d05230fSmrg pdp11-unknown) 10043d05230fSmrg vendor=dec 1005ed6f5d66Smrg ;; 10063d05230fSmrg we32k-unknown) 10073d05230fSmrg vendor=att 1008ed6f5d66Smrg ;; 10093d05230fSmrg cydra-unknown) 10103d05230fSmrg vendor=cydrome 1011ed6f5d66Smrg ;; 10123d05230fSmrg i370-ibm*) 10133d05230fSmrg vendor=ibm 1014ed6f5d66Smrg ;; 10153d05230fSmrg orion-unknown) 10163d05230fSmrg vendor=highlevel 1017ed6f5d66Smrg ;; 10183d05230fSmrg xps-unknown | xps100-unknown) 10193d05230fSmrg cpu=xps100 10203d05230fSmrg vendor=honeywell 1021ed6f5d66Smrg ;; 10223d05230fSmrg 10233d05230fSmrg # Here we normalize CPU types with a missing or matching vendor 1024139359d2Smrg armh-unknown | armh-alt) 1025139359d2Smrg cpu=armv7l 1026139359d2Smrg vendor=alt 1027139359d2Smrg basic_os=${basic_os:-linux-gnueabihf} 1028139359d2Smrg ;; 10293d05230fSmrg dpx20-unknown | dpx20-bull) 10303d05230fSmrg cpu=rs6000 10313d05230fSmrg vendor=bull 10323d05230fSmrg basic_os=${basic_os:-bosx} 1033ed6f5d66Smrg ;; 10343d05230fSmrg 10353d05230fSmrg # Here we normalize CPU types irrespective of the vendor 10363d05230fSmrg amd64-*) 10373d05230fSmrg cpu=x86_64 1038ed6f5d66Smrg ;; 10393d05230fSmrg blackfin-*) 10403d05230fSmrg cpu=bfin 10413d05230fSmrg basic_os=linux 1042ed6f5d66Smrg ;; 10433d05230fSmrg c54x-*) 10443d05230fSmrg cpu=tic54x 1045ed6f5d66Smrg ;; 10463d05230fSmrg c55x-*) 10473d05230fSmrg cpu=tic55x 1048ed6f5d66Smrg ;; 10493d05230fSmrg c6x-*) 10503d05230fSmrg cpu=tic6x 1051ed6f5d66Smrg ;; 10523d05230fSmrg e500v[12]-*) 10533d05230fSmrg cpu=powerpc 10543d05230fSmrg basic_os=${basic_os}"spe" 1055ed6f5d66Smrg ;; 10563d05230fSmrg mips3*-*) 10573d05230fSmrg cpu=mips64 1058ed6f5d66Smrg ;; 10593d05230fSmrg ms1-*) 10603d05230fSmrg cpu=mt 1061ed6f5d66Smrg ;; 10623d05230fSmrg m68knommu-*) 10633d05230fSmrg cpu=m68k 10643d05230fSmrg basic_os=linux 1065ed6f5d66Smrg ;; 10663d05230fSmrg m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) 10673d05230fSmrg cpu=s12z 1068ed6f5d66Smrg ;; 10693d05230fSmrg openrisc-*) 10703d05230fSmrg cpu=or32 1071ed6f5d66Smrg ;; 10723d05230fSmrg parisc-*) 10733d05230fSmrg cpu=hppa 10743d05230fSmrg basic_os=linux 1075ed6f5d66Smrg ;; 10763d05230fSmrg pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) 10773d05230fSmrg cpu=i586 1078ed6f5d66Smrg ;; 1079a3680546Smrg pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*) 10803d05230fSmrg cpu=i686 1081ed6f5d66Smrg ;; 10823d05230fSmrg pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) 10833d05230fSmrg cpu=i686 1084ed6f5d66Smrg ;; 10853d05230fSmrg pentium4-*) 10863d05230fSmrg cpu=i786 1087ed6f5d66Smrg ;; 10883d05230fSmrg pc98-*) 10893d05230fSmrg cpu=i386 1090ed6f5d66Smrg ;; 10913d05230fSmrg ppc-* | ppcbe-*) 10923d05230fSmrg cpu=powerpc 1093ed6f5d66Smrg ;; 10943d05230fSmrg ppcle-* | powerpclittle-*) 10953d05230fSmrg cpu=powerpcle 1096ed6f5d66Smrg ;; 10973d05230fSmrg ppc64-*) 10983d05230fSmrg cpu=powerpc64 1099ed6f5d66Smrg ;; 11003d05230fSmrg ppc64le-* | powerpc64little-*) 11013d05230fSmrg cpu=powerpc64le 1102ed6f5d66Smrg ;; 11033d05230fSmrg sb1-*) 11043d05230fSmrg cpu=mipsisa64sb1 1105ed6f5d66Smrg ;; 11063d05230fSmrg sb1el-*) 11073d05230fSmrg cpu=mipsisa64sb1el 1108ed6f5d66Smrg ;; 11093d05230fSmrg sh5e[lb]-*) 11103d05230fSmrg cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` 1111ed6f5d66Smrg ;; 11123d05230fSmrg spur-*) 11133d05230fSmrg cpu=spur 1114ed6f5d66Smrg ;; 11153d05230fSmrg strongarm-* | thumb-*) 11163d05230fSmrg cpu=arm 1117ed6f5d66Smrg ;; 11183d05230fSmrg tx39-*) 11193d05230fSmrg cpu=mipstx39 1120ed6f5d66Smrg ;; 11213d05230fSmrg tx39el-*) 11223d05230fSmrg cpu=mipstx39el 1123ed6f5d66Smrg ;; 11243d05230fSmrg x64-*) 11253d05230fSmrg cpu=x86_64 1126ed6f5d66Smrg ;; 11273d05230fSmrg xscale-* | xscalee[bl]-*) 11283d05230fSmrg cpu=`echo "$cpu" | sed 's/^xscale/arm/'` 1129ed6f5d66Smrg ;; 1130139359d2Smrg arm64-* | aarch64le-*) 11313d05230fSmrg cpu=aarch64 1132ed6f5d66Smrg ;; 11333d05230fSmrg 11343d05230fSmrg # Recognize the canonical CPU Types that limit and/or modify the 11353d05230fSmrg # company names they are paired with. 11363d05230fSmrg cr16-*) 11373d05230fSmrg basic_os=${basic_os:-elf} 1138ed6f5d66Smrg ;; 11393d05230fSmrg crisv32-* | etraxfs*-*) 11403d05230fSmrg cpu=crisv32 11413d05230fSmrg vendor=axis 1142ed6f5d66Smrg ;; 11433d05230fSmrg cris-* | etrax*-*) 11443d05230fSmrg cpu=cris 11453d05230fSmrg vendor=axis 1146ed6f5d66Smrg ;; 11473d05230fSmrg crx-*) 11483d05230fSmrg basic_os=${basic_os:-elf} 1149ed6f5d66Smrg ;; 11503d05230fSmrg neo-tandem) 11513d05230fSmrg cpu=neo 11523d05230fSmrg vendor=tandem 1153ed6f5d66Smrg ;; 11543d05230fSmrg nse-tandem) 11553d05230fSmrg cpu=nse 11563d05230fSmrg vendor=tandem 1157ed6f5d66Smrg ;; 11583d05230fSmrg nsr-tandem) 11593d05230fSmrg cpu=nsr 11603d05230fSmrg vendor=tandem 1161ed6f5d66Smrg ;; 11623d05230fSmrg nsv-tandem) 11633d05230fSmrg cpu=nsv 11643d05230fSmrg vendor=tandem 1165ed6f5d66Smrg ;; 11663d05230fSmrg nsx-tandem) 11673d05230fSmrg cpu=nsx 11683d05230fSmrg vendor=tandem 1169ed6f5d66Smrg ;; 11703d05230fSmrg mipsallegrexel-sony) 11713d05230fSmrg cpu=mipsallegrexel 11723d05230fSmrg vendor=sony 1173ed6f5d66Smrg ;; 11743d05230fSmrg tile*-*) 11753d05230fSmrg basic_os=${basic_os:-linux-gnu} 1176ed6f5d66Smrg ;; 11773d05230fSmrg 1178ed6f5d66Smrg *) 11793d05230fSmrg # Recognize the canonical CPU types that are allowed with any 11803d05230fSmrg # company name. 11813d05230fSmrg case $cpu in 11823d05230fSmrg 1750a | 580 \ 11833d05230fSmrg | a29k \ 1184a3680546Smrg | aarch64 | aarch64_be | aarch64c | arm64ec \ 11853d05230fSmrg | abacus \ 11863d05230fSmrg | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ 11873d05230fSmrg | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ 11883d05230fSmrg | alphapca5[67] | alpha64pca5[67] \ 11893d05230fSmrg | am33_2.0 \ 11903d05230fSmrg | amdgcn \ 11913d05230fSmrg | arc | arceb | arc32 | arc64 \ 11923d05230fSmrg | arm | arm[lb]e | arme[lb] | armv* \ 11933d05230fSmrg | avr | avr32 \ 11943d05230fSmrg | asmjs \ 11953d05230fSmrg | ba \ 11963d05230fSmrg | be32 | be64 \ 11973d05230fSmrg | bfin | bpf | bs2000 \ 11983d05230fSmrg | c[123]* | c30 | [cjt]90 | c4x \ 11993d05230fSmrg | c8051 | clipper | craynv | csky | cydra \ 12003d05230fSmrg | d10v | d30v | dlx | dsp16xx \ 12013d05230fSmrg | e2k | elxsi | epiphany \ 12023d05230fSmrg | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ 1203a3680546Smrg | javascript \ 12043d05230fSmrg | h8300 | h8500 \ 12053d05230fSmrg | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ 12063d05230fSmrg | hexagon \ 12073d05230fSmrg | i370 | i*86 | i860 | i960 | ia16 | ia64 \ 12083d05230fSmrg | ip2k | iq2000 \ 12093d05230fSmrg | k1om \ 1210a3680546Smrg | kvx \ 12113d05230fSmrg | le32 | le64 \ 12123d05230fSmrg | lm32 \ 1213139359d2Smrg | loongarch32 | loongarch64 \ 12143d05230fSmrg | m32c | m32r | m32rle \ 12153d05230fSmrg | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ 12163d05230fSmrg | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ 12173d05230fSmrg | m88110 | m88k | maxq | mb | mcore | mep | metag \ 12183d05230fSmrg | microblaze | microblazeel \ 1219a3680546Smrg | mips* \ 12203d05230fSmrg | mmix \ 12213d05230fSmrg | mn10200 | mn10300 \ 12223d05230fSmrg | moxie \ 12233d05230fSmrg | mt \ 12243d05230fSmrg | msp430 \ 1225a3680546Smrg | nanomips* \ 12263d05230fSmrg | nds32 | nds32le | nds32be \ 12273d05230fSmrg | nfp \ 12283d05230fSmrg | nios | nios2 | nios2eb | nios2el \ 12293d05230fSmrg | none | np1 | ns16k | ns32k | nvptx \ 12303d05230fSmrg | open8 \ 12313d05230fSmrg | or1k* \ 12323d05230fSmrg | or32 \ 12333d05230fSmrg | orion \ 12343d05230fSmrg | picochip \ 12353d05230fSmrg | pdp10 | pdp11 | pj | pjl | pn | power \ 12363d05230fSmrg | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ 12373d05230fSmrg | pru \ 12383d05230fSmrg | pyramid \ 12393d05230fSmrg | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ 12403d05230fSmrg | rl78 | romp | rs6000 | rx \ 12413d05230fSmrg | s390 | s390x \ 12423d05230fSmrg | score \ 12433d05230fSmrg | sh | shl \ 12443d05230fSmrg | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ 12453d05230fSmrg | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ 12463d05230fSmrg | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ 12473d05230fSmrg | sparclite \ 12483d05230fSmrg | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ 12493d05230fSmrg | spu \ 12503d05230fSmrg | tahoe \ 12513d05230fSmrg | thumbv7* \ 12523d05230fSmrg | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ 12533d05230fSmrg | tron \ 12543d05230fSmrg | ubicom32 \ 12553d05230fSmrg | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ 12563d05230fSmrg | vax \ 1257a3680546Smrg | vc4 \ 12583d05230fSmrg | visium \ 12593d05230fSmrg | w65 \ 12603d05230fSmrg | wasm32 | wasm64 \ 12613d05230fSmrg | we32k \ 12623d05230fSmrg | x86 | x86_64 | xc16x | xgate | xps100 \ 12633d05230fSmrg | xstormy16 | xtensa* \ 12643d05230fSmrg | ymp \ 12653d05230fSmrg | z8k | z80) 12663d05230fSmrg ;; 12673d05230fSmrg 12683d05230fSmrg *) 1269a3680546Smrg echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 12703d05230fSmrg exit 1 12713d05230fSmrg ;; 12723d05230fSmrg esac 1273ed6f5d66Smrg ;; 1274ed6f5d66Smrgesac 1275ed6f5d66Smrg 1276ed6f5d66Smrg# Here we canonicalize certain aliases for manufacturers. 12773d05230fSmrgcase $vendor in 12783d05230fSmrg digital*) 12793d05230fSmrg vendor=dec 1280ed6f5d66Smrg ;; 12813d05230fSmrg commodore*) 12823d05230fSmrg vendor=cbm 1283ed6f5d66Smrg ;; 1284ed6f5d66Smrg *) 1285ed6f5d66Smrg ;; 1286ed6f5d66Smrgesac 1287ed6f5d66Smrg 1288ed6f5d66Smrg# Decode manufacturer-specific aliases for certain operating systems. 1289ed6f5d66Smrg 1290a3680546Smrgif test x"$basic_os" != x 1291ed6f5d66Smrgthen 12923d05230fSmrg 1293139359d2Smrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just 12943d05230fSmrg# set os. 1295a3680546Smrgobj= 12963d05230fSmrgcase $basic_os in 12973d05230fSmrg gnu/linux*) 12983d05230fSmrg kernel=linux 12993d05230fSmrg os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` 13003d05230fSmrg ;; 13013d05230fSmrg os2-emx) 13023d05230fSmrg kernel=os2 13033d05230fSmrg os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` 13043d05230fSmrg ;; 13053d05230fSmrg nto-qnx*) 13063d05230fSmrg kernel=nto 13073d05230fSmrg os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` 13083d05230fSmrg ;; 13093d05230fSmrg *-*) 13103d05230fSmrg # shellcheck disable=SC2162 13113d05230fSmrg saved_IFS=$IFS 13123d05230fSmrg IFS="-" read kernel os <<EOF 13133d05230fSmrg$basic_os 13143d05230fSmrgEOF 13153d05230fSmrg IFS=$saved_IFS 13163d05230fSmrg ;; 13173d05230fSmrg # Default OS when just kernel was specified 13183d05230fSmrg nto*) 13193d05230fSmrg kernel=nto 13203d05230fSmrg os=`echo "$basic_os" | sed -e 's|nto|qnx|'` 13213d05230fSmrg ;; 13223d05230fSmrg linux*) 13233d05230fSmrg kernel=linux 13243d05230fSmrg os=`echo "$basic_os" | sed -e 's|linux|gnu|'` 13253d05230fSmrg ;; 1326139359d2Smrg managarm*) 1327139359d2Smrg kernel=managarm 1328139359d2Smrg os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'` 1329139359d2Smrg ;; 13303d05230fSmrg *) 13313d05230fSmrg kernel= 13323d05230fSmrg os=$basic_os 1333ed6f5d66Smrg ;; 13343d05230fSmrgesac 13353d05230fSmrg 13363d05230fSmrg# Now, normalize the OS (knowing we just have one component, it's not a kernel, 13373d05230fSmrg# etc.) 13383d05230fSmrgcase $os in 13393d05230fSmrg # First match some system type aliases that might get confused 13403d05230fSmrg # with valid system types. 13413d05230fSmrg # solaris* is a basic system type, with this one exception. 13423d05230fSmrg auroraux) 13433d05230fSmrg os=auroraux 1344ed6f5d66Smrg ;; 13453d05230fSmrg bluegene*) 13463d05230fSmrg os=cnk 1347ed6f5d66Smrg ;; 13483d05230fSmrg solaris1 | solaris1.*) 13493d05230fSmrg os=`echo "$os" | sed -e 's|solaris1|sunos4|'` 1350ed6f5d66Smrg ;; 13513d05230fSmrg solaris) 13523d05230fSmrg os=solaris2 1353ed6f5d66Smrg ;; 13543d05230fSmrg unixware*) 13553d05230fSmrg os=sysv4.2uw 1356ed6f5d66Smrg ;; 13573d05230fSmrg # es1800 is here to avoid being matched by es* (a different OS) 13583d05230fSmrg es1800*) 13593d05230fSmrg os=ose 1360ed6f5d66Smrg ;; 13613d05230fSmrg # Some version numbers need modification 13623d05230fSmrg chorusos*) 13633d05230fSmrg os=chorusos 1364ed6f5d66Smrg ;; 13653d05230fSmrg isc) 13663d05230fSmrg os=isc2.2 1367ed6f5d66Smrg ;; 13683d05230fSmrg sco6) 13693d05230fSmrg os=sco5v6 1370ed6f5d66Smrg ;; 13713d05230fSmrg sco5) 13723d05230fSmrg os=sco3.2v5 1373ed6f5d66Smrg ;; 13743d05230fSmrg sco4) 13753d05230fSmrg os=sco3.2v4 1376ed6f5d66Smrg ;; 13773d05230fSmrg sco3.2.[4-9]*) 13783d05230fSmrg os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` 1379ed6f5d66Smrg ;; 13803d05230fSmrg sco*v* | scout) 13813d05230fSmrg # Don't match below 1382ed6f5d66Smrg ;; 13833d05230fSmrg sco*) 13843d05230fSmrg os=sco3.2v2 1385ed6f5d66Smrg ;; 13863d05230fSmrg psos*) 13873d05230fSmrg os=psos 1388ed6f5d66Smrg ;; 13893d05230fSmrg qnx*) 13903d05230fSmrg os=qnx 1391ed6f5d66Smrg ;; 13923d05230fSmrg hiux*) 13933d05230fSmrg os=hiuxwe2 1394ed6f5d66Smrg ;; 13953d05230fSmrg lynx*178) 13963d05230fSmrg os=lynxos178 1397ed6f5d66Smrg ;; 13983d05230fSmrg lynx*5) 13993d05230fSmrg os=lynxos5 1400ed6f5d66Smrg ;; 14013d05230fSmrg lynxos*) 14023d05230fSmrg # don't get caught up in next wildcard 1403ed6f5d66Smrg ;; 14043d05230fSmrg lynx*) 14053d05230fSmrg os=lynxos 1406ed6f5d66Smrg ;; 14073d05230fSmrg mac[0-9]*) 14083d05230fSmrg os=`echo "$os" | sed -e 's|mac|macos|'` 1409ed6f5d66Smrg ;; 14103d05230fSmrg opened*) 14113d05230fSmrg os=openedition 1412ed6f5d66Smrg ;; 14133d05230fSmrg os400*) 14143d05230fSmrg os=os400 1415ed6f5d66Smrg ;; 14163d05230fSmrg sunos5*) 14173d05230fSmrg os=`echo "$os" | sed -e 's|sunos5|solaris2|'` 1418ed6f5d66Smrg ;; 14193d05230fSmrg sunos6*) 14203d05230fSmrg os=`echo "$os" | sed -e 's|sunos6|solaris3|'` 1421ed6f5d66Smrg ;; 14223d05230fSmrg wince*) 14233d05230fSmrg os=wince 1424ed6f5d66Smrg ;; 14253d05230fSmrg utek*) 14263d05230fSmrg os=bsd 1427ed6f5d66Smrg ;; 14283d05230fSmrg dynix*) 14293d05230fSmrg os=bsd 1430ed6f5d66Smrg ;; 14313d05230fSmrg acis*) 14323d05230fSmrg os=aos 1433ed6f5d66Smrg ;; 14343d05230fSmrg atheos*) 14353d05230fSmrg os=atheos 1436ed6f5d66Smrg ;; 14373d05230fSmrg syllable*) 14383d05230fSmrg os=syllable 1439ed6f5d66Smrg ;; 14403d05230fSmrg 386bsd) 14413d05230fSmrg os=bsd 1442ed6f5d66Smrg ;; 14433d05230fSmrg ctix* | uts*) 14443d05230fSmrg os=sysv 1445ed6f5d66Smrg ;; 14463d05230fSmrg nova*) 14473d05230fSmrg os=rtmk-nova 1448ed6f5d66Smrg ;; 14493d05230fSmrg ns2) 14503d05230fSmrg os=nextstep2 1451ed6f5d66Smrg ;; 14523d05230fSmrg # Preserve the version number of sinix5. 14533d05230fSmrg sinix5.*) 14543d05230fSmrg os=`echo "$os" | sed -e 's|sinix|sysv|'` 1455ed6f5d66Smrg ;; 14563d05230fSmrg sinix*) 14573d05230fSmrg os=sysv4 1458ed6f5d66Smrg ;; 14593d05230fSmrg tpf*) 14603d05230fSmrg os=tpf 1461ed6f5d66Smrg ;; 14623d05230fSmrg triton*) 14633d05230fSmrg os=sysv3 1464ed6f5d66Smrg ;; 14653d05230fSmrg oss*) 14663d05230fSmrg os=sysv3 1467ed6f5d66Smrg ;; 14683d05230fSmrg svr4*) 14693d05230fSmrg os=sysv4 1470ed6f5d66Smrg ;; 14713d05230fSmrg svr3) 14723d05230fSmrg os=sysv3 1473ed6f5d66Smrg ;; 14743d05230fSmrg sysvr4) 14753d05230fSmrg os=sysv4 1476ed6f5d66Smrg ;; 14773d05230fSmrg ose*) 14783d05230fSmrg os=ose 1479ed6f5d66Smrg ;; 14803d05230fSmrg *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) 14813d05230fSmrg os=mint 1482ed6f5d66Smrg ;; 14833d05230fSmrg dicos*) 14843d05230fSmrg os=dicos 1485fbc03982Smrg ;; 14863d05230fSmrg pikeos*) 14873d05230fSmrg # Until real need of OS specific support for 14883d05230fSmrg # particular features comes up, bare metal 14893d05230fSmrg # configurations are quite functional. 14903d05230fSmrg case $cpu in 14913d05230fSmrg arm*) 14923d05230fSmrg os=eabi 14933d05230fSmrg ;; 14943d05230fSmrg *) 1495a3680546Smrg os= 1496a3680546Smrg obj=elf 14973d05230fSmrg ;; 14983d05230fSmrg esac 1499ed6f5d66Smrg ;; 1500a3680546Smrg aout* | coff* | elf* | pe*) 1501a3680546Smrg # These are machine code file formats, not OSes 1502a3680546Smrg obj=$os 1503a3680546Smrg os= 1504a3680546Smrg ;; 1505ed6f5d66Smrg *) 15063d05230fSmrg # No normalization, but not necessarily accepted, that comes below. 1507ed6f5d66Smrg ;; 1508ed6f5d66Smrgesac 15093d05230fSmrg 1510ed6f5d66Smrgelse 1511ed6f5d66Smrg 1512ed6f5d66Smrg# Here we handle the default operating systems that come with various machines. 1513ed6f5d66Smrg# The value should be what the vendor currently ships out the door with their 1514ed6f5d66Smrg# machine or put another way, the most popular os provided with the machine. 1515ed6f5d66Smrg 1516ed6f5d66Smrg# Note that if you're going to try to match "-MANUFACTURER" here (say, 1517ed6f5d66Smrg# "-sun"), then you have to tell the case statement up towards the top 1518ed6f5d66Smrg# that MANUFACTURER isn't an operating system. Otherwise, code above 1519ed6f5d66Smrg# will signal an error saying that MANUFACTURER isn't an operating 1520ed6f5d66Smrg# system, and we'll never get to this point. 1521ed6f5d66Smrg 15223d05230fSmrgkernel= 1523a3680546Smrgobj= 15243d05230fSmrgcase $cpu-$vendor in 1525ed6f5d66Smrg score-*) 1526a3680546Smrg os= 1527a3680546Smrg obj=elf 1528ed6f5d66Smrg ;; 1529ed6f5d66Smrg spu-*) 1530a3680546Smrg os= 1531a3680546Smrg obj=elf 1532ed6f5d66Smrg ;; 1533ed6f5d66Smrg *-acorn) 15343d05230fSmrg os=riscix1.2 1535ed6f5d66Smrg ;; 1536ed6f5d66Smrg arm*-rebel) 15373d05230fSmrg kernel=linux 15383d05230fSmrg os=gnu 1539ed6f5d66Smrg ;; 1540ed6f5d66Smrg arm*-semi) 1541a3680546Smrg os= 1542a3680546Smrg obj=aout 1543ed6f5d66Smrg ;; 1544ed6f5d66Smrg c4x-* | tic4x-*) 1545a3680546Smrg os= 1546a3680546Smrg obj=coff 1547ed6f5d66Smrg ;; 1548ed6f5d66Smrg c8051-*) 1549a3680546Smrg os= 1550a3680546Smrg obj=elf 15513d05230fSmrg ;; 15523d05230fSmrg clipper-intergraph) 15533d05230fSmrg os=clix 1554ed6f5d66Smrg ;; 1555ed6f5d66Smrg hexagon-*) 1556a3680546Smrg os= 1557a3680546Smrg obj=elf 1558ed6f5d66Smrg ;; 1559ed6f5d66Smrg tic54x-*) 1560a3680546Smrg os= 1561a3680546Smrg obj=coff 1562ed6f5d66Smrg ;; 1563ed6f5d66Smrg tic55x-*) 1564a3680546Smrg os= 1565a3680546Smrg obj=coff 1566ed6f5d66Smrg ;; 1567ed6f5d66Smrg tic6x-*) 1568a3680546Smrg os= 1569a3680546Smrg obj=coff 1570ed6f5d66Smrg ;; 1571ed6f5d66Smrg # This must come before the *-dec entry. 1572ed6f5d66Smrg pdp10-*) 15733d05230fSmrg os=tops20 1574ed6f5d66Smrg ;; 1575ed6f5d66Smrg pdp11-*) 15763d05230fSmrg os=none 1577ed6f5d66Smrg ;; 1578ed6f5d66Smrg *-dec | vax-*) 15793d05230fSmrg os=ultrix4.2 1580ed6f5d66Smrg ;; 1581ed6f5d66Smrg m68*-apollo) 15823d05230fSmrg os=domain 1583ed6f5d66Smrg ;; 1584ed6f5d66Smrg i386-sun) 15853d05230fSmrg os=sunos4.0.2 1586ed6f5d66Smrg ;; 1587ed6f5d66Smrg m68000-sun) 15883d05230fSmrg os=sunos3 1589ed6f5d66Smrg ;; 1590ed6f5d66Smrg m68*-cisco) 1591a3680546Smrg os= 1592a3680546Smrg obj=aout 1593ed6f5d66Smrg ;; 1594ed6f5d66Smrg mep-*) 1595a3680546Smrg os= 1596a3680546Smrg obj=elf 1597ed6f5d66Smrg ;; 1598ed6f5d66Smrg mips*-cisco) 1599a3680546Smrg os= 1600a3680546Smrg obj=elf 1601ed6f5d66Smrg ;; 1602a3680546Smrg mips*-*|nanomips*-*) 1603a3680546Smrg os= 1604a3680546Smrg obj=elf 1605ed6f5d66Smrg ;; 1606ed6f5d66Smrg or32-*) 1607a3680546Smrg os= 1608a3680546Smrg obj=coff 1609ed6f5d66Smrg ;; 1610ed6f5d66Smrg *-tti) # must be before sparc entry or we get the wrong os. 16113d05230fSmrg os=sysv3 1612ed6f5d66Smrg ;; 1613ed6f5d66Smrg sparc-* | *-sun) 16143d05230fSmrg os=sunos4.1.1 1615ed6f5d66Smrg ;; 1616fbc03982Smrg pru-*) 1617a3680546Smrg os= 1618a3680546Smrg obj=elf 1619fbc03982Smrg ;; 1620ed6f5d66Smrg *-be) 16213d05230fSmrg os=beos 1622ed6f5d66Smrg ;; 1623ed6f5d66Smrg *-ibm) 16243d05230fSmrg os=aix 1625ed6f5d66Smrg ;; 1626ed6f5d66Smrg *-knuth) 16273d05230fSmrg os=mmixware 1628ed6f5d66Smrg ;; 1629ed6f5d66Smrg *-wec) 16303d05230fSmrg os=proelf 1631ed6f5d66Smrg ;; 1632ed6f5d66Smrg *-winbond) 16333d05230fSmrg os=proelf 1634ed6f5d66Smrg ;; 1635ed6f5d66Smrg *-oki) 16363d05230fSmrg os=proelf 1637ed6f5d66Smrg ;; 1638ed6f5d66Smrg *-hp) 16393d05230fSmrg os=hpux 1640ed6f5d66Smrg ;; 1641ed6f5d66Smrg *-hitachi) 16423d05230fSmrg os=hiux 1643ed6f5d66Smrg ;; 1644ed6f5d66Smrg i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) 16453d05230fSmrg os=sysv 1646ed6f5d66Smrg ;; 1647ed6f5d66Smrg *-cbm) 16483d05230fSmrg os=amigaos 1649ed6f5d66Smrg ;; 1650ed6f5d66Smrg *-dg) 16513d05230fSmrg os=dgux 1652ed6f5d66Smrg ;; 1653ed6f5d66Smrg *-dolphin) 16543d05230fSmrg os=sysv3 1655ed6f5d66Smrg ;; 1656ed6f5d66Smrg m68k-ccur) 16573d05230fSmrg os=rtu 1658ed6f5d66Smrg ;; 1659ed6f5d66Smrg m88k-omron*) 16603d05230fSmrg os=luna 1661ed6f5d66Smrg ;; 16623d05230fSmrg *-next) 16633d05230fSmrg os=nextstep 1664ed6f5d66Smrg ;; 1665ed6f5d66Smrg *-sequent) 16663d05230fSmrg os=ptx 1667ed6f5d66Smrg ;; 1668ed6f5d66Smrg *-crds) 16693d05230fSmrg os=unos 1670ed6f5d66Smrg ;; 1671ed6f5d66Smrg *-ns) 16723d05230fSmrg os=genix 1673ed6f5d66Smrg ;; 1674ed6f5d66Smrg i370-*) 16753d05230fSmrg os=mvs 1676ed6f5d66Smrg ;; 1677ed6f5d66Smrg *-gould) 16783d05230fSmrg os=sysv 1679ed6f5d66Smrg ;; 1680ed6f5d66Smrg *-highlevel) 16813d05230fSmrg os=bsd 1682ed6f5d66Smrg ;; 1683ed6f5d66Smrg *-encore) 16843d05230fSmrg os=bsd 1685ed6f5d66Smrg ;; 1686ed6f5d66Smrg *-sgi) 16873d05230fSmrg os=irix 1688ed6f5d66Smrg ;; 1689ed6f5d66Smrg *-siemens) 16903d05230fSmrg os=sysv4 1691ed6f5d66Smrg ;; 1692ed6f5d66Smrg *-masscomp) 16933d05230fSmrg os=rtu 1694ed6f5d66Smrg ;; 1695ed6f5d66Smrg f30[01]-fujitsu | f700-fujitsu) 16963d05230fSmrg os=uxpv 1697ed6f5d66Smrg ;; 1698ed6f5d66Smrg *-rom68k) 1699a3680546Smrg os= 1700a3680546Smrg obj=coff 1701ed6f5d66Smrg ;; 1702ed6f5d66Smrg *-*bug) 1703a3680546Smrg os= 1704a3680546Smrg obj=coff 1705ed6f5d66Smrg ;; 1706ed6f5d66Smrg *-apple) 17073d05230fSmrg os=macos 1708ed6f5d66Smrg ;; 1709ed6f5d66Smrg *-atari*) 17103d05230fSmrg os=mint 17113d05230fSmrg ;; 17123d05230fSmrg *-wrs) 17133d05230fSmrg os=vxworks 1714ed6f5d66Smrg ;; 1715ed6f5d66Smrg *) 17163d05230fSmrg os=none 1717ed6f5d66Smrg ;; 1718ed6f5d66Smrgesac 17193d05230fSmrg 1720ed6f5d66Smrgfi 1721ed6f5d66Smrg 1722a3680546Smrg# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). 1723a3680546Smrg 17243d05230fSmrgcase $os in 17253d05230fSmrg # Sometimes we do "kernel-libc", so those need to count as OSes. 1726a3680546Smrg llvm* | musl* | newlib* | relibc* | uclibc*) 17273d05230fSmrg ;; 17283d05230fSmrg # Likewise for "kernel-abi" 17293d05230fSmrg eabi* | gnueabi*) 17303d05230fSmrg ;; 17313d05230fSmrg # VxWorks passes extra cpu info in the 4th filed. 17323d05230fSmrg simlinux | simwindows | spe) 17333d05230fSmrg ;; 1734a3680546Smrg # See `case $cpu-$os` validation below 1735a3680546Smrg ghcjs) 1736a3680546Smrg ;; 17373d05230fSmrg # Now accept the basic system types. 17383d05230fSmrg # The portable systems comes first. 17393d05230fSmrg # Each alternative MUST end in a * to match a version number. 17403d05230fSmrg gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ 17413d05230fSmrg | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ 17423d05230fSmrg | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ 17433d05230fSmrg | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ 17443d05230fSmrg | hiux* | abug | nacl* | netware* | windows* \ 1745a3680546Smrg | os9* | macos* | osx* | ios* | tvos* | watchos* \ 17463d05230fSmrg | mpw* | magic* | mmixware* | mon960* | lnews* \ 17473d05230fSmrg | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ 17483d05230fSmrg | aos* | aros* | cloudabi* | sortix* | twizzler* \ 17493d05230fSmrg | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ 17503d05230fSmrg | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ 17513d05230fSmrg | mirbsd* | netbsd* | dicos* | openedition* | ose* \ 17523d05230fSmrg | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ 17533d05230fSmrg | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ 1754a3680546Smrg | bosx* | nextstep* | cxux* | oabi* \ 1755a3680546Smrg | ptx* | ecoff* | winnt* | domain* | vsta* \ 17563d05230fSmrg | udi* | lites* | ieee* | go32* | aux* | hcos* \ 17573d05230fSmrg | chorusrdb* | cegcc* | glidix* | serenity* \ 1758a3680546Smrg | cygwin* | msys* | moss* | proelf* | rtems* \ 17593d05230fSmrg | midipix* | mingw32* | mingw64* | mint* \ 17603d05230fSmrg | uxpv* | beos* | mpeix* | udk* | moxiebox* \ 17613d05230fSmrg | interix* | uwin* | mks* | rhapsody* | darwin* \ 17623d05230fSmrg | openstep* | oskit* | conix* | pw32* | nonstopux* \ 17633d05230fSmrg | storm-chaos* | tops10* | tenex* | tops20* | its* \ 17643d05230fSmrg | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ 17653d05230fSmrg | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ 17663d05230fSmrg | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ 17673d05230fSmrg | skyos* | haiku* | rdos* | toppers* | drops* | es* \ 17683d05230fSmrg | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ 17693d05230fSmrg | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ 1770139359d2Smrg | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ 1771a3680546Smrg | fiwix* | mlibc* | cos* | mbr* | ironclad* ) 17723d05230fSmrg ;; 17733d05230fSmrg # This one is extra strict with allowed versions 17743d05230fSmrg sco3.2v2 | sco3.2v[4-9]* | sco5v6*) 17753d05230fSmrg # Don't forget version if it is 3.2v4 or newer. 17763d05230fSmrg ;; 1777a3680546Smrg # This refers to builds using the UEFI calling convention 1778a3680546Smrg # (which depends on the architecture) and PE file format. 1779a3680546Smrg # Note that this is both a different calling convention and 1780a3680546Smrg # different file format than that of GNU-EFI 1781a3680546Smrg # (x86_64-w64-mingw32). 1782a3680546Smrg uefi) 1783a3680546Smrg ;; 17843d05230fSmrg none) 17853d05230fSmrg ;; 1786a3680546Smrg kernel* | msvc* ) 1787139359d2Smrg # Restricted further below 1788139359d2Smrg ;; 1789a3680546Smrg '') 1790a3680546Smrg if test x"$obj" = x 1791a3680546Smrg then 1792a3680546Smrg echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 1793a3680546Smrg fi 1794a3680546Smrg ;; 17953d05230fSmrg *) 1796a3680546Smrg echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 1797a3680546Smrg exit 1 1798a3680546Smrg ;; 1799a3680546Smrgesac 1800a3680546Smrg 1801a3680546Smrgcase $obj in 1802a3680546Smrg aout* | coff* | elf* | pe*) 1803a3680546Smrg ;; 1804a3680546Smrg '') 1805a3680546Smrg # empty is fine 1806a3680546Smrg ;; 1807a3680546Smrg *) 1808a3680546Smrg echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 1809a3680546Smrg exit 1 1810a3680546Smrg ;; 1811a3680546Smrgesac 1812a3680546Smrg 1813a3680546Smrg# Here we handle the constraint that a (synthetic) cpu and os are 1814a3680546Smrg# valid only in combination with each other and nowhere else. 1815a3680546Smrgcase $cpu-$os in 1816a3680546Smrg # The "javascript-unknown-ghcjs" triple is used by GHC; we 1817a3680546Smrg # accept it here in order to tolerate that, but reject any 1818a3680546Smrg # variations. 1819a3680546Smrg javascript-ghcjs) 1820a3680546Smrg ;; 1821a3680546Smrg javascript-* | *-ghcjs) 1822a3680546Smrg echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 18233d05230fSmrg exit 1 18243d05230fSmrg ;; 18253d05230fSmrgesac 18263d05230fSmrg 18273d05230fSmrg# As a final step for OS-related things, validate the OS-kernel combination 18283d05230fSmrg# (given a valid OS), if there is a kernel. 1829a3680546Smrgcase $kernel-$os-$obj in 1830a3680546Smrg linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ 1831a3680546Smrg | linux-mlibc*- | linux-musl*- | linux-newlib*- \ 1832a3680546Smrg | linux-relibc*- | linux-uclibc*- ) 18333d05230fSmrg ;; 1834a3680546Smrg uclinux-uclibc*- ) 18353d05230fSmrg ;; 1836a3680546Smrg managarm-mlibc*- | managarm-kernel*- ) 1837139359d2Smrg ;; 1838a3680546Smrg windows*-msvc*-) 1839a3680546Smrg ;; 1840a3680546Smrg -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ 1841a3680546Smrg | -uclibc*- ) 18423d05230fSmrg # These are just libc implementations, not actual OSes, and thus 18433d05230fSmrg # require a kernel. 1844a3680546Smrg echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 18453d05230fSmrg exit 1 18463d05230fSmrg ;; 1847a3680546Smrg -kernel*- ) 1848a3680546Smrg echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 1849139359d2Smrg exit 1 1850139359d2Smrg ;; 1851a3680546Smrg *-kernel*- ) 1852a3680546Smrg echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 1853139359d2Smrg exit 1 1854139359d2Smrg ;; 1855a3680546Smrg *-msvc*- ) 1856a3680546Smrg echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 1857a3680546Smrg exit 1 18583d05230fSmrg ;; 1859a3680546Smrg kfreebsd*-gnu*- | kopensolaris*-gnu*-) 18603d05230fSmrg ;; 1861a3680546Smrg vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) 18623d05230fSmrg ;; 1863a3680546Smrg nto-qnx*-) 1864a3680546Smrg ;; 1865a3680546Smrg os2-emx-) 1866a3680546Smrg ;; 1867a3680546Smrg *-eabi*- | *-gnueabi*-) 18683d05230fSmrg ;; 1869a3680546Smrg none--*) 1870a3680546Smrg # None (no kernel, i.e. freestanding / bare metal), 1871a3680546Smrg # can be paired with an machine code file format 18723d05230fSmrg ;; 1873a3680546Smrg -*-) 18743d05230fSmrg # Blank kernel with real OS is always fine. 18753d05230fSmrg ;; 1876a3680546Smrg --*) 1877a3680546Smrg # Blank kernel and OS with real machine code file format is always fine. 1878a3680546Smrg ;; 1879a3680546Smrg *-*-*) 1880a3680546Smrg echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 18813d05230fSmrg exit 1 18823d05230fSmrg ;; 18833d05230fSmrgesac 18843d05230fSmrg 1885ed6f5d66Smrg# Here we handle the case where we know the os, and the CPU type, but not the 1886ed6f5d66Smrg# manufacturer. We pick the logical manufacturer. 18873d05230fSmrgcase $vendor in 18883d05230fSmrg unknown) 18893d05230fSmrg case $cpu-$os in 18903d05230fSmrg *-riscix*) 1891ed6f5d66Smrg vendor=acorn 1892ed6f5d66Smrg ;; 18933d05230fSmrg *-sunos*) 1894ed6f5d66Smrg vendor=sun 1895ed6f5d66Smrg ;; 18963d05230fSmrg *-cnk* | *-aix*) 1897ed6f5d66Smrg vendor=ibm 1898ed6f5d66Smrg ;; 18993d05230fSmrg *-beos*) 1900ed6f5d66Smrg vendor=be 1901ed6f5d66Smrg ;; 19023d05230fSmrg *-hpux*) 1903ed6f5d66Smrg vendor=hp 1904ed6f5d66Smrg ;; 19053d05230fSmrg *-mpeix*) 1906ed6f5d66Smrg vendor=hp 1907ed6f5d66Smrg ;; 19083d05230fSmrg *-hiux*) 1909ed6f5d66Smrg vendor=hitachi 1910ed6f5d66Smrg ;; 19113d05230fSmrg *-unos*) 1912ed6f5d66Smrg vendor=crds 1913ed6f5d66Smrg ;; 19143d05230fSmrg *-dgux*) 1915ed6f5d66Smrg vendor=dg 1916ed6f5d66Smrg ;; 19173d05230fSmrg *-luna*) 1918ed6f5d66Smrg vendor=omron 1919ed6f5d66Smrg ;; 19203d05230fSmrg *-genix*) 1921ed6f5d66Smrg vendor=ns 1922ed6f5d66Smrg ;; 19233d05230fSmrg *-clix*) 19243d05230fSmrg vendor=intergraph 19253d05230fSmrg ;; 19263d05230fSmrg *-mvs* | *-opened*) 19273d05230fSmrg vendor=ibm 19283d05230fSmrg ;; 19293d05230fSmrg *-os400*) 1930ed6f5d66Smrg vendor=ibm 1931ed6f5d66Smrg ;; 19323d05230fSmrg s390-* | s390x-*) 1933ed6f5d66Smrg vendor=ibm 1934ed6f5d66Smrg ;; 19353d05230fSmrg *-ptx*) 1936ed6f5d66Smrg vendor=sequent 1937ed6f5d66Smrg ;; 19383d05230fSmrg *-tpf*) 1939ed6f5d66Smrg vendor=ibm 1940ed6f5d66Smrg ;; 19413d05230fSmrg *-vxsim* | *-vxworks* | *-windiss*) 1942ed6f5d66Smrg vendor=wrs 1943ed6f5d66Smrg ;; 19443d05230fSmrg *-aux*) 1945ed6f5d66Smrg vendor=apple 1946ed6f5d66Smrg ;; 19473d05230fSmrg *-hms*) 1948ed6f5d66Smrg vendor=hitachi 1949ed6f5d66Smrg ;; 19503d05230fSmrg *-mpw* | *-macos*) 1951ed6f5d66Smrg vendor=apple 1952ed6f5d66Smrg ;; 19533d05230fSmrg *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) 1954ed6f5d66Smrg vendor=atari 1955ed6f5d66Smrg ;; 19563d05230fSmrg *-vos*) 1957ed6f5d66Smrg vendor=stratus 1958ed6f5d66Smrg ;; 1959ed6f5d66Smrg esac 1960ed6f5d66Smrg ;; 1961ed6f5d66Smrgesac 1962ed6f5d66Smrg 1963a3680546Smrgecho "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" 1964ed6f5d66Smrgexit 1965ed6f5d66Smrg 1966ed6f5d66Smrg# Local variables: 19673d05230fSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 1968ed6f5d66Smrg# time-stamp-start: "timestamp='" 1969ed6f5d66Smrg# time-stamp-format: "%:y-%02m-%02d" 1970ed6f5d66Smrg# time-stamp-end: "'" 1971ed6f5d66Smrg# End: 1972