1# gas target specific configuration file.  This is a -*- sh -*- file.
2#
3#   Copyright (C) 2012-2024 Free Software Foundation, Inc.
4#
5# This file is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3 of the License, or
8# (at your option) any later version.
9# 
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14# 
15# You should have received a copy of the GNU General Public License
16# along with this program; see the file COPYING3.  If not see
17# <http://www.gnu.org/licenses/>.
18#
19
20# This is invoked by configure.  Putting it in a separate shell file
21# lets us skip running autoconf when modifying target specific
22# information.
23
24# Input shell variables:
25#   targ	a configuration target name, such as i686-pc-linux-gnu.
26
27# Output shell variables:
28#   cpu_type	canonical gas cpu type; identifies the config/tc-* files
29#   fmt		output format; identifies the config/obj-* files
30#   em		emulation; identifies the config/te-* files
31
32# Optional output shell variables; these are not always set:
33#   arch	the default architecture; sets DEFAULT_ARCH on some systems
34#   endian	"big" or "little"; used on bi-endian systems
35
36cpu_type=
37fmt=
38em=generic
39bfd_gas=no
40arch=
41endian=
42
43eval `echo $targ | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/cpu=\1 vendor=\2 os=\3/'`
44
45# Check for architecture variants.  Set cpu_type and, optionally,
46# endian and arch.
47# Note: This table is alpha-sorted, please try to keep it that way.
48case ${cpu} in
49  aarch64)		cpu_type=aarch64 endian=little arch=aarch64;;
50  aarch64_be)		cpu_type=aarch64 endian=big arch=aarch64;;
51  alpha*)		cpu_type=alpha ;;
52  am33_2.0)		cpu_type=mn10300 endian=little ;;
53  arc*eb)		cpu_type=arc endian=big ;;
54  arm*be|arm*b)		cpu_type=arm endian=big ;;
55  arm*)			cpu_type=arm endian=little ;;
56  bfin*)		cpu_type=bfin endian=little ;;
57  c4x*)			cpu_type=tic4x ;;
58  cr16*)		cpu_type=cr16 endian=little ;;
59  crisv32)		cpu_type=cris arch=crisv32 ;;
60  crx*)			cpu_type=crx endian=little ;;
61  epiphany*)		cpu_type=epiphany endian=little ;;
62  fido)			cpu_type=m68k ;;
63  hppa*)		cpu_type=hppa ;;
64  i[3-7]86)		cpu_type=i386 arch=i386;;
65  ia16)			cpu_type=i386 arch=i386;;
66  ia64)			cpu_type=ia64 ;;
67  ip2k)			cpu_type=ip2k endian=big ;;
68  iq2000)		cpu_type=iq2000 endian=big ;;
69  kvx)			cpu_type=kvx endian=little ;;
70  lm32)			cpu_type=lm32 ;;
71  loongarch32)		cpu_type=loongarch arch=loongarch32;;
72  loongarch64)		cpu_type=loongarch arch=loongarch64;;
73  m32c)			cpu_type=m32c endian=little ;;
74  m32r)			cpu_type=m32r endian=big ;;
75  m32rle)		cpu_type=m32r endian=little ;;
76  m5200|m5407)		cpu_type=m68k ;;
77  m68008)		cpu_type=m68k ;;
78  m680[012346]0)	cpu_type=m68k ;;
79  m6811|m6812|m68hc12)	cpu_type=m68hc11 ;;
80  m683??)		cpu_type=m68k ;;
81  s12z)               cpu_type=s12z ;;
82  mep)			cpu_type=mep endian=little ;;
83  microblazeel*)	cpu_type=microblaze endian=little;;
84  microblaze*)		cpu_type=microblaze endian=big;;
85  mips*el)		cpu_type=mips endian=little ;;
86  mips*)		cpu_type=mips endian=big ;;
87  mt)			cpu_type=mt endian=big ;;
88  nds32be)		cpu_type=nds32 endian=big ;;
89  nds32le)		cpu_type=nds32 endian=little ;;
90  or1k* | or1knd*)	cpu_type=or1k endian=big ;;
91  pjl*)			cpu_type=pj endian=little ;;
92  pj*)			cpu_type=pj endian=big ;;
93  powerpc*le*)		cpu_type=ppc endian=little ;;
94  powerpc*)		cpu_type=ppc endian=big ;;
95  riscv64be*)		cpu_type=riscv endian=big arch=riscv64 ;;
96  riscv64*)		cpu_type=riscv endian=little arch=riscv64 ;;
97  riscv32be*|riscvbe*)	cpu_type=riscv endian=big arch=riscv32 ;;
98  riscv32* | riscv*)	cpu_type=riscv endian=little arch=riscv32 ;;
99  rs6000*)		cpu_type=ppc ;;
100  rl78*)		cpu_type=rl78 ;;
101  rx)			cpu_type=rx ;;
102  s390x*)		cpu_type=s390 arch=s390x ;;
103  s390*)		cpu_type=s390 arch=s390 ;;
104  score*l)		cpu_type=score endian=little ;;
105  score*)		cpu_type=score endian=big ;;
106  sh*le)		cpu_type=sh endian=little ;;
107  sh*)			cpu_type=sh endian=big ;;
108  sparc64* | sparcv9*)	cpu_type=sparc arch=v9-64 ;;
109  sparc86x*)		cpu_type=sparc arch=sparc86x  ;;
110  sparclet*)		cpu_type=sparc arch=sparclet ;;
111  sparclite*)		cpu_type=sparc arch=sparclite ;;
112  sparc*)		cpu_type=sparc arch=sparclite ;; # ??? See tc-sparc.c.
113  tilegx*be)		cpu_type=tilegx endian=big ;;
114  tilegx*)		cpu_type=tilegx endian=little ;;
115  v850*)		cpu_type=v850 ;;
116  visium)		cpu_type=visium endian=big ;;
117  wasm32)               cpu_type=wasm32 endian=little ;;
118  x86_64*)		cpu_type=i386 arch=x86_64;;
119  xgate)		cpu_type=xgate ;;
120  xtensa*)		cpu_type=xtensa arch=xtensa ;;
121  *)			cpu_type=${cpu} ;;
122esac
123
124
125# Assign object format.  Set fmt, em, and bfd_gas.
126generic_target=${cpu_type}-$vendor-$os
127# Note: This table is alpha-sorted, please try to keep it that way.
128case ${generic_target} in
129  aarch64*-*-elf*)			fmt=elf;;
130  aarch64*-*-fuchsia*)			fmt=elf;;
131  aarch64*-*-haiku*)			fmt=elf em=haiku ;;
132  aarch64*-*-genode*)			fmt=elf;;
133  aarch64*-*-linux*)			fmt=elf em=linux
134    case ${cpu}-${os} in
135      aarch64*-linux-gnu_ilp32)		arch=aarch64:32 ;;
136    esac ;;
137  aarch64*-*-gnu*)			fmt=elf em=gnu ;;
138  aarch64*-*-netbsd*)			fmt=elf em=nbsd;;
139  aarch64*-*-nto*)			fmt=elf;;
140  aarch64*-*-openbsd*)			fmt=elf;;
141  aarch64*-*-pe* | aarch64*-*-mingw*)	fmt=coff em=pepaarch64 ;;
142  alpha-*-*vms*)			fmt=evax ;;
143  alpha-*-osf*)				fmt=ecoff ;;
144  alpha-*-linux*ecoff*)			fmt=ecoff ;;
145  alpha-*-linux-*)			fmt=elf em=linux ;;
146  alpha-*-netbsd* | alpha-*-openbsd*)	fmt=elf em=nbsd ;;
147
148  arc-*-elf*)				fmt=elf ;;
149  arc*-*-linux*)			fmt=elf bfd_gas=yes ;;
150
151  arm-*-phoenix*)			fmt=elf ;;
152  arm-*-elf)				fmt=elf ;;
153  arm-*-eabi* | arm-*-rtems* | arm-*-genode*)	fmt=elf em=armeabi ;;
154  arm-*-kaos*)				fmt=elf ;;
155  arm-*-conix*)				fmt=elf ;;
156  arm-*-freebsd[89].* | armeb-*-freebsd[89].*)
157					fmt=elf  em=freebsd ;;
158  arm-*-freebsd* | armeb-*-freebsd*)	fmt=elf  em=armfbsdeabi ;;
159  arm*-*-freebsd*)			fmt=elf  em=armfbsdvfp ;;
160  arm-*-linux-*eabi*)			fmt=elf  em=armlinuxeabi ;;
161  arm-*-linux-*)			fmt=elf  em=linux ;;
162  arm-*-uclinux*eabi*)			fmt=elf  em=armlinuxeabi ;;
163  arm-*-uclinux*)			fmt=elf  em=linux ;;
164  arm-*-nacl*)				fmt=elf  em=nacl ;;
165  arm-*-netbsd* | arm-*-openbsd*)	fmt=elf  em=nbsd ;;
166  arm-*-nto*)				fmt=elf ;;
167  arm-wince-pe | arm-*-wince | arm*-*-mingw32ce* | arm*-*-cegcc*)
168					fmt=coff em=wince-pe ;;
169  arm-*-pe)				fmt=coff em=pe ;;
170  arm-*-fuchsia*)			fmt=elf ;;
171  arm-*-haiku*)				fmt=elf em=haiku ;;
172
173  avr-*-*)				fmt=elf bfd_gas=yes ;;
174
175  bfin-*-linux-uclibc)			fmt=fdpicelf em=linux ;;
176  bfin-*-uclinux*)			fmt=elf em=linux ;;
177  bfin-*elf)				fmt=elf ;;
178
179  cr16-*-elf*)				fmt=elf ;;
180
181  cris-*-linux-* | crisv32-*-linux-*)
182					fmt=multi em=linux ;;
183  cris-*-* | crisv32-*-*)		fmt=multi ;;
184
185  crx-*-elf*)				fmt=elf ;;
186
187  csky-*-elf*abiv1)			fmt=elf em=csky_abiv1 ;;
188  csky-*-elf*)				fmt=elf em=csky_abiv2 ;;
189  csky-*-linux*abiv1)			fmt=elf em=csky_abiv1_linux ;;
190  csky-*-linux*)			fmt=elf em=csky_abiv2_linux ;;
191
192  d10v-*-*)				fmt=elf ;;
193  d30v-*-*)				fmt=elf ;;
194  dlx-*-*)				fmt=elf ;;
195
196  bpf-*-*)				fmt=elf ;;
197  epiphany-*-*)				fmt=elf ;;
198
199  fr30-*-*)				fmt=elf ;;
200  frv-*-*linux*)			fmt=elf em=linux;;
201  frv-*-*)				fmt=elf ;;
202
203  ft32-*-*)				fmt=elf ;;
204
205  hppa-*-linux*)
206    case ${cpu} in
207      hppa*64*)				fmt=elf em=hppalinux64 ;;
208      hppa*)				fmt=elf em=linux ;;
209    esac ;;
210  hppa-*-*elf*)				fmt=elf em=hppa ;;
211  hppa-*-lites*)			fmt=elf em=hppa ;;
212  hppa-*-netbsd*)			fmt=elf em=nbsd ;;
213  hppa-*-openbsd*)			fmt=elf em=hppa ;;
214  hppa-*-osf*)				fmt=som em=hppa ;;
215  hppa-*-hpux11*)
216    case ${cpu} in
217      hppa*64*)				fmt=elf em=hppa64 ;;
218      hppa*)				fmt=som em=hppa ;;
219    esac ;;
220  hppa-*-hpux*)				fmt=som em=hppa ;;
221  hppa-*-mpeix*)			fmt=som em=hppa ;;
222  hppa-*-bsd*)				fmt=som em=hppa ;;
223  hppa-*-hiux*)				fmt=som em=hppa ;;
224
225  h8300-*-elf)				fmt=elf ;;
226  h8300-*-linux*)			fmt=elf em=linux ;;
227
228  i386-*-beospe*)			fmt=coff em=pe ;;
229  i386-*-beos*)				fmt=elf ;;
230  i386-*-elfiamcu)			fmt=elf arch=iamcu ;;
231  i386-*-elf*)				fmt=elf ;;
232  i386-*-fuchsia*)			fmt=elf ;;
233  i386-*-haiku*)			fmt=elf em=haiku ;;
234  i386-*-genode*)			fmt=elf ;;
235  i386-*-bsd*)				fmt=aout em=386bsd ;;
236  i386-*-netbsd*-gnu* | \
237  i386-*-knetbsd*-gnu | \
238  i386-*-netbsd* | \
239  i386-*-openbsd*)			fmt=elf em=nbsd ;;
240  i386-*-linux-*)			fmt=elf em=linux
241    case ${cpu}-${os} in
242      x86_64*-linux-gnux32)		arch=x86_64:32 ;;
243    esac ;;
244  i386-*-lynxos*)			fmt=elf em=lynx ;;
245  i386-*-redox*)			fmt=elf ;;
246  i386-*-solaris*)			fmt=elf em=solaris ;;
247  i386-*-freebsd* \
248  | i386-*-kfreebsd*-gnu)		fmt=elf em=freebsd ;;
249  i386-*-msdosdjgpp* \
250  | i386-*-go32*)			fmt=coff em=go32 ;;
251  i386-*-gnu*)				fmt=elf em=gnu ;;
252  i386-*-msdos*)			fmt=aout ;;
253  i386-*-moss*)				fmt=elf ;;
254  i386-*-pe)				fmt=coff em=pe ;;
255  i386-*-cygwin*)
256   case ${cpu} in
257     x86_64*)				fmt=coff em=pep ;;
258     i*)				fmt=coff em=pe ;;
259   esac ;;
260  i386-*-interix*)			fmt=coff em=interix ;;
261  i386-*-mingw*)
262    case ${cpu} in
263      x86_64*)				fmt=coff em=pep ;;
264      i*)				fmt=coff em=pe ;;
265    esac ;;
266  i386-*-nto-qnx*)			fmt=elf ;;
267  i386-*-*nt*)				fmt=coff em=pe ;;
268  i386-*-rdos*)				fmt=elf ;;
269  i386-*-darwin*)			fmt=macho ;;
270
271  ia16-*-elf*)				fmt=elf ;;
272
273  ia64-*-elf*)				fmt=elf ;;
274  ia64-*-*vms*)				fmt=elf em=vms ;;
275  ia64-*-aix*)				fmt=elf em=ia64aix ;;
276  ia64-*-linux-*)			fmt=elf em=linux ;;
277  ia64-*-hpux*)				fmt=elf em=hpux ;;
278  ia64-*-netbsd*)			fmt=elf em=nbsd ;;
279
280  ip2k-*-*)				fmt=elf ;;
281
282  iq2000-*-elf)				fmt=elf ;;
283
284  kvx-*-*)				fmt=elf ;;
285  kvx-*-linux*)				fmt=elf em=linux ;;
286
287  lm32-*-*)				fmt=elf ;;
288
289  loongarch*)				fmt=elf ;;
290
291  m32c-*-elf)				fmt=elf ;;
292
293  m32r-*-elf*)				fmt=elf ;;
294  m32r-*-linux*)			fmt=elf em=linux;;
295
296  m68hc11-*-* | m6811-*-*)		fmt=elf ;;
297  m68hc12-*-* | m6812-*-*)		fmt=elf ;;
298
299  m68k-*-elf*)				fmt=elf ;;
300  m68k-*-linux-*)			fmt=elf em=linux ;;
301  m68k-*-uclinux*)			fmt=elf em=uclinux ;;
302  m68k-*-gnu*)				fmt=elf ;;
303  m68k-*-netbsd*)			fmt=elf em=nbsd ;;
304  m68k-*-haiku*)			fmt=elf em=haiku ;;
305
306  s12z-*-*)				fmt=elf ;;
307
308  mep-*-elf)				fmt=elf ;;
309
310  metag-*-elf)				fmt=elf ;;
311  metag-*-linux*)			fmt=elf em=linux ;;
312
313  mcore-*-elf)				fmt=elf ;;
314  mcore-*-pe)				fmt=coff em=pe bfd_gas=yes ;;
315
316  microblaze-*-*)			fmt=elf ;;
317
318  mips-*-irix6*)			fmt=elf em=irix ;;
319  mips-*-irix5*)			fmt=elf em=irix ;;
320  mips*-*-linux*)			fmt=elf em=tmips ;;
321  mips*-*-freebsd* | mips*-*-kfreebsd*-gnu)
322					fmt=elf em=freebsd ;;
323  mips-*-sysv4* | mips-*-gnu*)		fmt=elf em=tmips ;;
324  mips*-sde-elf* | mips*-mti-elf* | mips*-img-elf*)
325					fmt=elf em=tmips ;;
326  mips-*-haiku*)			fmt=elf em=haiku ;;
327  mips-*-elf*)				fmt=elf ;;
328  mips-*-netbsd*)			fmt=elf em=tmips ;;
329  mips-*-openbsd*)			fmt=elf em=tmips ;;
330  mips-*-windiss)			fmt=elf ;;
331
332  mmix-*-*)				fmt=elf ;;
333
334  mn10200-*-*)				fmt=elf ;;
335
336  # cpu_type for am33_2.0 is set to mn10300
337  mn10300-*-linux*)			fmt=elf em=linux ;;
338  mn10300-*-*)				fmt=elf ;;
339
340  moxie-*-uclinux)			fmt=elf em=linux ;;
341  moxie-*-moxiebox*)                    fmt=elf endian=little ;;
342  moxie-*-*)				fmt=elf ;;
343    
344  mt-*-elf)				fmt=elf bfd_gas=yes ;;
345
346  msp430-*-*)				fmt=elf ;;
347
348  nds32-*-elf*)				fmt=elf ;;
349  nds32-*-linux*)			fmt=elf em=linux ;;
350
351  nios2*-linux*)			fmt=elf em=linux ;;
352
353  ns32k-pc532-mach*)			fmt=aout em=pc532mach ;;
354  ns32k-pc532-ux*)			fmt=aout em=pc532mach ;;
355  ns32k-pc532-lites*)			fmt=aout em=nbsd532 ;;
356  ns32k-*-*n*bsd*)			fmt=aout em=nbsd532 ;;
357
358  or1k*-*-elf | or1k*-*-rtems*) 	fmt=elf endian=big ;;
359  or1k*-*-linux*)			fmt=elf em=linux endian=big ;;
360  or1k-*-netbsd*)			fmt=elf em=nbsd ;;
361
362  pj*)					fmt=elf ;;
363
364  ppc-*-aix5.[01])			fmt=coff em=aix5 ;;
365  ppc-*-aix[5-9].*)			fmt=coff em=aix5 ;;
366  ppc-*-aix*)				fmt=coff em=aix ;;
367  ppc-*-beos*)				fmt=coff ;;
368  ppc-*-*n*bsd* | ppc-*-elf*)		fmt=elf ;;
369  ppc-*-eabi* | ppc-*-sysv4*)		fmt=elf ;;
370  ppc-*-haiku*)				fmt=elf em=haiku ;;
371  ppc-*-linux-*)			fmt=elf em=linux ;;
372  ppc-*-solaris*)			fmt=elf em=solaris ;;
373  ppc-*-macos*)				fmt=coff em=macos ;;
374  ppc-*-nto*)				fmt=elf ;;
375  ppc-*-kaos*)				fmt=elf ;;
376
377  pru-*-*)				fmt=elf ;;
378
379  riscv*-*-haiku*)			fmt=elf endian=little em=haiku ;;
380  riscv*-*-*)				fmt=elf ;;
381
382  rx-*-linux*)				fmt=elf em=linux ;;
383
384  s390-*-linux-*)			fmt=elf em=linux ;;
385  s390-*-tpf*)				fmt=elf ;;
386
387  score-*-elf)				fmt=elf ;;
388
389  sh*-*-linux*)				fmt=elf em=linux
390    case ${cpu} in
391      sh*eb)	endian=big ;;
392      *)	endian=little ;;
393    esac ;;
394  sh*-*-netbsd*)			fmt=elf em=nbsd
395    case ${cpu} in
396      sh*l*)	endian=little ;;
397      *)	endian=big ;;
398    esac ;;
399  sh-*-elf*)				fmt=elf ;;
400  sh-*-uclinux* | sh[12]-*-uclinux*)	fmt=elf em=uclinux ;;
401  sh-*-coff*)				fmt=coff ;;
402  sh-*-nto*)				fmt=elf ;;
403  sh-*-pe*)				fmt=coff em=pe endian=little ;;
404  sh-*-kaos*)				fmt=elf ;;
405  shle*-*-kaos*)			fmt=elf ;;
406
407  sparc-*-haiku*)			fmt=elf em=haiku ;;
408  sparc-*-linux-*)			fmt=elf em=linux ;;
409  sparc-*-solaris*)			fmt=elf em=solaris ;;
410  sparc-*-freebsd*)			fmt=elf em=freebsd ;;
411  sparc-*-*bsd*)			fmt=elf em=nbsd ;;
412
413  spu-*-elf)				fmt=elf ;;
414
415  tic30-*-*coff*)			fmt=coff bfd_gas=yes ;;
416  tic4x-*-* | c4x-*-*)			fmt=coff bfd_gas=yes ;;
417  tic54x-*-* | c54x*-*-*)		fmt=coff bfd_gas=yes need_libm=yes;;
418  tic6x-*-*)				fmt=elf ;;
419
420  tilepro-*-* | tilegx*-*-*)		fmt=elf ;;
421
422  v850*-*-*)				fmt=elf ;;
423
424  vax-*-netbsdaout)			fmt=aout em=nbsd ;;
425  vax-*-netbsd*)			fmt=elf em=nbsd ;;
426  vax-*-linux-*)			fmt=elf em=linux ;;
427
428  visium-*-elf)				fmt=elf ;;
429
430  wasm32-*-*)                           fmt=elf ;;
431
432  xstormy16-*-*)			fmt=elf ;;
433  
434  xgate-*-*)    			fmt=elf ;;
435
436  xtensa*-*-*)				fmt=elf ;;
437
438  z80-*-coff)				fmt=coff ;;
439
440  z8k-*-coff | z8k-*-sim)		fmt=coff ;;
441
442  *-*-aout | *-*-scout)			fmt=aout ;;
443  *-*-cloudabi*)			fmt=elf em=cloudabi ;;
444  *-*-dragonfly*)			fmt=elf em=dragonfly ;;
445  *-*-freebsd* | *-*-kfreebsd*-gnu)	fmt=elf em=freebsd ;;
446  *-*-generic)				fmt=generic ;;
447  *-*-xray | *-*-hms)			fmt=coff ;;
448  *-*-sim)				fmt=coff ;;
449  *-*-elf | *-*-rtems* | *-*-sysv4*)	fmt=elf ;;
450  *-*-solaris*)				fmt=elf em=solaris ;;
451  *-*-aros*)				fmt=elf em=linux ;;
452  *-*-vxworks* | *-*-windiss)		fmt=elf em=vxworks ;;
453esac
454
455case ${cpu_type} in
456  aarch64 | alpha | arm | csky | i386 | ia64 | kvx | microblaze | mips | ns32k | \
457  or1k | or1knd | pdp11 | ppc | riscv | sh | sparc | z80 | z8k | loongarch)
458    bfd_gas=yes
459    ;;
460esac
461case ${fmt} in
462  elf | ecoff | fdpicelf | multi | som)
463    bfd_gas=yes
464    ;;
465esac
466
467if test $bfd_gas != yes; then
468  echo This target is no longer supported in gas
469  exit 1
470fi
471
472case ${cpu_type}-${fmt}-${os} in
473i386-elf-linux*)
474  # Default to compress DWARF debug sections for Linux/x86.
475  if test ${ac_default_compressed_debug_sections} = unset; then
476    ac_default_compressed_debug_sections=yes
477  fi
478  ;;
479esac
480