xref: /trunk/main/config.sub (revision ff1d3d89482351e8aaf5d202aac51745d983fa59)
1cdf0e10cSrcweir#! /bin/sh
2cdf0e10cSrcweir# Configuration validation subroutine script.
3*ff1d3d89Smseidel#   Copyright 1992-2024 Free Software Foundation, Inc.
4cdf0e10cSrcweir
509be380fSmseidel# shellcheck disable=SC2006,SC2268 # see below for rationale
609be380fSmseidel
7*ff1d3d89Smseideltimestamp='2024-01-01'
8cdf0e10cSrcweir
9ee1eb700SMatthias Seidel# This file is free software; you can redistribute it and/or modify it
10ee1eb700SMatthias Seidel# under the terms of the GNU General Public License as published by
11d50f3220Smseidel# the Free Software Foundation, either version 3 of the License, or
12cdf0e10cSrcweir# (at your option) any later version.
13cdf0e10cSrcweir#
14ee1eb700SMatthias Seidel# This program is distributed in the hope that it will be useful, but
15ee1eb700SMatthias Seidel# WITHOUT ANY WARRANTY; without even the implied warranty of
16ee1eb700SMatthias Seidel# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17ee1eb700SMatthias Seidel# General Public License for more details.
18cdf0e10cSrcweir#
19cdf0e10cSrcweir# You should have received a copy of the GNU General Public License
20ee1eb700SMatthias Seidel# along with this program; if not, see <https://www.gnu.org/licenses/>.
21187b4248SPedro Giffuni#
22cdf0e10cSrcweir# As a special exception to the GNU General Public License, if you
23cdf0e10cSrcweir# distribute this file as part of a program that contains a
24cdf0e10cSrcweir# configuration script generated by Autoconf, you may include it under
25ee1eb700SMatthias Seidel# the same distribution terms that you use for the rest of that
26ee1eb700SMatthias Seidel# program.  This Exception is an additional permission under section 7
27ee1eb700SMatthias Seidel# of the GNU General Public License, version 3 ("GPLv3").
28cdf0e10cSrcweir
29187b4248SPedro Giffuni
30ee1eb700SMatthias Seidel# Please send patches to <config-patches@gnu.org>.
31cdf0e10cSrcweir#
32cdf0e10cSrcweir# Configuration subroutine to validate and canonicalize a configuration type.
33cdf0e10cSrcweir# Supply the specified configuration type as an argument.
34cdf0e10cSrcweir# If it is invalid, we print an error message on stderr and exit with code 1.
35cdf0e10cSrcweir# Otherwise, we print the canonical config type on stdout and succeed.
36cdf0e10cSrcweir
37187b4248SPedro Giffuni# You can get the latest version of this script from:
381adde547Smseidel# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
39187b4248SPedro Giffuni
40cdf0e10cSrcweir# This file is supposed to be the same for all GNU packages
41cdf0e10cSrcweir# and recognize all the CPU types, system types and aliases
42cdf0e10cSrcweir# that are meaningful with *any* GNU software.
43cdf0e10cSrcweir# Each package is responsible for reporting which valid configurations
44cdf0e10cSrcweir# it does not support.  The user should be able to distinguish
45cdf0e10cSrcweir# a failure to support a valid configuration from a meaningless
46cdf0e10cSrcweir# configuration.
47cdf0e10cSrcweir
48cdf0e10cSrcweir# The goal of this file is to map all the various variations of a given
49cdf0e10cSrcweir# machine specification into a single specification in the form:
50cdf0e10cSrcweir#   CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
51cdf0e10cSrcweir# or in some cases, the newer four-part form:
52cdf0e10cSrcweir#   CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
53cdf0e10cSrcweir# It is wrong to echo any other type of specification.
54cdf0e10cSrcweir
5509be380fSmseidel# The "shellcheck disable" line above the timestamp inhibits complaints
5609be380fSmseidel# about features and limitations of the classic Bourne shell that were
5709be380fSmseidel# superseded or lifted in POSIX.  However, this script identifies a wide
5809be380fSmseidel# variety of pre-POSIX systems that do not have POSIX shells at all, and
5909be380fSmseidel# even some reasonably current systems (Solaris 10 as case-in-point) still
6009be380fSmseidel# have a pre-POSIX /bin/sh.
6109be380fSmseidel
6209be380fSmseidelme=`echo "$0" | sed -e 's,.*/,,'`
63cdf0e10cSrcweir
64cdf0e10cSrcweirusage="\
65ee1eb700SMatthias SeidelUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
66cdf0e10cSrcweir
67cdf0e10cSrcweirCanonicalize a configuration name.
68cdf0e10cSrcweir
69ee1eb700SMatthias SeidelOptions:
70cdf0e10cSrcweir  -h, --help         print this help, then exit
71cdf0e10cSrcweir  -t, --time-stamp   print date of last modification, then exit
72cdf0e10cSrcweir  -v, --version      print version number, then exit
73cdf0e10cSrcweir
74cdf0e10cSrcweirReport bugs and patches to <config-patches@gnu.org>."
75cdf0e10cSrcweir
76cdf0e10cSrcweirversion="\
77cdf0e10cSrcweirGNU config.sub ($timestamp)
78cdf0e10cSrcweir
79*ff1d3d89SmseidelCopyright 1992-2024 Free Software Foundation, Inc.
80cdf0e10cSrcweir
81cdf0e10cSrcweirThis is free software; see the source for copying conditions.  There is NO
82cdf0e10cSrcweirwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
83cdf0e10cSrcweir
84cdf0e10cSrcweirhelp="
85*ff1d3d89SmseidelTry '$me --help' for more information."
86cdf0e10cSrcweir
87cdf0e10cSrcweir# Parse command line
88cdf0e10cSrcweirwhile test $# -gt 0 ; do
89cdf0e10cSrcweir  case $1 in
90cdf0e10cSrcweir    --time-stamp | --time* | -t )
91187b4248SPedro Giffuni       echo "$timestamp" ; exit ;;
92cdf0e10cSrcweir    --version | -v )
93187b4248SPedro Giffuni       echo "$version" ; exit ;;
94cdf0e10cSrcweir    --help | --h* | -h )
95187b4248SPedro Giffuni       echo "$usage"; exit ;;
96cdf0e10cSrcweir    -- )     # Stop option processing
97cdf0e10cSrcweir       shift; break ;;
98cdf0e10cSrcweir    - ) # Use stdin as input.
99cdf0e10cSrcweir       break ;;
100cdf0e10cSrcweir    -* )
1013ace3152SMatthias Seidel       echo "$me: invalid option $1$help" >&2
102cdf0e10cSrcweir       exit 1 ;;
103cdf0e10cSrcweir
104cdf0e10cSrcweir    *local*)
105cdf0e10cSrcweir       # First pass through any local machine types.
1061a5d95c5SMatthias Seidel       echo "$1"
107187b4248SPedro Giffuni       exit ;;
108cdf0e10cSrcweir
109cdf0e10cSrcweir    * )
110cdf0e10cSrcweir       break ;;
111cdf0e10cSrcweir  esac
112cdf0e10cSrcweirdone
113cdf0e10cSrcweir
114cdf0e10cSrcweircase $# in
115cdf0e10cSrcweir 0) echo "$me: missing argument$help" >&2
116cdf0e10cSrcweir    exit 1;;
117cdf0e10cSrcweir 1) ;;
118cdf0e10cSrcweir *) echo "$me: too many arguments$help" >&2
119cdf0e10cSrcweir    exit 1;;
120cdf0e10cSrcweiresac
121cdf0e10cSrcweir
1221aeda8abSMatthias Seidel# Split fields of configuration type
1233ace3152SMatthias Seidel# shellcheck disable=SC2162
12409be380fSmseidelsaved_IFS=$IFS
1253ace3152SMatthias SeidelIFS="-" read field1 field2 field3 field4 <<EOF
1261aeda8abSMatthias Seidel$1
1271aeda8abSMatthias SeidelEOF
12809be380fSmseidelIFS=$saved_IFS
1291aeda8abSMatthias Seidel
1301aeda8abSMatthias Seidel# Separate into logical components for further validation
1311aeda8abSMatthias Seidelcase $1 in
1321aeda8abSMatthias Seidel    *-*-*-*-*)
133*ff1d3d89Smseidel        echo "Invalid configuration '$1': more than four components" >&2
1341aeda8abSMatthias Seidel        exit 1
1351aeda8abSMatthias Seidel        ;;
1361aeda8abSMatthias Seidel    *-*-*-*)
1371aeda8abSMatthias Seidel        basic_machine=$field1-$field2
1385bf8527aSmseidel        basic_os=$field3-$field4
1391aeda8abSMatthias Seidel        ;;
1401aeda8abSMatthias Seidel    *-*-*)
1411aeda8abSMatthias Seidel        # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
1421aeda8abSMatthias Seidel        # parts
1431aeda8abSMatthias Seidel        maybe_os=$field2-$field3
144cdf0e10cSrcweir        case $maybe_os in
1455bf8527aSmseidel            nto-qnx* | linux-* | uclinux-uclibc* \
1461aeda8abSMatthias Seidel            | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
1471aeda8abSMatthias Seidel            | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
148*ff1d3d89Smseidel            | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \
149*ff1d3d89Smseidel            | windows-* )
1501aeda8abSMatthias Seidel                basic_machine=$field1
1515bf8527aSmseidel                basic_os=$maybe_os
152cdf0e10cSrcweir                ;;
153ee1eb700SMatthias Seidel            android-linux)
1541aeda8abSMatthias Seidel                basic_machine=$field1-unknown
1555bf8527aSmseidel                basic_os=linux-android
156ee1eb700SMatthias Seidel                ;;
157cdf0e10cSrcweir            *)
1581aeda8abSMatthias Seidel                basic_machine=$field1-$field2
1595bf8527aSmseidel                basic_os=$field3
1601aeda8abSMatthias Seidel                ;;
1611aeda8abSMatthias Seidel        esac
1621aeda8abSMatthias Seidel        ;;
1631aeda8abSMatthias Seidel    *-*)
1643ace3152SMatthias Seidel        # A lone config we happen to match not fitting any pattern
1651aeda8abSMatthias Seidel        case $field1-$field2 in
1661aeda8abSMatthias Seidel            decstation-3100)
1671aeda8abSMatthias Seidel                basic_machine=mips-dec
1685bf8527aSmseidel                basic_os=
1691aeda8abSMatthias Seidel                ;;
1701aeda8abSMatthias Seidel            *-*)
1711aeda8abSMatthias Seidel                # Second component is usually, but not always the OS
1721aeda8abSMatthias Seidel                case $field2 in
1731aeda8abSMatthias Seidel                    # Prevent following clause from handling this valid os
1741aeda8abSMatthias Seidel                    sun*os*)
1751aeda8abSMatthias Seidel                        basic_machine=$field1
1765bf8527aSmseidel                        basic_os=$field2
1771aeda8abSMatthias Seidel                        ;;
17809be380fSmseidel                    zephyr*)
17909be380fSmseidel                        basic_machine=$field1-unknown
18009be380fSmseidel                        basic_os=$field2
18109be380fSmseidel                        ;;
1821aeda8abSMatthias Seidel                    # Manufacturers
1831aeda8abSMatthias Seidel                    dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
1841aeda8abSMatthias Seidel                    | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
1851aeda8abSMatthias Seidel                    | unicom* | ibm* | next | hp | isi* | apollo | altos* \
1861aeda8abSMatthias Seidel                    | convergent* | ncr* | news | 32* | 3600* | 3100* \
1871aeda8abSMatthias Seidel                    | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
1881aeda8abSMatthias Seidel                    | ultra | tti* | harris | dolphin | highlevel | gould \
1891aeda8abSMatthias Seidel                    | cbm | ns | masscomp | apple | axis | knuth | cray \
1901aeda8abSMatthias Seidel                    | microblaze* | sim | cisco \
1911aeda8abSMatthias Seidel                    | oki | wec | wrs | winbond)
1921aeda8abSMatthias Seidel                        basic_machine=$field1-$field2
1935bf8527aSmseidel                        basic_os=
1941aeda8abSMatthias Seidel                        ;;
1951aeda8abSMatthias Seidel                    *)
1961aeda8abSMatthias Seidel                        basic_machine=$field1
1975bf8527aSmseidel                        basic_os=$field2
1981aeda8abSMatthias Seidel                        ;;
1991aeda8abSMatthias Seidel                esac
2001aeda8abSMatthias Seidel            ;;
2011aeda8abSMatthias Seidel        esac
2021aeda8abSMatthias Seidel        ;;
2031aeda8abSMatthias Seidel    *)
2041aeda8abSMatthias Seidel        # Convert single-component short-hands not valid as part of
2051aeda8abSMatthias Seidel        # multi-component configurations.
2061aeda8abSMatthias Seidel        case $field1 in
2071aeda8abSMatthias Seidel            386bsd)
2081aeda8abSMatthias Seidel                basic_machine=i386-pc
2095bf8527aSmseidel                basic_os=bsd
2101aeda8abSMatthias Seidel                ;;
2111aeda8abSMatthias Seidel            a29khif)
2121aeda8abSMatthias Seidel                basic_machine=a29k-amd
2135bf8527aSmseidel                basic_os=udi
2141aeda8abSMatthias Seidel                ;;
2151aeda8abSMatthias Seidel            adobe68k)
2161aeda8abSMatthias Seidel                basic_machine=m68010-adobe
2175bf8527aSmseidel                basic_os=scout
2181aeda8abSMatthias Seidel                ;;
2191aeda8abSMatthias Seidel            alliant)
2201aeda8abSMatthias Seidel                basic_machine=fx80-alliant
2215bf8527aSmseidel                basic_os=
2221aeda8abSMatthias Seidel                ;;
2231aeda8abSMatthias Seidel            altos | altos3068)
2241aeda8abSMatthias Seidel                basic_machine=m68k-altos
2255bf8527aSmseidel                basic_os=
2261aeda8abSMatthias Seidel                ;;
2271aeda8abSMatthias Seidel            am29k)
2281aeda8abSMatthias Seidel                basic_machine=a29k-none
2295bf8527aSmseidel                basic_os=bsd
2301aeda8abSMatthias Seidel                ;;
2311aeda8abSMatthias Seidel            amdahl)
2321aeda8abSMatthias Seidel                basic_machine=580-amdahl
2335bf8527aSmseidel                basic_os=sysv
2341aeda8abSMatthias Seidel                ;;
2351aeda8abSMatthias Seidel            amiga)
2361aeda8abSMatthias Seidel                basic_machine=m68k-unknown
2375bf8527aSmseidel                basic_os=
2381aeda8abSMatthias Seidel                ;;
2391aeda8abSMatthias Seidel            amigaos | amigados)
2401aeda8abSMatthias Seidel                basic_machine=m68k-unknown
2415bf8527aSmseidel                basic_os=amigaos
2421aeda8abSMatthias Seidel                ;;
2431aeda8abSMatthias Seidel            amigaunix | amix)
2441aeda8abSMatthias Seidel                basic_machine=m68k-unknown
2455bf8527aSmseidel                basic_os=sysv4
2461aeda8abSMatthias Seidel                ;;
2471aeda8abSMatthias Seidel            apollo68)
2481aeda8abSMatthias Seidel                basic_machine=m68k-apollo
2495bf8527aSmseidel                basic_os=sysv
2501aeda8abSMatthias Seidel                ;;
2511aeda8abSMatthias Seidel            apollo68bsd)
2521aeda8abSMatthias Seidel                basic_machine=m68k-apollo
2535bf8527aSmseidel                basic_os=bsd
2541aeda8abSMatthias Seidel                ;;
2551aeda8abSMatthias Seidel            aros)
2561aeda8abSMatthias Seidel                basic_machine=i386-pc
2575bf8527aSmseidel                basic_os=aros
2581aeda8abSMatthias Seidel                ;;
2591aeda8abSMatthias Seidel            aux)
2601aeda8abSMatthias Seidel                basic_machine=m68k-apple
2615bf8527aSmseidel                basic_os=aux
2621aeda8abSMatthias Seidel                ;;
2631aeda8abSMatthias Seidel            balance)
2641aeda8abSMatthias Seidel                basic_machine=ns32k-sequent
2655bf8527aSmseidel                basic_os=dynix
2661aeda8abSMatthias Seidel                ;;
2671aeda8abSMatthias Seidel            blackfin)
2681aeda8abSMatthias Seidel                basic_machine=bfin-unknown
2695bf8527aSmseidel                basic_os=linux
2701aeda8abSMatthias Seidel                ;;
2711aeda8abSMatthias Seidel            cegcc)
2721aeda8abSMatthias Seidel                basic_machine=arm-unknown
2735bf8527aSmseidel                basic_os=cegcc
2741aeda8abSMatthias Seidel                ;;
2751aeda8abSMatthias Seidel            convex-c1)
2761aeda8abSMatthias Seidel                basic_machine=c1-convex
2775bf8527aSmseidel                basic_os=bsd
2781aeda8abSMatthias Seidel                ;;
2791aeda8abSMatthias Seidel            convex-c2)
2801aeda8abSMatthias Seidel                basic_machine=c2-convex
2815bf8527aSmseidel                basic_os=bsd
2821aeda8abSMatthias Seidel                ;;
2831aeda8abSMatthias Seidel            convex-c32)
2841aeda8abSMatthias Seidel                basic_machine=c32-convex
2855bf8527aSmseidel                basic_os=bsd
2861aeda8abSMatthias Seidel                ;;
2871aeda8abSMatthias Seidel            convex-c34)
2881aeda8abSMatthias Seidel                basic_machine=c34-convex
2895bf8527aSmseidel                basic_os=bsd
2901aeda8abSMatthias Seidel                ;;
2911aeda8abSMatthias Seidel            convex-c38)
2921aeda8abSMatthias Seidel                basic_machine=c38-convex
2935bf8527aSmseidel                basic_os=bsd
2941aeda8abSMatthias Seidel                ;;
2951aeda8abSMatthias Seidel            cray)
2961aeda8abSMatthias Seidel                basic_machine=j90-cray
2975bf8527aSmseidel                basic_os=unicos
2981aeda8abSMatthias Seidel                ;;
2991aeda8abSMatthias Seidel            crds | unos)
3001aeda8abSMatthias Seidel                basic_machine=m68k-crds
3015bf8527aSmseidel                basic_os=
3021aeda8abSMatthias Seidel                ;;
3031aeda8abSMatthias Seidel            da30)
3041aeda8abSMatthias Seidel                basic_machine=m68k-da30
3055bf8527aSmseidel                basic_os=
3061aeda8abSMatthias Seidel                ;;
3071aeda8abSMatthias Seidel            decstation | pmax | pmin | dec3100 | decstatn)
3081aeda8abSMatthias Seidel                basic_machine=mips-dec
3095bf8527aSmseidel                basic_os=
3101aeda8abSMatthias Seidel                ;;
3111aeda8abSMatthias Seidel            delta88)
3121aeda8abSMatthias Seidel                basic_machine=m88k-motorola
3135bf8527aSmseidel                basic_os=sysv3
3141aeda8abSMatthias Seidel                ;;
3151aeda8abSMatthias Seidel            dicos)
3161aeda8abSMatthias Seidel                basic_machine=i686-pc
3175bf8527aSmseidel                basic_os=dicos
3181aeda8abSMatthias Seidel                ;;
3191aeda8abSMatthias Seidel            djgpp)
3201aeda8abSMatthias Seidel                basic_machine=i586-pc
3215bf8527aSmseidel                basic_os=msdosdjgpp
3221aeda8abSMatthias Seidel                ;;
3231aeda8abSMatthias Seidel            ebmon29k)
3241aeda8abSMatthias Seidel                basic_machine=a29k-amd
3255bf8527aSmseidel                basic_os=ebmon
3261aeda8abSMatthias Seidel                ;;
3271aeda8abSMatthias Seidel            es1800 | OSE68k | ose68k | ose | OSE)
3281aeda8abSMatthias Seidel                basic_machine=m68k-ericsson
3295bf8527aSmseidel                basic_os=ose
3301aeda8abSMatthias Seidel                ;;
3311aeda8abSMatthias Seidel            gmicro)
3321aeda8abSMatthias Seidel                basic_machine=tron-gmicro
3335bf8527aSmseidel                basic_os=sysv
3341aeda8abSMatthias Seidel                ;;
3351aeda8abSMatthias Seidel            go32)
3361aeda8abSMatthias Seidel                basic_machine=i386-pc
3375bf8527aSmseidel                basic_os=go32
3381aeda8abSMatthias Seidel                ;;
3391aeda8abSMatthias Seidel            h8300hms)
3401aeda8abSMatthias Seidel                basic_machine=h8300-hitachi
3415bf8527aSmseidel                basic_os=hms
3421aeda8abSMatthias Seidel                ;;
3431aeda8abSMatthias Seidel            h8300xray)
3441aeda8abSMatthias Seidel                basic_machine=h8300-hitachi
3455bf8527aSmseidel                basic_os=xray
3461aeda8abSMatthias Seidel                ;;
3471aeda8abSMatthias Seidel            h8500hms)
3481aeda8abSMatthias Seidel                basic_machine=h8500-hitachi
3495bf8527aSmseidel                basic_os=hms
3501aeda8abSMatthias Seidel                ;;
3511aeda8abSMatthias Seidel            harris)
3521aeda8abSMatthias Seidel                basic_machine=m88k-harris
3535bf8527aSmseidel                basic_os=sysv3
3541aeda8abSMatthias Seidel                ;;
355859e76afSmseidel            hp300 | hp300hpux)
3561aeda8abSMatthias Seidel                basic_machine=m68k-hp
3575bf8527aSmseidel                basic_os=hpux
3581aeda8abSMatthias Seidel                ;;
3591aeda8abSMatthias Seidel            hp300bsd)
3601aeda8abSMatthias Seidel                basic_machine=m68k-hp
3615bf8527aSmseidel                basic_os=bsd
3621aeda8abSMatthias Seidel                ;;
3631aeda8abSMatthias Seidel            hppaosf)
3641aeda8abSMatthias Seidel                basic_machine=hppa1.1-hp
3655bf8527aSmseidel                basic_os=osf
3661aeda8abSMatthias Seidel                ;;
3671aeda8abSMatthias Seidel            hppro)
3681aeda8abSMatthias Seidel                basic_machine=hppa1.1-hp
3695bf8527aSmseidel                basic_os=proelf
3701aeda8abSMatthias Seidel                ;;
3711aeda8abSMatthias Seidel            i386mach)
3721aeda8abSMatthias Seidel                basic_machine=i386-mach
3735bf8527aSmseidel                basic_os=mach
3741aeda8abSMatthias Seidel                ;;
3751aeda8abSMatthias Seidel            isi68 | isi)
3761aeda8abSMatthias Seidel                basic_machine=m68k-isi
3775bf8527aSmseidel                basic_os=sysv
3781aeda8abSMatthias Seidel                ;;
3791aeda8abSMatthias Seidel            m68knommu)
3801aeda8abSMatthias Seidel                basic_machine=m68k-unknown
3815bf8527aSmseidel                basic_os=linux
3821aeda8abSMatthias Seidel                ;;
3831aeda8abSMatthias Seidel            magnum | m3230)
3841aeda8abSMatthias Seidel                basic_machine=mips-mips
3855bf8527aSmseidel                basic_os=sysv
3861aeda8abSMatthias Seidel                ;;
3871aeda8abSMatthias Seidel            merlin)
3881aeda8abSMatthias Seidel                basic_machine=ns32k-utek
3895bf8527aSmseidel                basic_os=sysv
3901aeda8abSMatthias Seidel                ;;
3911aeda8abSMatthias Seidel            mingw64)
3921aeda8abSMatthias Seidel                basic_machine=x86_64-pc
3935bf8527aSmseidel                basic_os=mingw64
3941aeda8abSMatthias Seidel                ;;
3951aeda8abSMatthias Seidel            mingw32)
3961aeda8abSMatthias Seidel                basic_machine=i686-pc
3975bf8527aSmseidel                basic_os=mingw32
3981aeda8abSMatthias Seidel                ;;
3991aeda8abSMatthias Seidel            mingw32ce)
4001aeda8abSMatthias Seidel                basic_machine=arm-unknown
4015bf8527aSmseidel                basic_os=mingw32ce
4021aeda8abSMatthias Seidel                ;;
4031aeda8abSMatthias Seidel            monitor)
4041aeda8abSMatthias Seidel                basic_machine=m68k-rom68k
4055bf8527aSmseidel                basic_os=coff
4061aeda8abSMatthias Seidel                ;;
4071aeda8abSMatthias Seidel            morphos)
4081aeda8abSMatthias Seidel                basic_machine=powerpc-unknown
4095bf8527aSmseidel                basic_os=morphos
4101aeda8abSMatthias Seidel                ;;
4111aeda8abSMatthias Seidel            moxiebox)
4121aeda8abSMatthias Seidel                basic_machine=moxie-unknown
4135bf8527aSmseidel                basic_os=moxiebox
4141aeda8abSMatthias Seidel                ;;
4151aeda8abSMatthias Seidel            msdos)
4161aeda8abSMatthias Seidel                basic_machine=i386-pc
4175bf8527aSmseidel                basic_os=msdos
4181aeda8abSMatthias Seidel                ;;
4191aeda8abSMatthias Seidel            msys)
4201aeda8abSMatthias Seidel                basic_machine=i686-pc
4215bf8527aSmseidel                basic_os=msys
4221aeda8abSMatthias Seidel                ;;
4231aeda8abSMatthias Seidel            mvs)
4241aeda8abSMatthias Seidel                basic_machine=i370-ibm
4255bf8527aSmseidel                basic_os=mvs
4261aeda8abSMatthias Seidel                ;;
4271aeda8abSMatthias Seidel            nacl)
4281aeda8abSMatthias Seidel                basic_machine=le32-unknown
4295bf8527aSmseidel                basic_os=nacl
4301aeda8abSMatthias Seidel                ;;
4311aeda8abSMatthias Seidel            ncr3000)
4321aeda8abSMatthias Seidel                basic_machine=i486-ncr
4335bf8527aSmseidel                basic_os=sysv4
4341aeda8abSMatthias Seidel                ;;
4351aeda8abSMatthias Seidel            netbsd386)
4361aeda8abSMatthias Seidel                basic_machine=i386-pc
4375bf8527aSmseidel                basic_os=netbsd
4381aeda8abSMatthias Seidel                ;;
4391aeda8abSMatthias Seidel            netwinder)
4401aeda8abSMatthias Seidel                basic_machine=armv4l-rebel
4415bf8527aSmseidel                basic_os=linux
4421aeda8abSMatthias Seidel                ;;
4431aeda8abSMatthias Seidel            news | news700 | news800 | news900)
4441aeda8abSMatthias Seidel                basic_machine=m68k-sony
4455bf8527aSmseidel                basic_os=newsos
4461aeda8abSMatthias Seidel                ;;
4471aeda8abSMatthias Seidel            news1000)
4481aeda8abSMatthias Seidel                basic_machine=m68030-sony
4495bf8527aSmseidel                basic_os=newsos
4501aeda8abSMatthias Seidel                ;;
4511aeda8abSMatthias Seidel            necv70)
4521aeda8abSMatthias Seidel                basic_machine=v70-nec
4535bf8527aSmseidel                basic_os=sysv
4541aeda8abSMatthias Seidel                ;;
4551aeda8abSMatthias Seidel            nh3000)
4561aeda8abSMatthias Seidel                basic_machine=m68k-harris
4575bf8527aSmseidel                basic_os=cxux
4581aeda8abSMatthias Seidel                ;;
4591aeda8abSMatthias Seidel            nh[45]000)
4601aeda8abSMatthias Seidel                basic_machine=m88k-harris
4615bf8527aSmseidel                basic_os=cxux
4621aeda8abSMatthias Seidel                ;;
4631aeda8abSMatthias Seidel            nindy960)
4641aeda8abSMatthias Seidel                basic_machine=i960-intel
4655bf8527aSmseidel                basic_os=nindy
4661aeda8abSMatthias Seidel                ;;
4671aeda8abSMatthias Seidel            mon960)
4681aeda8abSMatthias Seidel                basic_machine=i960-intel
4695bf8527aSmseidel                basic_os=mon960
4701aeda8abSMatthias Seidel                ;;
4711aeda8abSMatthias Seidel            nonstopux)
4721aeda8abSMatthias Seidel                basic_machine=mips-compaq
4735bf8527aSmseidel                basic_os=nonstopux
4741aeda8abSMatthias Seidel                ;;
4751aeda8abSMatthias Seidel            os400)
4761aeda8abSMatthias Seidel                basic_machine=powerpc-ibm
4775bf8527aSmseidel                basic_os=os400
4781aeda8abSMatthias Seidel                ;;
4791aeda8abSMatthias Seidel            OSE68000 | ose68000)
4801aeda8abSMatthias Seidel                basic_machine=m68000-ericsson
4815bf8527aSmseidel                basic_os=ose
4821aeda8abSMatthias Seidel                ;;
4831aeda8abSMatthias Seidel            os68k)
4841aeda8abSMatthias Seidel                basic_machine=m68k-none
4855bf8527aSmseidel                basic_os=os68k
4861aeda8abSMatthias Seidel                ;;
4871aeda8abSMatthias Seidel            paragon)
4881aeda8abSMatthias Seidel                basic_machine=i860-intel
4895bf8527aSmseidel                basic_os=osf
4901aeda8abSMatthias Seidel                ;;
4911aeda8abSMatthias Seidel            parisc)
4921aeda8abSMatthias Seidel                basic_machine=hppa-unknown
4935bf8527aSmseidel                basic_os=linux
4945bf8527aSmseidel                ;;
4955bf8527aSmseidel            psp)
4965bf8527aSmseidel                basic_machine=mipsallegrexel-sony
4975bf8527aSmseidel                basic_os=psp
4981aeda8abSMatthias Seidel                ;;
4991aeda8abSMatthias Seidel            pw32)
5001aeda8abSMatthias Seidel                basic_machine=i586-unknown
5015bf8527aSmseidel                basic_os=pw32
5021aeda8abSMatthias Seidel                ;;
5031aeda8abSMatthias Seidel            rdos | rdos64)
5041aeda8abSMatthias Seidel                basic_machine=x86_64-pc
5055bf8527aSmseidel                basic_os=rdos
5061aeda8abSMatthias Seidel                ;;
5071aeda8abSMatthias Seidel            rdos32)
5081aeda8abSMatthias Seidel                basic_machine=i386-pc
5095bf8527aSmseidel                basic_os=rdos
5101aeda8abSMatthias Seidel                ;;
5111aeda8abSMatthias Seidel            rom68k)
5121aeda8abSMatthias Seidel                basic_machine=m68k-rom68k
5135bf8527aSmseidel                basic_os=coff
5141aeda8abSMatthias Seidel                ;;
5151aeda8abSMatthias Seidel            sa29200)
5161aeda8abSMatthias Seidel                basic_machine=a29k-amd
5175bf8527aSmseidel                basic_os=udi
5181aeda8abSMatthias Seidel                ;;
5191aeda8abSMatthias Seidel            sei)
5201aeda8abSMatthias Seidel                basic_machine=mips-sei
5215bf8527aSmseidel                basic_os=seiux
5221aeda8abSMatthias Seidel                ;;
5231aeda8abSMatthias Seidel            sequent)
5241aeda8abSMatthias Seidel                basic_machine=i386-sequent
5255bf8527aSmseidel                basic_os=
5261aeda8abSMatthias Seidel                ;;
5271aeda8abSMatthias Seidel            sps7)
5281aeda8abSMatthias Seidel                basic_machine=m68k-bull
5295bf8527aSmseidel                basic_os=sysv2
5301aeda8abSMatthias Seidel                ;;
5311aeda8abSMatthias Seidel            st2000)
5321aeda8abSMatthias Seidel                basic_machine=m68k-tandem
5335bf8527aSmseidel                basic_os=
5341aeda8abSMatthias Seidel                ;;
5351aeda8abSMatthias Seidel            stratus)
5361aeda8abSMatthias Seidel                basic_machine=i860-stratus
5375bf8527aSmseidel                basic_os=sysv4
5381aeda8abSMatthias Seidel                ;;
5391aeda8abSMatthias Seidel            sun2)
5401aeda8abSMatthias Seidel                basic_machine=m68000-sun
5415bf8527aSmseidel                basic_os=
5421aeda8abSMatthias Seidel                ;;
5431aeda8abSMatthias Seidel            sun2os3)
5441aeda8abSMatthias Seidel                basic_machine=m68000-sun
5455bf8527aSmseidel                basic_os=sunos3
5461aeda8abSMatthias Seidel                ;;
5471aeda8abSMatthias Seidel            sun2os4)
5481aeda8abSMatthias Seidel                basic_machine=m68000-sun
5495bf8527aSmseidel                basic_os=sunos4
5501aeda8abSMatthias Seidel                ;;
5511aeda8abSMatthias Seidel            sun3)
5521aeda8abSMatthias Seidel                basic_machine=m68k-sun
5535bf8527aSmseidel                basic_os=
5541aeda8abSMatthias Seidel                ;;
5551aeda8abSMatthias Seidel            sun3os3)
5561aeda8abSMatthias Seidel                basic_machine=m68k-sun
5575bf8527aSmseidel                basic_os=sunos3
5581aeda8abSMatthias Seidel                ;;
5591aeda8abSMatthias Seidel            sun3os4)
5601aeda8abSMatthias Seidel                basic_machine=m68k-sun
5615bf8527aSmseidel                basic_os=sunos4
5621aeda8abSMatthias Seidel                ;;
5631aeda8abSMatthias Seidel            sun4)
5641aeda8abSMatthias Seidel                basic_machine=sparc-sun
5655bf8527aSmseidel                basic_os=
5661aeda8abSMatthias Seidel                ;;
5671aeda8abSMatthias Seidel            sun4os3)
5681aeda8abSMatthias Seidel                basic_machine=sparc-sun
5695bf8527aSmseidel                basic_os=sunos3
5701aeda8abSMatthias Seidel                ;;
5711aeda8abSMatthias Seidel            sun4os4)
5721aeda8abSMatthias Seidel                basic_machine=sparc-sun
5735bf8527aSmseidel                basic_os=sunos4
5741aeda8abSMatthias Seidel                ;;
5751aeda8abSMatthias Seidel            sun4sol2)
5761aeda8abSMatthias Seidel                basic_machine=sparc-sun
5775bf8527aSmseidel                basic_os=solaris2
5781aeda8abSMatthias Seidel                ;;
5791aeda8abSMatthias Seidel            sun386 | sun386i | roadrunner)
5801aeda8abSMatthias Seidel                basic_machine=i386-sun
5815bf8527aSmseidel                basic_os=
5821aeda8abSMatthias Seidel                ;;
5831aeda8abSMatthias Seidel            sv1)
5841aeda8abSMatthias Seidel                basic_machine=sv1-cray
5855bf8527aSmseidel                basic_os=unicos
5861aeda8abSMatthias Seidel                ;;
5871aeda8abSMatthias Seidel            symmetry)
5881aeda8abSMatthias Seidel                basic_machine=i386-sequent
5895bf8527aSmseidel                basic_os=dynix
5901aeda8abSMatthias Seidel                ;;
5911aeda8abSMatthias Seidel            t3e)
5921aeda8abSMatthias Seidel                basic_machine=alphaev5-cray
5935bf8527aSmseidel                basic_os=unicos
5941aeda8abSMatthias Seidel                ;;
5951aeda8abSMatthias Seidel            t90)
5961aeda8abSMatthias Seidel                basic_machine=t90-cray
5975bf8527aSmseidel                basic_os=unicos
5981aeda8abSMatthias Seidel                ;;
5991aeda8abSMatthias Seidel            toad1)
6001aeda8abSMatthias Seidel                basic_machine=pdp10-xkl
6015bf8527aSmseidel                basic_os=tops20
6021aeda8abSMatthias Seidel                ;;
6031aeda8abSMatthias Seidel            tpf)
6041aeda8abSMatthias Seidel                basic_machine=s390x-ibm
6055bf8527aSmseidel                basic_os=tpf
6061aeda8abSMatthias Seidel                ;;
6071aeda8abSMatthias Seidel            udi29k)
6081aeda8abSMatthias Seidel                basic_machine=a29k-amd
6095bf8527aSmseidel                basic_os=udi
6101aeda8abSMatthias Seidel                ;;
6111aeda8abSMatthias Seidel            ultra3)
6121aeda8abSMatthias Seidel                basic_machine=a29k-nyu
6135bf8527aSmseidel                basic_os=sym1
6141aeda8abSMatthias Seidel                ;;
6151aeda8abSMatthias Seidel            v810 | necv810)
6161aeda8abSMatthias Seidel                basic_machine=v810-nec
6175bf8527aSmseidel                basic_os=none
6181aeda8abSMatthias Seidel                ;;
6191aeda8abSMatthias Seidel            vaxv)
6201aeda8abSMatthias Seidel                basic_machine=vax-dec
6215bf8527aSmseidel                basic_os=sysv
6221aeda8abSMatthias Seidel                ;;
6231aeda8abSMatthias Seidel            vms)
6241aeda8abSMatthias Seidel                basic_machine=vax-dec
6255bf8527aSmseidel                basic_os=vms
6261aeda8abSMatthias Seidel                ;;
627859e76afSmseidel            vsta)
628859e76afSmseidel                basic_machine=i386-pc
6295bf8527aSmseidel                basic_os=vsta
630859e76afSmseidel                ;;
6311aeda8abSMatthias Seidel            vxworks960)
6321aeda8abSMatthias Seidel                basic_machine=i960-wrs
6335bf8527aSmseidel                basic_os=vxworks
6341aeda8abSMatthias Seidel                ;;
6351aeda8abSMatthias Seidel            vxworks68)
6361aeda8abSMatthias Seidel                basic_machine=m68k-wrs
6375bf8527aSmseidel                basic_os=vxworks
6381aeda8abSMatthias Seidel                ;;
6391aeda8abSMatthias Seidel            vxworks29k)
6401aeda8abSMatthias Seidel                basic_machine=a29k-wrs
6415bf8527aSmseidel                basic_os=vxworks
6421aeda8abSMatthias Seidel                ;;
6431aeda8abSMatthias Seidel            xbox)
6441aeda8abSMatthias Seidel                basic_machine=i686-pc
6455bf8527aSmseidel                basic_os=mingw32
6461aeda8abSMatthias Seidel                ;;
6471aeda8abSMatthias Seidel            ymp)
6481aeda8abSMatthias Seidel                basic_machine=ymp-cray
6495bf8527aSmseidel                basic_os=unicos
6501aeda8abSMatthias Seidel                ;;
6511aeda8abSMatthias Seidel            *)
6521aeda8abSMatthias Seidel                basic_machine=$1
6535bf8527aSmseidel                basic_os=
6541aeda8abSMatthias Seidel                ;;
6551aeda8abSMatthias Seidel        esac
656cdf0e10cSrcweir        ;;
657cdf0e10cSrcweiresac
658cdf0e10cSrcweir
6591aeda8abSMatthias Seidel# Decode 1-component or ad-hoc basic machines
660cdf0e10cSrcweircase $basic_machine in
6611aeda8abSMatthias Seidel    # Here we handle the default manufacturer of certain CPU types.  It is in
6621aeda8abSMatthias Seidel    # some cases the only manufacturer, in others, it is the most popular.
6631aeda8abSMatthias Seidel    w89k)
6641aeda8abSMatthias Seidel        cpu=hppa1.1
6651aeda8abSMatthias Seidel        vendor=winbond
6661aeda8abSMatthias Seidel        ;;
6671aeda8abSMatthias Seidel    op50n)
6681aeda8abSMatthias Seidel        cpu=hppa1.1
6691aeda8abSMatthias Seidel        vendor=oki
6701aeda8abSMatthias Seidel        ;;
6711aeda8abSMatthias Seidel    op60c)
6721aeda8abSMatthias Seidel        cpu=hppa1.1
6731aeda8abSMatthias Seidel        vendor=oki
6741aeda8abSMatthias Seidel        ;;
6751aeda8abSMatthias Seidel    ibm*)
6761aeda8abSMatthias Seidel        cpu=i370
6771aeda8abSMatthias Seidel        vendor=ibm
6781aeda8abSMatthias Seidel        ;;
6791aeda8abSMatthias Seidel    orion105)
6801aeda8abSMatthias Seidel        cpu=clipper
6811aeda8abSMatthias Seidel        vendor=highlevel
6821aeda8abSMatthias Seidel        ;;
6831aeda8abSMatthias Seidel    mac | mpw | mac-mpw)
6841aeda8abSMatthias Seidel        cpu=m68k
6851aeda8abSMatthias Seidel        vendor=apple
6861aeda8abSMatthias Seidel        ;;
6871aeda8abSMatthias Seidel    pmac | pmac-mpw)
6881aeda8abSMatthias Seidel        cpu=powerpc
6891aeda8abSMatthias Seidel        vendor=apple
6901aeda8abSMatthias Seidel        ;;
6911aeda8abSMatthias Seidel
6921aeda8abSMatthias Seidel    # Recognize the various machine names and aliases which stand
6931aeda8abSMatthias Seidel    # for a CPU type and a company and sometimes even an OS.
6941aeda8abSMatthias Seidel    3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
6951aeda8abSMatthias Seidel        cpu=m68000
6961aeda8abSMatthias Seidel        vendor=att
6971aeda8abSMatthias Seidel        ;;
6981aeda8abSMatthias Seidel    3b*)
6991aeda8abSMatthias Seidel        cpu=we32k
7001aeda8abSMatthias Seidel        vendor=att
7011aeda8abSMatthias Seidel        ;;
7021aeda8abSMatthias Seidel    bluegene*)
7031aeda8abSMatthias Seidel        cpu=powerpc
7041aeda8abSMatthias Seidel        vendor=ibm
7055bf8527aSmseidel        basic_os=cnk
7061aeda8abSMatthias Seidel        ;;
7071aeda8abSMatthias Seidel    decsystem10* | dec10*)
7081aeda8abSMatthias Seidel        cpu=pdp10
7091aeda8abSMatthias Seidel        vendor=dec
7105bf8527aSmseidel        basic_os=tops10
7111aeda8abSMatthias Seidel        ;;
7121aeda8abSMatthias Seidel    decsystem20* | dec20*)
7131aeda8abSMatthias Seidel        cpu=pdp10
7141aeda8abSMatthias Seidel        vendor=dec
7155bf8527aSmseidel        basic_os=tops20
7161aeda8abSMatthias Seidel        ;;
7171aeda8abSMatthias Seidel    delta | 3300 | motorola-3300 | motorola-delta \
7181aeda8abSMatthias Seidel          | 3300-motorola | delta-motorola)
7191aeda8abSMatthias Seidel        cpu=m68k
7201aeda8abSMatthias Seidel        vendor=motorola
7211aeda8abSMatthias Seidel        ;;
7221aeda8abSMatthias Seidel    dpx2*)
7231aeda8abSMatthias Seidel        cpu=m68k
7241aeda8abSMatthias Seidel        vendor=bull
7255bf8527aSmseidel        basic_os=sysv3
7261aeda8abSMatthias Seidel        ;;
7271aeda8abSMatthias Seidel    encore | umax | mmax)
7281aeda8abSMatthias Seidel        cpu=ns32k
7291aeda8abSMatthias Seidel        vendor=encore
7301aeda8abSMatthias Seidel        ;;
7311aeda8abSMatthias Seidel    elxsi)
7321aeda8abSMatthias Seidel        cpu=elxsi
7331aeda8abSMatthias Seidel        vendor=elxsi
7345bf8527aSmseidel        basic_os=${basic_os:-bsd}
7351aeda8abSMatthias Seidel        ;;
7361aeda8abSMatthias Seidel    fx2800)
7371aeda8abSMatthias Seidel        cpu=i860
7381aeda8abSMatthias Seidel        vendor=alliant
7391aeda8abSMatthias Seidel        ;;
7401aeda8abSMatthias Seidel    genix)
7411aeda8abSMatthias Seidel        cpu=ns32k
7421aeda8abSMatthias Seidel        vendor=ns
7431aeda8abSMatthias Seidel        ;;
7441aeda8abSMatthias Seidel    h3050r* | hiux*)
7451aeda8abSMatthias Seidel        cpu=hppa1.1
7461aeda8abSMatthias Seidel        vendor=hitachi
7475bf8527aSmseidel        basic_os=hiuxwe2
7481aeda8abSMatthias Seidel        ;;
7491aeda8abSMatthias Seidel    hp3k9[0-9][0-9] | hp9[0-9][0-9])
7501aeda8abSMatthias Seidel        cpu=hppa1.0
7511aeda8abSMatthias Seidel        vendor=hp
7521aeda8abSMatthias Seidel        ;;
7531aeda8abSMatthias Seidel    hp9k2[0-9][0-9] | hp9k31[0-9])
7541aeda8abSMatthias Seidel        cpu=m68000
7551aeda8abSMatthias Seidel        vendor=hp
7561aeda8abSMatthias Seidel        ;;
7571aeda8abSMatthias Seidel    hp9k3[2-9][0-9])
7581aeda8abSMatthias Seidel        cpu=m68k
7591aeda8abSMatthias Seidel        vendor=hp
7601aeda8abSMatthias Seidel        ;;
7611aeda8abSMatthias Seidel    hp9k6[0-9][0-9] | hp6[0-9][0-9])
7621aeda8abSMatthias Seidel        cpu=hppa1.0
7631aeda8abSMatthias Seidel        vendor=hp
7641aeda8abSMatthias Seidel        ;;
7651aeda8abSMatthias Seidel    hp9k7[0-79][0-9] | hp7[0-79][0-9])
7661aeda8abSMatthias Seidel        cpu=hppa1.1
7671aeda8abSMatthias Seidel        vendor=hp
7681aeda8abSMatthias Seidel        ;;
7691aeda8abSMatthias Seidel    hp9k78[0-9] | hp78[0-9])
7701aeda8abSMatthias Seidel        # FIXME: really hppa2.0-hp
7711aeda8abSMatthias Seidel        cpu=hppa1.1
7721aeda8abSMatthias Seidel        vendor=hp
7731aeda8abSMatthias Seidel        ;;
7741aeda8abSMatthias Seidel    hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
7751aeda8abSMatthias Seidel        # FIXME: really hppa2.0-hp
7761aeda8abSMatthias Seidel        cpu=hppa1.1
7771aeda8abSMatthias Seidel        vendor=hp
7781aeda8abSMatthias Seidel        ;;
7791aeda8abSMatthias Seidel    hp9k8[0-9][13679] | hp8[0-9][13679])
7801aeda8abSMatthias Seidel        cpu=hppa1.1
7811aeda8abSMatthias Seidel        vendor=hp
7821aeda8abSMatthias Seidel        ;;
7831aeda8abSMatthias Seidel    hp9k8[0-9][0-9] | hp8[0-9][0-9])
7841aeda8abSMatthias Seidel        cpu=hppa1.0
7851aeda8abSMatthias Seidel        vendor=hp
7861aeda8abSMatthias Seidel        ;;
7871aeda8abSMatthias Seidel    i*86v32)
78809be380fSmseidel        cpu=`echo "$1" | sed -e 's/86.*/86/'`
7891aeda8abSMatthias Seidel        vendor=pc
7905bf8527aSmseidel        basic_os=sysv32
7911aeda8abSMatthias Seidel        ;;
7921aeda8abSMatthias Seidel    i*86v4*)
79309be380fSmseidel        cpu=`echo "$1" | sed -e 's/86.*/86/'`
7941aeda8abSMatthias Seidel        vendor=pc
7955bf8527aSmseidel        basic_os=sysv4
7961aeda8abSMatthias Seidel        ;;
7971aeda8abSMatthias Seidel    i*86v)
79809be380fSmseidel        cpu=`echo "$1" | sed -e 's/86.*/86/'`
7991aeda8abSMatthias Seidel        vendor=pc
8005bf8527aSmseidel        basic_os=sysv
8011aeda8abSMatthias Seidel        ;;
8021aeda8abSMatthias Seidel    i*86sol2)
80309be380fSmseidel        cpu=`echo "$1" | sed -e 's/86.*/86/'`
8041aeda8abSMatthias Seidel        vendor=pc
8055bf8527aSmseidel        basic_os=solaris2
8061aeda8abSMatthias Seidel        ;;
8071aeda8abSMatthias Seidel    j90 | j90-cray)
8081aeda8abSMatthias Seidel        cpu=j90
8091aeda8abSMatthias Seidel        vendor=cray
8105bf8527aSmseidel        basic_os=${basic_os:-unicos}
8111aeda8abSMatthias Seidel        ;;
8121aeda8abSMatthias Seidel    iris | iris4d)
8131aeda8abSMatthias Seidel        cpu=mips
8141aeda8abSMatthias Seidel        vendor=sgi
8155bf8527aSmseidel        case $basic_os in
8161aeda8abSMatthias Seidel            irix*)
8171aeda8abSMatthias Seidel            ;;
8181aeda8abSMatthias Seidel            *)
8195bf8527aSmseidel            basic_os=irix4
8201aeda8abSMatthias Seidel            ;;
8211aeda8abSMatthias Seidel        esac
8221aeda8abSMatthias Seidel        ;;
8231aeda8abSMatthias Seidel    miniframe)
8241aeda8abSMatthias Seidel        cpu=m68000
8251aeda8abSMatthias Seidel        vendor=convergent
8261aeda8abSMatthias Seidel        ;;
8271aeda8abSMatthias Seidel    *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
8281aeda8abSMatthias Seidel        cpu=m68k
8291aeda8abSMatthias Seidel        vendor=atari
8305bf8527aSmseidel        basic_os=mint
8311aeda8abSMatthias Seidel        ;;
8321aeda8abSMatthias Seidel    news-3600 | risc-news)
8331aeda8abSMatthias Seidel        cpu=mips
8341aeda8abSMatthias Seidel        vendor=sony
8355bf8527aSmseidel        basic_os=newsos
8361aeda8abSMatthias Seidel        ;;
8371aeda8abSMatthias Seidel    next | m*-next)
8381aeda8abSMatthias Seidel        cpu=m68k
8391aeda8abSMatthias Seidel        vendor=next
8405bf8527aSmseidel        case $basic_os in
8413ace3152SMatthias Seidel            openstep*)
8423ace3152SMatthias Seidel                ;;
8431aeda8abSMatthias Seidel            nextstep*)
8441aeda8abSMatthias Seidel            ;;
8451aeda8abSMatthias Seidel            ns2*)
8465bf8527aSmseidel              basic_os=nextstep2
8471aeda8abSMatthias Seidel            ;;
8481aeda8abSMatthias Seidel            *)
8495bf8527aSmseidel              basic_os=nextstep3
8501aeda8abSMatthias Seidel            ;;
8511aeda8abSMatthias Seidel        esac
8521aeda8abSMatthias Seidel        ;;
8531aeda8abSMatthias Seidel    np1)
8541aeda8abSMatthias Seidel        cpu=np1
8551aeda8abSMatthias Seidel        vendor=gould
8561aeda8abSMatthias Seidel        ;;
8571aeda8abSMatthias Seidel    op50n-* | op60c-*)
8581aeda8abSMatthias Seidel        cpu=hppa1.1
8591aeda8abSMatthias Seidel        vendor=oki
8605bf8527aSmseidel        basic_os=proelf
8611aeda8abSMatthias Seidel        ;;
8621aeda8abSMatthias Seidel    pa-hitachi)
8631aeda8abSMatthias Seidel        cpu=hppa1.1
8641aeda8abSMatthias Seidel        vendor=hitachi
8655bf8527aSmseidel        basic_os=hiuxwe2
8661aeda8abSMatthias Seidel        ;;
8671aeda8abSMatthias Seidel    pbd)
8681aeda8abSMatthias Seidel        cpu=sparc
8691aeda8abSMatthias Seidel        vendor=tti
8701aeda8abSMatthias Seidel        ;;
8711aeda8abSMatthias Seidel    pbb)
8721aeda8abSMatthias Seidel        cpu=m68k
8731aeda8abSMatthias Seidel        vendor=tti
8741aeda8abSMatthias Seidel        ;;
8751aeda8abSMatthias Seidel    pc532)
8761aeda8abSMatthias Seidel        cpu=ns32k
8771aeda8abSMatthias Seidel        vendor=pc532
8781aeda8abSMatthias Seidel        ;;
8791aeda8abSMatthias Seidel    pn)
8801aeda8abSMatthias Seidel        cpu=pn
8811aeda8abSMatthias Seidel        vendor=gould
8821aeda8abSMatthias Seidel        ;;
8831aeda8abSMatthias Seidel    power)
8841aeda8abSMatthias Seidel        cpu=power
8851aeda8abSMatthias Seidel        vendor=ibm
8861aeda8abSMatthias Seidel        ;;
8871aeda8abSMatthias Seidel    ps2)
8881aeda8abSMatthias Seidel        cpu=i386
8891aeda8abSMatthias Seidel        vendor=ibm
8901aeda8abSMatthias Seidel        ;;
8911aeda8abSMatthias Seidel    rm[46]00)
8921aeda8abSMatthias Seidel        cpu=mips
8931aeda8abSMatthias Seidel        vendor=siemens
8941aeda8abSMatthias Seidel        ;;
8951aeda8abSMatthias Seidel    rtpc | rtpc-*)
8961aeda8abSMatthias Seidel        cpu=romp
8971aeda8abSMatthias Seidel        vendor=ibm
8981aeda8abSMatthias Seidel        ;;
8991aeda8abSMatthias Seidel    sde)
9001aeda8abSMatthias Seidel        cpu=mipsisa32
9011aeda8abSMatthias Seidel        vendor=sde
9025bf8527aSmseidel        basic_os=${basic_os:-elf}
9031aeda8abSMatthias Seidel        ;;
9041aeda8abSMatthias Seidel    simso-wrs)
9051aeda8abSMatthias Seidel        cpu=sparclite
9061aeda8abSMatthias Seidel        vendor=wrs
9075bf8527aSmseidel        basic_os=vxworks
9081aeda8abSMatthias Seidel        ;;
9091aeda8abSMatthias Seidel    tower | tower-32)
9101aeda8abSMatthias Seidel        cpu=m68k
9111aeda8abSMatthias Seidel        vendor=ncr
9121aeda8abSMatthias Seidel        ;;
9131aeda8abSMatthias Seidel    vpp*|vx|vx-*)
9141aeda8abSMatthias Seidel        cpu=f301
9151aeda8abSMatthias Seidel        vendor=fujitsu
9161aeda8abSMatthias Seidel        ;;
9171aeda8abSMatthias Seidel    w65)
9181aeda8abSMatthias Seidel        cpu=w65
9191aeda8abSMatthias Seidel        vendor=wdc
9201aeda8abSMatthias Seidel        ;;
9211aeda8abSMatthias Seidel    w89k-*)
9221aeda8abSMatthias Seidel        cpu=hppa1.1
9231aeda8abSMatthias Seidel        vendor=winbond
9245bf8527aSmseidel        basic_os=proelf
9251aeda8abSMatthias Seidel        ;;
9261aeda8abSMatthias Seidel    none)
9271aeda8abSMatthias Seidel        cpu=none
9281aeda8abSMatthias Seidel        vendor=none
9291aeda8abSMatthias Seidel        ;;
9301aeda8abSMatthias Seidel    leon|leon[3-9])
9311aeda8abSMatthias Seidel        cpu=sparc
9321aeda8abSMatthias Seidel        vendor=$basic_machine
9331aeda8abSMatthias Seidel        ;;
9341aeda8abSMatthias Seidel    leon-*|leon[3-9]-*)
9351aeda8abSMatthias Seidel        cpu=sparc
93609be380fSmseidel        vendor=`echo "$basic_machine" | sed 's/-.*//'`
9371aeda8abSMatthias Seidel        ;;
9381aeda8abSMatthias Seidel
9391aeda8abSMatthias Seidel    *-*)
9403ace3152SMatthias Seidel        # shellcheck disable=SC2162
94109be380fSmseidel        saved_IFS=$IFS
9423ace3152SMatthias Seidel        IFS="-" read cpu vendor <<EOF
9431aeda8abSMatthias Seidel$basic_machine
9441aeda8abSMatthias SeidelEOF
94509be380fSmseidel        IFS=$saved_IFS
9461aeda8abSMatthias Seidel        ;;
947*ff1d3d89Smseidel    # We use 'pc' rather than 'unknown'
9481aeda8abSMatthias Seidel    # because (1) that's what they normally are, and
9491aeda8abSMatthias Seidel    # (2) the word "unknown" tends to confuse beginning users.
9501aeda8abSMatthias Seidel    i*86 | x86_64)
9511aeda8abSMatthias Seidel        cpu=$basic_machine
9521aeda8abSMatthias Seidel        vendor=pc
9531aeda8abSMatthias Seidel        ;;
9541aeda8abSMatthias Seidel    # These rules are duplicated from below for sake of the special case above;
9551aeda8abSMatthias Seidel    # i.e. things that normalized to x86 arches should also default to "pc"
9561aeda8abSMatthias Seidel    pc98)
9571aeda8abSMatthias Seidel        cpu=i386
9581aeda8abSMatthias Seidel        vendor=pc
9591aeda8abSMatthias Seidel        ;;
9601aeda8abSMatthias Seidel    x64 | amd64)
9611aeda8abSMatthias Seidel        cpu=x86_64
9621aeda8abSMatthias Seidel        vendor=pc
9631aeda8abSMatthias Seidel        ;;
964cdf0e10cSrcweir    # Recognize the basic CPU types without company name.
9651aeda8abSMatthias Seidel    *)
9661aeda8abSMatthias Seidel        cpu=$basic_machine
9671aeda8abSMatthias Seidel        vendor=unknown
9681aeda8abSMatthias Seidel        ;;
9691aeda8abSMatthias Seidelesac
9701aeda8abSMatthias Seidel
9711aeda8abSMatthias Seidelunset -v basic_machine
9721aeda8abSMatthias Seidel
9731aeda8abSMatthias Seidel# Decode basic machines in the full and proper CPU-Company form.
9741aeda8abSMatthias Seidelcase $cpu-$vendor in
9753ace3152SMatthias Seidel    # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
9761aeda8abSMatthias Seidel    # some cases the only manufacturer, in others, it is the most popular.
9771aeda8abSMatthias Seidel    craynv-unknown)
9781aeda8abSMatthias Seidel        vendor=cray
9795bf8527aSmseidel        basic_os=${basic_os:-unicosmp}
9801aeda8abSMatthias Seidel        ;;
9811aeda8abSMatthias Seidel    c90-unknown | c90-cray)
9821aeda8abSMatthias Seidel        vendor=cray
9835bf8527aSmseidel        basic_os=${Basic_os:-unicos}
9841aeda8abSMatthias Seidel        ;;
9851aeda8abSMatthias Seidel    fx80-unknown)
9861aeda8abSMatthias Seidel        vendor=alliant
9871aeda8abSMatthias Seidel        ;;
9881aeda8abSMatthias Seidel    romp-unknown)
9891aeda8abSMatthias Seidel        vendor=ibm
9901aeda8abSMatthias Seidel        ;;
9911aeda8abSMatthias Seidel    mmix-unknown)
9921aeda8abSMatthias Seidel        vendor=knuth
9931aeda8abSMatthias Seidel        ;;
9941aeda8abSMatthias Seidel    microblaze-unknown | microblazeel-unknown)
9951aeda8abSMatthias Seidel        vendor=xilinx
9961aeda8abSMatthias Seidel        ;;
9971aeda8abSMatthias Seidel    rs6000-unknown)
9981aeda8abSMatthias Seidel        vendor=ibm
9991aeda8abSMatthias Seidel        ;;
10001aeda8abSMatthias Seidel    vax-unknown)
10011aeda8abSMatthias Seidel        vendor=dec
10021aeda8abSMatthias Seidel        ;;
10031aeda8abSMatthias Seidel    pdp11-unknown)
10041aeda8abSMatthias Seidel        vendor=dec
10051aeda8abSMatthias Seidel        ;;
10061aeda8abSMatthias Seidel    we32k-unknown)
10071aeda8abSMatthias Seidel        vendor=att
10081aeda8abSMatthias Seidel        ;;
10091aeda8abSMatthias Seidel    cydra-unknown)
10101aeda8abSMatthias Seidel        vendor=cydrome
10111aeda8abSMatthias Seidel        ;;
10121aeda8abSMatthias Seidel    i370-ibm*)
10131aeda8abSMatthias Seidel        vendor=ibm
10141aeda8abSMatthias Seidel        ;;
10151aeda8abSMatthias Seidel    orion-unknown)
10161aeda8abSMatthias Seidel        vendor=highlevel
10171aeda8abSMatthias Seidel        ;;
10181aeda8abSMatthias Seidel    xps-unknown | xps100-unknown)
10191aeda8abSMatthias Seidel        cpu=xps100
10201aeda8abSMatthias Seidel        vendor=honeywell
10211aeda8abSMatthias Seidel        ;;
10221aeda8abSMatthias Seidel
10231aeda8abSMatthias Seidel    # Here we normalize CPU types with a missing or matching vendor
102409be380fSmseidel    armh-unknown | armh-alt)
102509be380fSmseidel        cpu=armv7l
102609be380fSmseidel        vendor=alt
102709be380fSmseidel        basic_os=${basic_os:-linux-gnueabihf}
102809be380fSmseidel        ;;
10291aeda8abSMatthias Seidel    dpx20-unknown | dpx20-bull)
10301aeda8abSMatthias Seidel        cpu=rs6000
10311aeda8abSMatthias Seidel        vendor=bull
10325bf8527aSmseidel        basic_os=${basic_os:-bosx}
10331aeda8abSMatthias Seidel        ;;
10341aeda8abSMatthias Seidel
10351aeda8abSMatthias Seidel    # Here we normalize CPU types irrespective of the vendor
10361aeda8abSMatthias Seidel    amd64-*)
10371aeda8abSMatthias Seidel        cpu=x86_64
10381aeda8abSMatthias Seidel        ;;
10391aeda8abSMatthias Seidel    blackfin-*)
10401aeda8abSMatthias Seidel        cpu=bfin
10415bf8527aSmseidel        basic_os=linux
10421aeda8abSMatthias Seidel        ;;
10431aeda8abSMatthias Seidel    c54x-*)
10441aeda8abSMatthias Seidel        cpu=tic54x
10451aeda8abSMatthias Seidel        ;;
10461aeda8abSMatthias Seidel    c55x-*)
10471aeda8abSMatthias Seidel        cpu=tic55x
10481aeda8abSMatthias Seidel        ;;
10491aeda8abSMatthias Seidel    c6x-*)
10501aeda8abSMatthias Seidel        cpu=tic6x
10511aeda8abSMatthias Seidel        ;;
10521aeda8abSMatthias Seidel    e500v[12]-*)
10531aeda8abSMatthias Seidel        cpu=powerpc
10545bf8527aSmseidel        basic_os=${basic_os}"spe"
10551aeda8abSMatthias Seidel        ;;
10561aeda8abSMatthias Seidel    mips3*-*)
10571aeda8abSMatthias Seidel        cpu=mips64
10581aeda8abSMatthias Seidel        ;;
10591aeda8abSMatthias Seidel    ms1-*)
10601aeda8abSMatthias Seidel        cpu=mt
10611aeda8abSMatthias Seidel        ;;
10621aeda8abSMatthias Seidel    m68knommu-*)
10631aeda8abSMatthias Seidel        cpu=m68k
10645bf8527aSmseidel        basic_os=linux
10651aeda8abSMatthias Seidel        ;;
10661aeda8abSMatthias Seidel    m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
10671aeda8abSMatthias Seidel        cpu=s12z
10681aeda8abSMatthias Seidel        ;;
10691aeda8abSMatthias Seidel    openrisc-*)
10701aeda8abSMatthias Seidel        cpu=or32
10711aeda8abSMatthias Seidel        ;;
10721aeda8abSMatthias Seidel    parisc-*)
10731aeda8abSMatthias Seidel        cpu=hppa
10745bf8527aSmseidel        basic_os=linux
10751aeda8abSMatthias Seidel        ;;
10761aeda8abSMatthias Seidel    pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
10771aeda8abSMatthias Seidel        cpu=i586
10781aeda8abSMatthias Seidel        ;;
1079*ff1d3d89Smseidel    pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
10801aeda8abSMatthias Seidel        cpu=i686
10811aeda8abSMatthias Seidel        ;;
10821aeda8abSMatthias Seidel    pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
10831aeda8abSMatthias Seidel        cpu=i686
10841aeda8abSMatthias Seidel        ;;
10851aeda8abSMatthias Seidel    pentium4-*)
10861aeda8abSMatthias Seidel        cpu=i786
10871aeda8abSMatthias Seidel        ;;
10881aeda8abSMatthias Seidel    pc98-*)
10891aeda8abSMatthias Seidel        cpu=i386
10901aeda8abSMatthias Seidel        ;;
10911aeda8abSMatthias Seidel    ppc-* | ppcbe-*)
10921aeda8abSMatthias Seidel        cpu=powerpc
10931aeda8abSMatthias Seidel        ;;
10941aeda8abSMatthias Seidel    ppcle-* | powerpclittle-*)
10951aeda8abSMatthias Seidel        cpu=powerpcle
10961aeda8abSMatthias Seidel        ;;
10971aeda8abSMatthias Seidel    ppc64-*)
10981aeda8abSMatthias Seidel        cpu=powerpc64
10991aeda8abSMatthias Seidel        ;;
11001aeda8abSMatthias Seidel    ppc64le-* | powerpc64little-*)
11011aeda8abSMatthias Seidel        cpu=powerpc64le
11021aeda8abSMatthias Seidel        ;;
11031aeda8abSMatthias Seidel    sb1-*)
11041aeda8abSMatthias Seidel        cpu=mipsisa64sb1
11051aeda8abSMatthias Seidel        ;;
11061aeda8abSMatthias Seidel    sb1el-*)
11071aeda8abSMatthias Seidel        cpu=mipsisa64sb1el
11081aeda8abSMatthias Seidel        ;;
11091aeda8abSMatthias Seidel    sh5e[lb]-*)
111009be380fSmseidel        cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
11111aeda8abSMatthias Seidel        ;;
11121aeda8abSMatthias Seidel    spur-*)
11131aeda8abSMatthias Seidel        cpu=spur
11141aeda8abSMatthias Seidel        ;;
11151aeda8abSMatthias Seidel    strongarm-* | thumb-*)
11161aeda8abSMatthias Seidel        cpu=arm
11171aeda8abSMatthias Seidel        ;;
11181aeda8abSMatthias Seidel    tx39-*)
11191aeda8abSMatthias Seidel        cpu=mipstx39
11201aeda8abSMatthias Seidel        ;;
11211aeda8abSMatthias Seidel    tx39el-*)
11221aeda8abSMatthias Seidel        cpu=mipstx39el
11231aeda8abSMatthias Seidel        ;;
11241aeda8abSMatthias Seidel    x64-*)
11251aeda8abSMatthias Seidel        cpu=x86_64
11261aeda8abSMatthias Seidel        ;;
11271aeda8abSMatthias Seidel    xscale-* | xscalee[bl]-*)
112809be380fSmseidel        cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
11291aeda8abSMatthias Seidel        ;;
113009be380fSmseidel    arm64-* | aarch64le-*)
11315bf8527aSmseidel        cpu=aarch64
11325bf8527aSmseidel        ;;
11331aeda8abSMatthias Seidel
11343ace3152SMatthias Seidel    # Recognize the canonical CPU Types that limit and/or modify the
11351aeda8abSMatthias Seidel    # company names they are paired with.
11361aeda8abSMatthias Seidel    cr16-*)
11375bf8527aSmseidel        basic_os=${basic_os:-elf}
11381aeda8abSMatthias Seidel        ;;
11391aeda8abSMatthias Seidel    crisv32-* | etraxfs*-*)
11401aeda8abSMatthias Seidel        cpu=crisv32
11411aeda8abSMatthias Seidel        vendor=axis
11421aeda8abSMatthias Seidel        ;;
11431aeda8abSMatthias Seidel    cris-* | etrax*-*)
11441aeda8abSMatthias Seidel        cpu=cris
11451aeda8abSMatthias Seidel        vendor=axis
11461aeda8abSMatthias Seidel        ;;
11471aeda8abSMatthias Seidel    crx-*)
11485bf8527aSmseidel        basic_os=${basic_os:-elf}
11491aeda8abSMatthias Seidel        ;;
11501aeda8abSMatthias Seidel    neo-tandem)
11511aeda8abSMatthias Seidel        cpu=neo
11521aeda8abSMatthias Seidel        vendor=tandem
11531aeda8abSMatthias Seidel        ;;
11541aeda8abSMatthias Seidel    nse-tandem)
11551aeda8abSMatthias Seidel        cpu=nse
11561aeda8abSMatthias Seidel        vendor=tandem
11571aeda8abSMatthias Seidel        ;;
11581aeda8abSMatthias Seidel    nsr-tandem)
11591aeda8abSMatthias Seidel        cpu=nsr
11601aeda8abSMatthias Seidel        vendor=tandem
11611aeda8abSMatthias Seidel        ;;
11621aeda8abSMatthias Seidel    nsv-tandem)
11631aeda8abSMatthias Seidel        cpu=nsv
11641aeda8abSMatthias Seidel        vendor=tandem
11651aeda8abSMatthias Seidel        ;;
11661aeda8abSMatthias Seidel    nsx-tandem)
11671aeda8abSMatthias Seidel        cpu=nsx
11681aeda8abSMatthias Seidel        vendor=tandem
11691aeda8abSMatthias Seidel        ;;
11705bf8527aSmseidel    mipsallegrexel-sony)
11715bf8527aSmseidel        cpu=mipsallegrexel
11725bf8527aSmseidel        vendor=sony
11731aeda8abSMatthias Seidel        ;;
11741aeda8abSMatthias Seidel    tile*-*)
11755bf8527aSmseidel        basic_os=${basic_os:-linux-gnu}
11761aeda8abSMatthias Seidel        ;;
11771aeda8abSMatthias Seidel
11781aeda8abSMatthias Seidel    *)
11793ace3152SMatthias Seidel        # Recognize the canonical CPU types that are allowed with any
11801aeda8abSMatthias Seidel        # company name.
11811aeda8abSMatthias Seidel        case $cpu in
1182cdf0e10cSrcweir            1750a | 580 \
1183cdf0e10cSrcweir            | a29k \
1184*ff1d3d89Smseidel            | aarch64 | aarch64_be | aarch64c | arm64ec \
11851aeda8abSMatthias Seidel            | abacus \
11861aeda8abSMatthias Seidel            | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
11871aeda8abSMatthias Seidel            | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
11881aeda8abSMatthias Seidel            | alphapca5[67] | alpha64pca5[67] \
1189187b4248SPedro Giffuni            | am33_2.0 \
11903ace3152SMatthias Seidel            | amdgcn \
119109be380fSmseidel            | arc | arceb | arc32 | arc64 \
11921aeda8abSMatthias Seidel            | arm | arm[lb]e | arme[lb] | armv* \
1193ee1eb700SMatthias Seidel            | avr | avr32 \
11941aeda8abSMatthias Seidel            | asmjs \
1195ee1eb700SMatthias Seidel            | ba \
1196ee1eb700SMatthias Seidel            | be32 | be64 \
1197859e76afSmseidel            | bfin | bpf | bs2000 \
11981aeda8abSMatthias Seidel            | c[123]* | c30 | [cjt]90 | c4x \
11991aeda8abSMatthias Seidel            | c8051 | clipper | craynv | csky | cydra \
1200cdf0e10cSrcweir            | d10v | d30v | dlx | dsp16xx \
12011aeda8abSMatthias Seidel            | e2k | elxsi | epiphany \
12021aeda8abSMatthias Seidel            | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
1203*ff1d3d89Smseidel            | javascript \
12041aeda8abSMatthias Seidel            | h8300 | h8500 \
12051aeda8abSMatthias Seidel            | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
1206ee1eb700SMatthias Seidel            | hexagon \
12071aeda8abSMatthias Seidel            | i370 | i*86 | i860 | i960 | ia16 | ia64 \
1208187b4248SPedro Giffuni            | ip2k | iq2000 \
1209ee1eb700SMatthias Seidel            | k1om \
1210*ff1d3d89Smseidel            | kvx \
1211ee1eb700SMatthias Seidel            | le32 | le64 \
1212187b4248SPedro Giffuni            | lm32 \
1213d50f3220Smseidel            | loongarch32 | loongarch64 \
12141aeda8abSMatthias Seidel            | m32c | m32r | m32rle \
12153ace3152SMatthias Seidel            | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
12163ace3152SMatthias Seidel            | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
12171aeda8abSMatthias Seidel            | m88110 | m88k | maxq | mb | mcore | mep | metag \
12181aeda8abSMatthias Seidel            | microblaze | microblazeel \
1219*ff1d3d89Smseidel            | mips* \
12201aeda8abSMatthias Seidel            | mmix \
1221cdf0e10cSrcweir            | mn10200 | mn10300 \
1222187b4248SPedro Giffuni            | moxie \
1223187b4248SPedro Giffuni            | mt \
1224cdf0e10cSrcweir            | msp430 \
1225*ff1d3d89Smseidel            | nanomips* \
1226ee1eb700SMatthias Seidel            | nds32 | nds32le | nds32be \
12271aeda8abSMatthias Seidel            | nfp \
1228ee1eb700SMatthias Seidel            | nios | nios2 | nios2eb | nios2el \
12293ace3152SMatthias Seidel            | none | np1 | ns16k | ns32k | nvptx \
12301aeda8abSMatthias Seidel            | open8 \
12311aeda8abSMatthias Seidel            | or1k* \
12321aeda8abSMatthias Seidel            | or32 \
12331aeda8abSMatthias Seidel            | orion \
12343ace3152SMatthias Seidel            | picochip \
12351aeda8abSMatthias Seidel            | pdp10 | pdp11 | pj | pjl | pn | power \
12361aeda8abSMatthias Seidel            | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
1237ee1eb700SMatthias Seidel            | pru \
1238cdf0e10cSrcweir            | pyramid \
12391adde547Smseidel            | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
12401aeda8abSMatthias Seidel            | rl78 | romp | rs6000 | rx \
12415bf8527aSmseidel            | s390 | s390x \
1242187b4248SPedro Giffuni            | score \
12433ace3152SMatthias Seidel            | sh | shl \
12443ace3152SMatthias Seidel            | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
12451aeda8abSMatthias Seidel            | sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
12461aeda8abSMatthias Seidel            | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
12471aeda8abSMatthias Seidel            | sparclite \
12481aeda8abSMatthias Seidel            | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
1249ee1eb700SMatthias Seidel            | spu \
12501aeda8abSMatthias Seidel            | tahoe \
12511adde547Smseidel            | thumbv7* \
12521aeda8abSMatthias Seidel            | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
12531aeda8abSMatthias Seidel            | tron \
1254187b4248SPedro Giffuni            | ubicom32 \
12553ace3152SMatthias Seidel            | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
12561aeda8abSMatthias Seidel            | vax \
1257*ff1d3d89Smseidel            | vc4 \
1258ee1eb700SMatthias Seidel            | visium \
12593ace3152SMatthias Seidel            | w65 \
12603ace3152SMatthias Seidel            | wasm32 | wasm64 \
12611aeda8abSMatthias Seidel            | we32k \
12621aeda8abSMatthias Seidel            | x86 | x86_64 | xc16x | xgate | xps100 \
12631aeda8abSMatthias Seidel            | xstormy16 | xtensa* \
12641aeda8abSMatthias Seidel            | ymp \
1265187b4248SPedro Giffuni            | z8k | z80)
1266187b4248SPedro Giffuni                ;;
1267cdf0e10cSrcweir
12681aeda8abSMatthias Seidel            *)
1269*ff1d3d89Smseidel                echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
1270cdf0e10cSrcweir                exit 1
1271cdf0e10cSrcweir                ;;
1272cdf0e10cSrcweir        esac
1273cdf0e10cSrcweir        ;;
1274cdf0e10cSrcweiresac
1275cdf0e10cSrcweir
1276cdf0e10cSrcweir# Here we canonicalize certain aliases for manufacturers.
12771aeda8abSMatthias Seidelcase $vendor in
12781aeda8abSMatthias Seidel    digital*)
12791aeda8abSMatthias Seidel        vendor=dec
1280cdf0e10cSrcweir        ;;
12811aeda8abSMatthias Seidel    commodore*)
12821aeda8abSMatthias Seidel        vendor=cbm
1283cdf0e10cSrcweir        ;;
1284cdf0e10cSrcweir    *)
1285cdf0e10cSrcweir        ;;
1286cdf0e10cSrcweiresac
1287cdf0e10cSrcweir
1288cdf0e10cSrcweir# Decode manufacturer-specific aliases for certain operating systems.
1289cdf0e10cSrcweir
1290*ff1d3d89Smseidelif test x"$basic_os" != x
1291cdf0e10cSrcweirthen
12925bf8527aSmseidel
129309be380fSmseidel# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
12945bf8527aSmseidel# set os.
1295*ff1d3d89Smseidelobj=
12965bf8527aSmseidelcase $basic_os in
12975bf8527aSmseidel    gnu/linux*)
12985bf8527aSmseidel        kernel=linux
129909be380fSmseidel        os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
13005bf8527aSmseidel        ;;
13015bf8527aSmseidel    os2-emx)
13025bf8527aSmseidel        kernel=os2
130309be380fSmseidel        os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
13045bf8527aSmseidel        ;;
13055bf8527aSmseidel    nto-qnx*)
13065bf8527aSmseidel        kernel=nto
130709be380fSmseidel        os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
13085bf8527aSmseidel        ;;
13095bf8527aSmseidel    *-*)
13105bf8527aSmseidel        # shellcheck disable=SC2162
131109be380fSmseidel        saved_IFS=$IFS
13125bf8527aSmseidel        IFS="-" read kernel os <<EOF
13135bf8527aSmseidel$basic_os
13145bf8527aSmseidelEOF
131509be380fSmseidel        IFS=$saved_IFS
13165bf8527aSmseidel        ;;
13175bf8527aSmseidel    # Default OS when just kernel was specified
13185bf8527aSmseidel    nto*)
13195bf8527aSmseidel        kernel=nto
132009be380fSmseidel        os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
13215bf8527aSmseidel        ;;
13225bf8527aSmseidel    linux*)
13235bf8527aSmseidel        kernel=linux
132409be380fSmseidel        os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
13255bf8527aSmseidel        ;;
1326d50f3220Smseidel    managarm*)
1327d50f3220Smseidel        kernel=managarm
1328d50f3220Smseidel        os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1329d50f3220Smseidel        ;;
13305bf8527aSmseidel    *)
13315bf8527aSmseidel        kernel=
13325bf8527aSmseidel        os=$basic_os
13335bf8527aSmseidel        ;;
13345bf8527aSmseidelesac
13355bf8527aSmseidel
13365bf8527aSmseidel# Now, normalize the OS (knowing we just have one component, it's not a kernel,
13375bf8527aSmseidel# etc.)
1338cdf0e10cSrcweircase $os in
1339ee1eb700SMatthias Seidel    # First match some system type aliases that might get confused
1340ee1eb700SMatthias Seidel    # with valid system types.
13411aeda8abSMatthias Seidel    # solaris* is a basic system type, with this one exception.
13421aeda8abSMatthias Seidel    auroraux)
13431aeda8abSMatthias Seidel        os=auroraux
1344187b4248SPedro Giffuni        ;;
13451aeda8abSMatthias Seidel    bluegene*)
13461aeda8abSMatthias Seidel        os=cnk
13471aeda8abSMatthias Seidel        ;;
13481aeda8abSMatthias Seidel    solaris1 | solaris1.*)
134909be380fSmseidel        os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1350cdf0e10cSrcweir        ;;
13511aeda8abSMatthias Seidel    solaris)
13521aeda8abSMatthias Seidel        os=solaris2
1353cdf0e10cSrcweir        ;;
13541aeda8abSMatthias Seidel    unixware*)
13551aeda8abSMatthias Seidel        os=sysv4.2uw
1356cdf0e10cSrcweir        ;;
13571a5d95c5SMatthias Seidel    # es1800 is here to avoid being matched by es* (a different OS)
13581aeda8abSMatthias Seidel    es1800*)
13591aeda8abSMatthias Seidel        os=ose
13601aeda8abSMatthias Seidel        ;;
13611aeda8abSMatthias Seidel    # Some version numbers need modification
13621aeda8abSMatthias Seidel    chorusos*)
13631aeda8abSMatthias Seidel        os=chorusos
13641aeda8abSMatthias Seidel        ;;
13651aeda8abSMatthias Seidel    isc)
13661aeda8abSMatthias Seidel        os=isc2.2
13671aeda8abSMatthias Seidel        ;;
13681aeda8abSMatthias Seidel    sco6)
13691aeda8abSMatthias Seidel        os=sco5v6
13701aeda8abSMatthias Seidel        ;;
13711aeda8abSMatthias Seidel    sco5)
13721aeda8abSMatthias Seidel        os=sco3.2v5
13731aeda8abSMatthias Seidel        ;;
13741aeda8abSMatthias Seidel    sco4)
13751aeda8abSMatthias Seidel        os=sco3.2v4
13761aeda8abSMatthias Seidel        ;;
13771aeda8abSMatthias Seidel    sco3.2.[4-9]*)
137809be380fSmseidel        os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
13791aeda8abSMatthias Seidel        ;;
13805bf8527aSmseidel    sco*v* | scout)
13811aeda8abSMatthias Seidel        # Don't match below
13821aeda8abSMatthias Seidel        ;;
13831aeda8abSMatthias Seidel    sco*)
13841aeda8abSMatthias Seidel        os=sco3.2v2
13851aeda8abSMatthias Seidel        ;;
13861aeda8abSMatthias Seidel    psos*)
13871aeda8abSMatthias Seidel        os=psos
13881a5d95c5SMatthias Seidel        ;;
13891aeda8abSMatthias Seidel    qnx*)
13905bf8527aSmseidel        os=qnx
1391cdf0e10cSrcweir        ;;
13921aeda8abSMatthias Seidel    hiux*)
13931aeda8abSMatthias Seidel        os=hiuxwe2
1394cdf0e10cSrcweir        ;;
13951aeda8abSMatthias Seidel    lynx*178)
13961aeda8abSMatthias Seidel        os=lynxos178
13971aeda8abSMatthias Seidel        ;;
13981aeda8abSMatthias Seidel    lynx*5)
13991aeda8abSMatthias Seidel        os=lynxos5
14001aeda8abSMatthias Seidel        ;;
14015bf8527aSmseidel    lynxos*)
14025bf8527aSmseidel        # don't get caught up in next wildcard
14035bf8527aSmseidel        ;;
14041aeda8abSMatthias Seidel    lynx*)
14051aeda8abSMatthias Seidel        os=lynxos
14061aeda8abSMatthias Seidel        ;;
14075bf8527aSmseidel    mac[0-9]*)
140809be380fSmseidel        os=`echo "$os" | sed -e 's|mac|macos|'`
14091aeda8abSMatthias Seidel        ;;
14101aeda8abSMatthias Seidel    opened*)
14111aeda8abSMatthias Seidel        os=openedition
14121aeda8abSMatthias Seidel        ;;
14131aeda8abSMatthias Seidel    os400*)
14141aeda8abSMatthias Seidel        os=os400
14151aeda8abSMatthias Seidel        ;;
14161aeda8abSMatthias Seidel    sunos5*)
141709be380fSmseidel        os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1418cdf0e10cSrcweir        ;;
14191aeda8abSMatthias Seidel    sunos6*)
142009be380fSmseidel        os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1421cdf0e10cSrcweir        ;;
14221aeda8abSMatthias Seidel    wince*)
14231aeda8abSMatthias Seidel        os=wince
1424cdf0e10cSrcweir        ;;
14251aeda8abSMatthias Seidel    utek*)
14261aeda8abSMatthias Seidel        os=bsd
1427187b4248SPedro Giffuni        ;;
14281aeda8abSMatthias Seidel    dynix*)
14291aeda8abSMatthias Seidel        os=bsd
1430cdf0e10cSrcweir        ;;
14311aeda8abSMatthias Seidel    acis*)
14321aeda8abSMatthias Seidel        os=aos
1433cdf0e10cSrcweir        ;;
14341aeda8abSMatthias Seidel    atheos*)
14351aeda8abSMatthias Seidel        os=atheos
1436cdf0e10cSrcweir        ;;
14371aeda8abSMatthias Seidel    syllable*)
14381aeda8abSMatthias Seidel        os=syllable
1439cdf0e10cSrcweir        ;;
14401aeda8abSMatthias Seidel    386bsd)
14411aeda8abSMatthias Seidel        os=bsd
1442cdf0e10cSrcweir        ;;
14431aeda8abSMatthias Seidel    ctix* | uts*)
14441aeda8abSMatthias Seidel        os=sysv
1445187b4248SPedro Giffuni        ;;
14461aeda8abSMatthias Seidel    nova*)
14471aeda8abSMatthias Seidel        os=rtmk-nova
1448cdf0e10cSrcweir        ;;
14491aeda8abSMatthias Seidel    ns2)
14501aeda8abSMatthias Seidel        os=nextstep2
1451cdf0e10cSrcweir        ;;
1452cdf0e10cSrcweir    # Preserve the version number of sinix5.
14531aeda8abSMatthias Seidel    sinix5.*)
145409be380fSmseidel        os=`echo "$os" | sed -e 's|sinix|sysv|'`
1455cdf0e10cSrcweir        ;;
14561aeda8abSMatthias Seidel    sinix*)
14571aeda8abSMatthias Seidel        os=sysv4
1458cdf0e10cSrcweir        ;;
14591aeda8abSMatthias Seidel    tpf*)
14601aeda8abSMatthias Seidel        os=tpf
1461187b4248SPedro Giffuni        ;;
14621aeda8abSMatthias Seidel    triton*)
14631aeda8abSMatthias Seidel        os=sysv3
1464cdf0e10cSrcweir        ;;
14651aeda8abSMatthias Seidel    oss*)
14661aeda8abSMatthias Seidel        os=sysv3
1467cdf0e10cSrcweir        ;;
14681aeda8abSMatthias Seidel    svr4*)
14691aeda8abSMatthias Seidel        os=sysv4
1470cdf0e10cSrcweir        ;;
14711aeda8abSMatthias Seidel    svr3)
14721aeda8abSMatthias Seidel        os=sysv3
1473cdf0e10cSrcweir        ;;
14741aeda8abSMatthias Seidel    sysvr4)
14751aeda8abSMatthias Seidel        os=sysv4
1476cdf0e10cSrcweir        ;;
14771aeda8abSMatthias Seidel    ose*)
14781aeda8abSMatthias Seidel        os=ose
1479cdf0e10cSrcweir        ;;
14801aeda8abSMatthias Seidel    *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
14811aeda8abSMatthias Seidel        os=mint
1482cdf0e10cSrcweir        ;;
14831aeda8abSMatthias Seidel    dicos*)
14841aeda8abSMatthias Seidel        os=dicos
1485187b4248SPedro Giffuni        ;;
14861aeda8abSMatthias Seidel    pikeos*)
148786278b1cSMatthias Seidel        # Until real need of OS specific support for
148886278b1cSMatthias Seidel        # particular features comes up, bare metal
148986278b1cSMatthias Seidel        # configurations are quite functional.
14901aeda8abSMatthias Seidel        case $cpu in
149186278b1cSMatthias Seidel            arm*)
14921aeda8abSMatthias Seidel            os=eabi
149386278b1cSMatthias Seidel            ;;
149486278b1cSMatthias Seidel            *)
1495*ff1d3d89Smseidel            os=
1496*ff1d3d89Smseidel            obj=elf
149786278b1cSMatthias Seidel            ;;
149886278b1cSMatthias Seidel        esac
149986278b1cSMatthias Seidel        ;;
1500*ff1d3d89Smseidel    aout* | coff* | elf* | pe*)
1501*ff1d3d89Smseidel        # These are machine code file formats, not OSes
1502*ff1d3d89Smseidel        obj=$os
1503*ff1d3d89Smseidel        os=
1504*ff1d3d89Smseidel        ;;
1505cdf0e10cSrcweir    *)
15065bf8527aSmseidel        # No normalization, but not necessarily accepted, that comes below.
1507cdf0e10cSrcweir        ;;
1508cdf0e10cSrcweiresac
15095bf8527aSmseidel
1510cdf0e10cSrcweirelse
1511cdf0e10cSrcweir
1512cdf0e10cSrcweir# Here we handle the default operating systems that come with various machines.
1513cdf0e10cSrcweir# The value should be what the vendor currently ships out the door with their
1514cdf0e10cSrcweir# machine or put another way, the most popular os provided with the machine.
1515cdf0e10cSrcweir
1516cdf0e10cSrcweir# Note that if you're going to try to match "-MANUFACTURER" here (say,
1517cdf0e10cSrcweir# "-sun"), then you have to tell the case statement up towards the top
1518cdf0e10cSrcweir# that MANUFACTURER isn't an operating system.  Otherwise, code above
1519cdf0e10cSrcweir# will signal an error saying that MANUFACTURER isn't an operating
1520cdf0e10cSrcweir# system, and we'll never get to this point.
1521cdf0e10cSrcweir
15225bf8527aSmseidelkernel=
1523*ff1d3d89Smseidelobj=
15241aeda8abSMatthias Seidelcase $cpu-$vendor in
1525187b4248SPedro Giffuni    score-*)
1526*ff1d3d89Smseidel        os=
1527*ff1d3d89Smseidel        obj=elf
1528187b4248SPedro Giffuni        ;;
1529187b4248SPedro Giffuni    spu-*)
1530*ff1d3d89Smseidel        os=
1531*ff1d3d89Smseidel        obj=elf
1532187b4248SPedro Giffuni        ;;
1533cdf0e10cSrcweir    *-acorn)
15341aeda8abSMatthias Seidel        os=riscix1.2
1535cdf0e10cSrcweir        ;;
1536cdf0e10cSrcweir    arm*-rebel)
15375bf8527aSmseidel        kernel=linux
15385bf8527aSmseidel        os=gnu
1539cdf0e10cSrcweir        ;;
1540cdf0e10cSrcweir    arm*-semi)
1541*ff1d3d89Smseidel        os=
1542*ff1d3d89Smseidel        obj=aout
1543cdf0e10cSrcweir        ;;
1544cdf0e10cSrcweir    c4x-* | tic4x-*)
1545*ff1d3d89Smseidel        os=
1546*ff1d3d89Smseidel        obj=coff
1547cdf0e10cSrcweir        ;;
1548ee1eb700SMatthias Seidel    c8051-*)
1549*ff1d3d89Smseidel        os=
1550*ff1d3d89Smseidel        obj=elf
15511aeda8abSMatthias Seidel        ;;
15521aeda8abSMatthias Seidel    clipper-intergraph)
15531aeda8abSMatthias Seidel        os=clix
1554ee1eb700SMatthias Seidel        ;;
1555ee1eb700SMatthias Seidel    hexagon-*)
1556*ff1d3d89Smseidel        os=
1557*ff1d3d89Smseidel        obj=elf
1558ee1eb700SMatthias Seidel        ;;
1559ee1eb700SMatthias Seidel    tic54x-*)
1560*ff1d3d89Smseidel        os=
1561*ff1d3d89Smseidel        obj=coff
1562ee1eb700SMatthias Seidel        ;;
1563ee1eb700SMatthias Seidel    tic55x-*)
1564*ff1d3d89Smseidel        os=
1565*ff1d3d89Smseidel        obj=coff
1566ee1eb700SMatthias Seidel        ;;
1567ee1eb700SMatthias Seidel    tic6x-*)
1568*ff1d3d89Smseidel        os=
1569*ff1d3d89Smseidel        obj=coff
1570ee1eb700SMatthias Seidel        ;;
1571cdf0e10cSrcweir    # This must come before the *-dec entry.
1572cdf0e10cSrcweir    pdp10-*)
15731aeda8abSMatthias Seidel        os=tops20
1574cdf0e10cSrcweir        ;;
1575cdf0e10cSrcweir    pdp11-*)
15761aeda8abSMatthias Seidel        os=none
1577cdf0e10cSrcweir        ;;
1578cdf0e10cSrcweir    *-dec | vax-*)
15791aeda8abSMatthias Seidel        os=ultrix4.2
1580cdf0e10cSrcweir        ;;
1581cdf0e10cSrcweir    m68*-apollo)
15821aeda8abSMatthias Seidel        os=domain
1583cdf0e10cSrcweir        ;;
1584cdf0e10cSrcweir    i386-sun)
15851aeda8abSMatthias Seidel        os=sunos4.0.2
1586cdf0e10cSrcweir        ;;
1587cdf0e10cSrcweir    m68000-sun)
15881aeda8abSMatthias Seidel        os=sunos3
1589cdf0e10cSrcweir        ;;
1590cdf0e10cSrcweir    m68*-cisco)
1591*ff1d3d89Smseidel        os=
1592*ff1d3d89Smseidel        obj=aout
1593cdf0e10cSrcweir        ;;
1594187b4248SPedro Giffuni    mep-*)
1595*ff1d3d89Smseidel        os=
1596*ff1d3d89Smseidel        obj=elf
1597187b4248SPedro Giffuni        ;;
1598cdf0e10cSrcweir    mips*-cisco)
1599*ff1d3d89Smseidel        os=
1600*ff1d3d89Smseidel        obj=elf
1601cdf0e10cSrcweir        ;;
1602*ff1d3d89Smseidel    mips*-*|nanomips*-*)
1603*ff1d3d89Smseidel        os=
1604*ff1d3d89Smseidel        obj=elf
1605cdf0e10cSrcweir        ;;
1606cdf0e10cSrcweir    or32-*)
1607*ff1d3d89Smseidel        os=
1608*ff1d3d89Smseidel        obj=coff
1609cdf0e10cSrcweir        ;;
1610cdf0e10cSrcweir    *-tti)  # must be before sparc entry or we get the wrong os.
16111aeda8abSMatthias Seidel        os=sysv3
1612cdf0e10cSrcweir        ;;
1613cdf0e10cSrcweir    sparc-* | *-sun)
16141aeda8abSMatthias Seidel        os=sunos4.1.1
1615cdf0e10cSrcweir        ;;
1616ee1eb700SMatthias Seidel    pru-*)
1617*ff1d3d89Smseidel        os=
1618*ff1d3d89Smseidel        obj=elf
1619ee1eb700SMatthias Seidel        ;;
1620cdf0e10cSrcweir    *-be)
16211aeda8abSMatthias Seidel        os=beos
1622cdf0e10cSrcweir        ;;
1623cdf0e10cSrcweir    *-ibm)
16241aeda8abSMatthias Seidel        os=aix
1625cdf0e10cSrcweir        ;;
1626187b4248SPedro Giffuni    *-knuth)
16271aeda8abSMatthias Seidel        os=mmixware
1628187b4248SPedro Giffuni        ;;
1629cdf0e10cSrcweir    *-wec)
16301aeda8abSMatthias Seidel        os=proelf
1631cdf0e10cSrcweir        ;;
1632cdf0e10cSrcweir    *-winbond)
16331aeda8abSMatthias Seidel        os=proelf
1634cdf0e10cSrcweir        ;;
1635cdf0e10cSrcweir    *-oki)
16361aeda8abSMatthias Seidel        os=proelf
1637cdf0e10cSrcweir        ;;
1638cdf0e10cSrcweir    *-hp)
16391aeda8abSMatthias Seidel        os=hpux
1640cdf0e10cSrcweir        ;;
1641cdf0e10cSrcweir    *-hitachi)
16421aeda8abSMatthias Seidel        os=hiux
1643cdf0e10cSrcweir        ;;
1644cdf0e10cSrcweir    i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
16451aeda8abSMatthias Seidel        os=sysv
1646cdf0e10cSrcweir        ;;
1647cdf0e10cSrcweir    *-cbm)
16481aeda8abSMatthias Seidel        os=amigaos
1649cdf0e10cSrcweir        ;;
1650cdf0e10cSrcweir    *-dg)
16511aeda8abSMatthias Seidel        os=dgux
1652cdf0e10cSrcweir        ;;
1653cdf0e10cSrcweir    *-dolphin)
16541aeda8abSMatthias Seidel        os=sysv3
1655cdf0e10cSrcweir        ;;
1656cdf0e10cSrcweir    m68k-ccur)
16571aeda8abSMatthias Seidel        os=rtu
1658cdf0e10cSrcweir        ;;
1659cdf0e10cSrcweir    m88k-omron*)
16601aeda8abSMatthias Seidel        os=luna
1661cdf0e10cSrcweir        ;;
1662cdf0e10cSrcweir    *-next)
16631aeda8abSMatthias Seidel        os=nextstep
1664cdf0e10cSrcweir        ;;
1665cdf0e10cSrcweir    *-sequent)
16661aeda8abSMatthias Seidel        os=ptx
1667cdf0e10cSrcweir        ;;
1668cdf0e10cSrcweir    *-crds)
16691aeda8abSMatthias Seidel        os=unos
1670cdf0e10cSrcweir        ;;
1671cdf0e10cSrcweir    *-ns)
16721aeda8abSMatthias Seidel        os=genix
1673cdf0e10cSrcweir        ;;
1674cdf0e10cSrcweir    i370-*)
16751aeda8abSMatthias Seidel        os=mvs
1676cdf0e10cSrcweir        ;;
1677cdf0e10cSrcweir    *-gould)
16781aeda8abSMatthias Seidel        os=sysv
1679cdf0e10cSrcweir        ;;
1680cdf0e10cSrcweir    *-highlevel)
16811aeda8abSMatthias Seidel        os=bsd
1682cdf0e10cSrcweir        ;;
1683cdf0e10cSrcweir    *-encore)
16841aeda8abSMatthias Seidel        os=bsd
1685cdf0e10cSrcweir        ;;
1686cdf0e10cSrcweir    *-sgi)
16871aeda8abSMatthias Seidel        os=irix
1688cdf0e10cSrcweir        ;;
1689cdf0e10cSrcweir    *-siemens)
16901aeda8abSMatthias Seidel        os=sysv4
1691cdf0e10cSrcweir        ;;
1692cdf0e10cSrcweir    *-masscomp)
16931aeda8abSMatthias Seidel        os=rtu
1694cdf0e10cSrcweir        ;;
1695cdf0e10cSrcweir    f30[01]-fujitsu | f700-fujitsu)
16961aeda8abSMatthias Seidel        os=uxpv
1697cdf0e10cSrcweir        ;;
1698cdf0e10cSrcweir    *-rom68k)
1699*ff1d3d89Smseidel        os=
1700*ff1d3d89Smseidel        obj=coff
1701cdf0e10cSrcweir        ;;
1702cdf0e10cSrcweir    *-*bug)
1703*ff1d3d89Smseidel        os=
1704*ff1d3d89Smseidel        obj=coff
1705cdf0e10cSrcweir        ;;
1706cdf0e10cSrcweir    *-apple)
17071aeda8abSMatthias Seidel        os=macos
1708cdf0e10cSrcweir        ;;
1709cdf0e10cSrcweir    *-atari*)
17101aeda8abSMatthias Seidel        os=mint
17111aeda8abSMatthias Seidel        ;;
17121aeda8abSMatthias Seidel    *-wrs)
17131aeda8abSMatthias Seidel        os=vxworks
1714cdf0e10cSrcweir        ;;
1715cdf0e10cSrcweir    *)
17161aeda8abSMatthias Seidel        os=none
1717cdf0e10cSrcweir        ;;
1718cdf0e10cSrcweiresac
17195bf8527aSmseidel
1720cdf0e10cSrcweirfi
1721cdf0e10cSrcweir
1722*ff1d3d89Smseidel# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
1723*ff1d3d89Smseidel
17245bf8527aSmseidelcase $os in
17251adde547Smseidel    # Sometimes we do "kernel-libc", so those need to count as OSes.
1726*ff1d3d89Smseidel    llvm* | musl* | newlib* | relibc* | uclibc*)
17275bf8527aSmseidel        ;;
17281adde547Smseidel    # Likewise for "kernel-abi"
17291adde547Smseidel    eabi* | gnueabi*)
17301adde547Smseidel        ;;
17311adde547Smseidel    # VxWorks passes extra cpu info in the 4th filed.
17321adde547Smseidel    simlinux | simwindows | spe)
17335bf8527aSmseidel        ;;
1734*ff1d3d89Smseidel    # See `case $cpu-$os` validation below
1735*ff1d3d89Smseidel    ghcjs)
1736*ff1d3d89Smseidel        ;;
17375bf8527aSmseidel    # Now accept the basic system types.
17385bf8527aSmseidel    # The portable systems comes first.
17395bf8527aSmseidel    # Each alternative MUST end in a * to match a version number.
17405bf8527aSmseidel    gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
17415bf8527aSmseidel         | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
17425bf8527aSmseidel         | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
17435bf8527aSmseidel         | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
17445bf8527aSmseidel         | hiux* | abug | nacl* | netware* | windows* \
1745*ff1d3d89Smseidel         | os9* | macos* | osx* | ios* | tvos* | watchos* \
17465bf8527aSmseidel         | mpw* | magic* | mmixware* | mon960* | lnews* \
17475bf8527aSmseidel         | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
17485bf8527aSmseidel         | aos* | aros* | cloudabi* | sortix* | twizzler* \
17495bf8527aSmseidel         | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
17505bf8527aSmseidel         | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
17515bf8527aSmseidel         | mirbsd* | netbsd* | dicos* | openedition* | ose* \
175209be380fSmseidel         | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
17535bf8527aSmseidel         | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
1754*ff1d3d89Smseidel         | bosx* | nextstep* | cxux* | oabi* \
1755*ff1d3d89Smseidel         | ptx* | ecoff* | winnt* | domain* | vsta* \
17565bf8527aSmseidel         | udi* | lites* | ieee* | go32* | aux* | hcos* \
175709be380fSmseidel         | chorusrdb* | cegcc* | glidix* | serenity* \
1758*ff1d3d89Smseidel         | cygwin* | msys* | moss* | proelf* | rtems* \
17595bf8527aSmseidel         | midipix* | mingw32* | mingw64* | mint* \
17605bf8527aSmseidel         | uxpv* | beos* | mpeix* | udk* | moxiebox* \
17615bf8527aSmseidel         | interix* | uwin* | mks* | rhapsody* | darwin* \
17625bf8527aSmseidel         | openstep* | oskit* | conix* | pw32* | nonstopux* \
17635bf8527aSmseidel         | storm-chaos* | tops10* | tenex* | tops20* | its* \
17645bf8527aSmseidel         | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
17655bf8527aSmseidel         | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
17665bf8527aSmseidel         | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
17675bf8527aSmseidel         | skyos* | haiku* | rdos* | toppers* | drops* | es* \
17685bf8527aSmseidel         | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
17695bf8527aSmseidel         | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
177009be380fSmseidel         | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
1771*ff1d3d89Smseidel         | fiwix* | mlibc* | cos* | mbr* | ironclad* )
17725bf8527aSmseidel        ;;
17735bf8527aSmseidel    # This one is extra strict with allowed versions
17745bf8527aSmseidel    sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
17755bf8527aSmseidel        # Don't forget version if it is 3.2v4 or newer.
17765bf8527aSmseidel        ;;
1777*ff1d3d89Smseidel    # This refers to builds using the UEFI calling convention
1778*ff1d3d89Smseidel    # (which depends on the architecture) and PE file format.
1779*ff1d3d89Smseidel    # Note that this is both a different calling convention and
1780*ff1d3d89Smseidel    # different file format than that of GNU-EFI
1781*ff1d3d89Smseidel    # (x86_64-w64-mingw32).
1782*ff1d3d89Smseidel    uefi)
1783*ff1d3d89Smseidel        ;;
17845bf8527aSmseidel    none)
17855bf8527aSmseidel        ;;
1786*ff1d3d89Smseidel    kernel* | msvc* )
1787d50f3220Smseidel        # Restricted further below
1788d50f3220Smseidel        ;;
1789*ff1d3d89Smseidel    '')
1790*ff1d3d89Smseidel        if test x"$obj" = x
1791*ff1d3d89Smseidel        then
1792*ff1d3d89Smseidel            echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
1793*ff1d3d89Smseidel        fi
1794*ff1d3d89Smseidel        ;;
17955bf8527aSmseidel    *)
1796*ff1d3d89Smseidel        echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
1797*ff1d3d89Smseidel        exit 1
1798*ff1d3d89Smseidel        ;;
1799*ff1d3d89Smseidelesac
1800*ff1d3d89Smseidel
1801*ff1d3d89Smseidelcase $obj in
1802*ff1d3d89Smseidel    aout* | coff* | elf* | pe*)
1803*ff1d3d89Smseidel        ;;
1804*ff1d3d89Smseidel    '')
1805*ff1d3d89Smseidel        # empty is fine
1806*ff1d3d89Smseidel        ;;
1807*ff1d3d89Smseidel    *)
1808*ff1d3d89Smseidel        echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
1809*ff1d3d89Smseidel        exit 1
1810*ff1d3d89Smseidel        ;;
1811*ff1d3d89Smseidelesac
1812*ff1d3d89Smseidel
1813*ff1d3d89Smseidel# Here we handle the constraint that a (synthetic) cpu and os are
1814*ff1d3d89Smseidel# valid only in combination with each other and nowhere else.
1815*ff1d3d89Smseidelcase $cpu-$os in
1816*ff1d3d89Smseidel    # The "javascript-unknown-ghcjs" triple is used by GHC; we
1817*ff1d3d89Smseidel    # accept it here in order to tolerate that, but reject any
1818*ff1d3d89Smseidel    # variations.
1819*ff1d3d89Smseidel    javascript-ghcjs)
1820*ff1d3d89Smseidel        ;;
1821*ff1d3d89Smseidel    javascript-* | *-ghcjs)
1822*ff1d3d89Smseidel        echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
18235bf8527aSmseidel        exit 1
18245bf8527aSmseidel        ;;
18255bf8527aSmseidelesac
18265bf8527aSmseidel
18275bf8527aSmseidel# As a final step for OS-related things, validate the OS-kernel combination
18285bf8527aSmseidel# (given a valid OS), if there is a kernel.
1829*ff1d3d89Smseidelcase $kernel-$os-$obj in
1830*ff1d3d89Smseidel    linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
1831*ff1d3d89Smseidel            | linux-mlibc*- | linux-musl*- | linux-newlib*- \
1832*ff1d3d89Smseidel            | linux-relibc*- | linux-uclibc*- )
18335bf8527aSmseidel        ;;
1834*ff1d3d89Smseidel    uclinux-uclibc*- )
18355bf8527aSmseidel        ;;
1836*ff1d3d89Smseidel    managarm-mlibc*- | managarm-kernel*- )
1837d50f3220Smseidel        ;;
1838*ff1d3d89Smseidel    windows*-msvc*-)
1839*ff1d3d89Smseidel        ;;
1840*ff1d3d89Smseidel    -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \
1841*ff1d3d89Smseidel            | -uclibc*- )
18425bf8527aSmseidel        # These are just libc implementations, not actual OSes, and thus
18435bf8527aSmseidel        # require a kernel.
1844*ff1d3d89Smseidel        echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
18455bf8527aSmseidel        exit 1
18465bf8527aSmseidel        ;;
1847*ff1d3d89Smseidel    -kernel*- )
1848*ff1d3d89Smseidel        echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
1849d50f3220Smseidel        exit 1
1850d50f3220Smseidel        ;;
1851*ff1d3d89Smseidel    *-kernel*- )
1852*ff1d3d89Smseidel        echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
1853d50f3220Smseidel        exit 1
1854d50f3220Smseidel        ;;
1855*ff1d3d89Smseidel    *-msvc*- )
1856*ff1d3d89Smseidel        echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
1857*ff1d3d89Smseidel        exit 1
18585bf8527aSmseidel        ;;
1859*ff1d3d89Smseidel    kfreebsd*-gnu*- | kopensolaris*-gnu*-)
18601adde547Smseidel        ;;
1861*ff1d3d89Smseidel    vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
18625bf8527aSmseidel        ;;
1863*ff1d3d89Smseidel    nto-qnx*-)
18645bf8527aSmseidel        ;;
1865*ff1d3d89Smseidel    os2-emx-)
18665bf8527aSmseidel        ;;
1867*ff1d3d89Smseidel    *-eabi*- | *-gnueabi*-)
1868*ff1d3d89Smseidel        ;;
1869*ff1d3d89Smseidel    none--*)
1870*ff1d3d89Smseidel        # None (no kernel, i.e. freestanding / bare metal),
1871*ff1d3d89Smseidel        # can be paired with an machine code file format
1872*ff1d3d89Smseidel        ;;
1873*ff1d3d89Smseidel    -*-)
18745bf8527aSmseidel        # Blank kernel with real OS is always fine.
18755bf8527aSmseidel        ;;
1876*ff1d3d89Smseidel    --*)
1877*ff1d3d89Smseidel        # Blank kernel and OS with real machine code file format is always fine.
1878*ff1d3d89Smseidel        ;;
1879*ff1d3d89Smseidel    *-*-*)
1880*ff1d3d89Smseidel        echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
18815bf8527aSmseidel        exit 1
18825bf8527aSmseidel        ;;
18835bf8527aSmseidelesac
18845bf8527aSmseidel
1885cdf0e10cSrcweir# Here we handle the case where we know the os, and the CPU type, but not the
1886cdf0e10cSrcweir# manufacturer.  We pick the logical manufacturer.
18871aeda8abSMatthias Seidelcase $vendor in
18881aeda8abSMatthias Seidel    unknown)
18895bf8527aSmseidel        case $cpu-$os in
18905bf8527aSmseidel            *-riscix*)
1891cdf0e10cSrcweir                vendor=acorn
1892cdf0e10cSrcweir                ;;
18935bf8527aSmseidel            *-sunos*)
1894cdf0e10cSrcweir                vendor=sun
1895cdf0e10cSrcweir                ;;
18965bf8527aSmseidel            *-cnk* | *-aix*)
1897cdf0e10cSrcweir                vendor=ibm
1898cdf0e10cSrcweir                ;;
18995bf8527aSmseidel            *-beos*)
1900cdf0e10cSrcweir                vendor=be
1901cdf0e10cSrcweir                ;;
19025bf8527aSmseidel            *-hpux*)
1903cdf0e10cSrcweir                vendor=hp
1904cdf0e10cSrcweir                ;;
19055bf8527aSmseidel            *-mpeix*)
1906cdf0e10cSrcweir                vendor=hp
1907cdf0e10cSrcweir                ;;
19085bf8527aSmseidel            *-hiux*)
1909cdf0e10cSrcweir                vendor=hitachi
1910cdf0e10cSrcweir                ;;
19115bf8527aSmseidel            *-unos*)
1912cdf0e10cSrcweir                vendor=crds
1913cdf0e10cSrcweir                ;;
19145bf8527aSmseidel            *-dgux*)
1915cdf0e10cSrcweir                vendor=dg
1916cdf0e10cSrcweir                ;;
19175bf8527aSmseidel            *-luna*)
1918cdf0e10cSrcweir                vendor=omron
1919cdf0e10cSrcweir                ;;
19205bf8527aSmseidel            *-genix*)
1921cdf0e10cSrcweir                vendor=ns
1922cdf0e10cSrcweir                ;;
19235bf8527aSmseidel            *-clix*)
19241aeda8abSMatthias Seidel                vendor=intergraph
19251aeda8abSMatthias Seidel                ;;
19265bf8527aSmseidel            *-mvs* | *-opened*)
1927cdf0e10cSrcweir                vendor=ibm
1928cdf0e10cSrcweir                ;;
19295bf8527aSmseidel            *-os400*)
1930187b4248SPedro Giffuni                vendor=ibm
1931187b4248SPedro Giffuni                ;;
19325bf8527aSmseidel            s390-* | s390x-*)
19335bf8527aSmseidel                vendor=ibm
19345bf8527aSmseidel                ;;
19355bf8527aSmseidel            *-ptx*)
1936cdf0e10cSrcweir                vendor=sequent
1937cdf0e10cSrcweir                ;;
19385bf8527aSmseidel            *-tpf*)
1939187b4248SPedro Giffuni                vendor=ibm
1940187b4248SPedro Giffuni                ;;
19415bf8527aSmseidel            *-vxsim* | *-vxworks* | *-windiss*)
1942cdf0e10cSrcweir                vendor=wrs
1943cdf0e10cSrcweir                ;;
19445bf8527aSmseidel            *-aux*)
1945cdf0e10cSrcweir                vendor=apple
1946cdf0e10cSrcweir                ;;
19475bf8527aSmseidel            *-hms*)
1948cdf0e10cSrcweir                vendor=hitachi
1949cdf0e10cSrcweir                ;;
19505bf8527aSmseidel            *-mpw* | *-macos*)
1951cdf0e10cSrcweir                vendor=apple
1952cdf0e10cSrcweir                ;;
19535bf8527aSmseidel            *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
1954cdf0e10cSrcweir                vendor=atari
1955cdf0e10cSrcweir                ;;
19565bf8527aSmseidel            *-vos*)
1957cdf0e10cSrcweir                vendor=stratus
1958cdf0e10cSrcweir                ;;
1959cdf0e10cSrcweir        esac
1960cdf0e10cSrcweir        ;;
1961cdf0e10cSrcweiresac
1962cdf0e10cSrcweir
1963*ff1d3d89Smseidelecho "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
1964187b4248SPedro Giffuniexit
1965cdf0e10cSrcweir
1966cdf0e10cSrcweir# Local variables:
19671a5d95c5SMatthias Seidel# eval: (add-hook 'before-save-hook 'time-stamp)
1968cdf0e10cSrcweir# time-stamp-start: "timestamp='"
1969cdf0e10cSrcweir# time-stamp-format: "%:y-%02m-%02d"
1970cdf0e10cSrcweir# time-stamp-end: "'"
1971cdf0e10cSrcweir# End:
1972