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