120f5670eSmrg#!/usr/bin/sh
2b1297603Smrg# Configuration validation subroutine script.
320f5670eSmrg#   Copyright 1992-2022 Free Software Foundation, Inc.
4b1297603Smrg
520f5670eSmrg# shellcheck disable=SC2006,SC2268 # see below for rationale
620f5670eSmrg
720f5670eSmrgtimestamp='2022-01-03'
8b1297603Smrg
933734831Smrg# This file is free software; you can redistribute it and/or modify it
1033734831Smrg# under the terms of the GNU General Public License as published by
1120f5670eSmrg# the Free Software Foundation, either version 3 of the License, or
12b1297603Smrg# (at your option) any later version.
13b1297603Smrg#
1433734831Smrg# This program is distributed in the hope that it will be useful, but
1533734831Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
1633734831Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1733734831Smrg# General Public License for more details.
18b1297603Smrg#
19b1297603Smrg# You should have received a copy of the GNU General Public License
20a570218aSmrg# along with this program; if not, see <https://www.gnu.org/licenses/>.
21b1297603Smrg#
22b1297603Smrg# As a special exception to the GNU General Public License, if you
23b1297603Smrg# distribute this file as part of a program that contains a
24b1297603Smrg# configuration script generated by Autoconf, you may include it under
2533734831Smrg# the same distribution terms that you use for the rest of that
2633734831Smrg# program.  This Exception is an additional permission under section 7
2733734831Smrg# of the GNU General Public License, version 3 ("GPLv3").
28b1297603Smrg
29b1297603Smrg
30a570218aSmrg# Please send patches to <config-patches@gnu.org>.
31b1297603Smrg#
32b1297603Smrg# Configuration subroutine to validate and canonicalize a configuration type.
33b1297603Smrg# Supply the specified configuration type as an argument.
34b1297603Smrg# If it is invalid, we print an error message on stderr and exit with code 1.
35b1297603Smrg# Otherwise, we print the canonical config type on stdout and succeed.
36b1297603Smrg
3733734831Smrg# You can get the latest version of this script from:
3820f5670eSmrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
3933734831Smrg
40b1297603Smrg# This file is supposed to be the same for all GNU packages
41b1297603Smrg# and recognize all the CPU types, system types and aliases
42b1297603Smrg# that are meaningful with *any* GNU software.
43b1297603Smrg# Each package is responsible for reporting which valid configurations
44b1297603Smrg# it does not support.  The user should be able to distinguish
45b1297603Smrg# a failure to support a valid configuration from a meaningless
46b1297603Smrg# configuration.
47b1297603Smrg
48b1297603Smrg# The goal of this file is to map all the various variations of a given
49b1297603Smrg# machine specification into a single specification in the form:
50b1297603Smrg#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
51b1297603Smrg# or in some cases, the newer four-part form:
52b1297603Smrg#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
53b1297603Smrg# It is wrong to echo any other type of specification.
54b1297603Smrg
5520f5670eSmrg# The "shellcheck disable" line above the timestamp inhibits complaints
5620f5670eSmrg# about features and limitations of the classic Bourne shell that were
5720f5670eSmrg# superseded or lifted in POSIX.  However, this script identifies a wide
5820f5670eSmrg# variety of pre-POSIX systems that do not have POSIX shells at all, and
5920f5670eSmrg# even some reasonably current systems (Solaris 10 as case-in-point) still
6020f5670eSmrg# have a pre-POSIX /bin/sh.
6120f5670eSmrg
62b1297603Smrgme=`echo "$0" | sed -e 's,.*/,,'`
63b1297603Smrg
64b1297603Smrgusage="\
65a570218aSmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
66b1297603Smrg
67b1297603SmrgCanonicalize a configuration name.
68b1297603Smrg
69a570218aSmrgOptions:
70b1297603Smrg  -h, --help         print this help, then exit
71b1297603Smrg  -t, --time-stamp   print date of last modification, then exit
72b1297603Smrg  -v, --version      print version number, then exit
73b1297603Smrg
74b1297603SmrgReport bugs and patches to <config-patches@gnu.org>."
75b1297603Smrg
76b1297603Smrgversion="\
77b1297603SmrgGNU config.sub ($timestamp)
78b1297603Smrg
7920f5670eSmrgCopyright 1992-2022 Free Software Foundation, Inc.
80b1297603Smrg
81b1297603SmrgThis is free software; see the source for copying conditions.  There is NO
82b1297603Smrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
83b1297603Smrg
84b1297603Smrghelp="
85b1297603SmrgTry \`$me --help' for more information."
86b1297603Smrg
87b1297603Smrg# Parse command line
88b1297603Smrgwhile test $# -gt 0 ; do
89b1297603Smrg  case $1 in
90b1297603Smrg    --time-stamp | --time* | -t )
91b1297603Smrg       echo "$timestamp" ; exit ;;
92b1297603Smrg    --version | -v )
93b1297603Smrg       echo "$version" ; exit ;;
94b1297603Smrg    --help | --h* | -h )
95b1297603Smrg       echo "$usage"; exit ;;
96b1297603Smrg    -- )     # Stop option processing
97b1297603Smrg       shift; break ;;
98b1297603Smrg    - )	# Use stdin as input.
99b1297603Smrg       break ;;
100b1297603Smrg    -* )
10120f5670eSmrg       echo "$me: invalid option $1$help" >&2
102b1297603Smrg       exit 1 ;;
103b1297603Smrg
104b1297603Smrg    *local*)
105b1297603Smrg       # First pass through any local machine types.
106a570218aSmrg       echo "$1"
107b1297603Smrg       exit ;;
108b1297603Smrg
109b1297603Smrg    * )
110b1297603Smrg       break ;;
111b1297603Smrg  esac
112b1297603Smrgdone
113b1297603Smrg
114b1297603Smrgcase $# in
115b1297603Smrg 0) echo "$me: missing argument$help" >&2
116b1297603Smrg    exit 1;;
117b1297603Smrg 1) ;;
118b1297603Smrg *) echo "$me: too many arguments$help" >&2
119b1297603Smrg    exit 1;;
120b1297603Smrgesac
121b1297603Smrg
122a570218aSmrg# Split fields of configuration type
12320f5670eSmrg# shellcheck disable=SC2162
12420f5670eSmrgsaved_IFS=$IFS
12520f5670eSmrgIFS="-" read field1 field2 field3 field4 <<EOF
126a570218aSmrg$1
127a570218aSmrgEOF
12820f5670eSmrgIFS=$saved_IFS
129b1297603Smrg
130a570218aSmrg# Separate into logical components for further validation
131a570218aSmrgcase $1 in
132a570218aSmrg	*-*-*-*-*)
133a570218aSmrg		echo Invalid configuration \`"$1"\': more than four components >&2
134a570218aSmrg		exit 1
135b1297603Smrg		;;
136a570218aSmrg	*-*-*-*)
137a570218aSmrg		basic_machine=$field1-$field2
13820f5670eSmrg		basic_os=$field3-$field4
139b1297603Smrg		;;
140a570218aSmrg	*-*-*)
141a570218aSmrg		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
142a570218aSmrg		# parts
143a570218aSmrg		maybe_os=$field2-$field3
144a570218aSmrg		case $maybe_os in
14520f5670eSmrg			nto-qnx* | linux-* | uclinux-uclibc* \
146a570218aSmrg			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
147a570218aSmrg			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
148a570218aSmrg			| storm-chaos* | os2-emx* | rtmk-nova*)
149a570218aSmrg				basic_machine=$field1
15020f5670eSmrg				basic_os=$maybe_os
151a570218aSmrg				;;
152a570218aSmrg			android-linux)
153a570218aSmrg				basic_machine=$field1-unknown
15420f5670eSmrg				basic_os=linux-android
155a570218aSmrg				;;
156a570218aSmrg			*)
157a570218aSmrg				basic_machine=$field1-$field2
15820f5670eSmrg				basic_os=$field3
159a570218aSmrg				;;
160a570218aSmrg		esac
161b1297603Smrg		;;
162a570218aSmrg	*-*)
16320f5670eSmrg		# A lone config we happen to match not fitting any pattern
164a570218aSmrg		case $field1-$field2 in
165a570218aSmrg			decstation-3100)
166a570218aSmrg				basic_machine=mips-dec
16720f5670eSmrg				basic_os=
168a570218aSmrg				;;
169a570218aSmrg			*-*)
170a570218aSmrg				# Second component is usually, but not always the OS
171a570218aSmrg				case $field2 in
172a570218aSmrg					# Prevent following clause from handling this valid os
173a570218aSmrg					sun*os*)
174a570218aSmrg						basic_machine=$field1
17520f5670eSmrg						basic_os=$field2
17620f5670eSmrg						;;
17720f5670eSmrg					zephyr*)
17820f5670eSmrg						basic_machine=$field1-unknown
17920f5670eSmrg						basic_os=$field2
180a570218aSmrg						;;
181a570218aSmrg					# Manufacturers
182a570218aSmrg					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
183a570218aSmrg					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
184a570218aSmrg					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
185a570218aSmrg					| convergent* | ncr* | news | 32* | 3600* | 3100* \
186a570218aSmrg					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
187a570218aSmrg					| ultra | tti* | harris | dolphin | highlevel | gould \
188a570218aSmrg					| cbm | ns | masscomp | apple | axis | knuth | cray \
189a570218aSmrg					| microblaze* | sim | cisco \
190a570218aSmrg					| oki | wec | wrs | winbond)
191a570218aSmrg						basic_machine=$field1-$field2
19220f5670eSmrg						basic_os=
193a570218aSmrg						;;
194a570218aSmrg					*)
195a570218aSmrg						basic_machine=$field1
19620f5670eSmrg						basic_os=$field2
197a570218aSmrg						;;
198a570218aSmrg				esac
199a570218aSmrg			;;
200a570218aSmrg		esac
201b1297603Smrg		;;
202a570218aSmrg	*)
203a570218aSmrg		# Convert single-component short-hands not valid as part of
204a570218aSmrg		# multi-component configurations.
205a570218aSmrg		case $field1 in
206a570218aSmrg			386bsd)
207a570218aSmrg				basic_machine=i386-pc
20820f5670eSmrg				basic_os=bsd
209a570218aSmrg				;;
210a570218aSmrg			a29khif)
211a570218aSmrg				basic_machine=a29k-amd
21220f5670eSmrg				basic_os=udi
213a570218aSmrg				;;
214a570218aSmrg			adobe68k)
215a570218aSmrg				basic_machine=m68010-adobe
21620f5670eSmrg				basic_os=scout
217a570218aSmrg				;;
218a570218aSmrg			alliant)
219a570218aSmrg				basic_machine=fx80-alliant
22020f5670eSmrg				basic_os=
221a570218aSmrg				;;
222a570218aSmrg			altos | altos3068)
223a570218aSmrg				basic_machine=m68k-altos
22420f5670eSmrg				basic_os=
225a570218aSmrg				;;
226a570218aSmrg			am29k)
227a570218aSmrg				basic_machine=a29k-none
22820f5670eSmrg				basic_os=bsd
229a570218aSmrg				;;
230a570218aSmrg			amdahl)
231a570218aSmrg				basic_machine=580-amdahl
23220f5670eSmrg				basic_os=sysv
233a570218aSmrg				;;
234a570218aSmrg			amiga)
235a570218aSmrg				basic_machine=m68k-unknown
23620f5670eSmrg				basic_os=
237a570218aSmrg				;;
238a570218aSmrg			amigaos | amigados)
239a570218aSmrg				basic_machine=m68k-unknown
24020f5670eSmrg				basic_os=amigaos
241a570218aSmrg				;;
242a570218aSmrg			amigaunix | amix)
243a570218aSmrg				basic_machine=m68k-unknown
24420f5670eSmrg				basic_os=sysv4
245a570218aSmrg				;;
246a570218aSmrg			apollo68)
247a570218aSmrg				basic_machine=m68k-apollo
24820f5670eSmrg				basic_os=sysv
249a570218aSmrg				;;
250a570218aSmrg			apollo68bsd)
251a570218aSmrg				basic_machine=m68k-apollo
25220f5670eSmrg				basic_os=bsd
253a570218aSmrg				;;
254a570218aSmrg			aros)
255a570218aSmrg				basic_machine=i386-pc
25620f5670eSmrg				basic_os=aros
257a570218aSmrg				;;
258a570218aSmrg			aux)
259a570218aSmrg				basic_machine=m68k-apple
26020f5670eSmrg				basic_os=aux
261a570218aSmrg				;;
262a570218aSmrg			balance)
263a570218aSmrg				basic_machine=ns32k-sequent
26420f5670eSmrg				basic_os=dynix
265a570218aSmrg				;;
266a570218aSmrg			blackfin)
267a570218aSmrg				basic_machine=bfin-unknown
26820f5670eSmrg				basic_os=linux
269a570218aSmrg				;;
270a570218aSmrg			cegcc)
271a570218aSmrg				basic_machine=arm-unknown
27220f5670eSmrg				basic_os=cegcc
273a570218aSmrg				;;
274a570218aSmrg			convex-c1)
275a570218aSmrg				basic_machine=c1-convex
27620f5670eSmrg				basic_os=bsd
277a570218aSmrg				;;
278a570218aSmrg			convex-c2)
279a570218aSmrg				basic_machine=c2-convex
28020f5670eSmrg				basic_os=bsd
281a570218aSmrg				;;
282a570218aSmrg			convex-c32)
283a570218aSmrg				basic_machine=c32-convex
28420f5670eSmrg				basic_os=bsd
285a570218aSmrg				;;
286a570218aSmrg			convex-c34)
287a570218aSmrg				basic_machine=c34-convex
28820f5670eSmrg				basic_os=bsd
289a570218aSmrg				;;
290a570218aSmrg			convex-c38)
291a570218aSmrg				basic_machine=c38-convex
29220f5670eSmrg				basic_os=bsd
293a570218aSmrg				;;
294a570218aSmrg			cray)
295a570218aSmrg				basic_machine=j90-cray
29620f5670eSmrg				basic_os=unicos
297a570218aSmrg				;;
298a570218aSmrg			crds | unos)
299a570218aSmrg				basic_machine=m68k-crds
30020f5670eSmrg				basic_os=
301a570218aSmrg				;;
302a570218aSmrg			da30)
303a570218aSmrg				basic_machine=m68k-da30
30420f5670eSmrg				basic_os=
305a570218aSmrg				;;
306a570218aSmrg			decstation | pmax | pmin | dec3100 | decstatn)
307a570218aSmrg				basic_machine=mips-dec
30820f5670eSmrg				basic_os=
309a570218aSmrg				;;
310a570218aSmrg			delta88)
311a570218aSmrg				basic_machine=m88k-motorola
31220f5670eSmrg				basic_os=sysv3
313a570218aSmrg				;;
314a570218aSmrg			dicos)
315a570218aSmrg				basic_machine=i686-pc
31620f5670eSmrg				basic_os=dicos
317a570218aSmrg				;;
318a570218aSmrg			djgpp)
319a570218aSmrg				basic_machine=i586-pc
32020f5670eSmrg				basic_os=msdosdjgpp
321a570218aSmrg				;;
322a570218aSmrg			ebmon29k)
323a570218aSmrg				basic_machine=a29k-amd
32420f5670eSmrg				basic_os=ebmon
325a570218aSmrg				;;
326a570218aSmrg			es1800 | OSE68k | ose68k | ose | OSE)
327a570218aSmrg				basic_machine=m68k-ericsson
32820f5670eSmrg				basic_os=ose
329a570218aSmrg				;;
330a570218aSmrg			gmicro)
331a570218aSmrg				basic_machine=tron-gmicro
33220f5670eSmrg				basic_os=sysv
333a570218aSmrg				;;
334a570218aSmrg			go32)
335a570218aSmrg				basic_machine=i386-pc
33620f5670eSmrg				basic_os=go32
337a570218aSmrg				;;
338a570218aSmrg			h8300hms)
339a570218aSmrg				basic_machine=h8300-hitachi
34020f5670eSmrg				basic_os=hms
341a570218aSmrg				;;
342a570218aSmrg			h8300xray)
343a570218aSmrg				basic_machine=h8300-hitachi
34420f5670eSmrg				basic_os=xray
345a570218aSmrg				;;
346a570218aSmrg			h8500hms)
347a570218aSmrg				basic_machine=h8500-hitachi
34820f5670eSmrg				basic_os=hms
349a570218aSmrg				;;
350a570218aSmrg			harris)
351a570218aSmrg				basic_machine=m88k-harris
35220f5670eSmrg				basic_os=sysv3
353a570218aSmrg				;;
35420f5670eSmrg			hp300 | hp300hpux)
355a570218aSmrg				basic_machine=m68k-hp
35620f5670eSmrg				basic_os=hpux
357a570218aSmrg				;;
358a570218aSmrg			hp300bsd)
359a570218aSmrg				basic_machine=m68k-hp
36020f5670eSmrg				basic_os=bsd
361a570218aSmrg				;;
362a570218aSmrg			hppaosf)
363a570218aSmrg				basic_machine=hppa1.1-hp
36420f5670eSmrg				basic_os=osf
365a570218aSmrg				;;
366a570218aSmrg			hppro)
367a570218aSmrg				basic_machine=hppa1.1-hp
36820f5670eSmrg				basic_os=proelf
369a570218aSmrg				;;
370a570218aSmrg			i386mach)
371a570218aSmrg				basic_machine=i386-mach
37220f5670eSmrg				basic_os=mach
373a570218aSmrg				;;
374a570218aSmrg			isi68 | isi)
375a570218aSmrg				basic_machine=m68k-isi
37620f5670eSmrg				basic_os=sysv
377a570218aSmrg				;;
378a570218aSmrg			m68knommu)
379a570218aSmrg				basic_machine=m68k-unknown
38020f5670eSmrg				basic_os=linux
381a570218aSmrg				;;
382a570218aSmrg			magnum | m3230)
383a570218aSmrg				basic_machine=mips-mips
38420f5670eSmrg				basic_os=sysv
385a570218aSmrg				;;
386a570218aSmrg			merlin)
387a570218aSmrg				basic_machine=ns32k-utek
38820f5670eSmrg				basic_os=sysv
389a570218aSmrg				;;
390a570218aSmrg			mingw64)
391a570218aSmrg				basic_machine=x86_64-pc
39220f5670eSmrg				basic_os=mingw64
393a570218aSmrg				;;
394a570218aSmrg			mingw32)
395a570218aSmrg				basic_machine=i686-pc
39620f5670eSmrg				basic_os=mingw32
397a570218aSmrg				;;
398a570218aSmrg			mingw32ce)
399a570218aSmrg				basic_machine=arm-unknown
40020f5670eSmrg				basic_os=mingw32ce
401a570218aSmrg				;;
402a570218aSmrg			monitor)
403a570218aSmrg				basic_machine=m68k-rom68k
40420f5670eSmrg				basic_os=coff
405a570218aSmrg				;;
406a570218aSmrg			morphos)
407a570218aSmrg				basic_machine=powerpc-unknown
40820f5670eSmrg				basic_os=morphos
409a570218aSmrg				;;
410a570218aSmrg			moxiebox)
411a570218aSmrg				basic_machine=moxie-unknown
41220f5670eSmrg				basic_os=moxiebox
413a570218aSmrg				;;
414a570218aSmrg			msdos)
415a570218aSmrg				basic_machine=i386-pc
41620f5670eSmrg				basic_os=msdos
417a570218aSmrg				;;
418a570218aSmrg			msys)
419a570218aSmrg				basic_machine=i686-pc
42020f5670eSmrg				basic_os=msys
421a570218aSmrg				;;
422a570218aSmrg			mvs)
423a570218aSmrg				basic_machine=i370-ibm
42420f5670eSmrg				basic_os=mvs
425a570218aSmrg				;;
426a570218aSmrg			nacl)
427a570218aSmrg				basic_machine=le32-unknown
42820f5670eSmrg				basic_os=nacl
429a570218aSmrg				;;
430a570218aSmrg			ncr3000)
431a570218aSmrg				basic_machine=i486-ncr
43220f5670eSmrg				basic_os=sysv4
433a570218aSmrg				;;
434a570218aSmrg			netbsd386)
435a570218aSmrg				basic_machine=i386-pc
43620f5670eSmrg				basic_os=netbsd
437a570218aSmrg				;;
438a570218aSmrg			netwinder)
439a570218aSmrg				basic_machine=armv4l-rebel
44020f5670eSmrg				basic_os=linux
441a570218aSmrg				;;
442a570218aSmrg			news | news700 | news800 | news900)
443a570218aSmrg				basic_machine=m68k-sony
44420f5670eSmrg				basic_os=newsos
445a570218aSmrg				;;
446a570218aSmrg			news1000)
447a570218aSmrg				basic_machine=m68030-sony
44820f5670eSmrg				basic_os=newsos
449a570218aSmrg				;;
450a570218aSmrg			necv70)
451a570218aSmrg				basic_machine=v70-nec
45220f5670eSmrg				basic_os=sysv
453a570218aSmrg				;;
454a570218aSmrg			nh3000)
455a570218aSmrg				basic_machine=m68k-harris
45620f5670eSmrg				basic_os=cxux
457a570218aSmrg				;;
458a570218aSmrg			nh[45]000)
459a570218aSmrg				basic_machine=m88k-harris
46020f5670eSmrg				basic_os=cxux
461a570218aSmrg				;;
462a570218aSmrg			nindy960)
463a570218aSmrg				basic_machine=i960-intel
46420f5670eSmrg				basic_os=nindy
465a570218aSmrg				;;
466a570218aSmrg			mon960)
467a570218aSmrg				basic_machine=i960-intel
46820f5670eSmrg				basic_os=mon960
469a570218aSmrg				;;
470a570218aSmrg			nonstopux)
471a570218aSmrg				basic_machine=mips-compaq
47220f5670eSmrg				basic_os=nonstopux
473a570218aSmrg				;;
474a570218aSmrg			os400)
475a570218aSmrg				basic_machine=powerpc-ibm
47620f5670eSmrg				basic_os=os400
477a570218aSmrg				;;
478a570218aSmrg			OSE68000 | ose68000)
479a570218aSmrg				basic_machine=m68000-ericsson
48020f5670eSmrg				basic_os=ose
481a570218aSmrg				;;
482a570218aSmrg			os68k)
483a570218aSmrg				basic_machine=m68k-none
48420f5670eSmrg				basic_os=os68k
485a570218aSmrg				;;
486a570218aSmrg			paragon)
487a570218aSmrg				basic_machine=i860-intel
48820f5670eSmrg				basic_os=osf
489a570218aSmrg				;;
490a570218aSmrg			parisc)
491a570218aSmrg				basic_machine=hppa-unknown
49220f5670eSmrg				basic_os=linux
49320f5670eSmrg				;;
49420f5670eSmrg			psp)
49520f5670eSmrg				basic_machine=mipsallegrexel-sony
49620f5670eSmrg				basic_os=psp
497a570218aSmrg				;;
498a570218aSmrg			pw32)
499a570218aSmrg				basic_machine=i586-unknown
50020f5670eSmrg				basic_os=pw32
501a570218aSmrg				;;
502a570218aSmrg			rdos | rdos64)
503a570218aSmrg				basic_machine=x86_64-pc
50420f5670eSmrg				basic_os=rdos
505a570218aSmrg				;;
506a570218aSmrg			rdos32)
507a570218aSmrg				basic_machine=i386-pc
50820f5670eSmrg				basic_os=rdos
509a570218aSmrg				;;
510a570218aSmrg			rom68k)
511a570218aSmrg				basic_machine=m68k-rom68k
51220f5670eSmrg				basic_os=coff
513a570218aSmrg				;;
514a570218aSmrg			sa29200)
515a570218aSmrg				basic_machine=a29k-amd
51620f5670eSmrg				basic_os=udi
517a570218aSmrg				;;
518a570218aSmrg			sei)
519a570218aSmrg				basic_machine=mips-sei
52020f5670eSmrg				basic_os=seiux
521a570218aSmrg				;;
522a570218aSmrg			sequent)
523a570218aSmrg				basic_machine=i386-sequent
52420f5670eSmrg				basic_os=
525a570218aSmrg				;;
526a570218aSmrg			sps7)
527a570218aSmrg				basic_machine=m68k-bull
52820f5670eSmrg				basic_os=sysv2
529a570218aSmrg				;;
530a570218aSmrg			st2000)
531a570218aSmrg				basic_machine=m68k-tandem
53220f5670eSmrg				basic_os=
533a570218aSmrg				;;
534a570218aSmrg			stratus)
535a570218aSmrg				basic_machine=i860-stratus
53620f5670eSmrg				basic_os=sysv4
537a570218aSmrg				;;
538a570218aSmrg			sun2)
539a570218aSmrg				basic_machine=m68000-sun
54020f5670eSmrg				basic_os=
541a570218aSmrg				;;
542a570218aSmrg			sun2os3)
543a570218aSmrg				basic_machine=m68000-sun
54420f5670eSmrg				basic_os=sunos3
545a570218aSmrg				;;
546a570218aSmrg			sun2os4)
547a570218aSmrg				basic_machine=m68000-sun
54820f5670eSmrg				basic_os=sunos4
549a570218aSmrg				;;
550a570218aSmrg			sun3)
551a570218aSmrg				basic_machine=m68k-sun
55220f5670eSmrg				basic_os=
553a570218aSmrg				;;
554a570218aSmrg			sun3os3)
555a570218aSmrg				basic_machine=m68k-sun
55620f5670eSmrg				basic_os=sunos3
557a570218aSmrg				;;
558a570218aSmrg			sun3os4)
559a570218aSmrg				basic_machine=m68k-sun
56020f5670eSmrg				basic_os=sunos4
561a570218aSmrg				;;
562a570218aSmrg			sun4)
563a570218aSmrg				basic_machine=sparc-sun
56420f5670eSmrg				basic_os=
565a570218aSmrg				;;
566a570218aSmrg			sun4os3)
567a570218aSmrg				basic_machine=sparc-sun
56820f5670eSmrg				basic_os=sunos3
569a570218aSmrg				;;
570a570218aSmrg			sun4os4)
571a570218aSmrg				basic_machine=sparc-sun
57220f5670eSmrg				basic_os=sunos4
573a570218aSmrg				;;
574a570218aSmrg			sun4sol2)
575a570218aSmrg				basic_machine=sparc-sun
57620f5670eSmrg				basic_os=solaris2
577a570218aSmrg				;;
578a570218aSmrg			sun386 | sun386i | roadrunner)
579a570218aSmrg				basic_machine=i386-sun
58020f5670eSmrg				basic_os=
581a570218aSmrg				;;
582a570218aSmrg			sv1)
583a570218aSmrg				basic_machine=sv1-cray
58420f5670eSmrg				basic_os=unicos
585a570218aSmrg				;;
586a570218aSmrg			symmetry)
587a570218aSmrg				basic_machine=i386-sequent
58820f5670eSmrg				basic_os=dynix
589a570218aSmrg				;;
590a570218aSmrg			t3e)
591a570218aSmrg				basic_machine=alphaev5-cray
59220f5670eSmrg				basic_os=unicos
593a570218aSmrg				;;
594a570218aSmrg			t90)
595a570218aSmrg				basic_machine=t90-cray
59620f5670eSmrg				basic_os=unicos
597a570218aSmrg				;;
598a570218aSmrg			toad1)
599a570218aSmrg				basic_machine=pdp10-xkl
60020f5670eSmrg				basic_os=tops20
601a570218aSmrg				;;
602a570218aSmrg			tpf)
603a570218aSmrg				basic_machine=s390x-ibm
60420f5670eSmrg				basic_os=tpf
605a570218aSmrg				;;
606a570218aSmrg			udi29k)
607a570218aSmrg				basic_machine=a29k-amd
60820f5670eSmrg				basic_os=udi
609a570218aSmrg				;;
610a570218aSmrg			ultra3)
611a570218aSmrg				basic_machine=a29k-nyu
61220f5670eSmrg				basic_os=sym1
613a570218aSmrg				;;
614a570218aSmrg			v810 | necv810)
615a570218aSmrg				basic_machine=v810-nec
61620f5670eSmrg				basic_os=none
617a570218aSmrg				;;
618a570218aSmrg			vaxv)
619a570218aSmrg				basic_machine=vax-dec
62020f5670eSmrg				basic_os=sysv
621a570218aSmrg				;;
622a570218aSmrg			vms)
623a570218aSmrg				basic_machine=vax-dec
62420f5670eSmrg				basic_os=vms
62520f5670eSmrg				;;
62620f5670eSmrg			vsta)
62720f5670eSmrg				basic_machine=i386-pc
62820f5670eSmrg				basic_os=vsta
629a570218aSmrg				;;
630a570218aSmrg			vxworks960)
631a570218aSmrg				basic_machine=i960-wrs
63220f5670eSmrg				basic_os=vxworks
633a570218aSmrg				;;
634a570218aSmrg			vxworks68)
635a570218aSmrg				basic_machine=m68k-wrs
63620f5670eSmrg				basic_os=vxworks
637a570218aSmrg				;;
638a570218aSmrg			vxworks29k)
639a570218aSmrg				basic_machine=a29k-wrs
64020f5670eSmrg				basic_os=vxworks
641a570218aSmrg				;;
642a570218aSmrg			xbox)
643a570218aSmrg				basic_machine=i686-pc
64420f5670eSmrg				basic_os=mingw32
645a570218aSmrg				;;
646a570218aSmrg			ymp)
647a570218aSmrg				basic_machine=ymp-cray
64820f5670eSmrg				basic_os=unicos
649a570218aSmrg				;;
650a570218aSmrg			*)
651a570218aSmrg				basic_machine=$1
65220f5670eSmrg				basic_os=
653a570218aSmrg				;;
654a570218aSmrg		esac
655b1297603Smrg		;;
656b1297603Smrgesac
657b1297603Smrg
658a570218aSmrg# Decode 1-component or ad-hoc basic machines
659b1297603Smrgcase $basic_machine in
660a570218aSmrg	# Here we handle the default manufacturer of certain CPU types.  It is in
661a570218aSmrg	# some cases the only manufacturer, in others, it is the most popular.
662a570218aSmrg	w89k)
663a570218aSmrg		cpu=hppa1.1
664a570218aSmrg		vendor=winbond
6655b944e2aSmrg		;;
666a570218aSmrg	op50n)
667a570218aSmrg		cpu=hppa1.1
668a570218aSmrg		vendor=oki
66933734831Smrg		;;
670a570218aSmrg	op60c)
671a570218aSmrg		cpu=hppa1.1
672a570218aSmrg		vendor=oki
67333734831Smrg		;;
674a570218aSmrg	ibm*)
675a570218aSmrg		cpu=i370
676a570218aSmrg		vendor=ibm
67733734831Smrg		;;
678a570218aSmrg	orion105)
679a570218aSmrg		cpu=clipper
680a570218aSmrg		vendor=highlevel
68133734831Smrg		;;
682a570218aSmrg	mac | mpw | mac-mpw)
683a570218aSmrg		cpu=m68k
684a570218aSmrg		vendor=apple
685b1297603Smrg		;;
686a570218aSmrg	pmac | pmac-mpw)
687a570218aSmrg		cpu=powerpc
688a570218aSmrg		vendor=apple
689b1297603Smrg		;;
690a570218aSmrg
691b1297603Smrg	# Recognize the various machine names and aliases which stand
692b1297603Smrg	# for a CPU type and a company and sometimes even an OS.
693b1297603Smrg	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
694a570218aSmrg		cpu=m68000
695a570218aSmrg		vendor=att
696b1297603Smrg		;;
697b1297603Smrg	3b*)
698a570218aSmrg		cpu=we32k
699a570218aSmrg		vendor=att
70033734831Smrg		;;
70133734831Smrg	bluegene*)
702a570218aSmrg		cpu=powerpc
703a570218aSmrg		vendor=ibm
70420f5670eSmrg		basic_os=cnk
705b1297603Smrg		;;
706b1297603Smrg	decsystem10* | dec10*)
707a570218aSmrg		cpu=pdp10
708a570218aSmrg		vendor=dec
70920f5670eSmrg		basic_os=tops10
710b1297603Smrg		;;
711b1297603Smrg	decsystem20* | dec20*)
712a570218aSmrg		cpu=pdp10
713a570218aSmrg		vendor=dec
71420f5670eSmrg		basic_os=tops20
715b1297603Smrg		;;
716b1297603Smrg	delta | 3300 | motorola-3300 | motorola-delta \
717b1297603Smrg	      | 3300-motorola | delta-motorola)
718a570218aSmrg		cpu=m68k
719a570218aSmrg		vendor=motorola
72033734831Smrg		;;
721a570218aSmrg	dpx2*)
722a570218aSmrg		cpu=m68k
723a570218aSmrg		vendor=bull
72420f5670eSmrg		basic_os=sysv3
725b1297603Smrg		;;
726b1297603Smrg	encore | umax | mmax)
727a570218aSmrg		cpu=ns32k
728a570218aSmrg		vendor=encore
729b1297603Smrg		;;
730a570218aSmrg	elxsi)
731a570218aSmrg		cpu=elxsi
732a570218aSmrg		vendor=elxsi
73320f5670eSmrg		basic_os=${basic_os:-bsd}
734b1297603Smrg		;;
735b1297603Smrg	fx2800)
736a570218aSmrg		cpu=i860
737a570218aSmrg		vendor=alliant
738b1297603Smrg		;;
739b1297603Smrg	genix)
740a570218aSmrg		cpu=ns32k
741a570218aSmrg		vendor=ns
742b1297603Smrg		;;
743b1297603Smrg	h3050r* | hiux*)
744a570218aSmrg		cpu=hppa1.1
745a570218aSmrg		vendor=hitachi
74620f5670eSmrg		basic_os=hiuxwe2
747b1297603Smrg		;;
748b1297603Smrg	hp3k9[0-9][0-9] | hp9[0-9][0-9])
749a570218aSmrg		cpu=hppa1.0
750a570218aSmrg		vendor=hp
751b1297603Smrg		;;
752b1297603Smrg	hp9k2[0-9][0-9] | hp9k31[0-9])
753a570218aSmrg		cpu=m68000
754a570218aSmrg		vendor=hp
755b1297603Smrg		;;
756b1297603Smrg	hp9k3[2-9][0-9])
757a570218aSmrg		cpu=m68k
758a570218aSmrg		vendor=hp
759b1297603Smrg		;;
760b1297603Smrg	hp9k6[0-9][0-9] | hp6[0-9][0-9])
761a570218aSmrg		cpu=hppa1.0
762a570218aSmrg		vendor=hp
763b1297603Smrg		;;
764b1297603Smrg	hp9k7[0-79][0-9] | hp7[0-79][0-9])
765a570218aSmrg		cpu=hppa1.1
766a570218aSmrg		vendor=hp
767b1297603Smrg		;;
768b1297603Smrg	hp9k78[0-9] | hp78[0-9])
769b1297603Smrg		# FIXME: really hppa2.0-hp
770a570218aSmrg		cpu=hppa1.1
771a570218aSmrg		vendor=hp
772b1297603Smrg		;;
773b1297603Smrg	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
774b1297603Smrg		# FIXME: really hppa2.0-hp
775a570218aSmrg		cpu=hppa1.1
776a570218aSmrg		vendor=hp
777b1297603Smrg		;;
778b1297603Smrg	hp9k8[0-9][13679] | hp8[0-9][13679])
779a570218aSmrg		cpu=hppa1.1
780a570218aSmrg		vendor=hp
781b1297603Smrg		;;
782b1297603Smrg	hp9k8[0-9][0-9] | hp8[0-9][0-9])
783a570218aSmrg		cpu=hppa1.0
784a570218aSmrg		vendor=hp
785b1297603Smrg		;;
786b1297603Smrg	i*86v32)
787a570218aSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
788a570218aSmrg		vendor=pc
78920f5670eSmrg		basic_os=sysv32
790b1297603Smrg		;;
791b1297603Smrg	i*86v4*)
792a570218aSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
793a570218aSmrg		vendor=pc
79420f5670eSmrg		basic_os=sysv4
795b1297603Smrg		;;
796b1297603Smrg	i*86v)
797a570218aSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
798a570218aSmrg		vendor=pc
79920f5670eSmrg		basic_os=sysv
800b1297603Smrg		;;
801b1297603Smrg	i*86sol2)
802a570218aSmrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
803a570218aSmrg		vendor=pc
80420f5670eSmrg		basic_os=solaris2
805b1297603Smrg		;;
806a570218aSmrg	j90 | j90-cray)
807a570218aSmrg		cpu=j90
808a570218aSmrg		vendor=cray
80920f5670eSmrg		basic_os=${basic_os:-unicos}
810b1297603Smrg		;;
811b1297603Smrg	iris | iris4d)
812a570218aSmrg		cpu=mips
813a570218aSmrg		vendor=sgi
81420f5670eSmrg		case $basic_os in
815a570218aSmrg		    irix*)
816b1297603Smrg			;;
817b1297603Smrg		    *)
81820f5670eSmrg			basic_os=irix4
819b1297603Smrg			;;
820b1297603Smrg		esac
821b1297603Smrg		;;
822b1297603Smrg	miniframe)
823a570218aSmrg		cpu=m68000
824a570218aSmrg		vendor=convergent
825b1297603Smrg		;;
826a570218aSmrg	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
827a570218aSmrg		cpu=m68k
828a570218aSmrg		vendor=atari
82920f5670eSmrg		basic_os=mint
830b1297603Smrg		;;
831b1297603Smrg	news-3600 | risc-news)
832a570218aSmrg		cpu=mips
833a570218aSmrg		vendor=sony
83420f5670eSmrg		basic_os=newsos
835b1297603Smrg		;;
836a570218aSmrg	next | m*-next)
837a570218aSmrg		cpu=m68k
838a570218aSmrg		vendor=next
83920f5670eSmrg		case $basic_os in
84020f5670eSmrg		    openstep*)
84120f5670eSmrg		        ;;
84220f5670eSmrg		    nextstep*)
843b1297603Smrg			;;
844a570218aSmrg		    ns2*)
84520f5670eSmrg		      basic_os=nextstep2
846b1297603Smrg			;;
847b1297603Smrg		    *)
84820f5670eSmrg		      basic_os=nextstep3
849b1297603Smrg			;;
850b1297603Smrg		esac
851b1297603Smrg		;;
852b1297603Smrg	np1)
853a570218aSmrg		cpu=np1
854a570218aSmrg		vendor=gould
855b1297603Smrg		;;
856b1297603Smrg	op50n-* | op60c-*)
857a570218aSmrg		cpu=hppa1.1
858a570218aSmrg		vendor=oki
85920f5670eSmrg		basic_os=proelf
860b1297603Smrg		;;
861b1297603Smrg	pa-hitachi)
862a570218aSmrg		cpu=hppa1.1
863a570218aSmrg		vendor=hitachi
86420f5670eSmrg		basic_os=hiuxwe2
86533734831Smrg		;;
866b1297603Smrg	pbd)
867a570218aSmrg		cpu=sparc
868a570218aSmrg		vendor=tti
869b1297603Smrg		;;
870b1297603Smrg	pbb)
871a570218aSmrg		cpu=m68k
872a570218aSmrg		vendor=tti
8735b944e2aSmrg		;;
874a570218aSmrg	pc532)
875a570218aSmrg		cpu=ns32k
876a570218aSmrg		vendor=pc532
877b1297603Smrg		;;
878b1297603Smrg	pn)
879a570218aSmrg		cpu=pn
880a570218aSmrg		vendor=gould
881b1297603Smrg		;;
882a570218aSmrg	power)
883a570218aSmrg		cpu=power
884a570218aSmrg		vendor=ibm
885b1297603Smrg		;;
886b1297603Smrg	ps2)
887a570218aSmrg		cpu=i386
888a570218aSmrg		vendor=ibm
889b1297603Smrg		;;
890b1297603Smrg	rm[46]00)
891a570218aSmrg		cpu=mips
892a570218aSmrg		vendor=siemens
893b1297603Smrg		;;
894b1297603Smrg	rtpc | rtpc-*)
895a570218aSmrg		cpu=romp
896a570218aSmrg		vendor=ibm
897b1297603Smrg		;;
898a570218aSmrg	sde)
899a570218aSmrg		cpu=mipsisa32
900a570218aSmrg		vendor=sde
90120f5670eSmrg		basic_os=${basic_os:-elf}
902b1297603Smrg		;;
903a570218aSmrg	simso-wrs)
904a570218aSmrg		cpu=sparclite
905a570218aSmrg		vendor=wrs
90620f5670eSmrg		basic_os=vxworks
907b1297603Smrg		;;
908a570218aSmrg	tower | tower-32)
909a570218aSmrg		cpu=m68k
910a570218aSmrg		vendor=ncr
9115b944e2aSmrg		;;
912a570218aSmrg	vpp*|vx|vx-*)
913a570218aSmrg		cpu=f301
914a570218aSmrg		vendor=fujitsu
915b1297603Smrg		;;
916a570218aSmrg	w65)
917a570218aSmrg		cpu=w65
918a570218aSmrg		vendor=wdc
919b1297603Smrg		;;
920a570218aSmrg	w89k-*)
921a570218aSmrg		cpu=hppa1.1
922a570218aSmrg		vendor=winbond
92320f5670eSmrg		basic_os=proelf
924b1297603Smrg		;;
925a570218aSmrg	none)
926a570218aSmrg		cpu=none
927a570218aSmrg		vendor=none
92833734831Smrg		;;
929a570218aSmrg	leon|leon[3-9])
930a570218aSmrg		cpu=sparc
931a570218aSmrg		vendor=$basic_machine
932b1297603Smrg		;;
933a570218aSmrg	leon-*|leon[3-9]-*)
934a570218aSmrg		cpu=sparc
935a570218aSmrg		vendor=`echo "$basic_machine" | sed 's/-.*//'`
936b1297603Smrg		;;
937a570218aSmrg
938a570218aSmrg	*-*)
93920f5670eSmrg		# shellcheck disable=SC2162
94020f5670eSmrg		saved_IFS=$IFS
94120f5670eSmrg		IFS="-" read cpu vendor <<EOF
942a570218aSmrg$basic_machine
943a570218aSmrgEOF
94420f5670eSmrg		IFS=$saved_IFS
945b1297603Smrg		;;
946a570218aSmrg	# We use `pc' rather than `unknown'
947a570218aSmrg	# because (1) that's what they normally are, and
948a570218aSmrg	# (2) the word "unknown" tends to confuse beginning users.
949a570218aSmrg	i*86 | x86_64)
950a570218aSmrg		cpu=$basic_machine
951a570218aSmrg		vendor=pc
952b1297603Smrg		;;
953a570218aSmrg	# These rules are duplicated from below for sake of the special case above;
954a570218aSmrg	# i.e. things that normalized to x86 arches should also default to "pc"
955a570218aSmrg	pc98)
956a570218aSmrg		cpu=i386
957a570218aSmrg		vendor=pc
958b1297603Smrg		;;
959a570218aSmrg	x64 | amd64)
960a570218aSmrg		cpu=x86_64
961a570218aSmrg		vendor=pc
962b1297603Smrg		;;
963a570218aSmrg	# Recognize the basic CPU types without company name.
964a570218aSmrg	*)
965a570218aSmrg		cpu=$basic_machine
966a570218aSmrg		vendor=unknown
96733734831Smrg		;;
968a570218aSmrgesac
969a570218aSmrg
970a570218aSmrgunset -v basic_machine
971a570218aSmrg
972a570218aSmrg# Decode basic machines in the full and proper CPU-Company form.
973a570218aSmrgcase $cpu-$vendor in
97420f5670eSmrg	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
975a570218aSmrg	# some cases the only manufacturer, in others, it is the most popular.
976a570218aSmrg	craynv-unknown)
977a570218aSmrg		vendor=cray
97820f5670eSmrg		basic_os=${basic_os:-unicosmp}
979b1297603Smrg		;;
980a570218aSmrg	c90-unknown | c90-cray)
981a570218aSmrg		vendor=cray
98220f5670eSmrg		basic_os=${Basic_os:-unicos}
983b1297603Smrg		;;
984a570218aSmrg	fx80-unknown)
985a570218aSmrg		vendor=alliant
986b1297603Smrg		;;
987a570218aSmrg	romp-unknown)
988a570218aSmrg		vendor=ibm
989b1297603Smrg		;;
990a570218aSmrg	mmix-unknown)
991a570218aSmrg		vendor=knuth
992b1297603Smrg		;;
993a570218aSmrg	microblaze-unknown | microblazeel-unknown)
994a570218aSmrg		vendor=xilinx
995b1297603Smrg		;;
996a570218aSmrg	rs6000-unknown)
997a570218aSmrg		vendor=ibm
998b1297603Smrg		;;
999a570218aSmrg	vax-unknown)
1000a570218aSmrg		vendor=dec
1001b1297603Smrg		;;
1002a570218aSmrg	pdp11-unknown)
1003a570218aSmrg		vendor=dec
1004b1297603Smrg		;;
1005a570218aSmrg	we32k-unknown)
1006a570218aSmrg		vendor=att
1007b1297603Smrg		;;
1008a570218aSmrg	cydra-unknown)
1009a570218aSmrg		vendor=cydrome
1010b1297603Smrg		;;
1011a570218aSmrg	i370-ibm*)
1012a570218aSmrg		vendor=ibm
1013b1297603Smrg		;;
1014a570218aSmrg	orion-unknown)
1015a570218aSmrg		vendor=highlevel
1016b1297603Smrg		;;
1017a570218aSmrg	xps-unknown | xps100-unknown)
1018a570218aSmrg		cpu=xps100
1019a570218aSmrg		vendor=honeywell
1020b1297603Smrg		;;
1021a570218aSmrg
1022a570218aSmrg	# Here we normalize CPU types with a missing or matching vendor
102320f5670eSmrg	armh-unknown | armh-alt)
102420f5670eSmrg		cpu=armv7l
102520f5670eSmrg		vendor=alt
102620f5670eSmrg		basic_os=${basic_os:-linux-gnueabihf}
102720f5670eSmrg		;;
1028a570218aSmrg	dpx20-unknown | dpx20-bull)
1029a570218aSmrg		cpu=rs6000
1030a570218aSmrg		vendor=bull
103120f5670eSmrg		basic_os=${basic_os:-bosx}
1032b1297603Smrg		;;
1033a570218aSmrg
1034a570218aSmrg	# Here we normalize CPU types irrespective of the vendor
1035a570218aSmrg	amd64-*)
1036a570218aSmrg		cpu=x86_64
1037b1297603Smrg		;;
1038a570218aSmrg	blackfin-*)
1039a570218aSmrg		cpu=bfin
104020f5670eSmrg		basic_os=linux
1041b1297603Smrg		;;
1042a570218aSmrg	c54x-*)
1043a570218aSmrg		cpu=tic54x
1044b1297603Smrg		;;
1045a570218aSmrg	c55x-*)
1046a570218aSmrg		cpu=tic55x
1047b1297603Smrg		;;
1048a570218aSmrg	c6x-*)
1049a570218aSmrg		cpu=tic6x
1050b1297603Smrg		;;
1051a570218aSmrg	e500v[12]-*)
1052a570218aSmrg		cpu=powerpc
105320f5670eSmrg		basic_os=${basic_os}"spe"
1054b1297603Smrg		;;
1055a570218aSmrg	mips3*-*)
1056a570218aSmrg		cpu=mips64
1057b1297603Smrg		;;
1058a570218aSmrg	ms1-*)
1059a570218aSmrg		cpu=mt
1060b1297603Smrg		;;
1061a570218aSmrg	m68knommu-*)
1062a570218aSmrg		cpu=m68k
106320f5670eSmrg		basic_os=linux
1064b1297603Smrg		;;
1065a570218aSmrg	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1066a570218aSmrg		cpu=s12z
1067b1297603Smrg		;;
1068a570218aSmrg	openrisc-*)
1069a570218aSmrg		cpu=or32
1070b1297603Smrg		;;
1071a570218aSmrg	parisc-*)
1072a570218aSmrg		cpu=hppa
107320f5670eSmrg		basic_os=linux
1074b1297603Smrg		;;
1075a570218aSmrg	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1076a570218aSmrg		cpu=i586
1077b1297603Smrg		;;
1078a570218aSmrg	pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
1079a570218aSmrg		cpu=i686
1080b1297603Smrg		;;
1081a570218aSmrg	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1082a570218aSmrg		cpu=i686
1083b1297603Smrg		;;
1084a570218aSmrg	pentium4-*)
1085a570218aSmrg		cpu=i786
1086b1297603Smrg		;;
1087a570218aSmrg	pc98-*)
1088a570218aSmrg		cpu=i386
1089b1297603Smrg		;;
1090a570218aSmrg	ppc-* | ppcbe-*)
1091a570218aSmrg		cpu=powerpc
1092b1297603Smrg		;;
1093a570218aSmrg	ppcle-* | powerpclittle-*)
1094a570218aSmrg		cpu=powerpcle
1095b1297603Smrg		;;
1096a570218aSmrg	ppc64-*)
1097a570218aSmrg		cpu=powerpc64
109833734831Smrg		;;
1099a570218aSmrg	ppc64le-* | powerpc64little-*)
1100a570218aSmrg		cpu=powerpc64le
1101b1297603Smrg		;;
1102a570218aSmrg	sb1-*)
1103a570218aSmrg		cpu=mipsisa64sb1
1104b1297603Smrg		;;
1105a570218aSmrg	sb1el-*)
1106a570218aSmrg		cpu=mipsisa64sb1el
110733734831Smrg		;;
1108a570218aSmrg	sh5e[lb]-*)
1109a570218aSmrg		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1110b1297603Smrg		;;
1111a570218aSmrg	spur-*)
1112a570218aSmrg		cpu=spur
1113b1297603Smrg		;;
1114a570218aSmrg	strongarm-* | thumb-*)
1115a570218aSmrg		cpu=arm
1116b1297603Smrg		;;
1117a570218aSmrg	tx39-*)
1118a570218aSmrg		cpu=mipstx39
1119b1297603Smrg		;;
1120a570218aSmrg	tx39el-*)
1121a570218aSmrg		cpu=mipstx39el
1122b1297603Smrg		;;
1123a570218aSmrg	x64-*)
1124a570218aSmrg		cpu=x86_64
1125b1297603Smrg		;;
1126a570218aSmrg	xscale-* | xscalee[bl]-*)
1127a570218aSmrg		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1128b1297603Smrg		;;
112920f5670eSmrg	arm64-* | aarch64le-*)
113020f5670eSmrg		cpu=aarch64
113120f5670eSmrg		;;
1132a570218aSmrg
113320f5670eSmrg	# Recognize the canonical CPU Types that limit and/or modify the
1134a570218aSmrg	# company names they are paired with.
1135a570218aSmrg	cr16-*)
113620f5670eSmrg		basic_os=${basic_os:-elf}
1137b1297603Smrg		;;
1138a570218aSmrg	crisv32-* | etraxfs*-*)
1139a570218aSmrg		cpu=crisv32
1140a570218aSmrg		vendor=axis
1141b1297603Smrg		;;
1142a570218aSmrg	cris-* | etrax*-*)
1143a570218aSmrg		cpu=cris
1144a570218aSmrg		vendor=axis
1145b1297603Smrg		;;
1146a570218aSmrg	crx-*)
114720f5670eSmrg		basic_os=${basic_os:-elf}
1148b1297603Smrg		;;
1149a570218aSmrg	neo-tandem)
1150a570218aSmrg		cpu=neo
1151a570218aSmrg		vendor=tandem
1152b1297603Smrg		;;
1153a570218aSmrg	nse-tandem)
1154a570218aSmrg		cpu=nse
1155a570218aSmrg		vendor=tandem
1156b1297603Smrg		;;
1157a570218aSmrg	nsr-tandem)
1158a570218aSmrg		cpu=nsr
1159a570218aSmrg		vendor=tandem
1160b1297603Smrg		;;
1161a570218aSmrg	nsv-tandem)
1162a570218aSmrg		cpu=nsv
1163a570218aSmrg		vendor=tandem
1164b1297603Smrg		;;
1165a570218aSmrg	nsx-tandem)
1166a570218aSmrg		cpu=nsx
1167a570218aSmrg		vendor=tandem
1168b1297603Smrg		;;
116920f5670eSmrg	mipsallegrexel-sony)
117020f5670eSmrg		cpu=mipsallegrexel
117120f5670eSmrg		vendor=sony
1172b1297603Smrg		;;
1173a570218aSmrg	tile*-*)
117420f5670eSmrg		basic_os=${basic_os:-linux-gnu}
1175b1297603Smrg		;;
1176a570218aSmrg
1177b1297603Smrg	*)
117820f5670eSmrg		# Recognize the canonical CPU types that are allowed with any
1179a570218aSmrg		# company name.
1180a570218aSmrg		case $cpu in
1181a570218aSmrg			1750a | 580 \
1182a570218aSmrg			| a29k \
1183a570218aSmrg			| aarch64 | aarch64_be \
1184a570218aSmrg			| abacus \
1185a570218aSmrg			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
1186a570218aSmrg			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
1187a570218aSmrg			| alphapca5[67] | alpha64pca5[67] \
1188a570218aSmrg			| am33_2.0 \
118920f5670eSmrg			| amdgcn \
119020f5670eSmrg			| arc | arceb | arc32 | arc64 \
119120f5670eSmrg			| arm | arm[lb]e | arme[lb] | armv* \
1192a570218aSmrg			| avr | avr32 \
1193a570218aSmrg			| asmjs \
1194a570218aSmrg			| ba \
1195a570218aSmrg			| be32 | be64 \
119620f5670eSmrg			| bfin | bpf | bs2000 \
1197a570218aSmrg			| c[123]* | c30 | [cjt]90 | c4x \
1198a570218aSmrg			| c8051 | clipper | craynv | csky | cydra \
1199a570218aSmrg			| d10v | d30v | dlx | dsp16xx \
1200a570218aSmrg			| e2k | elxsi | epiphany \
1201a570218aSmrg			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
1202a570218aSmrg			| h8300 | h8500 \
1203a570218aSmrg			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
1204a570218aSmrg			| hexagon \
1205a570218aSmrg			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
1206a570218aSmrg			| ip2k | iq2000 \
1207a570218aSmrg			| k1om \
1208a570218aSmrg			| le32 | le64 \
1209a570218aSmrg			| lm32 \
121020f5670eSmrg			| loongarch32 | loongarch64 | loongarchx32 \
1211a570218aSmrg			| m32c | m32r | m32rle \
121220f5670eSmrg			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
121320f5670eSmrg			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
1214a570218aSmrg			| m88110 | m88k | maxq | mb | mcore | mep | metag \
1215a570218aSmrg			| microblaze | microblazeel \
1216a570218aSmrg			| mips | mipsbe | mipseb | mipsel | mipsle \
1217a570218aSmrg			| mips16 \
121820f5670eSmrg			| mips64 | mips64eb | mips64el \
1219a570218aSmrg			| mips64octeon | mips64octeonel \
1220a570218aSmrg			| mips64orion | mips64orionel \
1221a570218aSmrg			| mips64r5900 | mips64r5900el \
1222a570218aSmrg			| mips64vr | mips64vrel \
1223a570218aSmrg			| mips64vr4100 | mips64vr4100el \
1224a570218aSmrg			| mips64vr4300 | mips64vr4300el \
1225a570218aSmrg			| mips64vr5000 | mips64vr5000el \
1226a570218aSmrg			| mips64vr5900 | mips64vr5900el \
1227a570218aSmrg			| mipsisa32 | mipsisa32el \
1228a570218aSmrg			| mipsisa32r2 | mipsisa32r2el \
122920f5670eSmrg			| mipsisa32r3 | mipsisa32r3el \
123020f5670eSmrg			| mipsisa32r5 | mipsisa32r5el \
1231a570218aSmrg			| mipsisa32r6 | mipsisa32r6el \
1232a570218aSmrg			| mipsisa64 | mipsisa64el \
1233a570218aSmrg			| mipsisa64r2 | mipsisa64r2el \
123420f5670eSmrg			| mipsisa64r3 | mipsisa64r3el \
123520f5670eSmrg			| mipsisa64r5 | mipsisa64r5el \
1236a570218aSmrg			| mipsisa64r6 | mipsisa64r6el \
1237a570218aSmrg			| mipsisa64sb1 | mipsisa64sb1el \
1238a570218aSmrg			| mipsisa64sr71k | mipsisa64sr71kel \
1239a570218aSmrg			| mipsr5900 | mipsr5900el \
1240a570218aSmrg			| mipstx39 | mipstx39el \
1241a570218aSmrg			| mmix \
1242a570218aSmrg			| mn10200 | mn10300 \
1243a570218aSmrg			| moxie \
1244a570218aSmrg			| mt \
1245a570218aSmrg			| msp430 \
1246a570218aSmrg			| nds32 | nds32le | nds32be \
1247a570218aSmrg			| nfp \
1248a570218aSmrg			| nios | nios2 | nios2eb | nios2el \
124920f5670eSmrg			| none | np1 | ns16k | ns32k | nvptx \
1250a570218aSmrg			| open8 \
1251a570218aSmrg			| or1k* \
1252a570218aSmrg			| or32 \
1253a570218aSmrg			| orion \
125420f5670eSmrg			| picochip \
1255a570218aSmrg			| pdp10 | pdp11 | pj | pjl | pn | power \
1256a570218aSmrg			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
1257a570218aSmrg			| pru \
1258a570218aSmrg			| pyramid \
125920f5670eSmrg			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
1260a570218aSmrg			| rl78 | romp | rs6000 | rx \
126120f5670eSmrg			| s390 | s390x \
1262a570218aSmrg			| score \
126320f5670eSmrg			| sh | shl \
126420f5670eSmrg			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
1265a570218aSmrg			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
1266a570218aSmrg			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
1267a570218aSmrg			| sparclite \
1268a570218aSmrg			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
1269a570218aSmrg			| spu \
1270a570218aSmrg			| tahoe \
127120f5670eSmrg			| thumbv7* \
1272a570218aSmrg			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
1273a570218aSmrg			| tron \
1274a570218aSmrg			| ubicom32 \
127520f5670eSmrg			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
1276a570218aSmrg			| vax \
1277a570218aSmrg			| visium \
127820f5670eSmrg			| w65 \
127920f5670eSmrg			| wasm32 | wasm64 \
1280a570218aSmrg			| we32k \
1281a570218aSmrg			| x86 | x86_64 | xc16x | xgate | xps100 \
1282a570218aSmrg			| xstormy16 | xtensa* \
1283a570218aSmrg			| ymp \
1284a570218aSmrg			| z8k | z80)
1285a570218aSmrg				;;
1286a570218aSmrg
1287a570218aSmrg			*)
1288a570218aSmrg				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
1289a570218aSmrg				exit 1
1290a570218aSmrg				;;
1291a570218aSmrg		esac
1292b1297603Smrg		;;
1293b1297603Smrgesac
1294b1297603Smrg
1295b1297603Smrg# Here we canonicalize certain aliases for manufacturers.
1296a570218aSmrgcase $vendor in
1297a570218aSmrg	digital*)
1298a570218aSmrg		vendor=dec
1299b1297603Smrg		;;
1300a570218aSmrg	commodore*)
1301a570218aSmrg		vendor=cbm
1302b1297603Smrg		;;
1303b1297603Smrg	*)
1304b1297603Smrg		;;
1305b1297603Smrgesac
1306b1297603Smrg
1307b1297603Smrg# Decode manufacturer-specific aliases for certain operating systems.
1308b1297603Smrg
130920f5670eSmrgif test x$basic_os != x
1310b1297603Smrgthen
131120f5670eSmrg
131220f5670eSmrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
131320f5670eSmrg# set os.
131420f5670eSmrgcase $basic_os in
131520f5670eSmrg	gnu/linux*)
131620f5670eSmrg		kernel=linux
131720f5670eSmrg		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
131820f5670eSmrg		;;
131920f5670eSmrg	os2-emx)
132020f5670eSmrg		kernel=os2
132120f5670eSmrg		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
132220f5670eSmrg		;;
132320f5670eSmrg	nto-qnx*)
132420f5670eSmrg		kernel=nto
132520f5670eSmrg		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
132620f5670eSmrg		;;
132720f5670eSmrg	*-*)
132820f5670eSmrg		# shellcheck disable=SC2162
132920f5670eSmrg		saved_IFS=$IFS
133020f5670eSmrg		IFS="-" read kernel os <<EOF
133120f5670eSmrg$basic_os
133220f5670eSmrgEOF
133320f5670eSmrg		IFS=$saved_IFS
133420f5670eSmrg		;;
133520f5670eSmrg	# Default OS when just kernel was specified
133620f5670eSmrg	nto*)
133720f5670eSmrg		kernel=nto
133820f5670eSmrg		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
133920f5670eSmrg		;;
134020f5670eSmrg	linux*)
134120f5670eSmrg		kernel=linux
134220f5670eSmrg		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
134320f5670eSmrg		;;
134420f5670eSmrg	*)
134520f5670eSmrg		kernel=
134620f5670eSmrg		os=$basic_os
134720f5670eSmrg		;;
134820f5670eSmrgesac
134920f5670eSmrg
135020f5670eSmrg# Now, normalize the OS (knowing we just have one component, it's not a kernel,
135120f5670eSmrg# etc.)
1352b1297603Smrgcase $os in
1353a570218aSmrg	# First match some system type aliases that might get confused
1354a570218aSmrg	# with valid system types.
1355a570218aSmrg	# solaris* is a basic system type, with this one exception.
1356a570218aSmrg	auroraux)
1357a570218aSmrg		os=auroraux
135833734831Smrg		;;
1359a570218aSmrg	bluegene*)
1360a570218aSmrg		os=cnk
1361b1297603Smrg		;;
1362a570218aSmrg	solaris1 | solaris1.*)
136320f5670eSmrg		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1364b1297603Smrg		;;
1365a570218aSmrg	solaris)
1366a570218aSmrg		os=solaris2
1367b1297603Smrg		;;
1368a570218aSmrg	unixware*)
1369a570218aSmrg		os=sysv4.2uw
1370b1297603Smrg		;;
1371a570218aSmrg	# es1800 is here to avoid being matched by es* (a different OS)
1372a570218aSmrg	es1800*)
1373a570218aSmrg		os=ose
1374a570218aSmrg		;;
1375a570218aSmrg	# Some version numbers need modification
1376a570218aSmrg	chorusos*)
1377a570218aSmrg		os=chorusos
1378a570218aSmrg		;;
1379a570218aSmrg	isc)
1380a570218aSmrg		os=isc2.2
1381a570218aSmrg		;;
1382a570218aSmrg	sco6)
1383a570218aSmrg		os=sco5v6
1384a570218aSmrg		;;
1385a570218aSmrg	sco5)
1386a570218aSmrg		os=sco3.2v5
1387a570218aSmrg		;;
1388a570218aSmrg	sco4)
1389a570218aSmrg		os=sco3.2v4
1390a570218aSmrg		;;
1391a570218aSmrg	sco3.2.[4-9]*)
139220f5670eSmrg		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
1393a570218aSmrg		;;
139420f5670eSmrg	sco*v* | scout)
1395a570218aSmrg		# Don't match below
1396a570218aSmrg		;;
1397a570218aSmrg	sco*)
1398a570218aSmrg		os=sco3.2v2
1399a570218aSmrg		;;
1400a570218aSmrg	psos*)
1401a570218aSmrg		os=psos
1402a570218aSmrg		;;
1403a570218aSmrg	qnx*)
140420f5670eSmrg		os=qnx
1405b1297603Smrg		;;
1406a570218aSmrg	hiux*)
1407a570218aSmrg		os=hiuxwe2
1408b1297603Smrg		;;
1409a570218aSmrg	lynx*178)
1410a570218aSmrg		os=lynxos178
1411a570218aSmrg		;;
1412a570218aSmrg	lynx*5)
1413a570218aSmrg		os=lynxos5
1414b1297603Smrg		;;
141520f5670eSmrg	lynxos*)
141620f5670eSmrg		# don't get caught up in next wildcard
141720f5670eSmrg		;;
1418a570218aSmrg	lynx*)
1419a570218aSmrg		os=lynxos
1420b1297603Smrg		;;
142120f5670eSmrg	mac[0-9]*)
1422a570218aSmrg		os=`echo "$os" | sed -e 's|mac|macos|'`
1423b1297603Smrg		;;
1424a570218aSmrg	opened*)
1425a570218aSmrg		os=openedition
1426b1297603Smrg		;;
1427a570218aSmrg	os400*)
1428a570218aSmrg		os=os400
1429b1297603Smrg		;;
1430a570218aSmrg	sunos5*)
1431a570218aSmrg		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1432b1297603Smrg		;;
1433a570218aSmrg	sunos6*)
1434a570218aSmrg		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1435b1297603Smrg		;;
1436a570218aSmrg	wince*)
1437a570218aSmrg		os=wince
1438b1297603Smrg		;;
1439a570218aSmrg	utek*)
1440a570218aSmrg		os=bsd
1441b1297603Smrg		;;
1442a570218aSmrg	dynix*)
1443a570218aSmrg		os=bsd
1444b1297603Smrg		;;
1445a570218aSmrg	acis*)
1446a570218aSmrg		os=aos
1447b1297603Smrg		;;
1448a570218aSmrg	atheos*)
1449a570218aSmrg		os=atheos
1450b1297603Smrg		;;
1451a570218aSmrg	syllable*)
1452a570218aSmrg		os=syllable
1453b1297603Smrg		;;
1454a570218aSmrg	386bsd)
1455a570218aSmrg		os=bsd
1456b1297603Smrg		;;
1457a570218aSmrg	ctix* | uts*)
1458a570218aSmrg		os=sysv
1459b1297603Smrg		;;
1460a570218aSmrg	nova*)
1461a570218aSmrg		os=rtmk-nova
1462b1297603Smrg		;;
1463a570218aSmrg	ns2)
1464a570218aSmrg		os=nextstep2
1465a570218aSmrg		;;
1466b1297603Smrg	# Preserve the version number of sinix5.
1467a570218aSmrg	sinix5.*)
146820f5670eSmrg		os=`echo "$os" | sed -e 's|sinix|sysv|'`
1469b1297603Smrg		;;
1470a570218aSmrg	sinix*)
1471a570218aSmrg		os=sysv4
1472b1297603Smrg		;;
1473a570218aSmrg	tpf*)
1474a570218aSmrg		os=tpf
1475b1297603Smrg		;;
1476a570218aSmrg	triton*)
1477a570218aSmrg		os=sysv3
1478b1297603Smrg		;;
1479a570218aSmrg	oss*)
1480a570218aSmrg		os=sysv3
1481b1297603Smrg		;;
1482a570218aSmrg	svr4*)
1483a570218aSmrg		os=sysv4
1484b1297603Smrg		;;
1485a570218aSmrg	svr3)
1486a570218aSmrg		os=sysv3
1487b1297603Smrg		;;
1488a570218aSmrg	sysvr4)
1489a570218aSmrg		os=sysv4
1490b1297603Smrg		;;
1491a570218aSmrg	ose*)
1492a570218aSmrg		os=ose
1493b1297603Smrg		;;
1494a570218aSmrg	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1495a570218aSmrg		os=mint
1496b1297603Smrg		;;
1497a570218aSmrg	dicos*)
1498a570218aSmrg		os=dicos
1499b1297603Smrg		;;
1500a570218aSmrg	pikeos*)
1501a570218aSmrg		# Until real need of OS specific support for
1502a570218aSmrg		# particular features comes up, bare metal
1503a570218aSmrg		# configurations are quite functional.
1504a570218aSmrg		case $cpu in
1505a570218aSmrg		    arm*)
1506a570218aSmrg			os=eabi
1507a570218aSmrg			;;
1508a570218aSmrg		    *)
1509a570218aSmrg			os=elf
1510a570218aSmrg			;;
1511a570218aSmrg		esac
1512b1297603Smrg		;;
1513b1297603Smrg	*)
151420f5670eSmrg		# No normalization, but not necessarily accepted, that comes below.
1515b1297603Smrg		;;
1516b1297603Smrgesac
151720f5670eSmrg
1518b1297603Smrgelse
1519b1297603Smrg
1520b1297603Smrg# Here we handle the default operating systems that come with various machines.
1521b1297603Smrg# The value should be what the vendor currently ships out the door with their
1522b1297603Smrg# machine or put another way, the most popular os provided with the machine.
1523b1297603Smrg
1524b1297603Smrg# Note that if you're going to try to match "-MANUFACTURER" here (say,
1525b1297603Smrg# "-sun"), then you have to tell the case statement up towards the top
1526b1297603Smrg# that MANUFACTURER isn't an operating system.  Otherwise, code above
1527b1297603Smrg# will signal an error saying that MANUFACTURER isn't an operating
1528b1297603Smrg# system, and we'll never get to this point.
1529b1297603Smrg
153020f5670eSmrgkernel=
1531a570218aSmrgcase $cpu-$vendor in
153233734831Smrg	score-*)
1533a570218aSmrg		os=elf
15345b944e2aSmrg		;;
153533734831Smrg	spu-*)
1536a570218aSmrg		os=elf
15375b944e2aSmrg		;;
1538b1297603Smrg	*-acorn)
1539a570218aSmrg		os=riscix1.2
1540b1297603Smrg		;;
1541b1297603Smrg	arm*-rebel)
154220f5670eSmrg		kernel=linux
154320f5670eSmrg		os=gnu
1544b1297603Smrg		;;
1545b1297603Smrg	arm*-semi)
1546a570218aSmrg		os=aout
1547b1297603Smrg		;;
154833734831Smrg	c4x-* | tic4x-*)
1549a570218aSmrg		os=coff
1550a570218aSmrg		;;
1551a570218aSmrg	c8051-*)
1552a570218aSmrg		os=elf
1553a570218aSmrg		;;
1554a570218aSmrg	clipper-intergraph)
1555a570218aSmrg		os=clix
155633734831Smrg		;;
155733734831Smrg	hexagon-*)
1558a570218aSmrg		os=elf
155933734831Smrg		;;
156033734831Smrg	tic54x-*)
1561a570218aSmrg		os=coff
156233734831Smrg		;;
156333734831Smrg	tic55x-*)
1564a570218aSmrg		os=coff
156533734831Smrg		;;
156633734831Smrg	tic6x-*)
1567a570218aSmrg		os=coff
15685b944e2aSmrg		;;
1569b1297603Smrg	# This must come before the *-dec entry.
1570b1297603Smrg	pdp10-*)
1571a570218aSmrg		os=tops20
1572b1297603Smrg		;;
1573b1297603Smrg	pdp11-*)
1574a570218aSmrg		os=none
1575b1297603Smrg		;;
1576b1297603Smrg	*-dec | vax-*)
1577a570218aSmrg		os=ultrix4.2
1578b1297603Smrg		;;
1579b1297603Smrg	m68*-apollo)
1580a570218aSmrg		os=domain
1581b1297603Smrg		;;
1582b1297603Smrg	i386-sun)
1583a570218aSmrg		os=sunos4.0.2
1584b1297603Smrg		;;
1585b1297603Smrg	m68000-sun)
1586a570218aSmrg		os=sunos3
1587b1297603Smrg		;;
1588b1297603Smrg	m68*-cisco)
1589a570218aSmrg		os=aout
1590b1297603Smrg		;;
159133734831Smrg	mep-*)
1592a570218aSmrg		os=elf
159333734831Smrg		;;
1594b1297603Smrg	mips*-cisco)
1595a570218aSmrg		os=elf
1596b1297603Smrg		;;
1597b1297603Smrg	mips*-*)
1598a570218aSmrg		os=elf
159933734831Smrg		;;
1600b1297603Smrg	or32-*)
1601a570218aSmrg		os=coff
1602b1297603Smrg		;;
1603b1297603Smrg	*-tti)	# must be before sparc entry or we get the wrong os.
1604a570218aSmrg		os=sysv3
1605b1297603Smrg		;;
1606b1297603Smrg	sparc-* | *-sun)
1607a570218aSmrg		os=sunos4.1.1
1608b1297603Smrg		;;
1609a570218aSmrg	pru-*)
1610a570218aSmrg		os=elf
1611b1297603Smrg		;;
1612a570218aSmrg	*-be)
1613a570218aSmrg		os=beos
1614b1297603Smrg		;;
1615b1297603Smrg	*-ibm)
1616a570218aSmrg		os=aix
1617b1297603Smrg		;;
161833734831Smrg	*-knuth)
1619a570218aSmrg		os=mmixware
1620b1297603Smrg		;;
1621b1297603Smrg	*-wec)
1622a570218aSmrg		os=proelf
1623b1297603Smrg		;;
1624b1297603Smrg	*-winbond)
1625a570218aSmrg		os=proelf
1626b1297603Smrg		;;
1627b1297603Smrg	*-oki)
1628a570218aSmrg		os=proelf
1629b1297603Smrg		;;
1630b1297603Smrg	*-hp)
1631a570218aSmrg		os=hpux
1632b1297603Smrg		;;
1633b1297603Smrg	*-hitachi)
1634a570218aSmrg		os=hiux
1635b1297603Smrg		;;
1636b1297603Smrg	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1637a570218aSmrg		os=sysv
1638b1297603Smrg		;;
1639b1297603Smrg	*-cbm)
1640a570218aSmrg		os=amigaos
1641b1297603Smrg		;;
1642b1297603Smrg	*-dg)
1643a570218aSmrg		os=dgux
1644b1297603Smrg		;;
1645b1297603Smrg	*-dolphin)
1646a570218aSmrg		os=sysv3
1647b1297603Smrg		;;
1648b1297603Smrg	m68k-ccur)
1649a570218aSmrg		os=rtu
1650b1297603Smrg		;;
1651b1297603Smrg	m88k-omron*)
1652a570218aSmrg		os=luna
1653b1297603Smrg		;;
1654a570218aSmrg	*-next)
1655a570218aSmrg		os=nextstep
1656b1297603Smrg		;;
1657b1297603Smrg	*-sequent)
1658a570218aSmrg		os=ptx
1659b1297603Smrg		;;
1660b1297603Smrg	*-crds)
1661a570218aSmrg		os=unos
1662b1297603Smrg		;;
1663b1297603Smrg	*-ns)
1664a570218aSmrg		os=genix
1665b1297603Smrg		;;
1666b1297603Smrg	i370-*)
1667a570218aSmrg		os=mvs
1668b1297603Smrg		;;
1669b1297603Smrg	*-gould)
1670a570218aSmrg		os=sysv
1671b1297603Smrg		;;
1672b1297603Smrg	*-highlevel)
1673a570218aSmrg		os=bsd
1674b1297603Smrg		;;
1675b1297603Smrg	*-encore)
1676a570218aSmrg		os=bsd
1677b1297603Smrg		;;
1678b1297603Smrg	*-sgi)
1679a570218aSmrg		os=irix
1680b1297603Smrg		;;
1681b1297603Smrg	*-siemens)
1682a570218aSmrg		os=sysv4
1683b1297603Smrg		;;
1684b1297603Smrg	*-masscomp)
1685a570218aSmrg		os=rtu
1686b1297603Smrg		;;
1687b1297603Smrg	f30[01]-fujitsu | f700-fujitsu)
1688a570218aSmrg		os=uxpv
1689b1297603Smrg		;;
1690b1297603Smrg	*-rom68k)
1691a570218aSmrg		os=coff
1692b1297603Smrg		;;
1693b1297603Smrg	*-*bug)
1694a570218aSmrg		os=coff
1695b1297603Smrg		;;
1696b1297603Smrg	*-apple)
1697a570218aSmrg		os=macos
1698b1297603Smrg		;;
1699b1297603Smrg	*-atari*)
1700a570218aSmrg		os=mint
1701a570218aSmrg		;;
1702a570218aSmrg	*-wrs)
1703a570218aSmrg		os=vxworks
1704b1297603Smrg		;;
1705b1297603Smrg	*)
1706a570218aSmrg		os=none
1707b1297603Smrg		;;
1708b1297603Smrgesac
170920f5670eSmrg
1710b1297603Smrgfi
1711b1297603Smrg
171220f5670eSmrg# Now, validate our (potentially fixed-up) OS.
171320f5670eSmrgcase $os in
171420f5670eSmrg	# Sometimes we do "kernel-libc", so those need to count as OSes.
171520f5670eSmrg	musl* | newlib* | relibc* | uclibc*)
171620f5670eSmrg		;;
171720f5670eSmrg	# Likewise for "kernel-abi"
171820f5670eSmrg	eabi* | gnueabi*)
171920f5670eSmrg		;;
172020f5670eSmrg	# VxWorks passes extra cpu info in the 4th filed.
172120f5670eSmrg	simlinux | simwindows | spe)
172220f5670eSmrg		;;
172320f5670eSmrg	# Now accept the basic system types.
172420f5670eSmrg	# The portable systems comes first.
172520f5670eSmrg	# Each alternative MUST end in a * to match a version number.
172620f5670eSmrg	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
172720f5670eSmrg	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
172820f5670eSmrg	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
172920f5670eSmrg	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
173020f5670eSmrg	     | hiux* | abug | nacl* | netware* | windows* \
173120f5670eSmrg	     | os9* | macos* | osx* | ios* \
173220f5670eSmrg	     | mpw* | magic* | mmixware* | mon960* | lnews* \
173320f5670eSmrg	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
173420f5670eSmrg	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
173520f5670eSmrg	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
173620f5670eSmrg	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
173720f5670eSmrg	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
173820f5670eSmrg	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
173920f5670eSmrg	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
174020f5670eSmrg	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
174120f5670eSmrg	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
174220f5670eSmrg	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
174320f5670eSmrg	     | chorusrdb* | cegcc* | glidix* | serenity* \
174420f5670eSmrg	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
174520f5670eSmrg	     | midipix* | mingw32* | mingw64* | mint* \
174620f5670eSmrg	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
174720f5670eSmrg	     | interix* | uwin* | mks* | rhapsody* | darwin* \
174820f5670eSmrg	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
174920f5670eSmrg	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
175020f5670eSmrg	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
175120f5670eSmrg	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
175220f5670eSmrg	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
175320f5670eSmrg	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
175420f5670eSmrg	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
175520f5670eSmrg	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
175620f5670eSmrg	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
175720f5670eSmrg	     | fiwix* )
175820f5670eSmrg		;;
175920f5670eSmrg	# This one is extra strict with allowed versions
176020f5670eSmrg	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
176120f5670eSmrg		# Don't forget version if it is 3.2v4 or newer.
176220f5670eSmrg		;;
176320f5670eSmrg	none)
176420f5670eSmrg		;;
176520f5670eSmrg	*)
176620f5670eSmrg		echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
176720f5670eSmrg		exit 1
176820f5670eSmrg		;;
176920f5670eSmrgesac
177020f5670eSmrg
177120f5670eSmrg# As a final step for OS-related things, validate the OS-kernel combination
177220f5670eSmrg# (given a valid OS), if there is a kernel.
177320f5670eSmrgcase $kernel-$os in
177420f5670eSmrg	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
177520f5670eSmrg		   | linux-musl* | linux-relibc* | linux-uclibc* )
177620f5670eSmrg		;;
177720f5670eSmrg	uclinux-uclibc* )
177820f5670eSmrg		;;
177920f5670eSmrg	-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
178020f5670eSmrg		# These are just libc implementations, not actual OSes, and thus
178120f5670eSmrg		# require a kernel.
178220f5670eSmrg		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
178320f5670eSmrg		exit 1
178420f5670eSmrg		;;
178520f5670eSmrg	kfreebsd*-gnu* | kopensolaris*-gnu*)
178620f5670eSmrg		;;
178720f5670eSmrg	vxworks-simlinux | vxworks-simwindows | vxworks-spe)
178820f5670eSmrg		;;
178920f5670eSmrg	nto-qnx*)
179020f5670eSmrg		;;
179120f5670eSmrg	os2-emx)
179220f5670eSmrg		;;
179320f5670eSmrg	*-eabi* | *-gnueabi*)
179420f5670eSmrg		;;
179520f5670eSmrg	-*)
179620f5670eSmrg		# Blank kernel with real OS is always fine.
179720f5670eSmrg		;;
179820f5670eSmrg	*-*)
179920f5670eSmrg		echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
180020f5670eSmrg		exit 1
180120f5670eSmrg		;;
180220f5670eSmrgesac
180320f5670eSmrg
1804b1297603Smrg# Here we handle the case where we know the os, and the CPU type, but not the
1805b1297603Smrg# manufacturer.  We pick the logical manufacturer.
1806a570218aSmrgcase $vendor in
1807a570218aSmrg	unknown)
180820f5670eSmrg		case $cpu-$os in
180920f5670eSmrg			*-riscix*)
1810b1297603Smrg				vendor=acorn
1811b1297603Smrg				;;
181220f5670eSmrg			*-sunos*)
1813b1297603Smrg				vendor=sun
1814b1297603Smrg				;;
181520f5670eSmrg			*-cnk* | *-aix*)
1816b1297603Smrg				vendor=ibm
1817b1297603Smrg				;;
181820f5670eSmrg			*-beos*)
1819b1297603Smrg				vendor=be
1820b1297603Smrg				;;
182120f5670eSmrg			*-hpux*)
1822b1297603Smrg				vendor=hp
1823b1297603Smrg				;;
182420f5670eSmrg			*-mpeix*)
1825b1297603Smrg				vendor=hp
1826b1297603Smrg				;;
182720f5670eSmrg			*-hiux*)
1828b1297603Smrg				vendor=hitachi
1829b1297603Smrg				;;
183020f5670eSmrg			*-unos*)
1831b1297603Smrg				vendor=crds
1832b1297603Smrg				;;
183320f5670eSmrg			*-dgux*)
1834b1297603Smrg				vendor=dg
1835b1297603Smrg				;;
183620f5670eSmrg			*-luna*)
1837b1297603Smrg				vendor=omron
1838b1297603Smrg				;;
183920f5670eSmrg			*-genix*)
1840b1297603Smrg				vendor=ns
1841b1297603Smrg				;;
184220f5670eSmrg			*-clix*)
1843a570218aSmrg				vendor=intergraph
1844a570218aSmrg				;;
184520f5670eSmrg			*-mvs* | *-opened*)
184620f5670eSmrg				vendor=ibm
184720f5670eSmrg				;;
184820f5670eSmrg			*-os400*)
1849b1297603Smrg				vendor=ibm
1850b1297603Smrg				;;
185120f5670eSmrg			s390-* | s390x-*)
1852b1297603Smrg				vendor=ibm
1853b1297603Smrg				;;
185420f5670eSmrg			*-ptx*)
1855b1297603Smrg				vendor=sequent
1856b1297603Smrg				;;
185720f5670eSmrg			*-tpf*)
1858b1297603Smrg				vendor=ibm
1859b1297603Smrg				;;
186020f5670eSmrg			*-vxsim* | *-vxworks* | *-windiss*)
1861b1297603Smrg				vendor=wrs
1862b1297603Smrg				;;
186320f5670eSmrg			*-aux*)
1864b1297603Smrg				vendor=apple
1865b1297603Smrg				;;
186620f5670eSmrg			*-hms*)
1867b1297603Smrg				vendor=hitachi
1868b1297603Smrg				;;
186920f5670eSmrg			*-mpw* | *-macos*)
1870b1297603Smrg				vendor=apple
1871b1297603Smrg				;;
187220f5670eSmrg			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
1873b1297603Smrg				vendor=atari
1874b1297603Smrg				;;
187520f5670eSmrg			*-vos*)
1876b1297603Smrg				vendor=stratus
1877b1297603Smrg				;;
1878b1297603Smrg		esac
1879b1297603Smrg		;;
1880b1297603Smrgesac
1881b1297603Smrg
188220f5670eSmrgecho "$cpu-$vendor-${kernel:+$kernel-}$os"
1883b1297603Smrgexit
1884b1297603Smrg
1885b1297603Smrg# Local variables:
1886a570218aSmrg# eval: (add-hook 'before-save-hook 'time-stamp)
1887b1297603Smrg# time-stamp-start: "timestamp='"
1888b1297603Smrg# time-stamp-format: "%:y-%02m-%02d"
1889b1297603Smrg# time-stamp-end: "'"
1890b1297603Smrg# End:
1891