19f606849Smrg#! /bin/sh
29f606849Smrg# Configuration validation subroutine script.
3dc088bc7Smrg#   Copyright 1992-2024 Free Software Foundation, Inc.
49f606849Smrg
5949d0342Smrg# shellcheck disable=SC2006,SC2268 # see below for rationale
6949d0342Smrg
7dc088bc7Smrgtimestamp='2024-01-01'
89f606849Smrg
9cdbfa18aSmrg# This file is free software; you can redistribute it and/or modify it
10cdbfa18aSmrg# under the terms of the GNU General Public License as published by
11dc088bc7Smrg# the Free Software Foundation, either version 3 of the License, or
129f606849Smrg# (at your option) any later version.
139f606849Smrg#
14cdbfa18aSmrg# This program is distributed in the hope that it will be useful, but
15cdbfa18aSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of
16cdbfa18aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17cdbfa18aSmrg# General Public License for more details.
189f606849Smrg#
199f606849Smrg# You should have received a copy of the GNU General Public License
20949d0342Smrg# along with this program; if not, see <https://www.gnu.org/licenses/>.
219f606849Smrg#
229f606849Smrg# As a special exception to the GNU General Public License, if you
239f606849Smrg# distribute this file as part of a program that contains a
249f606849Smrg# configuration script generated by Autoconf, you may include it under
25cdbfa18aSmrg# the same distribution terms that you use for the rest of that
26cdbfa18aSmrg# program.  This Exception is an additional permission under section 7
27cdbfa18aSmrg# of the GNU General Public License, version 3 ("GPLv3").
289f606849Smrg
299f606849Smrg
30949d0342Smrg# Please send patches to <config-patches@gnu.org>.
319f606849Smrg#
329f606849Smrg# Configuration subroutine to validate and canonicalize a configuration type.
339f606849Smrg# Supply the specified configuration type as an argument.
349f606849Smrg# If it is invalid, we print an error message on stderr and exit with code 1.
359f606849Smrg# Otherwise, we print the canonical config type on stdout and succeed.
369f606849Smrg
37d5c3dbf1Smrg# You can get the latest version of this script from:
38949d0342Smrg# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
39d5c3dbf1Smrg
409f606849Smrg# This file is supposed to be the same for all GNU packages
419f606849Smrg# and recognize all the CPU types, system types and aliases
429f606849Smrg# that are meaningful with *any* GNU software.
439f606849Smrg# Each package is responsible for reporting which valid configurations
449f606849Smrg# it does not support.  The user should be able to distinguish
459f606849Smrg# a failure to support a valid configuration from a meaningless
469f606849Smrg# configuration.
479f606849Smrg
489f606849Smrg# The goal of this file is to map all the various variations of a given
499f606849Smrg# machine specification into a single specification in the form:
509f606849Smrg#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
519f606849Smrg# or in some cases, the newer four-part form:
529f606849Smrg#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
539f606849Smrg# It is wrong to echo any other type of specification.
549f606849Smrg
55949d0342Smrg# The "shellcheck disable" line above the timestamp inhibits complaints
56949d0342Smrg# about features and limitations of the classic Bourne shell that were
57949d0342Smrg# superseded or lifted in POSIX.  However, this script identifies a wide
58949d0342Smrg# variety of pre-POSIX systems that do not have POSIX shells at all, and
59949d0342Smrg# even some reasonably current systems (Solaris 10 as case-in-point) still
60949d0342Smrg# have a pre-POSIX /bin/sh.
61949d0342Smrg
629f606849Smrgme=`echo "$0" | sed -e 's,.*/,,'`
639f606849Smrg
649f606849Smrgusage="\
65949d0342SmrgUsage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
669f606849Smrg
679f606849SmrgCanonicalize a configuration name.
689f606849Smrg
69949d0342SmrgOptions:
709f606849Smrg  -h, --help         print this help, then exit
719f606849Smrg  -t, --time-stamp   print date of last modification, then exit
729f606849Smrg  -v, --version      print version number, then exit
739f606849Smrg
749f606849SmrgReport bugs and patches to <config-patches@gnu.org>."
759f606849Smrg
769f606849Smrgversion="\
779f606849SmrgGNU config.sub ($timestamp)
789f606849Smrg
79dc088bc7SmrgCopyright 1992-2024 Free Software Foundation, Inc.
809f606849Smrg
819f606849SmrgThis is free software; see the source for copying conditions.  There is NO
829f606849Smrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
839f606849Smrg
849f606849Smrghelp="
85dc088bc7SmrgTry '$me --help' for more information."
869f606849Smrg
879f606849Smrg# Parse command line
889f606849Smrgwhile test $# -gt 0 ; do
899f606849Smrg  case $1 in
909f606849Smrg    --time-stamp | --time* | -t )
919f606849Smrg       echo "$timestamp" ; exit ;;
929f606849Smrg    --version | -v )
939f606849Smrg       echo "$version" ; exit ;;
949f606849Smrg    --help | --h* | -h )
959f606849Smrg       echo "$usage"; exit ;;
969f606849Smrg    -- )     # Stop option processing
979f606849Smrg       shift; break ;;
989f606849Smrg    - )	# Use stdin as input.
999f606849Smrg       break ;;
1009f606849Smrg    -* )
101949d0342Smrg       echo "$me: invalid option $1$help" >&2
1029f606849Smrg       exit 1 ;;
1039f606849Smrg
1049f606849Smrg    *local*)
1059f606849Smrg       # First pass through any local machine types.
106949d0342Smrg       echo "$1"
1079f606849Smrg       exit ;;
1089f606849Smrg
1099f606849Smrg    * )
1109f606849Smrg       break ;;
1119f606849Smrg  esac
1129f606849Smrgdone
1139f606849Smrg
1149f606849Smrgcase $# in
1159f606849Smrg 0) echo "$me: missing argument$help" >&2
1169f606849Smrg    exit 1;;
1179f606849Smrg 1) ;;
1189f606849Smrg *) echo "$me: too many arguments$help" >&2
1199f606849Smrg    exit 1;;
1209f606849Smrgesac
1219f606849Smrg
122949d0342Smrg# Split fields of configuration type
123949d0342Smrg# shellcheck disable=SC2162
124949d0342Smrgsaved_IFS=$IFS
125949d0342SmrgIFS="-" read field1 field2 field3 field4 <<EOF
126949d0342Smrg$1
127949d0342SmrgEOF
128949d0342SmrgIFS=$saved_IFS
1299f606849Smrg
130949d0342Smrg# Separate into logical components for further validation
131949d0342Smrgcase $1 in
132949d0342Smrg	*-*-*-*-*)
133dc088bc7Smrg		echo "Invalid configuration '$1': more than four components" >&2
134949d0342Smrg		exit 1
1359f606849Smrg		;;
136949d0342Smrg	*-*-*-*)
137949d0342Smrg		basic_machine=$field1-$field2
138949d0342Smrg		basic_os=$field3-$field4
1399f606849Smrg		;;
140949d0342Smrg	*-*-*)
141949d0342Smrg		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
142949d0342Smrg		# parts
143949d0342Smrg		maybe_os=$field2-$field3
144949d0342Smrg		case $maybe_os in
145949d0342Smrg			nto-qnx* | linux-* | uclinux-uclibc* \
146949d0342Smrg			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
147949d0342Smrg			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
148dc088bc7Smrg			| storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \
149dc088bc7Smrg			| windows-* )
150949d0342Smrg				basic_machine=$field1
151949d0342Smrg				basic_os=$maybe_os
152949d0342Smrg				;;
153949d0342Smrg			android-linux)
154949d0342Smrg				basic_machine=$field1-unknown
155949d0342Smrg				basic_os=linux-android
156949d0342Smrg				;;
157949d0342Smrg			*)
158949d0342Smrg				basic_machine=$field1-$field2
159949d0342Smrg				basic_os=$field3
160949d0342Smrg				;;
161949d0342Smrg		esac
1629f606849Smrg		;;
163949d0342Smrg	*-*)
164949d0342Smrg		# A lone config we happen to match not fitting any pattern
165949d0342Smrg		case $field1-$field2 in
166949d0342Smrg			decstation-3100)
167949d0342Smrg				basic_machine=mips-dec
168949d0342Smrg				basic_os=
169949d0342Smrg				;;
170949d0342Smrg			*-*)
171949d0342Smrg				# Second component is usually, but not always the OS
172949d0342Smrg				case $field2 in
173949d0342Smrg					# Prevent following clause from handling this valid os
174949d0342Smrg					sun*os*)
175949d0342Smrg						basic_machine=$field1
176949d0342Smrg						basic_os=$field2
177949d0342Smrg						;;
178949d0342Smrg					zephyr*)
179949d0342Smrg						basic_machine=$field1-unknown
180949d0342Smrg						basic_os=$field2
181949d0342Smrg						;;
182949d0342Smrg					# Manufacturers
183949d0342Smrg					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
184949d0342Smrg					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
185949d0342Smrg					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
186949d0342Smrg					| convergent* | ncr* | news | 32* | 3600* | 3100* \
187949d0342Smrg					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
188949d0342Smrg					| ultra | tti* | harris | dolphin | highlevel | gould \
189949d0342Smrg					| cbm | ns | masscomp | apple | axis | knuth | cray \
190949d0342Smrg					| microblaze* | sim | cisco \
191949d0342Smrg					| oki | wec | wrs | winbond)
192949d0342Smrg						basic_machine=$field1-$field2
193949d0342Smrg						basic_os=
194949d0342Smrg						;;
195949d0342Smrg					*)
196949d0342Smrg						basic_machine=$field1
197949d0342Smrg						basic_os=$field2
198949d0342Smrg						;;
199949d0342Smrg				esac
200949d0342Smrg			;;
201949d0342Smrg		esac
2029f606849Smrg		;;
203949d0342Smrg	*)
204949d0342Smrg		# Convert single-component short-hands not valid as part of
205949d0342Smrg		# multi-component configurations.
206949d0342Smrg		case $field1 in
207949d0342Smrg			386bsd)
208949d0342Smrg				basic_machine=i386-pc
209949d0342Smrg				basic_os=bsd
210949d0342Smrg				;;
211949d0342Smrg			a29khif)
212949d0342Smrg				basic_machine=a29k-amd
213949d0342Smrg				basic_os=udi
214949d0342Smrg				;;
215949d0342Smrg			adobe68k)
216949d0342Smrg				basic_machine=m68010-adobe
217949d0342Smrg				basic_os=scout
218949d0342Smrg				;;
219949d0342Smrg			alliant)
220949d0342Smrg				basic_machine=fx80-alliant
221949d0342Smrg				basic_os=
222949d0342Smrg				;;
223949d0342Smrg			altos | altos3068)
224949d0342Smrg				basic_machine=m68k-altos
225949d0342Smrg				basic_os=
226949d0342Smrg				;;
227949d0342Smrg			am29k)
228949d0342Smrg				basic_machine=a29k-none
229949d0342Smrg				basic_os=bsd
230949d0342Smrg				;;
231949d0342Smrg			amdahl)
232949d0342Smrg				basic_machine=580-amdahl
233949d0342Smrg				basic_os=sysv
234949d0342Smrg				;;
235949d0342Smrg			amiga)
236949d0342Smrg				basic_machine=m68k-unknown
237949d0342Smrg				basic_os=
238949d0342Smrg				;;
239949d0342Smrg			amigaos | amigados)
240949d0342Smrg				basic_machine=m68k-unknown
241949d0342Smrg				basic_os=amigaos
242949d0342Smrg				;;
243949d0342Smrg			amigaunix | amix)
244949d0342Smrg				basic_machine=m68k-unknown
245949d0342Smrg				basic_os=sysv4
246949d0342Smrg				;;
247949d0342Smrg			apollo68)
248949d0342Smrg				basic_machine=m68k-apollo
249949d0342Smrg				basic_os=sysv
250949d0342Smrg				;;
251949d0342Smrg			apollo68bsd)
252949d0342Smrg				basic_machine=m68k-apollo
253949d0342Smrg				basic_os=bsd
254949d0342Smrg				;;
255949d0342Smrg			aros)
256949d0342Smrg				basic_machine=i386-pc
257949d0342Smrg				basic_os=aros
258949d0342Smrg				;;
259949d0342Smrg			aux)
260949d0342Smrg				basic_machine=m68k-apple
261949d0342Smrg				basic_os=aux
262949d0342Smrg				;;
263949d0342Smrg			balance)
264949d0342Smrg				basic_machine=ns32k-sequent
265949d0342Smrg				basic_os=dynix
266949d0342Smrg				;;
267949d0342Smrg			blackfin)
268949d0342Smrg				basic_machine=bfin-unknown
269949d0342Smrg				basic_os=linux
270949d0342Smrg				;;
271949d0342Smrg			cegcc)
272949d0342Smrg				basic_machine=arm-unknown
273949d0342Smrg				basic_os=cegcc
274949d0342Smrg				;;
275949d0342Smrg			convex-c1)
276949d0342Smrg				basic_machine=c1-convex
277949d0342Smrg				basic_os=bsd
278949d0342Smrg				;;
279949d0342Smrg			convex-c2)
280949d0342Smrg				basic_machine=c2-convex
281949d0342Smrg				basic_os=bsd
282949d0342Smrg				;;
283949d0342Smrg			convex-c32)
284949d0342Smrg				basic_machine=c32-convex
285949d0342Smrg				basic_os=bsd
286949d0342Smrg				;;
287949d0342Smrg			convex-c34)
288949d0342Smrg				basic_machine=c34-convex
289949d0342Smrg				basic_os=bsd
290949d0342Smrg				;;
291949d0342Smrg			convex-c38)
292949d0342Smrg				basic_machine=c38-convex
293949d0342Smrg				basic_os=bsd
294949d0342Smrg				;;
295949d0342Smrg			cray)
296949d0342Smrg				basic_machine=j90-cray
297949d0342Smrg				basic_os=unicos
298949d0342Smrg				;;
299949d0342Smrg			crds | unos)
300949d0342Smrg				basic_machine=m68k-crds
301949d0342Smrg				basic_os=
302949d0342Smrg				;;
303949d0342Smrg			da30)
304949d0342Smrg				basic_machine=m68k-da30
305949d0342Smrg				basic_os=
306949d0342Smrg				;;
307949d0342Smrg			decstation | pmax | pmin | dec3100 | decstatn)
308949d0342Smrg				basic_machine=mips-dec
309949d0342Smrg				basic_os=
310949d0342Smrg				;;
311949d0342Smrg			delta88)
312949d0342Smrg				basic_machine=m88k-motorola
313949d0342Smrg				basic_os=sysv3
314949d0342Smrg				;;
315949d0342Smrg			dicos)
316949d0342Smrg				basic_machine=i686-pc
317949d0342Smrg				basic_os=dicos
318949d0342Smrg				;;
319949d0342Smrg			djgpp)
320949d0342Smrg				basic_machine=i586-pc
321949d0342Smrg				basic_os=msdosdjgpp
322949d0342Smrg				;;
323949d0342Smrg			ebmon29k)
324949d0342Smrg				basic_machine=a29k-amd
325949d0342Smrg				basic_os=ebmon
326949d0342Smrg				;;
327949d0342Smrg			es1800 | OSE68k | ose68k | ose | OSE)
328949d0342Smrg				basic_machine=m68k-ericsson
329949d0342Smrg				basic_os=ose
330949d0342Smrg				;;
331949d0342Smrg			gmicro)
332949d0342Smrg				basic_machine=tron-gmicro
333949d0342Smrg				basic_os=sysv
334949d0342Smrg				;;
335949d0342Smrg			go32)
336949d0342Smrg				basic_machine=i386-pc
337949d0342Smrg				basic_os=go32
338949d0342Smrg				;;
339949d0342Smrg			h8300hms)
340949d0342Smrg				basic_machine=h8300-hitachi
341949d0342Smrg				basic_os=hms
342949d0342Smrg				;;
343949d0342Smrg			h8300xray)
344949d0342Smrg				basic_machine=h8300-hitachi
345949d0342Smrg				basic_os=xray
346949d0342Smrg				;;
347949d0342Smrg			h8500hms)
348949d0342Smrg				basic_machine=h8500-hitachi
349949d0342Smrg				basic_os=hms
350949d0342Smrg				;;
351949d0342Smrg			harris)
352949d0342Smrg				basic_machine=m88k-harris
353949d0342Smrg				basic_os=sysv3
354949d0342Smrg				;;
355949d0342Smrg			hp300 | hp300hpux)
356949d0342Smrg				basic_machine=m68k-hp
357949d0342Smrg				basic_os=hpux
358949d0342Smrg				;;
359949d0342Smrg			hp300bsd)
360949d0342Smrg				basic_machine=m68k-hp
361949d0342Smrg				basic_os=bsd
362949d0342Smrg				;;
363949d0342Smrg			hppaosf)
364949d0342Smrg				basic_machine=hppa1.1-hp
365949d0342Smrg				basic_os=osf
366949d0342Smrg				;;
367949d0342Smrg			hppro)
368949d0342Smrg				basic_machine=hppa1.1-hp
369949d0342Smrg				basic_os=proelf
370949d0342Smrg				;;
371949d0342Smrg			i386mach)
372949d0342Smrg				basic_machine=i386-mach
373949d0342Smrg				basic_os=mach
374949d0342Smrg				;;
375949d0342Smrg			isi68 | isi)
376949d0342Smrg				basic_machine=m68k-isi
377949d0342Smrg				basic_os=sysv
378949d0342Smrg				;;
379949d0342Smrg			m68knommu)
380949d0342Smrg				basic_machine=m68k-unknown
381949d0342Smrg				basic_os=linux
382949d0342Smrg				;;
383949d0342Smrg			magnum | m3230)
384949d0342Smrg				basic_machine=mips-mips
385949d0342Smrg				basic_os=sysv
386949d0342Smrg				;;
387949d0342Smrg			merlin)
388949d0342Smrg				basic_machine=ns32k-utek
389949d0342Smrg				basic_os=sysv
390949d0342Smrg				;;
391949d0342Smrg			mingw64)
392949d0342Smrg				basic_machine=x86_64-pc
393949d0342Smrg				basic_os=mingw64
394949d0342Smrg				;;
395949d0342Smrg			mingw32)
396949d0342Smrg				basic_machine=i686-pc
397949d0342Smrg				basic_os=mingw32
398949d0342Smrg				;;
399949d0342Smrg			mingw32ce)
400949d0342Smrg				basic_machine=arm-unknown
401949d0342Smrg				basic_os=mingw32ce
402949d0342Smrg				;;
403949d0342Smrg			monitor)
404949d0342Smrg				basic_machine=m68k-rom68k
405949d0342Smrg				basic_os=coff
406949d0342Smrg				;;
407949d0342Smrg			morphos)
408949d0342Smrg				basic_machine=powerpc-unknown
409949d0342Smrg				basic_os=morphos
410949d0342Smrg				;;
411949d0342Smrg			moxiebox)
412949d0342Smrg				basic_machine=moxie-unknown
413949d0342Smrg				basic_os=moxiebox
414949d0342Smrg				;;
415949d0342Smrg			msdos)
416949d0342Smrg				basic_machine=i386-pc
417949d0342Smrg				basic_os=msdos
418949d0342Smrg				;;
419949d0342Smrg			msys)
420949d0342Smrg				basic_machine=i686-pc
421949d0342Smrg				basic_os=msys
422949d0342Smrg				;;
423949d0342Smrg			mvs)
424949d0342Smrg				basic_machine=i370-ibm
425949d0342Smrg				basic_os=mvs
426949d0342Smrg				;;
427949d0342Smrg			nacl)
428949d0342Smrg				basic_machine=le32-unknown
429949d0342Smrg				basic_os=nacl
430949d0342Smrg				;;
431949d0342Smrg			ncr3000)
432949d0342Smrg				basic_machine=i486-ncr
433949d0342Smrg				basic_os=sysv4
434949d0342Smrg				;;
435949d0342Smrg			netbsd386)
436949d0342Smrg				basic_machine=i386-pc
437949d0342Smrg				basic_os=netbsd
438949d0342Smrg				;;
439949d0342Smrg			netwinder)
440949d0342Smrg				basic_machine=armv4l-rebel
441949d0342Smrg				basic_os=linux
442949d0342Smrg				;;
443949d0342Smrg			news | news700 | news800 | news900)
444949d0342Smrg				basic_machine=m68k-sony
445949d0342Smrg				basic_os=newsos
446949d0342Smrg				;;
447949d0342Smrg			news1000)
448949d0342Smrg				basic_machine=m68030-sony
449949d0342Smrg				basic_os=newsos
450949d0342Smrg				;;
451949d0342Smrg			necv70)
452949d0342Smrg				basic_machine=v70-nec
453949d0342Smrg				basic_os=sysv
454949d0342Smrg				;;
455949d0342Smrg			nh3000)
456949d0342Smrg				basic_machine=m68k-harris
457949d0342Smrg				basic_os=cxux
458949d0342Smrg				;;
459949d0342Smrg			nh[45]000)
460949d0342Smrg				basic_machine=m88k-harris
461949d0342Smrg				basic_os=cxux
462949d0342Smrg				;;
463949d0342Smrg			nindy960)
464949d0342Smrg				basic_machine=i960-intel
465949d0342Smrg				basic_os=nindy
466949d0342Smrg				;;
467949d0342Smrg			mon960)
468949d0342Smrg				basic_machine=i960-intel
469949d0342Smrg				basic_os=mon960
470949d0342Smrg				;;
471949d0342Smrg			nonstopux)
472949d0342Smrg				basic_machine=mips-compaq
473949d0342Smrg				basic_os=nonstopux
474949d0342Smrg				;;
475949d0342Smrg			os400)
476949d0342Smrg				basic_machine=powerpc-ibm
477949d0342Smrg				basic_os=os400
478949d0342Smrg				;;
479949d0342Smrg			OSE68000 | ose68000)
480949d0342Smrg				basic_machine=m68000-ericsson
481949d0342Smrg				basic_os=ose
482949d0342Smrg				;;
483949d0342Smrg			os68k)
484949d0342Smrg				basic_machine=m68k-none
485949d0342Smrg				basic_os=os68k
486949d0342Smrg				;;
487949d0342Smrg			paragon)
488949d0342Smrg				basic_machine=i860-intel
489949d0342Smrg				basic_os=osf
490949d0342Smrg				;;
491949d0342Smrg			parisc)
492949d0342Smrg				basic_machine=hppa-unknown
493949d0342Smrg				basic_os=linux
494949d0342Smrg				;;
495949d0342Smrg			psp)
496949d0342Smrg				basic_machine=mipsallegrexel-sony
497949d0342Smrg				basic_os=psp
498949d0342Smrg				;;
499949d0342Smrg			pw32)
500949d0342Smrg				basic_machine=i586-unknown
501949d0342Smrg				basic_os=pw32
502949d0342Smrg				;;
503949d0342Smrg			rdos | rdos64)
504949d0342Smrg				basic_machine=x86_64-pc
505949d0342Smrg				basic_os=rdos
506949d0342Smrg				;;
507949d0342Smrg			rdos32)
508949d0342Smrg				basic_machine=i386-pc
509949d0342Smrg				basic_os=rdos
510949d0342Smrg				;;
511949d0342Smrg			rom68k)
512949d0342Smrg				basic_machine=m68k-rom68k
513949d0342Smrg				basic_os=coff
514949d0342Smrg				;;
515949d0342Smrg			sa29200)
516949d0342Smrg				basic_machine=a29k-amd
517949d0342Smrg				basic_os=udi
518949d0342Smrg				;;
519949d0342Smrg			sei)
520949d0342Smrg				basic_machine=mips-sei
521949d0342Smrg				basic_os=seiux
522949d0342Smrg				;;
523949d0342Smrg			sequent)
524949d0342Smrg				basic_machine=i386-sequent
525949d0342Smrg				basic_os=
526949d0342Smrg				;;
527949d0342Smrg			sps7)
528949d0342Smrg				basic_machine=m68k-bull
529949d0342Smrg				basic_os=sysv2
530949d0342Smrg				;;
531949d0342Smrg			st2000)
532949d0342Smrg				basic_machine=m68k-tandem
533949d0342Smrg				basic_os=
534949d0342Smrg				;;
535949d0342Smrg			stratus)
536949d0342Smrg				basic_machine=i860-stratus
537949d0342Smrg				basic_os=sysv4
538949d0342Smrg				;;
539949d0342Smrg			sun2)
540949d0342Smrg				basic_machine=m68000-sun
541949d0342Smrg				basic_os=
542949d0342Smrg				;;
543949d0342Smrg			sun2os3)
544949d0342Smrg				basic_machine=m68000-sun
545949d0342Smrg				basic_os=sunos3
546949d0342Smrg				;;
547949d0342Smrg			sun2os4)
548949d0342Smrg				basic_machine=m68000-sun
549949d0342Smrg				basic_os=sunos4
550949d0342Smrg				;;
551949d0342Smrg			sun3)
552949d0342Smrg				basic_machine=m68k-sun
553949d0342Smrg				basic_os=
554949d0342Smrg				;;
555949d0342Smrg			sun3os3)
556949d0342Smrg				basic_machine=m68k-sun
557949d0342Smrg				basic_os=sunos3
558949d0342Smrg				;;
559949d0342Smrg			sun3os4)
560949d0342Smrg				basic_machine=m68k-sun
561949d0342Smrg				basic_os=sunos4
562949d0342Smrg				;;
563949d0342Smrg			sun4)
564949d0342Smrg				basic_machine=sparc-sun
565949d0342Smrg				basic_os=
566949d0342Smrg				;;
567949d0342Smrg			sun4os3)
568949d0342Smrg				basic_machine=sparc-sun
569949d0342Smrg				basic_os=sunos3
570949d0342Smrg				;;
571949d0342Smrg			sun4os4)
572949d0342Smrg				basic_machine=sparc-sun
573949d0342Smrg				basic_os=sunos4
574949d0342Smrg				;;
575949d0342Smrg			sun4sol2)
576949d0342Smrg				basic_machine=sparc-sun
577949d0342Smrg				basic_os=solaris2
578949d0342Smrg				;;
579949d0342Smrg			sun386 | sun386i | roadrunner)
580949d0342Smrg				basic_machine=i386-sun
581949d0342Smrg				basic_os=
582949d0342Smrg				;;
583949d0342Smrg			sv1)
584949d0342Smrg				basic_machine=sv1-cray
585949d0342Smrg				basic_os=unicos
586949d0342Smrg				;;
587949d0342Smrg			symmetry)
588949d0342Smrg				basic_machine=i386-sequent
589949d0342Smrg				basic_os=dynix
590949d0342Smrg				;;
591949d0342Smrg			t3e)
592949d0342Smrg				basic_machine=alphaev5-cray
593949d0342Smrg				basic_os=unicos
594949d0342Smrg				;;
595949d0342Smrg			t90)
596949d0342Smrg				basic_machine=t90-cray
597949d0342Smrg				basic_os=unicos
598949d0342Smrg				;;
599949d0342Smrg			toad1)
600949d0342Smrg				basic_machine=pdp10-xkl
601949d0342Smrg				basic_os=tops20
602949d0342Smrg				;;
603949d0342Smrg			tpf)
604949d0342Smrg				basic_machine=s390x-ibm
605949d0342Smrg				basic_os=tpf
606949d0342Smrg				;;
607949d0342Smrg			udi29k)
608949d0342Smrg				basic_machine=a29k-amd
609949d0342Smrg				basic_os=udi
610949d0342Smrg				;;
611949d0342Smrg			ultra3)
612949d0342Smrg				basic_machine=a29k-nyu
613949d0342Smrg				basic_os=sym1
614949d0342Smrg				;;
615949d0342Smrg			v810 | necv810)
616949d0342Smrg				basic_machine=v810-nec
617949d0342Smrg				basic_os=none
618949d0342Smrg				;;
619949d0342Smrg			vaxv)
620949d0342Smrg				basic_machine=vax-dec
621949d0342Smrg				basic_os=sysv
622949d0342Smrg				;;
623949d0342Smrg			vms)
624949d0342Smrg				basic_machine=vax-dec
625949d0342Smrg				basic_os=vms
626949d0342Smrg				;;
627949d0342Smrg			vsta)
628949d0342Smrg				basic_machine=i386-pc
629949d0342Smrg				basic_os=vsta
630949d0342Smrg				;;
631949d0342Smrg			vxworks960)
632949d0342Smrg				basic_machine=i960-wrs
633949d0342Smrg				basic_os=vxworks
634949d0342Smrg				;;
635949d0342Smrg			vxworks68)
636949d0342Smrg				basic_machine=m68k-wrs
637949d0342Smrg				basic_os=vxworks
638949d0342Smrg				;;
639949d0342Smrg			vxworks29k)
640949d0342Smrg				basic_machine=a29k-wrs
641949d0342Smrg				basic_os=vxworks
642949d0342Smrg				;;
643949d0342Smrg			xbox)
644949d0342Smrg				basic_machine=i686-pc
645949d0342Smrg				basic_os=mingw32
646949d0342Smrg				;;
647949d0342Smrg			ymp)
648949d0342Smrg				basic_machine=ymp-cray
649949d0342Smrg				basic_os=unicos
650949d0342Smrg				;;
651949d0342Smrg			*)
652949d0342Smrg				basic_machine=$1
653949d0342Smrg				basic_os=
654949d0342Smrg				;;
655949d0342Smrg		esac
6569f606849Smrg		;;
6579f606849Smrgesac
6589f606849Smrg
659949d0342Smrg# Decode 1-component or ad-hoc basic machines
6609f606849Smrgcase $basic_machine in
661949d0342Smrg	# Here we handle the default manufacturer of certain CPU types.  It is in
662949d0342Smrg	# some cases the only manufacturer, in others, it is the most popular.
663949d0342Smrg	w89k)
664949d0342Smrg		cpu=hppa1.1
665949d0342Smrg		vendor=winbond
6669f606849Smrg		;;
667949d0342Smrg	op50n)
668949d0342Smrg		cpu=hppa1.1
669949d0342Smrg		vendor=oki
670cdbfa18aSmrg		;;
671949d0342Smrg	op60c)
672949d0342Smrg		cpu=hppa1.1
673949d0342Smrg		vendor=oki
674cdbfa18aSmrg		;;
675949d0342Smrg	ibm*)
676949d0342Smrg		cpu=i370
677949d0342Smrg		vendor=ibm
678cdbfa18aSmrg		;;
679949d0342Smrg	orion105)
680949d0342Smrg		cpu=clipper
681949d0342Smrg		vendor=highlevel
682cdbfa18aSmrg		;;
683949d0342Smrg	mac | mpw | mac-mpw)
684949d0342Smrg		cpu=m68k
685949d0342Smrg		vendor=apple
6869f606849Smrg		;;
687949d0342Smrg	pmac | pmac-mpw)
688949d0342Smrg		cpu=powerpc
689949d0342Smrg		vendor=apple
6909f606849Smrg		;;
691949d0342Smrg
6929f606849Smrg	# Recognize the various machine names and aliases which stand
6939f606849Smrg	# for a CPU type and a company and sometimes even an OS.
6949f606849Smrg	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
695949d0342Smrg		cpu=m68000
696949d0342Smrg		vendor=att
6979f606849Smrg		;;
6989f606849Smrg	3b*)
699949d0342Smrg		cpu=we32k
700949d0342Smrg		vendor=att
701fba89afeSmrg		;;
702d5c3dbf1Smrg	bluegene*)
703949d0342Smrg		cpu=powerpc
704949d0342Smrg		vendor=ibm
705949d0342Smrg		basic_os=cnk
7069f606849Smrg		;;
7079f606849Smrg	decsystem10* | dec10*)
708949d0342Smrg		cpu=pdp10
709949d0342Smrg		vendor=dec
710949d0342Smrg		basic_os=tops10
7119f606849Smrg		;;
7129f606849Smrg	decsystem20* | dec20*)
713949d0342Smrg		cpu=pdp10
714949d0342Smrg		vendor=dec
715949d0342Smrg		basic_os=tops20
7169f606849Smrg		;;
7179f606849Smrg	delta | 3300 | motorola-3300 | motorola-delta \
7189f606849Smrg	      | 3300-motorola | delta-motorola)
719949d0342Smrg		cpu=m68k
720949d0342Smrg		vendor=motorola
7219f606849Smrg		;;
722949d0342Smrg	dpx2*)
723949d0342Smrg		cpu=m68k
724949d0342Smrg		vendor=bull
725949d0342Smrg		basic_os=sysv3
7269f606849Smrg		;;
7279f606849Smrg	encore | umax | mmax)
728949d0342Smrg		cpu=ns32k
729949d0342Smrg		vendor=encore
7309f606849Smrg		;;
731949d0342Smrg	elxsi)
732949d0342Smrg		cpu=elxsi
733949d0342Smrg		vendor=elxsi
734949d0342Smrg		basic_os=${basic_os:-bsd}
7359f606849Smrg		;;
7369f606849Smrg	fx2800)
737949d0342Smrg		cpu=i860
738949d0342Smrg		vendor=alliant
7399f606849Smrg		;;
7409f606849Smrg	genix)
741949d0342Smrg		cpu=ns32k
742949d0342Smrg		vendor=ns
7439f606849Smrg		;;
7449f606849Smrg	h3050r* | hiux*)
745949d0342Smrg		cpu=hppa1.1
746949d0342Smrg		vendor=hitachi
747949d0342Smrg		basic_os=hiuxwe2
7489f606849Smrg		;;
7499f606849Smrg	hp3k9[0-9][0-9] | hp9[0-9][0-9])
750949d0342Smrg		cpu=hppa1.0
751949d0342Smrg		vendor=hp
7529f606849Smrg		;;
7539f606849Smrg	hp9k2[0-9][0-9] | hp9k31[0-9])
754949d0342Smrg		cpu=m68000
755949d0342Smrg		vendor=hp
7569f606849Smrg		;;
7579f606849Smrg	hp9k3[2-9][0-9])
758949d0342Smrg		cpu=m68k
759949d0342Smrg		vendor=hp
7609f606849Smrg		;;
7619f606849Smrg	hp9k6[0-9][0-9] | hp6[0-9][0-9])
762949d0342Smrg		cpu=hppa1.0
763949d0342Smrg		vendor=hp
7649f606849Smrg		;;
7659f606849Smrg	hp9k7[0-79][0-9] | hp7[0-79][0-9])
766949d0342Smrg		cpu=hppa1.1
767949d0342Smrg		vendor=hp
7689f606849Smrg		;;
7699f606849Smrg	hp9k78[0-9] | hp78[0-9])
7709f606849Smrg		# FIXME: really hppa2.0-hp
771949d0342Smrg		cpu=hppa1.1
772949d0342Smrg		vendor=hp
7739f606849Smrg		;;
7749f606849Smrg	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
7759f606849Smrg		# FIXME: really hppa2.0-hp
776949d0342Smrg		cpu=hppa1.1
777949d0342Smrg		vendor=hp
7789f606849Smrg		;;
7799f606849Smrg	hp9k8[0-9][13679] | hp8[0-9][13679])
780949d0342Smrg		cpu=hppa1.1
781949d0342Smrg		vendor=hp
7829f606849Smrg		;;
7839f606849Smrg	hp9k8[0-9][0-9] | hp8[0-9][0-9])
784949d0342Smrg		cpu=hppa1.0
785949d0342Smrg		vendor=hp
7869f606849Smrg		;;
7879f606849Smrg	i*86v32)
788949d0342Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
789949d0342Smrg		vendor=pc
790949d0342Smrg		basic_os=sysv32
7919f606849Smrg		;;
7929f606849Smrg	i*86v4*)
793949d0342Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
794949d0342Smrg		vendor=pc
795949d0342Smrg		basic_os=sysv4
7969f606849Smrg		;;
7979f606849Smrg	i*86v)
798949d0342Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
799949d0342Smrg		vendor=pc
800949d0342Smrg		basic_os=sysv
8019f606849Smrg		;;
8029f606849Smrg	i*86sol2)
803949d0342Smrg		cpu=`echo "$1" | sed -e 's/86.*/86/'`
804949d0342Smrg		vendor=pc
805949d0342Smrg		basic_os=solaris2
8069f606849Smrg		;;
807949d0342Smrg	j90 | j90-cray)
808949d0342Smrg		cpu=j90
809949d0342Smrg		vendor=cray
810949d0342Smrg		basic_os=${basic_os:-unicos}
8119f606849Smrg		;;
8129f606849Smrg	iris | iris4d)
813949d0342Smrg		cpu=mips
814949d0342Smrg		vendor=sgi
815949d0342Smrg		case $basic_os in
816949d0342Smrg		    irix*)
8179f606849Smrg			;;
8189f606849Smrg		    *)
819949d0342Smrg			basic_os=irix4
8209f606849Smrg			;;
8219f606849Smrg		esac
8229f606849Smrg		;;
8239f606849Smrg	miniframe)
824949d0342Smrg		cpu=m68000
825949d0342Smrg		vendor=convergent
8269f606849Smrg		;;
827949d0342Smrg	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
828949d0342Smrg		cpu=m68k
829949d0342Smrg		vendor=atari
830949d0342Smrg		basic_os=mint
8319f606849Smrg		;;
8329f606849Smrg	news-3600 | risc-news)
833949d0342Smrg		cpu=mips
834949d0342Smrg		vendor=sony
835949d0342Smrg		basic_os=newsos
836949d0342Smrg		;;
837949d0342Smrg	next | m*-next)
838949d0342Smrg		cpu=m68k
839949d0342Smrg		vendor=next
840949d0342Smrg		case $basic_os in
841949d0342Smrg		    openstep*)
842949d0342Smrg		        ;;
843949d0342Smrg		    nextstep*)
8449f606849Smrg			;;
845949d0342Smrg		    ns2*)
846949d0342Smrg		      basic_os=nextstep2
8479f606849Smrg			;;
8489f606849Smrg		    *)
849949d0342Smrg		      basic_os=nextstep3
8509f606849Smrg			;;
8519f606849Smrg		esac
8529f606849Smrg		;;
8539f606849Smrg	np1)
854949d0342Smrg		cpu=np1
855949d0342Smrg		vendor=gould
8569f606849Smrg		;;
8579f606849Smrg	op50n-* | op60c-*)
858949d0342Smrg		cpu=hppa1.1
859949d0342Smrg		vendor=oki
860949d0342Smrg		basic_os=proelf
8619f606849Smrg		;;
8629f606849Smrg	pa-hitachi)
863949d0342Smrg		cpu=hppa1.1
864949d0342Smrg		vendor=hitachi
865949d0342Smrg		basic_os=hiuxwe2
866fba89afeSmrg		;;
8679f606849Smrg	pbd)
868949d0342Smrg		cpu=sparc
869949d0342Smrg		vendor=tti
8709f606849Smrg		;;
8719f606849Smrg	pbb)
872949d0342Smrg		cpu=m68k
873949d0342Smrg		vendor=tti
874fba89afeSmrg		;;
875949d0342Smrg	pc532)
876949d0342Smrg		cpu=ns32k
877949d0342Smrg		vendor=pc532
8789f606849Smrg		;;
8799f606849Smrg	pn)
880949d0342Smrg		cpu=pn
881949d0342Smrg		vendor=gould
8829f606849Smrg		;;
883949d0342Smrg	power)
884949d0342Smrg		cpu=power
885949d0342Smrg		vendor=ibm
8869f606849Smrg		;;
8879f606849Smrg	ps2)
888949d0342Smrg		cpu=i386
889949d0342Smrg		vendor=ibm
8909f606849Smrg		;;
8919f606849Smrg	rm[46]00)
892949d0342Smrg		cpu=mips
893949d0342Smrg		vendor=siemens
8949f606849Smrg		;;
8959f606849Smrg	rtpc | rtpc-*)
896949d0342Smrg		cpu=romp
897949d0342Smrg		vendor=ibm
8989f606849Smrg		;;
899949d0342Smrg	sde)
900949d0342Smrg		cpu=mipsisa32
901949d0342Smrg		vendor=sde
902949d0342Smrg		basic_os=${basic_os:-elf}
9039f606849Smrg		;;
904949d0342Smrg	simso-wrs)
905949d0342Smrg		cpu=sparclite
906949d0342Smrg		vendor=wrs
907949d0342Smrg		basic_os=vxworks
9089f606849Smrg		;;
909949d0342Smrg	tower | tower-32)
910949d0342Smrg		cpu=m68k
911949d0342Smrg		vendor=ncr
912fba89afeSmrg		;;
913949d0342Smrg	vpp*|vx|vx-*)
914949d0342Smrg		cpu=f301
915949d0342Smrg		vendor=fujitsu
9169f606849Smrg		;;
917949d0342Smrg	w65)
918949d0342Smrg		cpu=w65
919949d0342Smrg		vendor=wdc
9209f606849Smrg		;;
921949d0342Smrg	w89k-*)
922949d0342Smrg		cpu=hppa1.1
923949d0342Smrg		vendor=winbond
924949d0342Smrg		basic_os=proelf
9259f606849Smrg		;;
926949d0342Smrg	none)
927949d0342Smrg		cpu=none
928949d0342Smrg		vendor=none
929fba89afeSmrg		;;
930949d0342Smrg	leon|leon[3-9])
931949d0342Smrg		cpu=sparc
932949d0342Smrg		vendor=$basic_machine
9339f606849Smrg		;;
934949d0342Smrg	leon-*|leon[3-9]-*)
935949d0342Smrg		cpu=sparc
936949d0342Smrg		vendor=`echo "$basic_machine" | sed 's/-.*//'`
9379f606849Smrg		;;
938949d0342Smrg
939949d0342Smrg	*-*)
940949d0342Smrg		# shellcheck disable=SC2162
941949d0342Smrg		saved_IFS=$IFS
942949d0342Smrg		IFS="-" read cpu vendor <<EOF
943949d0342Smrg$basic_machine
944949d0342SmrgEOF
945949d0342Smrg		IFS=$saved_IFS
9469f606849Smrg		;;
947dc088bc7Smrg	# We use 'pc' rather than 'unknown'
948949d0342Smrg	# because (1) that's what they normally are, and
949949d0342Smrg	# (2) the word "unknown" tends to confuse beginning users.
950949d0342Smrg	i*86 | x86_64)
951949d0342Smrg		cpu=$basic_machine
952949d0342Smrg		vendor=pc
9539f606849Smrg		;;
954949d0342Smrg	# These rules are duplicated from below for sake of the special case above;
955949d0342Smrg	# i.e. things that normalized to x86 arches should also default to "pc"
956949d0342Smrg	pc98)
957949d0342Smrg		cpu=i386
958949d0342Smrg		vendor=pc
9599f606849Smrg		;;
960949d0342Smrg	x64 | amd64)
961949d0342Smrg		cpu=x86_64
962949d0342Smrg		vendor=pc
9639f606849Smrg		;;
964949d0342Smrg	# Recognize the basic CPU types without company name.
965949d0342Smrg	*)
966949d0342Smrg		cpu=$basic_machine
967949d0342Smrg		vendor=unknown
968cdbfa18aSmrg		;;
969949d0342Smrgesac
970949d0342Smrg
971949d0342Smrgunset -v basic_machine
972949d0342Smrg
973949d0342Smrg# Decode basic machines in the full and proper CPU-Company form.
974949d0342Smrgcase $cpu-$vendor in
975949d0342Smrg	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
976949d0342Smrg	# some cases the only manufacturer, in others, it is the most popular.
977949d0342Smrg	craynv-unknown)
978949d0342Smrg		vendor=cray
979949d0342Smrg		basic_os=${basic_os:-unicosmp}
9809f606849Smrg		;;
981949d0342Smrg	c90-unknown | c90-cray)
982949d0342Smrg		vendor=cray
983949d0342Smrg		basic_os=${Basic_os:-unicos}
9849f606849Smrg		;;
985949d0342Smrg	fx80-unknown)
986949d0342Smrg		vendor=alliant
9879f606849Smrg		;;
988949d0342Smrg	romp-unknown)
989949d0342Smrg		vendor=ibm
9909f606849Smrg		;;
991949d0342Smrg	mmix-unknown)
992949d0342Smrg		vendor=knuth
9939f606849Smrg		;;
994949d0342Smrg	microblaze-unknown | microblazeel-unknown)
995949d0342Smrg		vendor=xilinx
9969f606849Smrg		;;
997949d0342Smrg	rs6000-unknown)
998949d0342Smrg		vendor=ibm
9999f606849Smrg		;;
1000949d0342Smrg	vax-unknown)
1001949d0342Smrg		vendor=dec
10029f606849Smrg		;;
1003949d0342Smrg	pdp11-unknown)
1004949d0342Smrg		vendor=dec
10059f606849Smrg		;;
1006949d0342Smrg	we32k-unknown)
1007949d0342Smrg		vendor=att
10089f606849Smrg		;;
1009949d0342Smrg	cydra-unknown)
1010949d0342Smrg		vendor=cydrome
10119f606849Smrg		;;
1012949d0342Smrg	i370-ibm*)
1013949d0342Smrg		vendor=ibm
10149f606849Smrg		;;
1015949d0342Smrg	orion-unknown)
1016949d0342Smrg		vendor=highlevel
10179f606849Smrg		;;
1018949d0342Smrg	xps-unknown | xps100-unknown)
1019949d0342Smrg		cpu=xps100
1020949d0342Smrg		vendor=honeywell
10219f606849Smrg		;;
1022949d0342Smrg
1023949d0342Smrg	# Here we normalize CPU types with a missing or matching vendor
1024dc088bc7Smrg	armh-unknown | armh-alt)
1025dc088bc7Smrg		cpu=armv7l
1026dc088bc7Smrg		vendor=alt
1027dc088bc7Smrg		basic_os=${basic_os:-linux-gnueabihf}
1028dc088bc7Smrg		;;
1029949d0342Smrg	dpx20-unknown | dpx20-bull)
1030949d0342Smrg		cpu=rs6000
1031949d0342Smrg		vendor=bull
1032949d0342Smrg		basic_os=${basic_os:-bosx}
10339f606849Smrg		;;
1034949d0342Smrg
1035949d0342Smrg	# Here we normalize CPU types irrespective of the vendor
1036949d0342Smrg	amd64-*)
1037949d0342Smrg		cpu=x86_64
1038fba89afeSmrg		;;
1039949d0342Smrg	blackfin-*)
1040949d0342Smrg		cpu=bfin
1041949d0342Smrg		basic_os=linux
10429f606849Smrg		;;
1043949d0342Smrg	c54x-*)
1044949d0342Smrg		cpu=tic54x
10459f606849Smrg		;;
1046949d0342Smrg	c55x-*)
1047949d0342Smrg		cpu=tic55x
10489f606849Smrg		;;
1049949d0342Smrg	c6x-*)
1050949d0342Smrg		cpu=tic6x
10519f606849Smrg		;;
1052949d0342Smrg	e500v[12]-*)
1053949d0342Smrg		cpu=powerpc
1054949d0342Smrg		basic_os=${basic_os}"spe"
10559f606849Smrg		;;
1056949d0342Smrg	mips3*-*)
1057949d0342Smrg		cpu=mips64
10589f606849Smrg		;;
1059949d0342Smrg	ms1-*)
1060949d0342Smrg		cpu=mt
10619f606849Smrg		;;
1062949d0342Smrg	m68knommu-*)
1063949d0342Smrg		cpu=m68k
1064949d0342Smrg		basic_os=linux
10659f606849Smrg		;;
1066949d0342Smrg	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1067949d0342Smrg		cpu=s12z
10689f606849Smrg		;;
1069949d0342Smrg	openrisc-*)
1070949d0342Smrg		cpu=or32
10719f606849Smrg		;;
1072949d0342Smrg	parisc-*)
1073949d0342Smrg		cpu=hppa
1074949d0342Smrg		basic_os=linux
10759f606849Smrg		;;
1076949d0342Smrg	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1077949d0342Smrg		cpu=i586
10789f606849Smrg		;;
1079dc088bc7Smrg	pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
1080949d0342Smrg		cpu=i686
10819f606849Smrg		;;
1082949d0342Smrg	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1083949d0342Smrg		cpu=i686
10849f606849Smrg		;;
1085949d0342Smrg	pentium4-*)
1086949d0342Smrg		cpu=i786
10879f606849Smrg		;;
1088949d0342Smrg	pc98-*)
1089949d0342Smrg		cpu=i386
10909f606849Smrg		;;
1091949d0342Smrg	ppc-* | ppcbe-*)
1092949d0342Smrg		cpu=powerpc
10939f606849Smrg		;;
1094949d0342Smrg	ppcle-* | powerpclittle-*)
1095949d0342Smrg		cpu=powerpcle
10969f606849Smrg		;;
1097949d0342Smrg	ppc64-*)
1098949d0342Smrg		cpu=powerpc64
1099cdbfa18aSmrg		;;
1100949d0342Smrg	ppc64le-* | powerpc64little-*)
1101949d0342Smrg		cpu=powerpc64le
11029f606849Smrg		;;
1103949d0342Smrg	sb1-*)
1104949d0342Smrg		cpu=mipsisa64sb1
11059f606849Smrg		;;
1106949d0342Smrg	sb1el-*)
1107949d0342Smrg		cpu=mipsisa64sb1el
1108d5c3dbf1Smrg		;;
1109949d0342Smrg	sh5e[lb]-*)
1110949d0342Smrg		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
11119f606849Smrg		;;
1112949d0342Smrg	spur-*)
1113949d0342Smrg		cpu=spur
11149f606849Smrg		;;
1115949d0342Smrg	strongarm-* | thumb-*)
1116949d0342Smrg		cpu=arm
11179f606849Smrg		;;
1118949d0342Smrg	tx39-*)
1119949d0342Smrg		cpu=mipstx39
11209f606849Smrg		;;
1121949d0342Smrg	tx39el-*)
1122949d0342Smrg		cpu=mipstx39el
11239f606849Smrg		;;
1124949d0342Smrg	x64-*)
1125949d0342Smrg		cpu=x86_64
11269f606849Smrg		;;
1127949d0342Smrg	xscale-* | xscalee[bl]-*)
1128949d0342Smrg		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
11299f606849Smrg		;;
1130dc088bc7Smrg	arm64-* | aarch64le-*)
1131949d0342Smrg		cpu=aarch64
11329f606849Smrg		;;
1133949d0342Smrg
1134949d0342Smrg	# Recognize the canonical CPU Types that limit and/or modify the
1135949d0342Smrg	# company names they are paired with.
1136949d0342Smrg	cr16-*)
1137949d0342Smrg		basic_os=${basic_os:-elf}
11389f606849Smrg		;;
1139949d0342Smrg	crisv32-* | etraxfs*-*)
1140949d0342Smrg		cpu=crisv32
1141949d0342Smrg		vendor=axis
11429f606849Smrg		;;
1143949d0342Smrg	cris-* | etrax*-*)
1144949d0342Smrg		cpu=cris
1145949d0342Smrg		vendor=axis
11469f606849Smrg		;;
1147949d0342Smrg	crx-*)
1148949d0342Smrg		basic_os=${basic_os:-elf}
11499f606849Smrg		;;
1150949d0342Smrg	neo-tandem)
1151949d0342Smrg		cpu=neo
1152949d0342Smrg		vendor=tandem
11539f606849Smrg		;;
1154949d0342Smrg	nse-tandem)
1155949d0342Smrg		cpu=nse
1156949d0342Smrg		vendor=tandem
11579f606849Smrg		;;
1158949d0342Smrg	nsr-tandem)
1159949d0342Smrg		cpu=nsr
1160949d0342Smrg		vendor=tandem
11619f606849Smrg		;;
1162949d0342Smrg	nsv-tandem)
1163949d0342Smrg		cpu=nsv
1164949d0342Smrg		vendor=tandem
11659f606849Smrg		;;
1166949d0342Smrg	nsx-tandem)
1167949d0342Smrg		cpu=nsx
1168949d0342Smrg		vendor=tandem
11699f606849Smrg		;;
1170949d0342Smrg	mipsallegrexel-sony)
1171949d0342Smrg		cpu=mipsallegrexel
1172949d0342Smrg		vendor=sony
11739f606849Smrg		;;
1174949d0342Smrg	tile*-*)
1175949d0342Smrg		basic_os=${basic_os:-linux-gnu}
11769f606849Smrg		;;
1177949d0342Smrg
11789f606849Smrg	*)
1179949d0342Smrg		# Recognize the canonical CPU types that are allowed with any
1180949d0342Smrg		# company name.
1181949d0342Smrg		case $cpu in
1182949d0342Smrg			1750a | 580 \
1183949d0342Smrg			| a29k \
1184dc088bc7Smrg			| aarch64 | aarch64_be | aarch64c | arm64ec \
1185949d0342Smrg			| abacus \
1186949d0342Smrg			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
1187949d0342Smrg			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
1188949d0342Smrg			| alphapca5[67] | alpha64pca5[67] \
1189949d0342Smrg			| am33_2.0 \
1190949d0342Smrg			| amdgcn \
1191949d0342Smrg			| arc | arceb | arc32 | arc64 \
1192949d0342Smrg			| arm | arm[lb]e | arme[lb] | armv* \
1193949d0342Smrg			| avr | avr32 \
1194949d0342Smrg			| asmjs \
1195949d0342Smrg			| ba \
1196949d0342Smrg			| be32 | be64 \
1197949d0342Smrg			| bfin | bpf | bs2000 \
1198949d0342Smrg			| c[123]* | c30 | [cjt]90 | c4x \
1199949d0342Smrg			| c8051 | clipper | craynv | csky | cydra \
1200949d0342Smrg			| d10v | d30v | dlx | dsp16xx \
1201949d0342Smrg			| e2k | elxsi | epiphany \
1202949d0342Smrg			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
1203dc088bc7Smrg			| javascript \
1204949d0342Smrg			| h8300 | h8500 \
1205949d0342Smrg			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
1206949d0342Smrg			| hexagon \
1207949d0342Smrg			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
1208949d0342Smrg			| ip2k | iq2000 \
1209949d0342Smrg			| k1om \
1210dc088bc7Smrg			| kvx \
1211949d0342Smrg			| le32 | le64 \
1212949d0342Smrg			| lm32 \
1213dc088bc7Smrg			| loongarch32 | loongarch64 \
1214949d0342Smrg			| m32c | m32r | m32rle \
1215949d0342Smrg			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
1216949d0342Smrg			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
1217949d0342Smrg			| m88110 | m88k | maxq | mb | mcore | mep | metag \
1218949d0342Smrg			| microblaze | microblazeel \
1219dc088bc7Smrg			| mips* \
1220949d0342Smrg			| mmix \
1221949d0342Smrg			| mn10200 | mn10300 \
1222949d0342Smrg			| moxie \
1223949d0342Smrg			| mt \
1224949d0342Smrg			| msp430 \
1225dc088bc7Smrg			| nanomips* \
1226949d0342Smrg			| nds32 | nds32le | nds32be \
1227949d0342Smrg			| nfp \
1228949d0342Smrg			| nios | nios2 | nios2eb | nios2el \
1229949d0342Smrg			| none | np1 | ns16k | ns32k | nvptx \
1230949d0342Smrg			| open8 \
1231949d0342Smrg			| or1k* \
1232949d0342Smrg			| or32 \
1233949d0342Smrg			| orion \
1234949d0342Smrg			| picochip \
1235949d0342Smrg			| pdp10 | pdp11 | pj | pjl | pn | power \
1236949d0342Smrg			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
1237949d0342Smrg			| pru \
1238949d0342Smrg			| pyramid \
1239949d0342Smrg			| riscv | riscv32 | riscv32be | riscv64 | riscv64be \
1240949d0342Smrg			| rl78 | romp | rs6000 | rx \
1241949d0342Smrg			| s390 | s390x \
1242949d0342Smrg			| score \
1243949d0342Smrg			| sh | shl \
1244949d0342Smrg			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
1245949d0342Smrg			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
1246949d0342Smrg			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
1247949d0342Smrg			| sparclite \
1248949d0342Smrg			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
1249949d0342Smrg			| spu \
1250949d0342Smrg			| tahoe \
1251949d0342Smrg			| thumbv7* \
1252949d0342Smrg			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
1253949d0342Smrg			| tron \
1254949d0342Smrg			| ubicom32 \
1255949d0342Smrg			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
1256949d0342Smrg			| vax \
1257dc088bc7Smrg			| vc4 \
1258949d0342Smrg			| visium \
1259949d0342Smrg			| w65 \
1260949d0342Smrg			| wasm32 | wasm64 \
1261949d0342Smrg			| we32k \
1262949d0342Smrg			| x86 | x86_64 | xc16x | xgate | xps100 \
1263949d0342Smrg			| xstormy16 | xtensa* \
1264949d0342Smrg			| ymp \
1265949d0342Smrg			| z8k | z80)
1266949d0342Smrg				;;
1267949d0342Smrg
1268949d0342Smrg			*)
1269dc088bc7Smrg				echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
1270949d0342Smrg				exit 1
1271949d0342Smrg				;;
1272949d0342Smrg		esac
12739f606849Smrg		;;
12749f606849Smrgesac
12759f606849Smrg
12769f606849Smrg# Here we canonicalize certain aliases for manufacturers.
1277949d0342Smrgcase $vendor in
1278949d0342Smrg	digital*)
1279949d0342Smrg		vendor=dec
12809f606849Smrg		;;
1281949d0342Smrg	commodore*)
1282949d0342Smrg		vendor=cbm
12839f606849Smrg		;;
12849f606849Smrg	*)
12859f606849Smrg		;;
12869f606849Smrgesac
12879f606849Smrg
12889f606849Smrg# Decode manufacturer-specific aliases for certain operating systems.
12899f606849Smrg
1290dc088bc7Smrgif test x"$basic_os" != x
12919f606849Smrgthen
1292949d0342Smrg
1293dc088bc7Smrg# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
1294949d0342Smrg# set os.
1295dc088bc7Smrgobj=
1296949d0342Smrgcase $basic_os in
1297949d0342Smrg	gnu/linux*)
1298949d0342Smrg		kernel=linux
1299949d0342Smrg		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
1300949d0342Smrg		;;
1301949d0342Smrg	os2-emx)
1302949d0342Smrg		kernel=os2
1303949d0342Smrg		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
1304949d0342Smrg		;;
1305949d0342Smrg	nto-qnx*)
1306949d0342Smrg		kernel=nto
1307949d0342Smrg		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
1308949d0342Smrg		;;
1309949d0342Smrg	*-*)
1310949d0342Smrg		# shellcheck disable=SC2162
1311949d0342Smrg		saved_IFS=$IFS
1312949d0342Smrg		IFS="-" read kernel os <<EOF
1313949d0342Smrg$basic_os
1314949d0342SmrgEOF
1315949d0342Smrg		IFS=$saved_IFS
1316949d0342Smrg		;;
1317949d0342Smrg	# Default OS when just kernel was specified
1318949d0342Smrg	nto*)
1319949d0342Smrg		kernel=nto
1320949d0342Smrg		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
1321949d0342Smrg		;;
1322949d0342Smrg	linux*)
1323949d0342Smrg		kernel=linux
1324949d0342Smrg		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
1325949d0342Smrg		;;
1326dc088bc7Smrg	managarm*)
1327dc088bc7Smrg		kernel=managarm
1328dc088bc7Smrg		os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1329dc088bc7Smrg		;;
1330949d0342Smrg	*)
1331949d0342Smrg		kernel=
1332949d0342Smrg		os=$basic_os
1333949d0342Smrg		;;
1334949d0342Smrgesac
1335949d0342Smrg
1336949d0342Smrg# Now, normalize the OS (knowing we just have one component, it's not a kernel,
1337949d0342Smrg# etc.)
13389f606849Smrgcase $os in
1339949d0342Smrg	# First match some system type aliases that might get confused
1340949d0342Smrg	# with valid system types.
1341949d0342Smrg	# solaris* is a basic system type, with this one exception.
1342949d0342Smrg	auroraux)
1343949d0342Smrg		os=auroraux
1344d5c3dbf1Smrg		;;
1345949d0342Smrg	bluegene*)
1346949d0342Smrg		os=cnk
13479f606849Smrg		;;
1348949d0342Smrg	solaris1 | solaris1.*)
1349949d0342Smrg		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
13509f606849Smrg		;;
1351949d0342Smrg	solaris)
1352949d0342Smrg		os=solaris2
13539f606849Smrg		;;
1354949d0342Smrg	unixware*)
1355949d0342Smrg		os=sysv4.2uw
13569f606849Smrg		;;
1357949d0342Smrg	# es1800 is here to avoid being matched by es* (a different OS)
1358949d0342Smrg	es1800*)
1359949d0342Smrg		os=ose
13609f606849Smrg		;;
1361949d0342Smrg	# Some version numbers need modification
1362949d0342Smrg	chorusos*)
1363949d0342Smrg		os=chorusos
13649f606849Smrg		;;
1365949d0342Smrg	isc)
1366949d0342Smrg		os=isc2.2
13679f606849Smrg		;;
1368949d0342Smrg	sco6)
1369949d0342Smrg		os=sco5v6
13709f606849Smrg		;;
1371949d0342Smrg	sco5)
1372949d0342Smrg		os=sco3.2v5
13739f606849Smrg		;;
1374949d0342Smrg	sco4)
1375949d0342Smrg		os=sco3.2v4
13769f606849Smrg		;;
1377949d0342Smrg	sco3.2.[4-9]*)
1378949d0342Smrg		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
13799f606849Smrg		;;
1380949d0342Smrg	sco*v* | scout)
1381949d0342Smrg		# Don't match below
13829f606849Smrg		;;
1383949d0342Smrg	sco*)
1384949d0342Smrg		os=sco3.2v2
13859f606849Smrg		;;
1386949d0342Smrg	psos*)
1387949d0342Smrg		os=psos
13889f606849Smrg		;;
1389949d0342Smrg	qnx*)
1390949d0342Smrg		os=qnx
13919f606849Smrg		;;
1392949d0342Smrg	hiux*)
1393949d0342Smrg		os=hiuxwe2
13949f606849Smrg		;;
1395949d0342Smrg	lynx*178)
1396949d0342Smrg		os=lynxos178
13979f606849Smrg		;;
1398949d0342Smrg	lynx*5)
1399949d0342Smrg		os=lynxos5
14009f606849Smrg		;;
1401949d0342Smrg	lynxos*)
1402949d0342Smrg		# don't get caught up in next wildcard
14039f606849Smrg		;;
1404949d0342Smrg	lynx*)
1405949d0342Smrg		os=lynxos
14069f606849Smrg		;;
1407949d0342Smrg	mac[0-9]*)
1408949d0342Smrg		os=`echo "$os" | sed -e 's|mac|macos|'`
14099f606849Smrg		;;
1410949d0342Smrg	opened*)
1411949d0342Smrg		os=openedition
14129f606849Smrg		;;
1413949d0342Smrg	os400*)
1414949d0342Smrg		os=os400
14159f606849Smrg		;;
1416949d0342Smrg	sunos5*)
1417949d0342Smrg		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
14189f606849Smrg		;;
1419949d0342Smrg	sunos6*)
1420949d0342Smrg		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
14219f606849Smrg		;;
1422949d0342Smrg	wince*)
1423949d0342Smrg		os=wince
14249f606849Smrg		;;
1425949d0342Smrg	utek*)
1426949d0342Smrg		os=bsd
14279f606849Smrg		;;
1428949d0342Smrg	dynix*)
1429949d0342Smrg		os=bsd
14309f606849Smrg		;;
1431949d0342Smrg	acis*)
1432949d0342Smrg		os=aos
14339f606849Smrg		;;
1434949d0342Smrg	atheos*)
1435949d0342Smrg		os=atheos
14369f606849Smrg		;;
1437949d0342Smrg	syllable*)
1438949d0342Smrg		os=syllable
14399f606849Smrg		;;
1440949d0342Smrg	386bsd)
1441949d0342Smrg		os=bsd
14429f606849Smrg		;;
1443949d0342Smrg	ctix* | uts*)
1444949d0342Smrg		os=sysv
14459f606849Smrg		;;
1446949d0342Smrg	nova*)
1447949d0342Smrg		os=rtmk-nova
14489f606849Smrg		;;
1449949d0342Smrg	ns2)
1450949d0342Smrg		os=nextstep2
14519f606849Smrg		;;
1452949d0342Smrg	# Preserve the version number of sinix5.
1453949d0342Smrg	sinix5.*)
1454949d0342Smrg		os=`echo "$os" | sed -e 's|sinix|sysv|'`
14559f606849Smrg		;;
1456949d0342Smrg	sinix*)
1457949d0342Smrg		os=sysv4
14589f606849Smrg		;;
1459949d0342Smrg	tpf*)
1460949d0342Smrg		os=tpf
14619f606849Smrg		;;
1462949d0342Smrg	triton*)
1463949d0342Smrg		os=sysv3
14649f606849Smrg		;;
1465949d0342Smrg	oss*)
1466949d0342Smrg		os=sysv3
14679f606849Smrg		;;
1468949d0342Smrg	svr4*)
1469949d0342Smrg		os=sysv4
14709f606849Smrg		;;
1471949d0342Smrg	svr3)
1472949d0342Smrg		os=sysv3
14739f606849Smrg		;;
1474949d0342Smrg	sysvr4)
1475949d0342Smrg		os=sysv4
14769f606849Smrg		;;
1477949d0342Smrg	ose*)
1478949d0342Smrg		os=ose
14799f606849Smrg		;;
1480949d0342Smrg	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1481949d0342Smrg		os=mint
1482d5c3dbf1Smrg		;;
1483949d0342Smrg	dicos*)
1484949d0342Smrg		os=dicos
1485cdbfa18aSmrg		;;
1486949d0342Smrg	pikeos*)
1487949d0342Smrg		# Until real need of OS specific support for
1488949d0342Smrg		# particular features comes up, bare metal
1489949d0342Smrg		# configurations are quite functional.
1490949d0342Smrg		case $cpu in
1491949d0342Smrg		    arm*)
1492949d0342Smrg			os=eabi
1493949d0342Smrg			;;
1494949d0342Smrg		    *)
1495dc088bc7Smrg			os=
1496dc088bc7Smrg			obj=elf
1497949d0342Smrg			;;
1498949d0342Smrg		esac
14999f606849Smrg		;;
1500dc088bc7Smrg	aout* | coff* | elf* | pe*)
1501dc088bc7Smrg		# These are machine code file formats, not OSes
1502dc088bc7Smrg		obj=$os
1503dc088bc7Smrg		os=
1504dc088bc7Smrg		;;
15059f606849Smrg	*)
1506949d0342Smrg		# No normalization, but not necessarily accepted, that comes below.
15079f606849Smrg		;;
15089f606849Smrgesac
1509949d0342Smrg
15109f606849Smrgelse
15119f606849Smrg
15129f606849Smrg# Here we handle the default operating systems that come with various machines.
15139f606849Smrg# The value should be what the vendor currently ships out the door with their
15149f606849Smrg# machine or put another way, the most popular os provided with the machine.
15159f606849Smrg
15169f606849Smrg# Note that if you're going to try to match "-MANUFACTURER" here (say,
15179f606849Smrg# "-sun"), then you have to tell the case statement up towards the top
15189f606849Smrg# that MANUFACTURER isn't an operating system.  Otherwise, code above
15199f606849Smrg# will signal an error saying that MANUFACTURER isn't an operating
15209f606849Smrg# system, and we'll never get to this point.
15219f606849Smrg
1522949d0342Smrgkernel=
1523dc088bc7Smrgobj=
1524949d0342Smrgcase $cpu-$vendor in
1525cdbfa18aSmrg	score-*)
1526dc088bc7Smrg		os=
1527dc088bc7Smrg		obj=elf
1528fba89afeSmrg		;;
1529cdbfa18aSmrg	spu-*)
1530dc088bc7Smrg		os=
1531dc088bc7Smrg		obj=elf
1532fba89afeSmrg		;;
15339f606849Smrg	*-acorn)
1534949d0342Smrg		os=riscix1.2
15359f606849Smrg		;;
15369f606849Smrg	arm*-rebel)
1537949d0342Smrg		kernel=linux
1538949d0342Smrg		os=gnu
15399f606849Smrg		;;
15409f606849Smrg	arm*-semi)
1541dc088bc7Smrg		os=
1542dc088bc7Smrg		obj=aout
15439f606849Smrg		;;
1544cdbfa18aSmrg	c4x-* | tic4x-*)
1545dc088bc7Smrg		os=
1546dc088bc7Smrg		obj=coff
1547cdbfa18aSmrg		;;
1548444fb138Smrg	c8051-*)
1549dc088bc7Smrg		os=
1550dc088bc7Smrg		obj=elf
1551949d0342Smrg		;;
1552949d0342Smrg	clipper-intergraph)
1553949d0342Smrg		os=clix
1554444fb138Smrg		;;
1555cdbfa18aSmrg	hexagon-*)
1556dc088bc7Smrg		os=
1557dc088bc7Smrg		obj=elf
1558fba89afeSmrg		;;
1559d5c3dbf1Smrg	tic54x-*)
1560dc088bc7Smrg		os=
1561dc088bc7Smrg		obj=coff
1562d5c3dbf1Smrg		;;
1563d5c3dbf1Smrg	tic55x-*)
1564dc088bc7Smrg		os=
1565dc088bc7Smrg		obj=coff
1566d5c3dbf1Smrg		;;
1567d5c3dbf1Smrg	tic6x-*)
1568dc088bc7Smrg		os=
1569dc088bc7Smrg		obj=coff
1570d5c3dbf1Smrg		;;
15719f606849Smrg	# This must come before the *-dec entry.
15729f606849Smrg	pdp10-*)
1573949d0342Smrg		os=tops20
15749f606849Smrg		;;
15759f606849Smrg	pdp11-*)
1576949d0342Smrg		os=none
15779f606849Smrg		;;
15789f606849Smrg	*-dec | vax-*)
1579949d0342Smrg		os=ultrix4.2
15809f606849Smrg		;;
15819f606849Smrg	m68*-apollo)
1582949d0342Smrg		os=domain
15839f606849Smrg		;;
15849f606849Smrg	i386-sun)
1585949d0342Smrg		os=sunos4.0.2
15869f606849Smrg		;;
15879f606849Smrg	m68000-sun)
1588949d0342Smrg		os=sunos3
15899f606849Smrg		;;
15909f606849Smrg	m68*-cisco)
1591dc088bc7Smrg		os=
1592dc088bc7Smrg		obj=aout
15939f606849Smrg		;;
1594cdbfa18aSmrg	mep-*)
1595dc088bc7Smrg		os=
1596dc088bc7Smrg		obj=elf
1597fba89afeSmrg		;;
15989f606849Smrg	mips*-cisco)
1599dc088bc7Smrg		os=
1600dc088bc7Smrg		obj=elf
16019f606849Smrg		;;
1602dc088bc7Smrg	mips*-*|nanomips*-*)
1603dc088bc7Smrg		os=
1604dc088bc7Smrg		obj=elf
1605cdbfa18aSmrg		;;
16069f606849Smrg	or32-*)
1607dc088bc7Smrg		os=
1608dc088bc7Smrg		obj=coff
16099f606849Smrg		;;
16109f606849Smrg	*-tti)	# must be before sparc entry or we get the wrong os.
1611949d0342Smrg		os=sysv3
16129f606849Smrg		;;
16139f606849Smrg	sparc-* | *-sun)
1614949d0342Smrg		os=sunos4.1.1
16159f606849Smrg		;;
1616949d0342Smrg	pru-*)
1617dc088bc7Smrg		os=
1618dc088bc7Smrg		obj=elf
16199f606849Smrg		;;
1620949d0342Smrg	*-be)
1621949d0342Smrg		os=beos
16229f606849Smrg		;;
16239f606849Smrg	*-ibm)
1624949d0342Smrg		os=aix
16259f606849Smrg		;;
1626cdbfa18aSmrg	*-knuth)
1627949d0342Smrg		os=mmixware
16289f606849Smrg		;;
16299f606849Smrg	*-wec)
1630949d0342Smrg		os=proelf
16319f606849Smrg		;;
16329f606849Smrg	*-winbond)
1633949d0342Smrg		os=proelf
16349f606849Smrg		;;
16359f606849Smrg	*-oki)
1636949d0342Smrg		os=proelf
16379f606849Smrg		;;
16389f606849Smrg	*-hp)
1639949d0342Smrg		os=hpux
16409f606849Smrg		;;
16419f606849Smrg	*-hitachi)
1642949d0342Smrg		os=hiux
16439f606849Smrg		;;
16449f606849Smrg	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1645949d0342Smrg		os=sysv
16469f606849Smrg		;;
16479f606849Smrg	*-cbm)
1648949d0342Smrg		os=amigaos
16499f606849Smrg		;;
16509f606849Smrg	*-dg)
1651949d0342Smrg		os=dgux
16529f606849Smrg		;;
16539f606849Smrg	*-dolphin)
1654949d0342Smrg		os=sysv3
16559f606849Smrg		;;
16569f606849Smrg	m68k-ccur)
1657949d0342Smrg		os=rtu
16589f606849Smrg		;;
16599f606849Smrg	m88k-omron*)
1660949d0342Smrg		os=luna
16619f606849Smrg		;;
1662949d0342Smrg	*-next)
1663949d0342Smrg		os=nextstep
16649f606849Smrg		;;
16659f606849Smrg	*-sequent)
1666949d0342Smrg		os=ptx
16679f606849Smrg		;;
16689f606849Smrg	*-crds)
1669949d0342Smrg		os=unos
16709f606849Smrg		;;
16719f606849Smrg	*-ns)
1672949d0342Smrg		os=genix
16739f606849Smrg		;;
16749f606849Smrg	i370-*)
1675949d0342Smrg		os=mvs
16769f606849Smrg		;;
16779f606849Smrg	*-gould)
1678949d0342Smrg		os=sysv
16799f606849Smrg		;;
16809f606849Smrg	*-highlevel)
1681949d0342Smrg		os=bsd
16829f606849Smrg		;;
16839f606849Smrg	*-encore)
1684949d0342Smrg		os=bsd
16859f606849Smrg		;;
16869f606849Smrg	*-sgi)
1687949d0342Smrg		os=irix
16889f606849Smrg		;;
16899f606849Smrg	*-siemens)
1690949d0342Smrg		os=sysv4
16919f606849Smrg		;;
16929f606849Smrg	*-masscomp)
1693949d0342Smrg		os=rtu
16949f606849Smrg		;;
16959f606849Smrg	f30[01]-fujitsu | f700-fujitsu)
1696949d0342Smrg		os=uxpv
16979f606849Smrg		;;
16989f606849Smrg	*-rom68k)
1699dc088bc7Smrg		os=
1700dc088bc7Smrg		obj=coff
17019f606849Smrg		;;
17029f606849Smrg	*-*bug)
1703dc088bc7Smrg		os=
1704dc088bc7Smrg		obj=coff
17059f606849Smrg		;;
17069f606849Smrg	*-apple)
1707949d0342Smrg		os=macos
17089f606849Smrg		;;
17099f606849Smrg	*-atari*)
1710949d0342Smrg		os=mint
1711949d0342Smrg		;;
1712949d0342Smrg	*-wrs)
1713949d0342Smrg		os=vxworks
17149f606849Smrg		;;
17159f606849Smrg	*)
1716949d0342Smrg		os=none
17179f606849Smrg		;;
17189f606849Smrgesac
1719949d0342Smrg
17209f606849Smrgfi
17219f606849Smrg
1722dc088bc7Smrg# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
1723dc088bc7Smrg
1724949d0342Smrgcase $os in
1725949d0342Smrg	# Sometimes we do "kernel-libc", so those need to count as OSes.
1726dc088bc7Smrg	llvm* | musl* | newlib* | relibc* | uclibc*)
1727949d0342Smrg		;;
1728949d0342Smrg	# Likewise for "kernel-abi"
1729949d0342Smrg	eabi* | gnueabi*)
1730949d0342Smrg		;;
1731949d0342Smrg	# VxWorks passes extra cpu info in the 4th filed.
1732949d0342Smrg	simlinux | simwindows | spe)
1733949d0342Smrg		;;
1734dc088bc7Smrg	# See `case $cpu-$os` validation below
1735dc088bc7Smrg	ghcjs)
1736dc088bc7Smrg		;;
1737949d0342Smrg	# Now accept the basic system types.
1738949d0342Smrg	# The portable systems comes first.
1739949d0342Smrg	# Each alternative MUST end in a * to match a version number.
1740949d0342Smrg	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
1741949d0342Smrg	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
1742949d0342Smrg	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
1743949d0342Smrg	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
1744949d0342Smrg	     | hiux* | abug | nacl* | netware* | windows* \
1745dc088bc7Smrg	     | os9* | macos* | osx* | ios* | tvos* | watchos* \
1746949d0342Smrg	     | mpw* | magic* | mmixware* | mon960* | lnews* \
1747949d0342Smrg	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
1748949d0342Smrg	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
1749949d0342Smrg	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
1750949d0342Smrg	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
1751949d0342Smrg	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
1752949d0342Smrg	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
1753949d0342Smrg	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
1754dc088bc7Smrg	     | bosx* | nextstep* | cxux* | oabi* \
1755dc088bc7Smrg	     | ptx* | ecoff* | winnt* | domain* | vsta* \
1756949d0342Smrg	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
1757949d0342Smrg	     | chorusrdb* | cegcc* | glidix* | serenity* \
1758dc088bc7Smrg	     | cygwin* | msys* | moss* | proelf* | rtems* \
1759949d0342Smrg	     | midipix* | mingw32* | mingw64* | mint* \
1760949d0342Smrg	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
1761949d0342Smrg	     | interix* | uwin* | mks* | rhapsody* | darwin* \
1762949d0342Smrg	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
1763949d0342Smrg	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
1764949d0342Smrg	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
1765949d0342Smrg	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
1766949d0342Smrg	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
1767949d0342Smrg	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
1768949d0342Smrg	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
1769949d0342Smrg	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
1770dc088bc7Smrg	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
1771dc088bc7Smrg	     | fiwix* | mlibc* | cos* | mbr* | ironclad* )
1772949d0342Smrg		;;
1773949d0342Smrg	# This one is extra strict with allowed versions
1774949d0342Smrg	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
1775949d0342Smrg		# Don't forget version if it is 3.2v4 or newer.
1776949d0342Smrg		;;
1777dc088bc7Smrg	# This refers to builds using the UEFI calling convention
1778dc088bc7Smrg	# (which depends on the architecture) and PE file format.
1779dc088bc7Smrg	# Note that this is both a different calling convention and
1780dc088bc7Smrg	# different file format than that of GNU-EFI
1781dc088bc7Smrg	# (x86_64-w64-mingw32).
1782dc088bc7Smrg	uefi)
1783dc088bc7Smrg		;;
1784949d0342Smrg	none)
1785949d0342Smrg		;;
1786dc088bc7Smrg	kernel* | msvc* )
1787dc088bc7Smrg		# Restricted further below
1788dc088bc7Smrg		;;
1789dc088bc7Smrg	'')
1790dc088bc7Smrg		if test x"$obj" = x
1791dc088bc7Smrg		then
1792dc088bc7Smrg			echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
1793dc088bc7Smrg		fi
1794dc088bc7Smrg		;;
1795949d0342Smrg	*)
1796dc088bc7Smrg		echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
1797dc088bc7Smrg		exit 1
1798dc088bc7Smrg		;;
1799dc088bc7Smrgesac
1800dc088bc7Smrg
1801dc088bc7Smrgcase $obj in
1802dc088bc7Smrg	aout* | coff* | elf* | pe*)
1803dc088bc7Smrg		;;
1804dc088bc7Smrg	'')
1805dc088bc7Smrg		# empty is fine
1806dc088bc7Smrg		;;
1807dc088bc7Smrg	*)
1808dc088bc7Smrg		echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
1809dc088bc7Smrg		exit 1
1810dc088bc7Smrg		;;
1811dc088bc7Smrgesac
1812dc088bc7Smrg
1813dc088bc7Smrg# Here we handle the constraint that a (synthetic) cpu and os are
1814dc088bc7Smrg# valid only in combination with each other and nowhere else.
1815dc088bc7Smrgcase $cpu-$os in
1816dc088bc7Smrg	# The "javascript-unknown-ghcjs" triple is used by GHC; we
1817dc088bc7Smrg	# accept it here in order to tolerate that, but reject any
1818dc088bc7Smrg	# variations.
1819dc088bc7Smrg	javascript-ghcjs)
1820dc088bc7Smrg		;;
1821dc088bc7Smrg	javascript-* | *-ghcjs)
1822dc088bc7Smrg		echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
1823949d0342Smrg		exit 1
1824949d0342Smrg		;;
1825949d0342Smrgesac
1826949d0342Smrg
1827949d0342Smrg# As a final step for OS-related things, validate the OS-kernel combination
1828949d0342Smrg# (given a valid OS), if there is a kernel.
1829dc088bc7Smrgcase $kernel-$os-$obj in
1830dc088bc7Smrg	linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
1831dc088bc7Smrg		    | linux-mlibc*- | linux-musl*- | linux-newlib*- \
1832dc088bc7Smrg		    | linux-relibc*- | linux-uclibc*- )
1833dc088bc7Smrg		;;
1834dc088bc7Smrg	uclinux-uclibc*- )
1835dc088bc7Smrg		;;
1836dc088bc7Smrg	managarm-mlibc*- | managarm-kernel*- )
1837949d0342Smrg		;;
1838dc088bc7Smrg	windows*-msvc*-)
1839949d0342Smrg		;;
1840dc088bc7Smrg	-dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \
1841dc088bc7Smrg		    | -uclibc*- )
1842949d0342Smrg		# These are just libc implementations, not actual OSes, and thus
1843949d0342Smrg		# require a kernel.
1844dc088bc7Smrg		echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
1845949d0342Smrg		exit 1
1846949d0342Smrg		;;
1847dc088bc7Smrg	-kernel*- )
1848dc088bc7Smrg		echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
1849dc088bc7Smrg		exit 1
1850949d0342Smrg		;;
1851dc088bc7Smrg	*-kernel*- )
1852dc088bc7Smrg		echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
1853dc088bc7Smrg		exit 1
1854949d0342Smrg		;;
1855dc088bc7Smrg	*-msvc*- )
1856dc088bc7Smrg		echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
1857dc088bc7Smrg		exit 1
1858949d0342Smrg		;;
1859dc088bc7Smrg	kfreebsd*-gnu*- | kopensolaris*-gnu*-)
1860dc088bc7Smrg		;;
1861dc088bc7Smrg	vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
1862dc088bc7Smrg		;;
1863dc088bc7Smrg	nto-qnx*-)
1864dc088bc7Smrg		;;
1865dc088bc7Smrg	os2-emx-)
1866949d0342Smrg		;;
1867dc088bc7Smrg	*-eabi*- | *-gnueabi*-)
1868949d0342Smrg		;;
1869dc088bc7Smrg	none--*)
1870dc088bc7Smrg		# None (no kernel, i.e. freestanding / bare metal),
1871dc088bc7Smrg		# can be paired with an machine code file format
1872dc088bc7Smrg		;;
1873dc088bc7Smrg	-*-)
1874949d0342Smrg		# Blank kernel with real OS is always fine.
1875949d0342Smrg		;;
1876dc088bc7Smrg	--*)
1877dc088bc7Smrg		# Blank kernel and OS with real machine code file format is always fine.
1878dc088bc7Smrg		;;
1879dc088bc7Smrg	*-*-*)
1880dc088bc7Smrg		echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
1881949d0342Smrg		exit 1
1882949d0342Smrg		;;
1883949d0342Smrgesac
1884949d0342Smrg
18859f606849Smrg# Here we handle the case where we know the os, and the CPU type, but not the
18869f606849Smrg# manufacturer.  We pick the logical manufacturer.
1887949d0342Smrgcase $vendor in
1888949d0342Smrg	unknown)
1889949d0342Smrg		case $cpu-$os in
1890949d0342Smrg			*-riscix*)
18919f606849Smrg				vendor=acorn
18929f606849Smrg				;;
1893949d0342Smrg			*-sunos*)
18949f606849Smrg				vendor=sun
18959f606849Smrg				;;
1896949d0342Smrg			*-cnk* | *-aix*)
18979f606849Smrg				vendor=ibm
18989f606849Smrg				;;
1899949d0342Smrg			*-beos*)
19009f606849Smrg				vendor=be
19019f606849Smrg				;;
1902949d0342Smrg			*-hpux*)
19039f606849Smrg				vendor=hp
19049f606849Smrg				;;
1905949d0342Smrg			*-mpeix*)
19069f606849Smrg				vendor=hp
19079f606849Smrg				;;
1908949d0342Smrg			*-hiux*)
19099f606849Smrg				vendor=hitachi
19109f606849Smrg				;;
1911949d0342Smrg			*-unos*)
19129f606849Smrg				vendor=crds
19139f606849Smrg				;;
1914949d0342Smrg			*-dgux*)
19159f606849Smrg				vendor=dg
19169f606849Smrg				;;
1917949d0342Smrg			*-luna*)
19189f606849Smrg				vendor=omron
19199f606849Smrg				;;
1920949d0342Smrg			*-genix*)
19219f606849Smrg				vendor=ns
19229f606849Smrg				;;
1923949d0342Smrg			*-clix*)
1924949d0342Smrg				vendor=intergraph
1925949d0342Smrg				;;
1926949d0342Smrg			*-mvs* | *-opened*)
1927949d0342Smrg				vendor=ibm
1928949d0342Smrg				;;
1929949d0342Smrg			*-os400*)
19309f606849Smrg				vendor=ibm
19319f606849Smrg				;;
1932949d0342Smrg			s390-* | s390x-*)
19339f606849Smrg				vendor=ibm
19349f606849Smrg				;;
1935949d0342Smrg			*-ptx*)
19369f606849Smrg				vendor=sequent
19379f606849Smrg				;;
1938949d0342Smrg			*-tpf*)
19399f606849Smrg				vendor=ibm
19409f606849Smrg				;;
1941949d0342Smrg			*-vxsim* | *-vxworks* | *-windiss*)
19429f606849Smrg				vendor=wrs
19439f606849Smrg				;;
1944949d0342Smrg			*-aux*)
19459f606849Smrg				vendor=apple
19469f606849Smrg				;;
1947949d0342Smrg			*-hms*)
19489f606849Smrg				vendor=hitachi
19499f606849Smrg				;;
1950949d0342Smrg			*-mpw* | *-macos*)
19519f606849Smrg				vendor=apple
19529f606849Smrg				;;
1953949d0342Smrg			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
19549f606849Smrg				vendor=atari
19559f606849Smrg				;;
1956949d0342Smrg			*-vos*)
19579f606849Smrg				vendor=stratus
19589f606849Smrg				;;
19599f606849Smrg		esac
19609f606849Smrg		;;
19619f606849Smrgesac
19629f606849Smrg
1963dc088bc7Smrgecho "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
19649f606849Smrgexit
19659f606849Smrg
19669f606849Smrg# Local variables:
1967949d0342Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
19689f606849Smrg# time-stamp-start: "timestamp='"
19699f606849Smrg# time-stamp-format: "%:y-%02m-%02d"
19709f606849Smrg# time-stamp-end: "'"
19719f606849Smrg# End:
1972