# Configuration fragment for GAS.

Set target_arch `echo {target_canonical} | sed -e 's/-.*-.*//'`

If "{target_arch}" =~ /powerpc/
	Set short_arch_name "ppc"
	Set target_cpu "powerpc"
Else
	Set short_arch_name "{target_arch}"
End If

# The following works for many configurations, though not all.

Set obj_format `echo {target_canonical} | sed -e 's/.*-.*-//'`
Set target_os `echo {target_canonical} | sed -e 's/.*-.*-//'`

Set bfd_gas no

Set TDEFINES ""

Set EXTRA_OBJECTS ""

# Default emulation.

Set em generic

If "{target_canonical}" =~ /m68k-apple-macos/
	Set obj_format "coff"
	Set TDEFINES '-d M68KCOFF'
	Set EXTRA_OBJECTS '"{o}"m68k-parse.c.o'

Else If "{target_canonical}" =~ /powerpc-apple-macos/
	Set obj_format "coff"
	Set bfd_gas yes
	Set em macos

Else If "{target_canonical}" =~ /i386-\Option-x-go32/
	Set obj_format "coff"
	Set TDEFINES '-d I386COFF'

Else If "{target_canonical}" =~ /m68k-\Option-x-coff/
	Set TDEFINES '-d M68KCOFF'

Else If "{target_canonical}" =~ /mips-idt-ecoff/
	Set bfd_gas yes
	Set TDEFINES '-d TARGET_BYTES_BIG_ENDIAN=1'

Else If "{target_canonical}" =~ /mips-\Option-x-\Option-x/
	# Assume other OSes etc use ELF
	Set obj_format "elf"
	Set bfd_gas yes
	Set TDEFINES '-d TARGET_BYTES_BIG_ENDIAN=1'
	forward-include "{srcroot}"bfd:elf-bfd.h 'bfd/elf-bfd.h'

Else If "{target_canonical}" =~ /sh-\Option-x-hms/
	Set obj_format "coff"
	forward-include "{srcroot}"opcodes:sh-opc.h 'opcodes/sh-opc.h'
End If

forward-include "{srcdir}"config:tc-{short_arch_name}.c targ-cpu.c
forward-include "{srcdir}"config:tc-{short_arch_name}.h targ-cpu.h

forward-include "{srcdir}"config:obj-{obj_format}.c obj-format.c
forward-include "{srcdir}"config:obj-{obj_format}.h obj-format.h

forward-include "{srcdir}"config:te-{em}.h targ-env.h

# Special cases for float handling.

If "{target_arch}" =~ /ns32k/
	forward-include "{srcdir}"config:atof-ns32k.c atof-targ.c
Else If "{target_arch}" =~ /tahoe/
	forward-include "{srcdir}"config:atof-tahoe.c atof-targ.c
Else If "{target_arch}" =~ /vax/
	forward-include "{srcdir}"config:atof-vax.c atof-targ.c
Else
	# Use IEEE by default.
	forward-include "{srcdir}"config:atof-ieee.c atof-targ.c
End If

Echo '# From mpw-config.in'     		 > "{o}"mk.tmp
Echo "TDEFINES = " {TDEFINES}			>> "{o}"mk.tmp
Echo "EXTRA_OBJECTS = " {EXTRA_OBJECTS}		>> "{o}"mk.tmp
# (We use the -n option here so as not to get extra spaces inserted)
Echo -n 'TARG_CPU_DEP = {TARG_CPU_DEP_'		>> "{o}"mk.tmp
Echo -n {short_arch_name}			>> "{o}"mk.tmp
Echo -n '}'					>> "{o}"mk.tmp
Echo '# End from mpw-config.in'			>> "{o}"mk.tmp

Echo '/* conf.  Generated by mpw-configure.  */' > "{o}"conf.new
Echo -n '#define TARGET_CPU       "'       	>> "{o}"conf.new
Echo -n "{target_cpu}"       			>> "{o}"conf.new
Echo    '"'       				>> "{o}"conf.new
Echo -n '#define TARGET_OS       "'       	>> "{o}"conf.new
Echo -n "{target_os}"       			>> "{o}"conf.new
Echo    '"'       				>> "{o}"conf.new
Echo -n '#define TARGET_ALIAS       "'       	>> "{o}"conf.new
Echo -n "{target_alias}"       			>> "{o}"conf.new
Echo    '"'       				>> "{o}"conf.new
Echo -n '#define TARGET_CANONICAL       "'     	>> "{o}"conf.new
Echo -n "{target_canonical}"			>> "{o}"conf.new
Echo    '"'       				>> "{o}"conf.new
Echo '#include "mpw.h"'				>> "{o}"conf.new
If "{bfd_gas}" =~ /yes/
	Echo "#define BFD_ASSEMBLER"		>> "{o}"conf.new
Else
	Echo "#define MANY_SEGMENTS"		>> "{o}"conf.new
End If
Echo '#define CR_EOL'				>> "{o}"conf.new
Echo '#define OBJ_COFF_OMIT_TIMESTAMP'		>> "{o}"conf.new
Echo '#define LOSING_COMPILER'			>> "{o}"conf.new

MoveIfChange "{o}"conf.new "{o}"conf

sed -e "s/@srcdir@/{srcdir}/" "{srcdir}"gdbinit.in > "{o}"_gdbinit
