xref: /AOO42X/main/config.sub (revision bcf1d70c49851894129b285680540825f398ab5a)
1#! /bin/sh
2# Configuration validation subroutine script.
3#   Copyright 1992-2025 Free Software Foundation, Inc.
4
5# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
6
7timestamp='2025-07-10'
8
9# This file is free software; you can redistribute it and/or modify it
10# under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful, but
15# WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17# General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, see <https://www.gnu.org/licenses/>.
21#
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that
26# program.  This Exception is an additional permission under section 7
27# of the GNU General Public License, version 3 ("GPLv3").
28
29
30# Please send patches to <config-patches@gnu.org>.
31#
32# Configuration subroutine to validate and canonicalize a configuration type.
33# Supply the specified configuration type as an argument.
34# If it is invalid, we print an error message on stderr and exit with code 1.
35# Otherwise, we print the canonical config type on stdout and succeed.
36
37# You can get the latest version of this script from:
38# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
39
40# This file is supposed to be the same for all GNU packages
41# and recognize all the CPU types, system types and aliases
42# that are meaningful with *any* GNU software.
43# Each package is responsible for reporting which valid configurations
44# it does not support.  The user should be able to distinguish
45# a failure to support a valid configuration from a meaningless
46# configuration.
47
48# The goal of this file is to map all the various variations of a given
49# machine specification into a single specification in the form:
50#   CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
51# or in some cases, the newer four-part form:
52#   CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
53# It is wrong to echo any other type of specification.
54
55# The "shellcheck disable" line above the timestamp inhibits complaints
56# about features and limitations of the classic Bourne shell that were
57# superseded or lifted in POSIX.  However, this script identifies a wide
58# variety of pre-POSIX systems that do not have POSIX shells at all, and
59# even some reasonably current systems (Solaris 10 as case-in-point) still
60# have a pre-POSIX /bin/sh.
61
62me=`echo "$0" | sed -e 's,.*/,,'`
63
64usage="\
65Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
66
67Canonicalize a configuration name.
68
69Options:
70  -h, --help         print this help, then exit
71  -t, --time-stamp   print date of last modification, then exit
72  -v, --version      print version number, then exit
73
74Report bugs and patches to <config-patches@gnu.org>."
75
76version="\
77GNU config.sub ($timestamp)
78
79Copyright 1992-2025 Free Software Foundation, Inc.
80
81This is free software; see the source for copying conditions.  There is NO
82warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
83
84help="
85Try '$me --help' for more information."
86
87# Parse command line
88while test $# -gt 0 ; do
89  case $1 in
90    --time-stamp | --time* | -t )
91       echo "$timestamp" ; exit ;;
92    --version | -v )
93       echo "$version" ; exit ;;
94    --help | --h* | -h )
95       echo "$usage"; exit ;;
96    -- )     # Stop option processing
97       shift; break ;;
98    - ) # Use stdin as input.
99       break ;;
100    -* )
101       echo "$me: invalid option $1$help" >&2
102       exit 1 ;;
103
104    *local*)
105       # First pass through any local machine types.
106       echo "$1"
107       exit ;;
108
109    * )
110       break ;;
111  esac
112done
113
114case $# in
115 0) echo "$me: missing argument$help" >&2
116    exit 1;;
117 1) ;;
118 *) echo "$me: too many arguments$help" >&2
119    exit 1;;
120esac
121
122# Split fields of configuration type
123saved_IFS=$IFS
124IFS="-" read field1 field2 field3 field4 <<EOF
125$1
126EOF
127IFS=$saved_IFS
128
129# Separate into logical components for further validation
130case $1 in
131    *-*-*-*-*)
132        echo "Invalid configuration '$1': more than four components" >&2
133        exit 1
134        ;;
135    *-*-*-*)
136        basic_machine=$field1-$field2
137        basic_os=$field3-$field4
138        ;;
139    *-*-*)
140        # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
141        # parts
142        maybe_os=$field2-$field3
143        case $maybe_os in
144              cloudabi*-eabi* \
145            | kfreebsd*-gnu* \
146            | knetbsd*-gnu* \
147            | kopensolaris*-gnu* \
148            | ironclad-* \
149            | linux-* \
150            | managarm-* \
151            | netbsd*-eabi* \
152            | netbsd*-gnu* \
153            | nto-qnx* \
154            | os2-emx* \
155            | rtmk-nova* \
156            | storm-chaos* \
157            | uclinux-gnu* \
158            | uclinux-uclibc* \
159            | windows-* )
160                basic_machine=$field1
161                basic_os=$maybe_os
162                ;;
163            android-linux)
164                basic_machine=$field1-unknown
165                basic_os=linux-android
166                ;;
167            *)
168                basic_machine=$field1-$field2
169                basic_os=$field3
170                ;;
171        esac
172        ;;
173    *-*)
174        case $field1-$field2 in
175            # Shorthands that happen to contain a single dash
176            convex-c[12] | convex-c3[248])
177                basic_machine=$field2-convex
178                basic_os=
179                ;;
180            decstation-3100)
181                basic_machine=mips-dec
182                basic_os=
183                ;;
184            *-*)
185                # Second component is usually, but not always the OS
186                case $field2 in
187                    # Do not treat sunos as a manufacturer
188                    sun*os*)
189                        basic_machine=$field1
190                        basic_os=$field2
191                        ;;
192                    # Manufacturers
193                      3100* \
194                    | 32* \
195                    | 3300* \
196                    | 3600* \
197                    | 7300* \
198                    | acorn \
199                    | altos* \
200                    | apollo \
201                    | apple \
202                    | atari \
203                    | att* \
204                    | axis \
205                    | be \
206                    | bull \
207                    | cbm \
208                    | ccur \
209                    | cisco \
210                    | commodore \
211                    | convergent* \
212                    | convex* \
213                    | cray \
214                    | crds \
215                    | dec* \
216                    | delta* \
217                    | dg \
218                    | digital \
219                    | dolphin \
220                    | encore* \
221                    | gould \
222                    | harris \
223                    | highlevel \
224                    | hitachi* \
225                    | hp \
226                    | ibm* \
227                    | intergraph \
228                    | isi* \
229                    | knuth \
230                    | masscomp \
231                    | microblaze* \
232                    | mips* \
233                    | motorola* \
234                    | ncr* \
235                    | news \
236                    | next \
237                    | ns \
238                    | oki \
239                    | omron* \
240                    | pc533* \
241                    | rebel \
242                    | rom68k \
243                    | rombug \
244                    | semi \
245                    | sequent* \
246                    | sgi* \
247                    | siemens \
248                    | sim \
249                    | sni \
250                    | sony* \
251                    | stratus \
252                    | sun \
253                    | sun[234]* \
254                    | tektronix \
255                    | tti* \
256                    | ultra \
257                    | unicom* \
258                    | wec \
259                    | winbond \
260                    | wrs)
261                        basic_machine=$field1-$field2
262                        basic_os=
263                        ;;
264                    tock* | zephyr*)
265                        basic_machine=$field1-unknown
266                        basic_os=$field2
267                        ;;
268                    *)
269                        basic_machine=$field1
270                        basic_os=$field2
271                        ;;
272                esac
273            ;;
274        esac
275        ;;
276    *)
277        # Convert single-component short-hands not valid as part of
278        # multi-component configurations.
279        case $field1 in
280            386bsd)
281                basic_machine=i386-pc
282                basic_os=bsd
283                ;;
284            a29khif)
285                basic_machine=a29k-amd
286                basic_os=udi
287                ;;
288            adobe68k)
289                basic_machine=m68010-adobe
290                basic_os=scout
291                ;;
292            alliant)
293                basic_machine=fx80-alliant
294                basic_os=
295                ;;
296            altos | altos3068)
297                basic_machine=m68k-altos
298                basic_os=
299                ;;
300            am29k)
301                basic_machine=a29k-none
302                basic_os=bsd
303                ;;
304            amdahl)
305                basic_machine=580-amdahl
306                basic_os=sysv
307                ;;
308            amiga)
309                basic_machine=m68k-unknown
310                basic_os=
311                ;;
312            amigaos | amigados)
313                basic_machine=m68k-unknown
314                basic_os=amigaos
315                ;;
316            amigaunix | amix)
317                basic_machine=m68k-unknown
318                basic_os=sysv4
319                ;;
320            apollo68)
321                basic_machine=m68k-apollo
322                basic_os=sysv
323                ;;
324            apollo68bsd)
325                basic_machine=m68k-apollo
326                basic_os=bsd
327                ;;
328            aros)
329                basic_machine=i386-pc
330                basic_os=aros
331                ;;
332            aux)
333                basic_machine=m68k-apple
334                basic_os=aux
335                ;;
336            balance)
337                basic_machine=ns32k-sequent
338                basic_os=dynix
339                ;;
340            blackfin)
341                basic_machine=bfin-unknown
342                basic_os=linux
343                ;;
344            cegcc)
345                basic_machine=arm-unknown
346                basic_os=cegcc
347                ;;
348            cray)
349                basic_machine=j90-cray
350                basic_os=unicos
351                ;;
352            crds | unos)
353                basic_machine=m68k-crds
354                basic_os=
355                ;;
356            da30)
357                basic_machine=m68k-da30
358                basic_os=
359                ;;
360            decstation | pmax | pmin | dec3100 | decstatn)
361                basic_machine=mips-dec
362                basic_os=
363                ;;
364            delta88)
365                basic_machine=m88k-motorola
366                basic_os=sysv3
367                ;;
368            dicos)
369                basic_machine=i686-pc
370                basic_os=dicos
371                ;;
372            djgpp)
373                basic_machine=i586-pc
374                basic_os=msdosdjgpp
375                ;;
376            ebmon29k)
377                basic_machine=a29k-amd
378                basic_os=ebmon
379                ;;
380            es1800 | OSE68k | ose68k | ose | OSE)
381                basic_machine=m68k-ericsson
382                basic_os=ose
383                ;;
384            gmicro)
385                basic_machine=tron-gmicro
386                basic_os=sysv
387                ;;
388            go32)
389                basic_machine=i386-pc
390                basic_os=go32
391                ;;
392            h8300hms)
393                basic_machine=h8300-hitachi
394                basic_os=hms
395                ;;
396            h8300xray)
397                basic_machine=h8300-hitachi
398                basic_os=xray
399                ;;
400            h8500hms)
401                basic_machine=h8500-hitachi
402                basic_os=hms
403                ;;
404            harris)
405                basic_machine=m88k-harris
406                basic_os=sysv3
407                ;;
408            hp300 | hp300hpux)
409                basic_machine=m68k-hp
410                basic_os=hpux
411                ;;
412            hp300bsd)
413                basic_machine=m68k-hp
414                basic_os=bsd
415                ;;
416            hppaosf)
417                basic_machine=hppa1.1-hp
418                basic_os=osf
419                ;;
420            hppro)
421                basic_machine=hppa1.1-hp
422                basic_os=proelf
423                ;;
424            i386mach)
425                basic_machine=i386-mach
426                basic_os=mach
427                ;;
428            isi68 | isi)
429                basic_machine=m68k-isi
430                basic_os=sysv
431                ;;
432            m68knommu)
433                basic_machine=m68k-unknown
434                basic_os=linux
435                ;;
436            magnum | m3230)
437                basic_machine=mips-mips
438                basic_os=sysv
439                ;;
440            merlin)
441                basic_machine=ns32k-utek
442                basic_os=sysv
443                ;;
444            mingw64)
445                basic_machine=x86_64-pc
446                basic_os=mingw64
447                ;;
448            mingw32)
449                basic_machine=i686-pc
450                basic_os=mingw32
451                ;;
452            mingw32ce)
453                basic_machine=arm-unknown
454                basic_os=mingw32ce
455                ;;
456            monitor)
457                basic_machine=m68k-rom68k
458                basic_os=coff
459                ;;
460            morphos)
461                basic_machine=powerpc-unknown
462                basic_os=morphos
463                ;;
464            moxiebox)
465                basic_machine=moxie-unknown
466                basic_os=moxiebox
467                ;;
468            msdos)
469                basic_machine=i386-pc
470                basic_os=msdos
471                ;;
472            msys)
473                basic_machine=i686-pc
474                basic_os=msys
475                ;;
476            mvs)
477                basic_machine=i370-ibm
478                basic_os=mvs
479                ;;
480            nacl)
481                basic_machine=le32-unknown
482                basic_os=nacl
483                ;;
484            ncr3000)
485                basic_machine=i486-ncr
486                basic_os=sysv4
487                ;;
488            netbsd386)
489                basic_machine=i386-pc
490                basic_os=netbsd
491                ;;
492            netwinder)
493                basic_machine=armv4l-rebel
494                basic_os=linux
495                ;;
496            news | news700 | news800 | news900)
497                basic_machine=m68k-sony
498                basic_os=newsos
499                ;;
500            news1000)
501                basic_machine=m68030-sony
502                basic_os=newsos
503                ;;
504            necv70)
505                basic_machine=v70-nec
506                basic_os=sysv
507                ;;
508            nh3000)
509                basic_machine=m68k-harris
510                basic_os=cxux
511                ;;
512            nh[45]000)
513                basic_machine=m88k-harris
514                basic_os=cxux
515                ;;
516            nindy960)
517                basic_machine=i960-intel
518                basic_os=nindy
519                ;;
520            mon960)
521                basic_machine=i960-intel
522                basic_os=mon960
523                ;;
524            nonstopux)
525                basic_machine=mips-compaq
526                basic_os=nonstopux
527                ;;
528            os400)
529                basic_machine=powerpc-ibm
530                basic_os=os400
531                ;;
532            OSE68000 | ose68000)
533                basic_machine=m68000-ericsson
534                basic_os=ose
535                ;;
536            os68k)
537                basic_machine=m68k-none
538                basic_os=os68k
539                ;;
540            paragon)
541                basic_machine=i860-intel
542                basic_os=osf
543                ;;
544            parisc)
545                basic_machine=hppa-unknown
546                basic_os=linux
547                ;;
548            psp)
549                basic_machine=mipsallegrexel-sony
550                basic_os=psp
551                ;;
552            pw32)
553                basic_machine=i586-unknown
554                basic_os=pw32
555                ;;
556            rdos | rdos64)
557                basic_machine=x86_64-pc
558                basic_os=rdos
559                ;;
560            rdos32)
561                basic_machine=i386-pc
562                basic_os=rdos
563                ;;
564            rom68k)
565                basic_machine=m68k-rom68k
566                basic_os=coff
567                ;;
568            sa29200)
569                basic_machine=a29k-amd
570                basic_os=udi
571                ;;
572            sei)
573                basic_machine=mips-sei
574                basic_os=seiux
575                ;;
576            sequent)
577                basic_machine=i386-sequent
578                basic_os=
579                ;;
580            sps7)
581                basic_machine=m68k-bull
582                basic_os=sysv2
583                ;;
584            st2000)
585                basic_machine=m68k-tandem
586                basic_os=
587                ;;
588            stratus)
589                basic_machine=i860-stratus
590                basic_os=sysv4
591                ;;
592            sun2)
593                basic_machine=m68000-sun
594                basic_os=
595                ;;
596            sun2os3)
597                basic_machine=m68000-sun
598                basic_os=sunos3
599                ;;
600            sun2os4)
601                basic_machine=m68000-sun
602                basic_os=sunos4
603                ;;
604            sun3)
605                basic_machine=m68k-sun
606                basic_os=
607                ;;
608            sun3os3)
609                basic_machine=m68k-sun
610                basic_os=sunos3
611                ;;
612            sun3os4)
613                basic_machine=m68k-sun
614                basic_os=sunos4
615                ;;
616            sun4)
617                basic_machine=sparc-sun
618                basic_os=
619                ;;
620            sun4os3)
621                basic_machine=sparc-sun
622                basic_os=sunos3
623                ;;
624            sun4os4)
625                basic_machine=sparc-sun
626                basic_os=sunos4
627                ;;
628            sun4sol2)
629                basic_machine=sparc-sun
630                basic_os=solaris2
631                ;;
632            sun386 | sun386i | roadrunner)
633                basic_machine=i386-sun
634                basic_os=
635                ;;
636            sv1)
637                basic_machine=sv1-cray
638                basic_os=unicos
639                ;;
640            symmetry)
641                basic_machine=i386-sequent
642                basic_os=dynix
643                ;;
644            t3e)
645                basic_machine=alphaev5-cray
646                basic_os=unicos
647                ;;
648            t90)
649                basic_machine=t90-cray
650                basic_os=unicos
651                ;;
652            toad1)
653                basic_machine=pdp10-xkl
654                basic_os=tops20
655                ;;
656            tpf)
657                basic_machine=s390x-ibm
658                basic_os=tpf
659                ;;
660            udi29k)
661                basic_machine=a29k-amd
662                basic_os=udi
663                ;;
664            ultra3)
665                basic_machine=a29k-nyu
666                basic_os=sym1
667                ;;
668            v810 | necv810)
669                basic_machine=v810-nec
670                basic_os=none
671                ;;
672            vaxv)
673                basic_machine=vax-dec
674                basic_os=sysv
675                ;;
676            vms)
677                basic_machine=vax-dec
678                basic_os=vms
679                ;;
680            vsta)
681                basic_machine=i386-pc
682                basic_os=vsta
683                ;;
684            vxworks960)
685                basic_machine=i960-wrs
686                basic_os=vxworks
687                ;;
688            vxworks68)
689                basic_machine=m68k-wrs
690                basic_os=vxworks
691                ;;
692            vxworks29k)
693                basic_machine=a29k-wrs
694                basic_os=vxworks
695                ;;
696            xbox)
697                basic_machine=i686-pc
698                basic_os=mingw32
699                ;;
700            ymp)
701                basic_machine=ymp-cray
702                basic_os=unicos
703                ;;
704            *)
705                basic_machine=$1
706                basic_os=
707                ;;
708        esac
709        ;;
710esac
711
712# Decode 1-component or ad-hoc basic machines
713case $basic_machine in
714    # Here we handle the default manufacturer of certain CPU types.  It is in
715    # some cases the only manufacturer, in others, it is the most popular.
716    w89k)
717        cpu=hppa1.1
718        vendor=winbond
719        ;;
720    op50n)
721        cpu=hppa1.1
722        vendor=oki
723        ;;
724    op60c)
725        cpu=hppa1.1
726        vendor=oki
727        ;;
728    ibm*)
729        cpu=i370
730        vendor=ibm
731        ;;
732    orion105)
733        cpu=clipper
734        vendor=highlevel
735        ;;
736    mac | mpw | mac-mpw)
737        cpu=m68k
738        vendor=apple
739        ;;
740    pmac | pmac-mpw)
741        cpu=powerpc
742        vendor=apple
743        ;;
744
745    # Recognize the various machine names and aliases which stand
746    # for a CPU type and a company and sometimes even an OS.
747    3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
748        cpu=m68000
749        vendor=att
750        ;;
751    3b*)
752        cpu=we32k
753        vendor=att
754        ;;
755    bluegene*)
756        cpu=powerpc
757        vendor=ibm
758        basic_os=cnk
759        ;;
760    decsystem10* | dec10*)
761        cpu=pdp10
762        vendor=dec
763        basic_os=tops10
764        ;;
765    decsystem20* | dec20*)
766        cpu=pdp10
767        vendor=dec
768        basic_os=tops20
769        ;;
770    delta | 3300 | delta-motorola | 3300-motorola | motorola-delta | motorola-3300)
771        cpu=m68k
772        vendor=motorola
773        ;;
774    # This used to be dpx2*, but that gets the RS6000-based
775    # DPX/20 and the x86-based DPX/2-100 wrong.  See
776    # https://oldskool.silicium.org/stations/bull_dpx20.htm
777    # https://www.feb-patrimoine.com/english/bull_dpx2.htm
778    # https://www.feb-patrimoine.com/english/unix_and_bull.htm
779    dpx2 | dpx2[23]00 | dpx2[23]xx)
780        cpu=m68k
781        vendor=bull
782        ;;
783    dpx2100 | dpx21xx)
784        cpu=i386
785        vendor=bull
786        ;;
787    dpx20)
788        cpu=rs6000
789        vendor=bull
790        ;;
791    encore | umax | mmax)
792        cpu=ns32k
793        vendor=encore
794        ;;
795    elxsi)
796        cpu=elxsi
797        vendor=elxsi
798        basic_os=${basic_os:-bsd}
799        ;;
800    fx2800)
801        cpu=i860
802        vendor=alliant
803        ;;
804    genix)
805        cpu=ns32k
806        vendor=ns
807        ;;
808    h3050r* | hiux*)
809        cpu=hppa1.1
810        vendor=hitachi
811        basic_os=hiuxwe2
812        ;;
813    hp3k9[0-9][0-9] | hp9[0-9][0-9])
814        cpu=hppa1.0
815        vendor=hp
816        ;;
817    hp9k2[0-9][0-9] | hp9k31[0-9])
818        cpu=m68000
819        vendor=hp
820        ;;
821    hp9k3[2-9][0-9])
822        cpu=m68k
823        vendor=hp
824        ;;
825    hp9k6[0-9][0-9] | hp6[0-9][0-9])
826        cpu=hppa1.0
827        vendor=hp
828        ;;
829    hp9k7[0-79][0-9] | hp7[0-79][0-9])
830        cpu=hppa1.1
831        vendor=hp
832        ;;
833    hp9k78[0-9] | hp78[0-9])
834        # FIXME: really hppa2.0-hp
835        cpu=hppa1.1
836        vendor=hp
837        ;;
838    hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
839        # FIXME: really hppa2.0-hp
840        cpu=hppa1.1
841        vendor=hp
842        ;;
843    hp9k8[0-9][13679] | hp8[0-9][13679])
844        cpu=hppa1.1
845        vendor=hp
846        ;;
847    hp9k8[0-9][0-9] | hp8[0-9][0-9])
848        cpu=hppa1.0
849        vendor=hp
850        ;;
851    i*86v32)
852        cpu=`echo "$1" | sed -e 's/86.*/86/'`
853        vendor=pc
854        basic_os=sysv32
855        ;;
856    i*86v4*)
857        cpu=`echo "$1" | sed -e 's/86.*/86/'`
858        vendor=pc
859        basic_os=sysv4
860        ;;
861    i*86v)
862        cpu=`echo "$1" | sed -e 's/86.*/86/'`
863        vendor=pc
864        basic_os=sysv
865        ;;
866    i*86sol2)
867        cpu=`echo "$1" | sed -e 's/86.*/86/'`
868        vendor=pc
869        basic_os=solaris2
870        ;;
871    j90 | j90-cray)
872        cpu=j90
873        vendor=cray
874        basic_os=${basic_os:-unicos}
875        ;;
876    iris | iris4d)
877        cpu=mips
878        vendor=sgi
879        case $basic_os in
880            irix*)
881            ;;
882            *)
883            basic_os=irix4
884            ;;
885        esac
886        ;;
887    miniframe)
888        cpu=m68000
889        vendor=convergent
890        ;;
891    *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
892        cpu=m68k
893        vendor=atari
894        basic_os=mint
895        ;;
896    news-3600 | risc-news)
897        cpu=mips
898        vendor=sony
899        basic_os=newsos
900        ;;
901    next | m*-next)
902        cpu=m68k
903        vendor=next
904        ;;
905    np1)
906        cpu=np1
907        vendor=gould
908        ;;
909    op50n-* | op60c-*)
910        cpu=hppa1.1
911        vendor=oki
912        basic_os=proelf
913        ;;
914    pa-hitachi)
915        cpu=hppa1.1
916        vendor=hitachi
917        basic_os=hiuxwe2
918        ;;
919    pbd)
920        cpu=sparc
921        vendor=tti
922        ;;
923    pbb)
924        cpu=m68k
925        vendor=tti
926        ;;
927    pc532)
928        cpu=ns32k
929        vendor=pc532
930        ;;
931    pn)
932        cpu=pn
933        vendor=gould
934        ;;
935    power)
936        cpu=power
937        vendor=ibm
938        ;;
939    ps2)
940        cpu=i386
941        vendor=ibm
942        ;;
943    rm[46]00)
944        cpu=mips
945        vendor=siemens
946        ;;
947    rtpc | rtpc-*)
948        cpu=romp
949        vendor=ibm
950        ;;
951    sde)
952        cpu=mipsisa32
953        vendor=sde
954        basic_os=${basic_os:-elf}
955        ;;
956    simso-wrs)
957        cpu=sparclite
958        vendor=wrs
959        basic_os=vxworks
960        ;;
961    tower | tower-32)
962        cpu=m68k
963        vendor=ncr
964        ;;
965    vpp*|vx|vx-*)
966        cpu=f301
967        vendor=fujitsu
968        ;;
969    w65)
970        cpu=w65
971        vendor=wdc
972        ;;
973    w89k-*)
974        cpu=hppa1.1
975        vendor=winbond
976        basic_os=proelf
977        ;;
978    none)
979        cpu=none
980        vendor=none
981        ;;
982    leon|leon[3-9])
983        cpu=sparc
984        vendor=$basic_machine
985        ;;
986    leon-*|leon[3-9]-*)
987        cpu=sparc
988        vendor=`echo "$basic_machine" | sed 's/-.*//'`
989        ;;
990
991    *-*)
992        saved_IFS=$IFS
993        IFS="-" read cpu vendor <<EOF
994$basic_machine
995EOF
996        IFS=$saved_IFS
997        ;;
998    # We use 'pc' rather than 'unknown'
999    # because (1) that's what they normally are, and
1000    # (2) the word "unknown" tends to confuse beginning users.
1001    i*86 | x86_64)
1002        cpu=$basic_machine
1003        vendor=pc
1004        ;;
1005    # These rules are duplicated from below for sake of the special case above;
1006    # i.e. things that normalized to x86 arches should also default to "pc"
1007    pc98)
1008        cpu=i386
1009        vendor=pc
1010        ;;
1011    x64 | amd64)
1012        cpu=x86_64
1013        vendor=pc
1014        ;;
1015    # Recognize the basic CPU types without company name.
1016    *)
1017        cpu=$basic_machine
1018        vendor=unknown
1019        ;;
1020esac
1021
1022unset -v basic_machine
1023
1024# Decode basic machines in the full and proper CPU-Company form.
1025case $cpu-$vendor in
1026    # Here we handle the default manufacturer of certain CPU types in canonical form.
1027    # It is in some cases the only manufacturer, in others, it is the most popular.
1028    c[12]-convex | c[12]-unknown | c3[248]-convex | c3[248]-unknown)
1029        vendor=convex
1030        basic_os=${basic_os:-bsd}
1031        ;;
1032    craynv-unknown)
1033        vendor=cray
1034        basic_os=${basic_os:-unicosmp}
1035        ;;
1036    c90-unknown | c90-cray)
1037        vendor=cray
1038        basic_os=${basic_os:-unicos}
1039        ;;
1040    fx80-unknown)
1041        vendor=alliant
1042        ;;
1043    romp-unknown)
1044        vendor=ibm
1045        ;;
1046    mmix-unknown)
1047        vendor=knuth
1048        ;;
1049    microblaze-unknown | microblazeel-unknown)
1050        vendor=xilinx
1051        ;;
1052    rs6000-unknown)
1053        vendor=ibm
1054        ;;
1055    vax-unknown)
1056        vendor=dec
1057        ;;
1058    pdp11-unknown)
1059        vendor=dec
1060        ;;
1061    we32k-unknown)
1062        vendor=att
1063        ;;
1064    cydra-unknown)
1065        vendor=cydrome
1066        ;;
1067    i370-ibm*)
1068        vendor=ibm
1069        ;;
1070    orion-unknown)
1071        vendor=highlevel
1072        ;;
1073    xps-unknown | xps100-unknown)
1074        cpu=xps100
1075        vendor=honeywell
1076        ;;
1077
1078    # Here we normalize CPU types with a missing or matching vendor
1079    armh-unknown | armh-alt)
1080        cpu=armv7l
1081        vendor=alt
1082        basic_os=${basic_os:-linux-gnueabihf}
1083        ;;
1084
1085    # Normalized CPU+vendor pairs that imply an OS, if not otherwise specified
1086    m68k-isi)
1087        basic_os=${basic_os:-sysv}
1088        ;;
1089    m68k-sony)
1090        basic_os=${basic_os:-newsos}
1091        ;;
1092    m68k-tektronix)
1093        basic_os=${basic_os:-bsd}
1094        ;;
1095    m88k-harris)
1096        basic_os=${basic_os:-sysv3}
1097        ;;
1098    i386-bull | m68k-bull)
1099        basic_os=${basic_os:-sysv3}
1100        ;;
1101    rs6000-bull)
1102        basic_os=${basic_os:-bosx}
1103        ;;
1104    mips-sni)
1105        basic_os=${basic_os:-sysv4}
1106        ;;
1107
1108    # Here we normalize CPU types irrespective of the vendor
1109    amd64-*)
1110        cpu=x86_64
1111        ;;
1112    blackfin-*)
1113        cpu=bfin
1114        basic_os=${basic_os:-linux}
1115        ;;
1116    c54x-*)
1117        cpu=tic54x
1118        ;;
1119    c55x-*)
1120        cpu=tic55x
1121        ;;
1122    c6x-*)
1123        cpu=tic6x
1124        ;;
1125    e500v[12]-*)
1126        cpu=powerpc
1127        basic_os=${basic_os}"spe"
1128        ;;
1129    mips3*-*)
1130        cpu=mips64
1131        ;;
1132    ms1-*)
1133        cpu=mt
1134        ;;
1135    m68knommu-*)
1136        cpu=m68k
1137        basic_os=${basic_os:-linux}
1138        ;;
1139    m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1140        cpu=s12z
1141        ;;
1142    openrisc-*)
1143        cpu=or32
1144        ;;
1145    parisc-*)
1146        cpu=hppa
1147        basic_os=${basic_os:-linux}
1148        ;;
1149    pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1150        cpu=i586
1151        ;;
1152    pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
1153        cpu=i686
1154        ;;
1155    pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1156        cpu=i686
1157        ;;
1158    pentium4-*)
1159        cpu=i786
1160        ;;
1161    ppc-* | ppcbe-*)
1162        cpu=powerpc
1163        ;;
1164    ppcle-* | powerpclittle-*)
1165        cpu=powerpcle
1166        ;;
1167    ppc64-*)
1168        cpu=powerpc64
1169        ;;
1170    ppc64le-* | powerpc64little-*)
1171        cpu=powerpc64le
1172        ;;
1173    sb1-*)
1174        cpu=mipsisa64sb1
1175        ;;
1176    sb1el-*)
1177        cpu=mipsisa64sb1el
1178        ;;
1179    sh5e[lb]-*)
1180        cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1181        ;;
1182    spur-*)
1183        cpu=spur
1184        ;;
1185    strongarm-* | thumb-*)
1186        cpu=arm
1187        ;;
1188    tx39-*)
1189        cpu=mipstx39
1190        ;;
1191    tx39el-*)
1192        cpu=mipstx39el
1193        ;;
1194    xscale-* | xscalee[bl]-*)
1195        cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1196        ;;
1197    arm64-* | aarch64le-* | arm64_32-*)
1198        cpu=aarch64
1199        ;;
1200
1201    # Recognize the canonical CPU Types that limit and/or modify the
1202    # company names they are paired with.
1203    cr16-*)
1204        basic_os=${basic_os:-elf}
1205        ;;
1206    crisv32-* | etraxfs*-*)
1207        cpu=crisv32
1208        vendor=axis
1209        ;;
1210    cris-* | etrax*-*)
1211        cpu=cris
1212        vendor=axis
1213        ;;
1214    crx-*)
1215        basic_os=${basic_os:-elf}
1216        ;;
1217    neo-tandem)
1218        cpu=neo
1219        vendor=tandem
1220        ;;
1221    nse-tandem)
1222        cpu=nse
1223        vendor=tandem
1224        ;;
1225    nsr-tandem)
1226        cpu=nsr
1227        vendor=tandem
1228        ;;
1229    nsv-tandem)
1230        cpu=nsv
1231        vendor=tandem
1232        ;;
1233    nsx-tandem)
1234        cpu=nsx
1235        vendor=tandem
1236        ;;
1237    mipsallegrexel-sony)
1238        cpu=mipsallegrexel
1239        vendor=sony
1240        ;;
1241    tile*-*)
1242        basic_os=${basic_os:-linux-gnu}
1243        ;;
1244
1245    *)
1246        # Recognize the canonical CPU types that are allowed with any
1247        # company name.
1248        case $cpu in
1249              1750a \
1250            | 580 \
1251            | [cjt]90 \
1252            | a29k \
1253            | aarch64 \
1254            | aarch64_be \
1255            | aarch64c \
1256            | abacus \
1257            | alpha \
1258            | alpha64 \
1259            | alpha64ev56 \
1260            | alpha64ev6[78] \
1261            | alpha64ev[4-8] \
1262            | alpha64pca5[67] \
1263            | alphaev56 \
1264            | alphaev6[78] \
1265            | alphaev[4-8] \
1266            | alphapca5[67] \
1267            | am33_2.0 \
1268            | amdgcn \
1269            | arc \
1270            | arc32 \
1271            | arc64 \
1272            | arceb \
1273            | arm \
1274            | arm64e \
1275            | arm64ec \
1276            | arm[lb]e \
1277            | arme[lb] \
1278            | armv* \
1279            | asmjs \
1280            | avr \
1281            | avr32 \
1282            | ba \
1283            | be32 \
1284            | be64 \
1285            | bfin \
1286            | bpf \
1287            | bs2000 \
1288            | c30 \
1289            | c4x \
1290            | c8051 \
1291            | c[123]* \
1292            | clipper \
1293            | craynv \
1294            | csky \
1295            | cydra \
1296            | d10v \
1297            | d30v \
1298            | dlx \
1299            | dsp16xx \
1300            | e2k \
1301            | elxsi \
1302            | epiphany \
1303            | f30[01] \
1304            | f700 \
1305            | fido \
1306            | fr30 \
1307            | frv \
1308            | ft32 \
1309            | fx80 \
1310            | h8300 \
1311            | h8500 \
1312            | hexagon \
1313            | hppa \
1314            | hppa1.[01] \
1315            | hppa2.0 \
1316            | hppa2.0[nw] \
1317            | hppa64 \
1318            | i*86 \
1319            | i370 \
1320            | i860 \
1321            | i960 \
1322            | ia16 \
1323            | ia64 \
1324            | intelgt \
1325            | ip2k \
1326            | iq2000 \
1327            | javascript \
1328            | k1om \
1329            | kvx \
1330            | le32 \
1331            | le64 \
1332            | lm32 \
1333            | loongarch32 \
1334            | loongarch64 \
1335            | m32c \
1336            | m32r \
1337            | m32rle \
1338            | m5200 \
1339            | m68000 \
1340            | m680[012346]0 \
1341            | m6811 \
1342            | m6812 \
1343            | m68360 \
1344            | m683?2 \
1345            | m68hc11 \
1346            | m68hc12 \
1347            | m68hcs12x \
1348            | m68k \
1349            | m88110 \
1350            | m88k \
1351            | maxq \
1352            | mb \
1353            | mcore \
1354            | mep \
1355            | metag \
1356            | microblaze \
1357            | microblazeel \
1358            | mips* \
1359            | mmix \
1360            | mn10200 \
1361            | mn10300 \
1362            | moxie \
1363            | msp430 \
1364            | mt \
1365            | nanomips* \
1366            | nds32 \
1367            | nds32be \
1368            | nds32le \
1369            | nfp \
1370            | nios \
1371            | nios2 \
1372            | nios2eb \
1373            | nios2el \
1374            | none \
1375            | np1 \
1376            | ns16k \
1377            | ns32k \
1378            | nvptx \
1379            | open8 \
1380            | or1k* \
1381            | or32 \
1382            | orion \
1383            | pdp10 \
1384            | pdp11 \
1385            | picochip \
1386            | pj \
1387            | pjl \
1388            | pn \
1389            | power \
1390            | powerpc \
1391            | powerpc64 \
1392            | powerpc64le \
1393            | powerpcle \
1394            | powerpcspe \
1395            | pru \
1396            | pyramid \
1397            | riscv \
1398            | riscv32 \
1399            | riscv32be \
1400            | riscv64 \
1401            | riscv64be \
1402            | rl78 \
1403            | romp \
1404            | rs6000 \
1405            | rx \
1406            | s390 \
1407            | s390x \
1408            | score \
1409            | sh \
1410            | sh64 \
1411            | sh64le \
1412            | sh[12345][lb]e \
1413            | sh[1234] \
1414            | sh[1234]e[lb] \
1415            | sh[23]e \
1416            | sh[23]ele \
1417            | sh[24]a \
1418            | sh[24]ae[lb] \
1419            | sh[lb]e \
1420            | she[lb] \
1421            | shl \
1422            | sparc \
1423            | sparc64 \
1424            | sparc64b \
1425            | sparc64v \
1426            | sparc86x \
1427            | sparclet \
1428            | sparclite \
1429            | sparcv8 \
1430            | sparcv9 \
1431            | sparcv9b \
1432            | sparcv9v \
1433            | spu \
1434            | sv1 \
1435            | sx* \
1436            | tahoe \
1437            | thumbv7* \
1438            | tic30 \
1439            | tic4x \
1440            | tic54x \
1441            | tic55x \
1442            | tic6x \
1443            | tic80 \
1444            | tron \
1445            | ubicom32 \
1446            | v70 \
1447            | v810 \
1448            | v850 \
1449            | v850e \
1450            | v850e1 \
1451            | v850e2 \
1452            | v850e2v3 \
1453            | v850es \
1454            | vax \
1455            | vc4 \
1456            | visium \
1457            | w65 \
1458            | wasm32 \
1459            | wasm64 \
1460            | we32k \
1461            | x86 \
1462            | x86_64 \
1463            | xc16x \
1464            | xgate \
1465            | xps100 \
1466            | xstormy16 \
1467            | xtensa* \
1468            | ymp \
1469            | z80 \
1470            | z8k)
1471                ;;
1472
1473            *)
1474                echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2
1475                exit 1
1476                ;;
1477        esac
1478        ;;
1479esac
1480
1481# Here we canonicalize certain aliases for manufacturers.
1482case $vendor in
1483    digital*)
1484        vendor=dec
1485        ;;
1486    commodore*)
1487        vendor=cbm
1488        ;;
1489    *)
1490        ;;
1491esac
1492
1493# Decode manufacturer-specific aliases for certain operating systems.
1494
1495if test x"$basic_os" != x
1496then
1497
1498# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
1499# set os.
1500obj=
1501case $basic_os in
1502    gnu/linux*)
1503        kernel=linux
1504        os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
1505        ;;
1506    os2-emx)
1507        kernel=os2
1508        os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
1509        ;;
1510    nto-qnx*)
1511        kernel=nto
1512        os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
1513        ;;
1514    *-*)
1515        saved_IFS=$IFS
1516        IFS="-" read kernel os <<EOF
1517$basic_os
1518EOF
1519        IFS=$saved_IFS
1520        ;;
1521    # Default OS when just kernel was specified
1522    nto*)
1523        kernel=nto
1524        os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
1525        ;;
1526    ironclad*)
1527        kernel=ironclad
1528        os=`echo "$basic_os" | sed -e 's|ironclad|mlibc|'`
1529        ;;
1530    linux*)
1531        kernel=linux
1532        os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
1533        ;;
1534    managarm*)
1535        kernel=managarm
1536        os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
1537        ;;
1538    *)
1539        kernel=
1540        os=$basic_os
1541        ;;
1542esac
1543
1544# Now, normalize the OS (knowing we just have one component, it's not a kernel,
1545# etc.)
1546case $os in
1547    # First match some system type aliases that might get confused
1548    # with valid system types.
1549    # solaris* is a basic system type, with this one exception.
1550    auroraux)
1551        os=auroraux
1552        ;;
1553    bluegene*)
1554        os=cnk
1555        ;;
1556    solaris1 | solaris1.*)
1557        os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
1558        ;;
1559    solaris)
1560        os=solaris2
1561        ;;
1562    unixware*)
1563        os=sysv4.2uw
1564        ;;
1565    # The marketing names for NeXT's operating systems were
1566    # NeXTSTEP, NeXTSTEP 2, OpenSTEP 3, OpenSTEP 4.  'openstep' is
1567    # mapped to 'openstep3', but 'openstep1' and 'openstep2' are
1568    # mapped to 'nextstep' and 'nextstep2', consistent with the
1569    # treatment of SunOS/Solaris.
1570    ns | ns1 | nextstep | nextstep1 | openstep1)
1571        os=nextstep
1572        ;;
1573    ns2 | nextstep2 | openstep2)
1574        os=nextstep2
1575        ;;
1576    ns3 | nextstep3 | openstep | openstep3)
1577        os=openstep3
1578        ;;
1579    ns4 | nextstep4 | openstep4)
1580        os=openstep4
1581        ;;
1582    # es1800 is here to avoid being matched by es* (a different OS)
1583    es1800*)
1584        os=ose
1585        ;;
1586    # Some version numbers need modification
1587    chorusos*)
1588        os=chorusos
1589        ;;
1590    isc)
1591        os=isc2.2
1592        ;;
1593    sco6)
1594        os=sco5v6
1595        ;;
1596    sco5)
1597        os=sco3.2v5
1598        ;;
1599    sco4)
1600        os=sco3.2v4
1601        ;;
1602    sco3.2.[4-9]*)
1603        os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
1604        ;;
1605    sco*v* | scout)
1606        # Don't match below
1607        ;;
1608    sco*)
1609        os=sco3.2v2
1610        ;;
1611    psos*)
1612        os=psos
1613        ;;
1614    qnx*)
1615        os=qnx
1616        ;;
1617    hiux*)
1618        os=hiuxwe2
1619        ;;
1620    lynx*178)
1621        os=lynxos178
1622        ;;
1623    lynx*5)
1624        os=lynxos5
1625        ;;
1626    lynxos*)
1627        # don't get caught up in next wildcard
1628        ;;
1629    lynx*)
1630        os=lynxos
1631        ;;
1632    mac[0-9]*)
1633        os=`echo "$os" | sed -e 's|mac|macos|'`
1634        ;;
1635    opened*)
1636        os=openedition
1637        ;;
1638    os400*)
1639        os=os400
1640        ;;
1641    sunos5*)
1642        os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1643        ;;
1644    sunos6*)
1645        os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1646        ;;
1647    wince*)
1648        os=wince
1649        ;;
1650    utek*)
1651        os=bsd
1652        vendor=`echo "$vendor" | sed -e 's|^unknown$|tektronix|'`
1653        ;;
1654    dynix*)
1655        os=bsd
1656        ;;
1657    acis*)
1658        os=aos
1659        ;;
1660    atheos*)
1661        os=atheos
1662        ;;
1663    syllable*)
1664        os=syllable
1665        ;;
1666    386bsd)
1667        os=bsd
1668        ;;
1669    ctix*)
1670        os=sysv
1671        vendor=`echo "$vendor" | sed -e 's|^unknown$|convergent|'`
1672        ;;
1673    uts*)
1674        os=sysv
1675        ;;
1676    nova*)
1677        kernel=rtmk
1678        os=nova
1679        ;;
1680    # Preserve the version number of sinix5.
1681    sinix5.*)
1682        os=`echo "$os" | sed -e 's|sinix|sysv|'`
1683        vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
1684        ;;
1685    sinix*)
1686        os=sysv4
1687        vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
1688        ;;
1689    tpf*)
1690        os=tpf
1691        ;;
1692    triton*)
1693        os=sysv3
1694        ;;
1695    oss*)
1696        os=sysv3
1697        ;;
1698    svr4*)
1699        os=sysv4
1700        ;;
1701    svr3)
1702        os=sysv3
1703        ;;
1704    sysvr4)
1705        os=sysv4
1706        ;;
1707    ose*)
1708        os=ose
1709        ;;
1710    *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1711        os=mint
1712        ;;
1713    dicos*)
1714        os=dicos
1715        ;;
1716    pikeos*)
1717        # Until real need of OS specific support for
1718        # particular features comes up, bare metal
1719        # configurations are quite functional.
1720        case $cpu in
1721            arm*)
1722            os=eabi
1723            ;;
1724            *)
1725            os=
1726            obj=elf
1727            ;;
1728        esac
1729        ;;
1730    aout* | coff* | elf* | pe*)
1731        # These are machine code file formats, not OSes
1732        obj=$os
1733        os=
1734        ;;
1735    *)
1736        # No normalization, but not necessarily accepted, that comes below.
1737        ;;
1738esac
1739
1740else
1741
1742# Here we handle the default operating systems that come with various machines.
1743# The value should be what the vendor currently ships out the door with their
1744# machine or put another way, the most popular os provided with the machine.
1745
1746# Note that if you're going to try to match "-MANUFACTURER" here (say,
1747# "-sun"), then you have to tell the case statement up towards the top
1748# that MANUFACTURER isn't an operating system.  Otherwise, code above
1749# will signal an error saying that MANUFACTURER isn't an operating
1750# system, and we'll never get to this point.
1751
1752kernel=
1753obj=
1754case $cpu-$vendor in
1755    score-*)
1756        os=
1757        obj=elf
1758        ;;
1759    spu-*)
1760        os=
1761        obj=elf
1762        ;;
1763    *-acorn)
1764        os=riscix1.2
1765        ;;
1766    arm*-rebel)
1767        kernel=linux
1768        os=gnu
1769        ;;
1770    arm*-semi)
1771        os=
1772        obj=aout
1773        ;;
1774    c4x-* | tic4x-*)
1775        os=
1776        obj=coff
1777        ;;
1778    c8051-*)
1779        os=
1780        obj=elf
1781        ;;
1782    clipper-intergraph)
1783        os=clix
1784        ;;
1785    hexagon-*)
1786        os=
1787        obj=elf
1788        ;;
1789    tic54x-*)
1790        os=
1791        obj=coff
1792        ;;
1793    tic55x-*)
1794        os=
1795        obj=coff
1796        ;;
1797    tic6x-*)
1798        os=
1799        obj=coff
1800        ;;
1801    # This must come before the *-dec entry.
1802    pdp10-*)
1803        os=tops20
1804        ;;
1805    pdp11-*)
1806        os=none
1807        ;;
1808    *-dec | vax-*)
1809        os=ultrix4.2
1810        ;;
1811    m68*-apollo)
1812        os=domain
1813        ;;
1814    i386-sun)
1815        os=sunos4.0.2
1816        ;;
1817    m68000-sun)
1818        os=sunos3
1819        ;;
1820    m68*-cisco)
1821        os=
1822        obj=aout
1823        ;;
1824    mep-*)
1825        os=
1826        obj=elf
1827        ;;
1828    # The -sgi and -siemens entries must be before the mips- entry
1829    # or we get the wrong os.
1830    *-sgi)
1831        os=irix
1832        ;;
1833    *-siemens)
1834        os=sysv4
1835        ;;
1836    mips*-cisco)
1837        os=
1838        obj=elf
1839        ;;
1840    mips*-*|nanomips*-*)
1841        os=
1842        obj=elf
1843        ;;
1844    or32-*)
1845        os=
1846        obj=coff
1847        ;;
1848    # This must be before the sparc-* entry or we get the wrong os.
1849    *-tti)
1850        os=sysv3
1851        ;;
1852    sparc-* | *-sun)
1853        os=sunos4.1.1
1854        ;;
1855    pru-*)
1856        os=
1857        obj=elf
1858        ;;
1859    *-be)
1860        os=beos
1861        ;;
1862    *-ibm)
1863        os=aix
1864        ;;
1865    *-knuth)
1866        os=mmixware
1867        ;;
1868    *-wec)
1869        os=proelf
1870        ;;
1871    *-winbond)
1872        os=proelf
1873        ;;
1874    *-oki)
1875        os=proelf
1876        ;;
1877    *-hp)
1878        os=hpux
1879        ;;
1880    *-hitachi)
1881        os=hiuxwe2
1882        ;;
1883    i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1884        os=sysv
1885        ;;
1886    *-cbm)
1887        os=amigaos
1888        ;;
1889    *-dg)
1890        os=dgux
1891        ;;
1892    *-dolphin)
1893        os=sysv3
1894        ;;
1895    m68k-ccur)
1896        os=rtu
1897        ;;
1898    m88k-omron*)
1899        os=luna
1900        ;;
1901    *-next)
1902        os=nextstep
1903        ;;
1904    *-sequent)
1905        os=ptx
1906        ;;
1907    *-crds)
1908        os=unos
1909        ;;
1910    *-ns)
1911        os=genix
1912        ;;
1913    i370-*)
1914        os=mvs
1915        ;;
1916    *-gould)
1917        os=sysv
1918        ;;
1919    *-highlevel)
1920        os=bsd
1921        ;;
1922    *-encore)
1923        os=bsd
1924        ;;
1925    *-masscomp)
1926        os=rtu
1927        ;;
1928    f30[01]-fujitsu | f700-fujitsu)
1929        os=uxpv
1930        ;;
1931    *-rom68k)
1932        os=
1933        obj=coff
1934        ;;
1935    *-*bug)
1936        os=
1937        obj=coff
1938        ;;
1939    *-apple)
1940        os=macos
1941        ;;
1942    *-atari*)
1943        os=mint
1944        ;;
1945    *-wrs)
1946        os=vxworks
1947        ;;
1948    *)
1949        os=none
1950        ;;
1951esac
1952
1953fi
1954
1955# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ).
1956
1957case $os in
1958    # Sometimes we do "kernel-libc", so those need to count as OSes.
1959    llvm* | musl* | newlib* | relibc* | uclibc*)
1960        ;;
1961    # Likewise for "kernel-abi"
1962    eabi* | gnueabi*)
1963        ;;
1964    # VxWorks passes extra cpu info in the 4th filed.
1965    simlinux | simwindows | spe)
1966        ;;
1967    # See `case $cpu-$os` validation below
1968    ghcjs)
1969        ;;
1970    # Now accept the basic system types.
1971    # Each alternative MUST end in a * to match a version number.
1972      abug \
1973    | aix* \
1974    | amdhsa* \
1975    | amigados* \
1976    | amigaos* \
1977    | android* \
1978    | aof* \
1979    | aos* \
1980    | aros* \
1981    | atheos* \
1982    | auroraux* \
1983    | aux* \
1984    | banan_os* \
1985    | beos* \
1986    | bitrig* \
1987    | bme* \
1988    | bosx* \
1989    | bsd* \
1990    | cegcc* \
1991    | chorusos* \
1992    | chorusrdb* \
1993    | clix* \
1994    | cloudabi* \
1995    | cnk* \
1996    | conix* \
1997    | cos* \
1998    | cxux* \
1999    | cygwin* \
2000    | darwin* \
2001    | dgux* \
2002    | dicos* \
2003    | dnix* \
2004    | domain* \
2005    | dragonfly* \
2006    | drops* \
2007    | ebmon* \
2008    | ecoff* \
2009    | ekkobsd* \
2010    | emscripten* \
2011    | emx* \
2012    | es* \
2013    | fiwix* \
2014    | freebsd* \
2015    | fuchsia* \
2016    | genix* \
2017    | genode* \
2018    | glidix* \
2019    | gnu* \
2020    | go32* \
2021    | haiku* \
2022    | hcos* \
2023    | hiux* \
2024    | hms* \
2025    | hpux* \
2026    | ieee* \
2027    | interix* \
2028    | ios* \
2029    | iris* \
2030    | irix* \
2031    | isc* \
2032    | its* \
2033    | l4re* \
2034    | libertybsd* \
2035    | lites* \
2036    | lnews* \
2037    | luna* \
2038    | lynxos* \
2039    | mach* \
2040    | macos* \
2041    | magic* \
2042    | mbr* \
2043    | midipix* \
2044    | midnightbsd* \
2045    | mingw32* \
2046    | mingw64* \
2047    | minix* \
2048    | mint* \
2049    | mirbsd* \
2050    | mks* \
2051    | mlibc* \
2052    | mmixware* \
2053    | mon960* \
2054    | morphos* \
2055    | moss* \
2056    | moxiebox* \
2057    | mpeix* \
2058    | mpw* \
2059    | msdos* \
2060    | msys* \
2061    | mvs* \
2062    | nacl* \
2063    | netbsd* \
2064    | netware* \
2065    | newsos* \
2066    | nextstep* \
2067    | nindy* \
2068    | nonstopux* \
2069    | nova* \
2070    | nsk* \
2071    | nucleus* \
2072    | nx6 \
2073    | nx7 \
2074    | oabi* \
2075    | ohos* \
2076    | onefs* \
2077    | openbsd* \
2078    | openedition* \
2079    | openstep* \
2080    | os108* \
2081    | os2* \
2082    | os400* \
2083    | os68k* \
2084    | os9* \
2085    | ose* \
2086    | osf* \
2087    | oskit* \
2088    | osx* \
2089    | palmos* \
2090    | phoenix* \
2091    | plan9* \
2092    | powermax* \
2093    | powerunix* \
2094    | proelf* \
2095    | psos* \
2096    | psp* \
2097    | ptx* \
2098    | pw32* \
2099    | qnx* \
2100    | rdos* \
2101    | redox* \
2102    | rhapsody* \
2103    | riscix* \
2104    | riscos* \
2105    | rtems* \
2106    | rtmk* \
2107    | rtu* \
2108    | scout* \
2109    | secbsd* \
2110    | sei* \
2111    | serenity* \
2112    | sim* \
2113    | skyos* \
2114    | solaris* \
2115    | solidbsd* \
2116    | sortix* \
2117    | storm-chaos* \
2118    | sunos \
2119    | sunos[34]* \
2120    | superux* \
2121    | syllable* \
2122    | sym* \
2123    | sysv* \
2124    | tenex* \
2125    | tirtos* \
2126    | tock* \
2127    | toppers* \
2128    | tops10* \
2129    | tops20* \
2130    | tpf* \
2131    | tvos* \
2132    | twizzler* \
2133    | uclinux* \
2134    | udi* \
2135    | udk* \
2136    | ultrix* \
2137    | unicos* \
2138    | uniplus* \
2139    | unleashed* \
2140    | unos* \
2141    | uwin* \
2142    | uxpv* \
2143    | v88r* \
2144    |*vms* \
2145    | vos* \
2146    | vsta* \
2147    | vxsim* \
2148    | vxworks* \
2149    | wasi* \
2150    | watchos* \
2151    | wince* \
2152    | windiss* \
2153    | windows* \
2154    | winnt* \
2155    | xenix* \
2156    | xray* \
2157    | zephyr* \
2158    | zvmoe* )
2159        ;;
2160    # This one is extra strict with allowed versions
2161    sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
2162        # Don't forget version if it is 3.2v4 or newer.
2163        ;;
2164    # This refers to builds using the UEFI calling convention
2165    # (which depends on the architecture) and PE file format.
2166    # Note that this is both a different calling convention and
2167    # different file format than that of GNU-EFI
2168    # (x86_64-w64-mingw32).
2169    uefi)
2170        ;;
2171    none)
2172        ;;
2173    kernel* | msvc* )
2174        # Restricted further below
2175        ;;
2176    '')
2177        if test x"$obj" = x
2178        then
2179            echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2
2180        fi
2181        ;;
2182    *)
2183        echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2
2184        exit 1
2185        ;;
2186esac
2187
2188case $obj in
2189    aout* | coff* | elf* | pe*)
2190        ;;
2191    '')
2192        # empty is fine
2193        ;;
2194    *)
2195        echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2
2196        exit 1
2197        ;;
2198esac
2199
2200# Here we handle the constraint that a (synthetic) cpu and os are
2201# valid only in combination with each other and nowhere else.
2202case $cpu-$os in
2203    # The "javascript-unknown-ghcjs" triple is used by GHC; we
2204    # accept it here in order to tolerate that, but reject any
2205    # variations.
2206    javascript-ghcjs)
2207        ;;
2208    javascript-* | *-ghcjs)
2209        echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2
2210        exit 1
2211        ;;
2212esac
2213
2214# As a final step for OS-related things, validate the OS-kernel combination
2215# (given a valid OS), if there is a kernel.
2216case $kernel-$os-$obj in
2217    linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
2218            | linux-mlibc*- | linux-musl*- | linux-newlib*- \
2219            | linux-relibc*- | linux-uclibc*- | linux-ohos*- )
2220        ;;
2221    uclinux-uclibc*- | uclinux-gnu*- )
2222        ;;
2223    ironclad-mlibc*-)
2224        ;;
2225    managarm-mlibc*- | managarm-kernel*- )
2226        ;;
2227    windows*-msvc*-)
2228        ;;
2229    -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \
2230            | -uclibc*- )
2231        # These are just libc implementations, not actual OSes, and thus
2232        # require a kernel.
2233        echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2
2234        exit 1
2235        ;;
2236    -kernel*- )
2237        echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2
2238        exit 1
2239        ;;
2240    *-kernel*- )
2241        echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2
2242        exit 1
2243        ;;
2244    *-msvc*- )
2245        echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
2246        exit 1
2247        ;;
2248    kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-)
2249        ;;
2250    vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
2251        ;;
2252    nto-qnx*-)
2253        ;;
2254    os2-emx-)
2255        ;;
2256    rtmk-nova-)
2257        ;;
2258    *-eabi*- | *-gnueabi*-)
2259        ;;
2260    ios*-simulator- | tvos*-simulator- | watchos*-simulator- )
2261        ;;
2262    none--*)
2263        # None (no kernel, i.e. freestanding / bare metal),
2264        # can be paired with an machine code file format
2265        ;;
2266    -*-)
2267        # Blank kernel with real OS is always fine.
2268        ;;
2269    --*)
2270        # Blank kernel and OS with real machine code file format is always fine.
2271        ;;
2272    *-*-*)
2273        echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2
2274        exit 1
2275        ;;
2276esac
2277
2278# Here we handle the case where we know the os, and the CPU type, but not the
2279# manufacturer.  We pick the logical manufacturer.
2280case $vendor in
2281    unknown)
2282        case $cpu-$os in
2283            *-riscix*)
2284                vendor=acorn
2285                ;;
2286            *-sunos* | *-solaris*)
2287                vendor=sun
2288                ;;
2289            *-cnk* | *-aix*)
2290                vendor=ibm
2291                ;;
2292            *-beos*)
2293                vendor=be
2294                ;;
2295            *-hpux*)
2296                vendor=hp
2297                ;;
2298            *-mpeix*)
2299                vendor=hp
2300                ;;
2301            *-hiux*)
2302                vendor=hitachi
2303                ;;
2304            *-unos*)
2305                vendor=crds
2306                ;;
2307            *-dgux*)
2308                vendor=dg
2309                ;;
2310            *-luna*)
2311                vendor=omron
2312                ;;
2313            *-genix*)
2314                vendor=ns
2315                ;;
2316            *-clix*)
2317                vendor=intergraph
2318                ;;
2319            *-mvs* | *-opened*)
2320                vendor=ibm
2321                ;;
2322            *-os400*)
2323                vendor=ibm
2324                ;;
2325            s390-* | s390x-*)
2326                vendor=ibm
2327                ;;
2328            *-ptx*)
2329                vendor=sequent
2330                ;;
2331            *-tpf*)
2332                vendor=ibm
2333                ;;
2334            *-vxsim* | *-vxworks* | *-windiss*)
2335                vendor=wrs
2336                ;;
2337            *-aux*)
2338                vendor=apple
2339                ;;
2340            *-hms*)
2341                vendor=hitachi
2342                ;;
2343            *-mpw* | *-macos*)
2344                vendor=apple
2345                ;;
2346            *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
2347                vendor=atari
2348                ;;
2349            *-vos*)
2350                vendor=stratus
2351                ;;
2352        esac
2353        ;;
2354esac
2355
2356echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
2357exit
2358
2359# Local variables:
2360# eval: (add-hook 'before-save-hook 'time-stamp nil t)
2361# time-stamp-start: "timestamp='"
2362# time-stamp-format: "%Y-%02m-%02d"
2363# time-stamp-end: "'"
2364# End:
2365