config.sub 30.9 KB
Newer Older
1
2
#! /bin/sh
# Configuration validation subroutine script.
3
#   Copyright 1992-2020 Free Software Foundation, Inc.
4

5
timestamp='2020-01-01'
6

7
8
9
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
10
11
# (at your option) any later version.
#
12
13
14
15
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
16
17
#
# You should have received a copy of the GNU General Public License
18
# along with this program; if not, see <https://www.gnu.org/licenses/>.
19
#
20
21
22
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
23
24
25
# the same distribution terms that you use for the rest of that
# program.  This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
26

27

28
# Please send patches to <config-patches@gnu.org>.
29
30
31
32
33
34
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.

35
# You can get the latest version of this script from:
36
# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
37

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
# Each package is responsible for reporting which valid configurations
# it does not support.  The user should be able to distinguish
# a failure to support a valid configuration from a meaningless
# configuration.

# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or in some cases, the newer four-part form:
#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.

me=`echo "$0" | sed -e 's,.*/,,'`

usage="\
56
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
57
58
59

Canonicalize a configuration name.

60
Options:
61
62
63
64
65
66
67
68
69
  -h, --help         print this help, then exit
  -t, --time-stamp   print date of last modification, then exit
  -v, --version      print version number, then exit

Report bugs and patches to <config-patches@gnu.org>."

version="\
GNU config.sub ($timestamp)

70
Copyright 1992-2020 Free Software Foundation, Inc.
71
72
73
74
75
76
77
78
79
80
81

This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."

help="
Try \`$me --help' for more information."

# Parse command line
while test $# -gt 0 ; do
  case $1 in
    --time-stamp | --time* | -t )
82
       echo "$timestamp" ; exit ;;
83
    --version | -v )
84
       echo "$version" ; exit ;;
85
    --help | --h* | -h )
86
       echo "$usage"; exit ;;
87
88
89
90
91
    -- )     # Stop option processing
       shift; break ;;
    - )	# Use stdin as input.
       break ;;
    -* )
92
       echo "$me: invalid option $1$help" >&2
93
94
95
96
       exit 1 ;;

    *local*)
       # First pass through any local machine types.
97
       echo "$1"
98
       exit ;;
99
100
101
102
103
104
105
106
107
108
109
110
111
112

    * )
       break ;;
  esac
done

case $# in
 0) echo "$me: missing argument$help" >&2
    exit 1;;
 1) ;;
 *) echo "$me: too many arguments$help" >&2
    exit 1;;
esac

113
114
115
116
117
# Split fields of configuration type
# shellcheck disable=SC2162
IFS="-" read field1 field2 field3 field4 <<EOF
$1
EOF
118

119
120
121
122
123
# Separate into logical components for further validation
case $1 in
	*-*-*-*-*)
		echo Invalid configuration \`"$1"\': more than four components >&2
		exit 1
124
		;;
125
126
127
	*-*-*-*)
		basic_machine=$field1-$field2
		os=$field3-$field4
128
		;;
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
	*-*-*)
		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
		# parts
		maybe_os=$field2-$field3
		case $maybe_os in
			nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
			| linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
			| storm-chaos* | os2-emx* | rtmk-nova*)
				basic_machine=$field1
				os=$maybe_os
				;;
			android-linux)
				basic_machine=$field1-unknown
				os=linux-android
				;;
			*)
				basic_machine=$field1-$field2
				os=$field3
				;;
		esac
151
		;;
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
	*-*)
		# A lone config we happen to match not fitting any pattern
		case $field1-$field2 in
			decstation-3100)
				basic_machine=mips-dec
				os=
				;;
			*-*)
				# Second component is usually, but not always the OS
				case $field2 in
					# Prevent following clause from handling this valid os
					sun*os*)
						basic_machine=$field1
						os=$field2
						;;
					# Manufacturers
					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
					| convergent* | ncr* | news | 32* | 3600* | 3100* \
					| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
					| ultra | tti* | harris | dolphin | highlevel | gould \
					| cbm | ns | masscomp | apple | axis | knuth | cray \
					| microblaze* | sim | cisco \
					| oki | wec | wrs | winbond)
						basic_machine=$field1-$field2
						os=
						;;
					*)
						basic_machine=$field1
						os=$field2
						;;
				esac
			;;
		esac
187
		;;
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
	*)
		# Convert single-component short-hands not valid as part of
		# multi-component configurations.
		case $field1 in
			386bsd)
				basic_machine=i386-pc
				os=bsd
				;;
			a29khif)
				basic_machine=a29k-amd
				os=udi
				;;
			adobe68k)
				basic_machine=m68010-adobe
				os=scout
				;;
			alliant)
				basic_machine=fx80-alliant
				os=
				;;
			altos | altos3068)
				basic_machine=m68k-altos
				os=
				;;
			am29k)
				basic_machine=a29k-none
				os=bsd
				;;
			amdahl)
				basic_machine=580-amdahl
				os=sysv
				;;
			amiga)
				basic_machine=m68k-unknown
				os=
				;;
			amigaos | amigados)
				basic_machine=m68k-unknown
				os=amigaos
				;;
			amigaunix | amix)
				basic_machine=m68k-unknown
				os=sysv4
				;;
			apollo68)
				basic_machine=m68k-apollo
				os=sysv
				;;
			apollo68bsd)
				basic_machine=m68k-apollo
				os=bsd
				;;
			aros)
				basic_machine=i386-pc
				os=aros
				;;
			aux)
				basic_machine=m68k-apple
				os=aux
				;;
			balance)
				basic_machine=ns32k-sequent
				os=dynix
				;;
			blackfin)
				basic_machine=bfin-unknown
				os=linux
				;;
			cegcc)
				basic_machine=arm-unknown
				os=cegcc
				;;
			convex-c1)
				basic_machine=c1-convex
				os=bsd
				;;
			convex-c2)
				basic_machine=c2-convex
				os=bsd
				;;
			convex-c32)
				basic_machine=c32-convex
				os=bsd
				;;
			convex-c34)
				basic_machine=c34-convex
				os=bsd
				;;
			convex-c38)
				basic_machine=c38-convex
				os=bsd
				;;
			cray)
				basic_machine=j90-cray
				os=unicos
				;;
			crds | unos)
				basic_machine=m68k-crds
				os=
				;;
			da30)
				basic_machine=m68k-da30
				os=
				;;
			decstation | pmax | pmin | dec3100 | decstatn)
				basic_machine=mips-dec
				os=
				;;
			delta88)
				basic_machine=m88k-motorola
				os=sysv3
				;;
			dicos)
				basic_machine=i686-pc
				os=dicos
				;;
			djgpp)
				basic_machine=i586-pc
				os=msdosdjgpp
				;;
			ebmon29k)
				basic_machine=a29k-amd
				os=ebmon
				;;
			es1800 | OSE68k | ose68k | ose | OSE)
				basic_machine=m68k-ericsson
				os=ose
				;;
			gmicro)
				basic_machine=tron-gmicro
				os=sysv
				;;
			go32)
				basic_machine=i386-pc
				os=go32
				;;
			h8300hms)
				basic_machine=h8300-hitachi
				os=hms
				;;
			h8300xray)
				basic_machine=h8300-hitachi
				os=xray
				;;
			h8500hms)
				basic_machine=h8500-hitachi
				os=hms
				;;
			harris)
				basic_machine=m88k-harris
				os=sysv3
				;;
340
			hp300 | hp300hpux)
341
				basic_machine=m68k-hp
342
				os=hpux
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
				;;
			hp300bsd)
				basic_machine=m68k-hp
				os=bsd
				;;
			hppaosf)
				basic_machine=hppa1.1-hp
				os=osf
				;;
			hppro)
				basic_machine=hppa1.1-hp
				os=proelf
				;;
			i386mach)
				basic_machine=i386-mach
				os=mach
				;;
			isi68 | isi)
				basic_machine=m68k-isi
				os=sysv
				;;
			m68knommu)
				basic_machine=m68k-unknown
				os=linux
				;;
			magnum | m3230)
				basic_machine=mips-mips
				os=sysv
				;;
			merlin)
				basic_machine=ns32k-utek
				os=sysv
				;;
			mingw64)
				basic_machine=x86_64-pc
				os=mingw64
				;;
			mingw32)
				basic_machine=i686-pc
				os=mingw32
				;;
			mingw32ce)
				basic_machine=arm-unknown
				os=mingw32ce
				;;
			monitor)
				basic_machine=m68k-rom68k
				os=coff
				;;
			morphos)
				basic_machine=powerpc-unknown
				os=morphos
				;;
			moxiebox)
				basic_machine=moxie-unknown
				os=moxiebox
				;;
			msdos)
				basic_machine=i386-pc
				os=msdos
				;;
			msys)
				basic_machine=i686-pc
				os=msys
				;;
			mvs)
				basic_machine=i370-ibm
				os=mvs
				;;
			nacl)
				basic_machine=le32-unknown
				os=nacl
				;;
			ncr3000)
				basic_machine=i486-ncr
				os=sysv4
				;;
			netbsd386)
				basic_machine=i386-pc
				os=netbsd
				;;
			netwinder)
				basic_machine=armv4l-rebel
				os=linux
				;;
			news | news700 | news800 | news900)
				basic_machine=m68k-sony
				os=newsos
				;;
			news1000)
				basic_machine=m68030-sony
				os=newsos
				;;
			necv70)
				basic_machine=v70-nec
				os=sysv
				;;
			nh3000)
				basic_machine=m68k-harris
				os=cxux
				;;
			nh[45]000)
				basic_machine=m88k-harris
				os=cxux
				;;
			nindy960)
				basic_machine=i960-intel
				os=nindy
				;;
			mon960)
				basic_machine=i960-intel
				os=mon960
				;;
			nonstopux)
				basic_machine=mips-compaq
				os=nonstopux
				;;
			os400)
				basic_machine=powerpc-ibm
				os=os400
				;;
			OSE68000 | ose68000)
				basic_machine=m68000-ericsson
				os=ose
				;;
			os68k)
				basic_machine=m68k-none
				os=os68k
				;;
			paragon)
				basic_machine=i860-intel
				os=osf
				;;
			parisc)
				basic_machine=hppa-unknown
				os=linux
				;;
			pw32)
				basic_machine=i586-unknown
				os=pw32
				;;
			rdos | rdos64)
				basic_machine=x86_64-pc
				os=rdos
				;;
			rdos32)
				basic_machine=i386-pc
				os=rdos
				;;
			rom68k)
				basic_machine=m68k-rom68k
				os=coff
				;;
			sa29200)
				basic_machine=a29k-amd
				os=udi
				;;
			sei)
				basic_machine=mips-sei
				os=seiux
				;;
			sequent)
				basic_machine=i386-sequent
				os=
				;;
			sps7)
				basic_machine=m68k-bull
				os=sysv2
				;;
			st2000)
				basic_machine=m68k-tandem
				os=
				;;
			stratus)
				basic_machine=i860-stratus
				os=sysv4
				;;
			sun2)
				basic_machine=m68000-sun
				os=
				;;
			sun2os3)
				basic_machine=m68000-sun
				os=sunos3
				;;
			sun2os4)
				basic_machine=m68000-sun
				os=sunos4
				;;
			sun3)
				basic_machine=m68k-sun
				os=
				;;
			sun3os3)
				basic_machine=m68k-sun
				os=sunos3
				;;
			sun3os4)
				basic_machine=m68k-sun
				os=sunos4
				;;
			sun4)
				basic_machine=sparc-sun
				os=
				;;
			sun4os3)
				basic_machine=sparc-sun
				os=sunos3
				;;
			sun4os4)
				basic_machine=sparc-sun
				os=sunos4
				;;
			sun4sol2)
				basic_machine=sparc-sun
				os=solaris2
				;;
			sun386 | sun386i | roadrunner)
				basic_machine=i386-sun
				os=
				;;
			sv1)
				basic_machine=sv1-cray
				os=unicos
				;;
			symmetry)
				basic_machine=i386-sequent
				os=dynix
				;;
			t3e)
				basic_machine=alphaev5-cray
				os=unicos
				;;
			t90)
				basic_machine=t90-cray
				os=unicos
				;;
			toad1)
				basic_machine=pdp10-xkl
				os=tops20
				;;
			tpf)
				basic_machine=s390x-ibm
				os=tpf
				;;
			udi29k)
				basic_machine=a29k-amd
				os=udi
				;;
			ultra3)
				basic_machine=a29k-nyu
				os=sym1
				;;
			v810 | necv810)
				basic_machine=v810-nec
				os=none
				;;
			vaxv)
				basic_machine=vax-dec
				os=sysv
				;;
			vms)
				basic_machine=vax-dec
				os=vms
				;;
608
609
610
611
			vsta)
				basic_machine=i386-pc
				os=vsta
				;;
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
			vxworks960)
				basic_machine=i960-wrs
				os=vxworks
				;;
			vxworks68)
				basic_machine=m68k-wrs
				os=vxworks
				;;
			vxworks29k)
				basic_machine=a29k-wrs
				os=vxworks
				;;
			xbox)
				basic_machine=i686-pc
				os=mingw32
				;;
			ymp)
				basic_machine=ymp-cray
				os=unicos
				;;
			*)
				basic_machine=$1
				os=
				;;
		esac
637
638
639
		;;
esac

640
# Decode 1-component or ad-hoc basic machines
641
case $basic_machine in
642
643
644
645
646
	# Here we handle the default manufacturer of certain CPU types.  It is in
	# some cases the only manufacturer, in others, it is the most popular.
	w89k)
		cpu=hppa1.1
		vendor=winbond
647
		;;
648
649
650
	op50n)
		cpu=hppa1.1
		vendor=oki
651
		;;
652
653
654
	op60c)
		cpu=hppa1.1
		vendor=oki
655
		;;
656
657
658
	ibm*)
		cpu=i370
		vendor=ibm
659
		;;
660
661
662
	orion105)
		cpu=clipper
		vendor=highlevel
663
		;;
664
665
666
	mac | mpw | mac-mpw)
		cpu=m68k
		vendor=apple
667
		;;
668
669
670
	pmac | pmac-mpw)
		cpu=powerpc
		vendor=apple
671
		;;
672

673
674
675
	# Recognize the various machine names and aliases which stand
	# for a CPU type and a company and sometimes even an OS.
	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
676
677
		cpu=m68000
		vendor=att
678
679
		;;
	3b*)
680
681
		cpu=we32k
		vendor=att
682
683
		;;
	bluegene*)
684
685
686
		cpu=powerpc
		vendor=ibm
		os=cnk
687
688
		;;
	decsystem10* | dec10*)
689
690
691
		cpu=pdp10
		vendor=dec
		os=tops10
692
693
		;;
	decsystem20* | dec20*)
694
695
696
		cpu=pdp10
		vendor=dec
		os=tops20
697
698
699
		;;
	delta | 3300 | motorola-3300 | motorola-delta \
	      | 3300-motorola | delta-motorola)
700
701
		cpu=m68k
		vendor=motorola
702
		;;
703
704
705
706
	dpx2*)
		cpu=m68k
		vendor=bull
		os=sysv3
707
708
		;;
	encore | umax | mmax)
709
710
		cpu=ns32k
		vendor=encore
711
		;;
712
713
714
715
	elxsi)
		cpu=elxsi
		vendor=elxsi
		os=${os:-bsd}
716
717
		;;
	fx2800)
718
719
		cpu=i860
		vendor=alliant
720
721
		;;
	genix)
722
723
		cpu=ns32k
		vendor=ns
724
725
		;;
	h3050r* | hiux*)
726
727
728
		cpu=hppa1.1
		vendor=hitachi
		os=hiuxwe2
729
730
		;;
	hp3k9[0-9][0-9] | hp9[0-9][0-9])
731
732
		cpu=hppa1.0
		vendor=hp
733
734
		;;
	hp9k2[0-9][0-9] | hp9k31[0-9])
735
736
		cpu=m68000
		vendor=hp
737
738
		;;
	hp9k3[2-9][0-9])
739
740
		cpu=m68k
		vendor=hp
741
742
		;;
	hp9k6[0-9][0-9] | hp6[0-9][0-9])
743
744
		cpu=hppa1.0
		vendor=hp
745
746
		;;
	hp9k7[0-79][0-9] | hp7[0-79][0-9])
747
748
		cpu=hppa1.1
		vendor=hp
749
750
751
		;;
	hp9k78[0-9] | hp78[0-9])
		# FIXME: really hppa2.0-hp
752
753
		cpu=hppa1.1
		vendor=hp
754
755
756
		;;
	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
		# FIXME: really hppa2.0-hp
757
758
		cpu=hppa1.1
		vendor=hp
759
760
		;;
	hp9k8[0-9][13679] | hp8[0-9][13679])
761
762
		cpu=hppa1.1
		vendor=hp
763
764
		;;
	hp9k8[0-9][0-9] | hp8[0-9][0-9])
765
766
		cpu=hppa1.0
		vendor=hp
767
768
		;;
	i*86v32)
769
770
771
		cpu=`echo "$1" | sed -e 's/86.*/86/'`
		vendor=pc
		os=sysv32
772
773
		;;
	i*86v4*)
774
775
776
		cpu=`echo "$1" | sed -e 's/86.*/86/'`
		vendor=pc
		os=sysv4
777
778
		;;
	i*86v)
779
780
781
		cpu=`echo "$1" | sed -e 's/86.*/86/'`
		vendor=pc
		os=sysv
782
783
		;;
	i*86sol2)
784
785
786
		cpu=`echo "$1" | sed -e 's/86.*/86/'`
		vendor=pc
		os=solaris2
787
		;;
788
789
790
791
	j90 | j90-cray)
		cpu=j90
		vendor=cray
		os=${os:-unicos}
792
793
		;;
	iris | iris4d)
794
795
		cpu=mips
		vendor=sgi
796
		case $os in
797
		    irix*)
798
799
			;;
		    *)
800
			os=irix4
801
802
803
804
			;;
		esac
		;;
	miniframe)
805
806
		cpu=m68000
		vendor=convergent
807
		;;
808
809
810
811
	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
		cpu=m68k
		vendor=atari
		os=mint
812
813
		;;
	news-3600 | risc-news)
814
815
816
		cpu=mips
		vendor=sony
		os=newsos
817
		;;
818
819
820
	next | m*-next)
		cpu=m68k
		vendor=next
821
		case $os in
822
823
824
		    openstep*)
		        ;;
		    nextstep*)
825
			;;
826
827
		    ns2*)
		      os=nextstep2
828
829
			;;
		    *)
830
		      os=nextstep3
831
832
833
834
			;;
		esac
		;;
	np1)
835
836
		cpu=np1
		vendor=gould
837
838
		;;
	op50n-* | op60c-*)
839
840
841
		cpu=hppa1.1
		vendor=oki
		os=proelf
842
843
		;;
	pa-hitachi)
844
845
846
		cpu=hppa1.1
		vendor=hitachi
		os=hiuxwe2
847
		;;
848
	pbd)
849
850
		cpu=sparc
		vendor=tti
851
852
		;;
	pbb)
853
854
		cpu=m68k
		vendor=tti
855
		;;
856
857
858
	pc532)
		cpu=ns32k
		vendor=pc532
859
860
		;;
	pn)
861
862
		cpu=pn
		vendor=gould
863
		;;
864
865
866
	power)
		cpu=power
		vendor=ibm
867
868
		;;
	ps2)
869
870
		cpu=i386
		vendor=ibm
871
872
		;;
	rm[46]00)
873
874
		cpu=mips
		vendor=siemens
875
876
		;;
	rtpc | rtpc-*)
877
878
		cpu=romp
		vendor=ibm
879
		;;
880
881
882
883
	sde)
		cpu=mipsisa32
		vendor=sde
		os=${os:-elf}
884
		;;
885
886
887
888
	simso-wrs)
		cpu=sparclite
		vendor=wrs
		os=vxworks
889
		;;
890
891
892
	tower | tower-32)
		cpu=m68k
		vendor=ncr
893
		;;
894
895
896
	vpp*|vx|vx-*)
		cpu=f301
		vendor=fujitsu
897
		;;
898
899
900
	w65)
		cpu=w65
		vendor=wdc
901
		;;
902
903
904
905
	w89k-*)
		cpu=hppa1.1
		vendor=winbond
		os=proelf
906
		;;
907
908
909
	none)
		cpu=none
		vendor=none
910
		;;
911
912
913
	leon|leon[3-9])
		cpu=sparc
		vendor=$basic_machine
914
		;;
915
916
917
	leon-*|leon[3-9]-*)
		cpu=sparc
		vendor=`echo "$basic_machine" | sed 's/-.*//'`
918
		;;
919
920
921
922
923
924

	*-*)
		# shellcheck disable=SC2162
		IFS="-" read cpu vendor <<EOF
$basic_machine
EOF
925
		;;
926
927
928
929
930
931
	# We use `pc' rather than `unknown'
	# because (1) that's what they normally are, and
	# (2) the word "unknown" tends to confuse beginning users.
	i*86 | x86_64)
		cpu=$basic_machine
		vendor=pc
932
		;;
933
934
935
936
937
	# These rules are duplicated from below for sake of the special case above;
	# i.e. things that normalized to x86 arches should also default to "pc"
	pc98)
		cpu=i386
		vendor=pc
938
		;;
939
940
941
	x64 | amd64)
		cpu=x86_64
		vendor=pc
942
		;;
943
944
945
946
	# Recognize the basic CPU types without company name.
	*)
		cpu=$basic_machine
		vendor=unknown
947
		;;
948
949
950
951
952
953
954
955
956
957
958
esac

unset -v basic_machine

# Decode basic machines in the full and proper CPU-Company form.
case $cpu-$vendor in
	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
	# some cases the only manufacturer, in others, it is the most popular.
	craynv-unknown)
		vendor=cray
		os=${os:-unicosmp}
959
		;;
960
961
962
	c90-unknown | c90-cray)
		vendor=cray
		os=${os:-unicos}
963
		;;
964
965
	fx80-unknown)
		vendor=alliant
966
		;;
967
968
	romp-unknown)
		vendor=ibm
969
		;;
970
971
	mmix-unknown)
		vendor=knuth
972
		;;
973
974
	microblaze-unknown | microblazeel-unknown)
		vendor=xilinx
975
		;;
976
977
	rs6000-unknown)
		vendor=ibm
978
		;;
979
980
	vax-unknown)
		vendor=dec
981
		;;
982
983
	pdp11-unknown)
		vendor=dec
984
		;;
985
986
	we32k-unknown)
		vendor=att
987
		;;
988
989
	cydra-unknown)
		vendor=cydrome
990
		;;
991
992
	i370-ibm*)
		vendor=ibm
993
		;;
994
995
	orion-unknown)
		vendor=highlevel
996
		;;
997
998
999
	xps-unknown | xps100-unknown)
		cpu=xps100
		vendor=honeywell
1000
		;;
1001
1002
1003
1004
1005
1006

	# Here we normalize CPU types with a missing or matching vendor
	dpx20-unknown | dpx20-bull)
		cpu=rs6000
		vendor=bull
		os=${os:-bosx}
1007
		;;
1008
1009
1010
1011

	# Here we normalize CPU types irrespective of the vendor
	amd64-*)
		cpu=x86_64
1012
		;;
1013
1014
1015
	blackfin-*)
		cpu=bfin
		os=linux
1016
		;;
1017
1018
	c54x-*)
		cpu=tic54x
1019
		;;
1020
1021
	c55x-*)
		cpu=tic55x
1022
		;;
1023
1024
	c6x-*)
		cpu=tic6x
1025
		;;
1026
1027
1028
	e500v[12]-*)
		cpu=powerpc
		os=$os"spe"
1029
		;;
1030
1031
	mips3*-*)
		cpu=mips64
1032
		;;
1033
1034
	ms1-*)
		cpu=mt
1035
		;;
1036
1037
1038
	m68knommu-*)
		cpu=m68k
		os=linux
1039
		;;
1040
1041
	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
		cpu=s12z
1042
		;;
1043
1044
	openrisc-*)
		cpu=or32
1045
		;;
1046
1047
1048
	parisc-*)
		cpu=hppa
		os=linux
1049
		;;
1050
1051
	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
		cpu=i586
1052
		;;
1053
1054
	pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
		cpu=i686
1055
		;;
1056
1057
	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
		cpu=i686
1058
		;;
1059
1060
	pentium4-*)
		cpu=i786
1061
		;;
1062
1063
	pc98-*)
		cpu=i386
1064
		;;
1065
1066
	ppc-* | ppcbe-*)
		cpu=powerpc
1067
		;;
1068
1069
	ppcle-* | powerpclittle-*)
		cpu=powerpcle
1070
		;;
1071
1072
	ppc64-*)
		cpu=powerpc64
1073
		;;
1074
1075
	ppc64le-* | powerpc64little-*)
		cpu=powerpc64le
1076
		;;
1077
1078
	sb1-*)
		cpu=mipsisa64sb1
1079
		;;
1080
1081
	sb1el-*)
		cpu=mipsisa64sb1el
1082
		;;
1083
1084
	sh5e[lb]-*)
		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1085
		;;
1086
1087
	spur-*)
		cpu=spur
1088
		;;
1089
1090
	strongarm-* | thumb-*)
		cpu=arm
1091
		;;
1092
1093
	tx39-*)
		cpu=mipstx39
1094
		;;
1095
1096
	tx39el-*)
		cpu=mipstx39el
1097
		;;
1098
1099
	x64-*)
		cpu=x86_64
1100
		;;
1101
1102
	xscale-* | xscalee[bl]-*)
		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1103
		;;
1104
1105
1106
1107
1108

	# Recognize the canonical CPU Types that limit and/or modify the
	# company names they are paired with.
	cr16-*)
		os=${os:-elf}
1109
		;;
1110
1111
1112
	crisv32-* | etraxfs*-*)
		cpu=crisv32
		vendor=axis
1113
		;;
1114
1115
1116
	cris-* | etrax*-*)
		cpu=cris
		vendor=axis
1117
		;;
1118
1119
	crx-*)
		os=${os:-elf}
1120
		;;
1121
1122
1123
	neo-tandem)
		cpu=neo
		vendor=tandem
1124
		;;
1125
1126
1127
	nse-tandem)
		cpu=nse
		vendor=tandem
1128
		;;
1129
1130
1131
	nsr-tandem)
		cpu=nsr
		vendor=tandem
1132
		;;
1133
1134
1135
	nsv-tandem)
		cpu=nsv
		vendor=tandem
1136
		;;
1137
1138
1139
	nsx-tandem)
		cpu=nsx
		vendor=tandem
1140
		;;
1141
1142
1143
	s390-*)
		cpu=s390
		vendor=ibm
1144
		;;
1145
1146
1147
	s390x-*)
		cpu=s390x
		vendor=ibm
1148
		;;
1149
1150
	tile*-*)
		os=${os:-linux-gnu}
1151
		;;
1152

1153
	*)
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
		# Recognize the canonical CPU types that are allowed with any
		# company name.
		case $cpu in
			1750a | 580 \
			| a29k \
			| aarch64 | aarch64_be \
			| abacus \
			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
			| alphapca5[67] | alpha64pca5[67] \
			| am33_2.0 \
			| amdgcn \
			| arc | arceb \
			| arm  | arm[lb]e | arme[lb] | armv* \
			| avr | avr32 \
			| asmjs \
			| ba \
			| be32 | be64 \
			| bfin | bpf | bs2000 \
			| c[123]* | c30 | [cjt]90 | c4x \
			| c8051 | clipper | craynv | csky | cydra \
			| d10v | d30v | dlx | dsp16xx \
			| e2k | elxsi | epiphany \
			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
			| h8300 | h8500 \
			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
			| hexagon \
			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
			| ip2k | iq2000 \
			| k1om \
			| le32 | le64 \
			| lm32 \
			| m32c | m32r | m32rle \
			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
			| m88110 | m88k | maxq | mb | mcore | mep | metag \
			| microblaze | microblazeel \
			| mips | mipsbe | mipseb | mipsel | mipsle \
			| mips16 \
			| mips64 | mips64eb | mips64el \
			| mips64octeon | mips64octeonel \
			| mips64orion | mips64orionel \
			| mips64r5900 | mips64r5900el \
			| mips64vr | mips64vrel \
			| mips64vr4100 | mips64vr4100el \
			| mips64vr4300 | mips64vr4300el \
			| mips64vr5000 | mips64vr5000el \
			| mips64vr5900 | mips64vr5900el \
			| mipsisa32 | mipsisa32el \
			| mipsisa32r2 | mipsisa32r2el \
			| mipsisa32r6 | mipsisa32r6el \
			| mipsisa64 | mipsisa64el \
			| mipsisa64r2 | mipsisa64r2el \
			| mipsisa64r6 | mipsisa64r6el \
			| mipsisa64sb1 | mipsisa64sb1el \
			| mipsisa64sr71k | mipsisa64sr71kel \
			| mipsr5900 | mipsr5900el \
			| mipstx39 | mipstx39el \
			| mmix \
			| mn10200 | mn10300 \
			| moxie \
			| mt \
			| msp430 \
			| nds32 | nds32le | nds32be \
			| nfp \
			| nios | nios2 | nios2eb | nios2el \
			| none | np1 | ns16k | ns32k | nvptx \
			| open8 \
			| or1k* \
			| or32 \
			| orion \
			| picochip \
			| pdp10 | pdp11 | pj | pjl | pn | power \
			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
			| pru \
			| pyramid \
			| riscv | riscv32 | riscv64 \
			| rl78 | romp | rs6000 | rx \
			| score \
			| sh | shl \
			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
			| sparclite \
			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
			| spu \
			| tahoe \
			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
			| tron \
			| ubicom32 \
			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
			| vax \
			| visium \
			| w65 \
			| wasm32 | wasm64 \
			| we32k \
			| x86 | x86_64 | xc16x | xgate | xps100 \
			| xstormy16 | xtensa* \
			| ymp \
			| z8k | z80)
				;;

			*)
				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
				exit 1
				;;
		esac
1261
1262
1263
1264
		;;
esac

# Here we canonicalize certain aliases for manufacturers.
1265
1266
1267
case $vendor in
	digital*)
		vendor=dec
1268
		;;
1269
1270
	commodore*)
		vendor=cbm
1271
1272
1273
1274
1275
1276
1277
		;;
	*)
		;;
esac

# Decode manufacturer-specific aliases for certain operating systems.

1278
if [ x$os != x ]
1279
1280
then
case $os in
1281
1282
1283
1284
1285
	# First match some system type aliases that might get confused
	# with valid system types.
	# solaris* is a basic system type, with this one exception.
	auroraux)
		os=auroraux
1286
		;;
1287
1288
	bluegene*)
		os=cnk
1289
		;;
1290
1291
	solaris1 | solaris1.*)
		os=`echo $os | sed -e 's|solaris1|sunos4|'`
1292
		;;
1293
1294
	solaris)
		os=solaris2
1295
		;;
1296
1297
	unixware*)
		os=sysv4.2uw
1298
		;;
1299
	gnu/linux*)
1300
1301
		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
		;;
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
	# es1800 is here to avoid being matched by es* (a different OS)
	es1800*)
		os=ose
		;;
	# Some version numbers need modification
	chorusos*)
		os=chorusos
		;;
	isc)
		os=isc2.2
		;;
	sco6)
		os=sco5v6
		;;
	sco5)
		os=sco3.2v5
		;;
	sco4)
		os=sco3.2v4
		;;
	sco3.2.[4-9]*)
		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
		;;
	sco3.2v[4-9]* | sco5v6*)
		# Don't forget version if it is 3.2v4 or newer.
		;;
	scout)
		# Don't match below
		;;
	sco*)
		os=sco3.2v2
		;;
	psos*)
		os=psos
		;;
	# Now accept the basic system types.
1338
	# The portable systems comes first.
1339
1340
1341
1342
1343
1344
1345
	# Each alternative MUST end in a * to match a version number.
	# sysv* is not here because it comes later, after sysvr4.
	gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
	     | sym* | kopensolaris* | plan9* \
	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
1346
	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
1347
1348
1349
	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
	     | knetbsd* | mirbsd* | netbsd* \
1350
	     | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
	     | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
	     | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
	     | chorusrdb* | cegcc* | glidix* \
	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
	     | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
	     | linux-newlib* | linux-musl* | linux-uclibc* \
	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
	     | interix* | uwin* | mks* | rhapsody* | darwin* \
	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
	     | os2* | vos* | palmos* | uclinux* | nucleus* \
	     | morphos* | superux* | rtmk* | windiss* \
	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
1368
1369
	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
	     | nsk* | powerunix)
1370
1371
	# Remember, each alternative MUST END IN *, to match a version number.
		;;
1372
1373
1374
	qnx*)
		case $cpu in
		    x86 | i*86)
1375
1376
			;;
		    *)
1377
			os=nto-$os
1378
1379
1380
			;;
		esac
		;;
1381
1382
	hiux*)
		os=hiuxwe2
1383
		;;
1384
	nto-qnx*)
1385
		;;
1386
1387
	nto*)
		os=`echo $os | sed -e 's|nto|nto-qnx|'`
1388
		;;
1389
1390
1391
	sim | xray | os68k* | v88r* \
	    | windows* | osx | abug | netware* | os9* \
	    | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
1392
		;;
1393
1394
	linux-dietlibc)
		os=linux-dietlibc
1395
		;;
1396
	linux*)
1397
1398
		os=`echo $os | sed -e 's|linux|linux-gnu|'`
		;;
1399
1400
	lynx*178)
		os=lynxos178
1401
		;;
1402
1403
	lynx*5)
		os=lynxos5
1404
		;;
1405
1406
	lynx*)
		os=lynxos
1407
		;;
1408
1409
	mac*)
		os=`echo "$os" | sed -e 's|mac|macos|'`
1410
		;;
1411
1412
	opened*)
		os=openedition
1413
		;;
1414
1415
	os400*)
		os=os400
1416
		;;
1417
1418
	sunos5*)
		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1419
		;;
1420
1421
	sunos6*)
		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1422
		;;
1423
1424
	wince*)
		os=wince
1425
		;;
1426
1427
	utek*)
		os=bsd
1428
		;;
1429
1430
	dynix*)
		os=bsd
1431
		;;
1432
1433
	acis*)
		os=aos
1434
		;;
1435
1436
	atheos*)
		os=atheos
1437
		;;
1438
1439
	syllable*)
		os=syllable
1440
		;;
1441
1442
	386bsd)
		os=bsd
1443
		;;
1444
1445
	ctix* | uts*)
		os=sysv
1446
		;;
1447
1448
1449
1450
1451
1452
	nova*)
		os=rtmk-nova
		;;
	ns2)
		os=nextstep2
		;;
1453
	# Preserve the version number of sinix5.
1454
	sinix5.*)
1455
1456
		os=`echo $os | sed -e 's|sinix|sysv|'`
		;;
1457
1458
	sinix*)
		os=sysv4
1459
		;;
1460
1461
	tpf*)
		os=tpf
1462
		;;
1463
1464
	triton*)
		os=sysv3
1465
		;;
1466
1467
	oss*)
		os=sysv3
1468
		;;
1469
1470
	svr4*)
		os=sysv4
1471
		;;
1472
1473
	svr3)
		os=sysv3
1474
		;;
1475
1476
	sysvr4)
		os=sysv4
1477
		;;
1478
1479
	# This must come after sysvr4.
	sysv*)
1480
		;;
1481
1482
	ose*)
		os=ose
1483
		;;
1484
1485
	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
		os=mint
1486
		;;
1487
1488
	zvmoe)
		os=zvmoe
1489
		;;
1490
1491
	dicos*)
		os=dicos
1492
		;;
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
	pikeos*)
		# Until real need of OS specific support for
		# particular features comes up, bare metal
		# configurations are quite functional.
		case $cpu in<