# configure.host

# This shell script handles all host based configuration for newlib.
# It sets various shell variables based on the the host and the
# configuration options.  You can modify this shell script without
# needing to rerun autoconf.

# This shell script should be invoked as
#   . configure.host
# If it encounters an error, it will exit with a message.

# FIXME: This script is too complicated.  It does things in too many
# different ways.  This was taken from the old Cygnus configure script
# with only minor changes.  It should be cleaned up.

# FIXME: The general approach of picking and choosing which
# directories to configure, other than machine_dir and sys_dir, is
# potentially confusing.

# It uses the following shell variables:
#   host		The configuration host
#   host_cpu		The configuration host CPU
#   newlib_mb		--enable-newlib-mb ("yes", "no")
#   target_optspace	--enable-target-optspace ("yes", "no", "")
#   newlib_multithread	--enable-newlib-multithread ("yes", "no", "yes")
#   newlib_elix_level	--enable-newlib-elix-level ("1","2","3","4") ("4")
#   newlib_io_c99_formats --enable-newlib-io-c99-formats ("yes", "no", "")
#   newlib_io_long_long --enable-newlib-io-long-long ("yes", "no", "")
#   newlib_io_long_double --enable-newlib-io-long-double ("yes", "no", "")
#   newlib_global_stdio_streams --enable-global-stdio-streams ("yes", "no, "")
#   newlib_fno_builtin  --disable-newlib-fno-builtin ("yes", "no, "")

# It sets the following shell variables:
#   newlib_cflags	Special CFLAGS to use when building
#   machine_dir		Subdirectory of libc/machine to configure
#   sys_dir		Subdirectory of libc/sys to configure
#   have_sys_mach_dir	Is there a machine subdirectory in sys subdirectory
#   posix_dir		"posix" to build libc/posix, "" otherwise
#   signal_dir		"signal" to build libc/signal, "" otherwise
#   stdio64_dir		"stdio64" to build libc/stdio64, "" otherwise
#   syscall_dir		"syscalls" to build libc/syscalls, "" otherwise
#   unix_dir		"unix" to build libc/unix, "" otherwise
#   use_libtool         flag: use libtool to build newlib?
#   aext                library extension - needed for libtool support
#   oext                object file extension - needed for libtool support
#   lpfx		library object prefix - generated when no libtool
#   crt1                name of crt1 object if one is provided
#   crt1_dir            directory where crt1 object is found
#   have_crt0		"yes"/"no" if crt0 is/isn't provided.
#			"" if crt0 is provided when sys_dir is set
#   have_init_fini	have init/fini ("yes" or "no", set to "yes" by default)
#   noinclude		list of include files to not install

newlib_cflags=
libm_machine_dir=
machine_dir=
sys_dir=
posix_dir=
signal_dir=signal
stdio_dir=stdio
stdio64_dir=
xdr_dir=
syscall_dir=
unix_dir=
noinclude=
mach_add_setjmp=
crt1=
crt1_dir=
have_crt0=
have_init_fini=yes
use_libtool=no
have_sys_mach_dir=no
default_newlib_io_c99_formats=no
default_newlib_io_long_long=no
default_newlib_io_long_double=no
default_newlib_io_pos_args=no
default_newlib_atexit_dynamic_alloc=yes
default_newlib_nano_malloc=no
aext=a
oext=o
lpfx="lib_a-"
newlib_msg_warn=

case "${target_optspace}:${host}" in
  yes:*)
    newlib_cflags="${newlib_cflags} -Os"
    ;;
  :m32r-* | :d10v-* | :d30v-* | :avr-* | :m32c-* | :msp430*-* | :nds32* | :rl78-* )
    newlib_cflags="${newlib_cflags} -Os"
    ;;
  no:* | :*)
    ;;
esac

case "${newlib_fno_builtin}:${host}" in
  yes:*)
    newlib_cflags="${newlib_cflags} -fno-builtin"
    ;;
  no:*)
    newlib_cflags="${newlib_cflags}"
    ;;
  *:*)
    # For now, all targets default to using -fno-builtin until tested without
    newlib_cflags="${newlib_cflags} -fno-builtin"
    ;;
esac

# Get the source directories to use for the CPU type.
# machine_dir should supply CPU dependent routines, such as setjmp.
# newlib_cflags is passed to gcc when compiling.
# THIS TABLE IS ALPHA SORTED.  KEEP IT THAT WAY.

case "${host_cpu}" in
  a29k)
	machine_dir=a29k
	;;
  aarch64*)
	machine_dir=aarch64
	libm_machine_dir=aarch64
	;;
  amdgcn*)
	newlib_cflags="${newlib_cflags} -D__DYNAMIC_REENT__"
	machine_dir=amdgcn
	libc_cv_initfinit_array=yes
	;;
  arc*)
	machine_dir=arc
	;;
  arm*)
	machine_dir=arm
	libm_machine_dir=arm
	;;
  avr*)
	newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -mcall-prologues"
	;;
  bfin)
	machine_dir=bfin
	;;
  cr16*)
	machine_dir=cr16
       ;;
  cris | crisv32)
	# The size of the (kernel_)time_t passed from or to a
	# simulator or a Linux kernel is mandated by the
	# gettimeofday and time system calls and fixed to 32 bits, the
	# size of a long.  Instead of churning as 64 bits what is anyway
	# 32 bits, it makes more sense to default to long.
	test -z "${enable_newlib_long_time_t}" && newlib_long_time_t=yes
	machine_dir=cris
	;;
  crx*)
	machine_dir=crx
	;;
  d10v*)
	machine_dir=d10v
	;;
  d30v*)
	machine_dir=d30v
	;;
  epiphany)
	machine_dir=epiphany
	;;
  fido)
	machine_dir=m68k
	newlib_cflags="${newlib_cflags} -DCOMPACT_CTYPE"
	;;
  fr30)
	machine_dir=fr30
	;;
  frv)
	machine_dir=frv
        ;;
  ft32*)
        machine_dir=ft32
        newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED"
        ;;
  h8300)
	machine_dir=h8300
	;;
  h8500)
	machine_dir=h8500
	;;
  hppa*)
	machine_dir=hppa
	;;
  i960)
	machine_dir=i960
	;;
  i[34567]86)
	# Don't use for these since they provide their own setjmp.
	case ${host} in
	*-*-sco* | *-*-cygwin*) 
		libm_machine_dir=i386
		machine_dir=i386
		;;
	*) 
		libm_machine_dir=i386
		machine_dir=i386
		mach_add_setjmp=true
		;;
	esac
	;;
  ia64*)
	;;
  iq2000)
	machine_dir=iq2000
	;;
  lm32)
	machine_dir=lm32
	;;
  m32c)
	machine_dir=m32c	
	newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -DSMALL_MEMORY"
	;;

  m32r*)
	machine_dir=m32r
	;;

  m68hc11|m6811|m68hc12|m6812)
	machine_dir=m68hc11
	newlib_cflags="-DPREFER_SIZE_OVER_SPEED -Os -mrelax"
	CFLAGS="-g -Os"
	;;
  
  m68*)
	machine_dir=m68k
	newlib_cflags="${newlib_cflags} -DCOMPACT_CTYPE"
	;;
  m88k)
	machine_dir=m88k
	newlib_cflags="${newlib_cflags} -m88000"
	;;
  m88110)
	machine_dir=m88k
	newlib_cflags="${newlib_cflags} -m88110"
	;;
  mcore)
	;;
  microblaze*)
	machine_dir=microblaze
	;;
  mep)
	machine_dir=mep
	;;
  mips*)
	machine_dir=mips
	;;
  mmix)
	;;
  mn10200)
	machine_dir=mn10200
	;;
  mn10300)
	default_newlib_io_long_long="yes"
	machine_dir=mn10300
	;;
  moxie)
	machine_dir=moxie
        ;;
  msp430*)
	newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -DSMALL_MEMORY"
	newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections "
	newlib_cflags="${newlib_cflags} -mOs "
	newlib_cflags="${newlib_cflags} -mhwmult=none "
	machine_dir=msp430
	default_newlib_nano_malloc="yes"
	;;
  mt*)
	machine_dir=mt
	;;
  nds32*)
	machine_dir=nds32
	libm_machine_dir=nds32
	newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections"
	newlib_cflags="${newlib_cflags} -DHAVE_RENAME"
	;;
  nios2*)
	machine_dir=nios2
	;;
  nvptx*)
	machine_dir=nvptx
	newlib_cflags="${newlib_cflags} -DMALLOC_PROVIDED"
	;;
  or1k*|or1knd*)
	machine_dir=or1k
	have_init_fini=no
	;;
  powerpc*)
	machine_dir=powerpc
	;;
  riscv*)
	libm_machine_dir=riscv
	machine_dir=riscv
	newlib_cflags="${newlib_cflags} -DHAVE_NANOSLEEP"
	default_newlib_atexit_dynamic_alloc="no"
	have_init_fini=no
	;;
  rl78)
	machine_dir=rl78
	newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -DSMALL_MEMORY"
	newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections "
	;;
  rx)
	machine_dir=rx
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections "
	;;
  sh | sh64)
	machine_dir=sh
	;;
  sparc*)
	machine_dir=sparc
	# FIXME: Might wish to make MALLOC_ALIGNMENT more generic.
	newlib_cflags="${newlib_cflags} -DMALLOC_ALIGNMENT=8"
	;;
  tic4x|c4x)
	machine_dir=tic4x
	;;
  tic6x)
	machine_dir=tic6x
	;;
  tic80*)
	machine_dir=tic80
	;;
  v70)
	;;
  v810)
	;;
  v850*)
	machine_dir=v850
	newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED "
	;;
  visium)
	machine_dir=visium
	;;
  w65*)
	machine_dir=w65
	;;
  x86_64)
	machine_dir=x86_64
	;;
  xc16x*)
        machine_dir=xc16x
        ;;
  xstormy16)
	machine_dir=xstormy16
	newlib_cflags="${newlib_cflags} -DMALLOC_PROVIDED"
	newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED"
        ;;
  z8k)
	machine_dir=z8k
	;;
  spu)
	stdio_dir=
	libm_machine_dir=spu
	machine_dir=spu
	newlib_cflags="${newlib_cflags} -D_POSIX_MODE"
	newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED"
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections "
	;;
  *)
	echo '***' "Newlib does not support CPU ${host_cpu}" 1>&2
	exit 1
	;;
esac

# Disable thread support if requested.

if [ "${newlib_multithread}" = "no" ] ; then
	newlib_cflags="${newlib_cflags} -D__SINGLE_THREAD__"
fi

# Disable syscall support if requested.

if [ "${newlib_may_supply_syscalls}" = "no" ] ; then
        newlib_cflags="${newlib_cflags} -D__NO_SYSCALLS__"
fi

# Enable multibyte support if requested or it is defaulted
# for target.

if [ "x${newlib_mb}" = "x" ]; then
	case "${host}" in
  	  i[34567]86-pc-linux-*|*-*-cygwin*)
		newlib_mb=yes
	  	;;
	esac
fi

# Disable printf/scanf floating-point support if requested.

if [ "${newlib_io_float}" = "no" ] ; then
	newlib_cflags="${newlib_cflags} -DNO_FLOATING_POINT"
fi

# Verify if shared newlib support is allowed and set appropriate variables
# We don't want to use libtool for platforms that we are not going to
# support shared libraries.  This is because it adds executable tests which
# we don't want for most embedded platforms.
case "${host}" in
  i[34567]86-pc-linux-*)
    use_libtool=yes
    have_sys_mach_dir=yes
    stdio64_dir=stdio64
    oext=lo
    lpfx=
    aext=la ;;
  *) ;; #shared library not supported for ${host}
esac

# Get the source directories to use for the host.  unix_dir is set
# to unix to get some standard Unix routines.  posix_dir is set to get some
# standard Posix routines.  sys_dir should supply system dependent routines
# including crt0.
# THIS TABLE IS ALPHA SORTED.  KEEP IT THAT WAY.

case "${host}" in
  *-*-cygwin*)
	posix_dir=posix
	stdio64_dir=stdio64
	xdr_dir=xdr
	;;
  *-*-netware*)
	signal_dir=
	sys_dir=netware
	;;
  *-*-phoenix*)
	sys_dir=phoenix
	posix_dir=posix
	unix_dir=unix
	;;
  *-*-rtems*)			# generic RTEMS support
	sys_dir=rtems
	posix_dir=posix
	unix_dir=unix
	;;
  *-*-tirtos*)
	sys_dir=tirtos
	have_crt0="no"
	;;
  a29k-*-*)
	sys_dir=a29khif
	signal_dir=
	;;
  aarch64*-*-*)
	newlib_cflags="${newlib_cflags} -D_COMPILING_NEWLIB"
	;;
  amdgcn*)
	sys_dir=amdgcn
	have_crt0="no"
	;;
  arm*-*-*)
	newlib_cflags="${newlib_cflags} -D_COMPILING_NEWLIB"
	sys_dir=arm
	if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
	  have_crt0="no"
	fi
	;;
  bfin-*-*)
	sys_dir=
	;;
  cr16-*-*)
	sys_dir=
	;;
  crx*)
	sys_dir=
	;;
  d10v*)
	sys_dir=d10v
	;;
  d30v*)
	sys_dir=
	;;
  epiphany-*-*)
	sys_dir=epiphany
	# crt0 is provided by libgloss.
	have_crt0="no"
	;;
  frv*)
        sys_dir=
        ;;
  ft32*)
        sys_dir=
        ;;
  h8300-*-hms*)
	sys_dir=h8300hms
	;;
  h8300-*-elf*)
	sys_dir=h8300hms
	;;
  h8300-*-coff*)
	sys_dir=h8300hms
	;;
  h8300-*-xray*)
	sys_dir=h8300xray
	;;
  h8500-*-hms*)
	sys_dir=h8500hms
	;;
  h8500-*-elf*)
	sys_dir=h8500hms
	;;
  i[34567]86-*-rdos*)
	sys_dir=rdos
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	newlib_cflags="${newlib_cflags} -D_I386MACH_DISABLE_HW_INTERRUPTS"
	;;
  i[34567]86-*-sco*)
	sys_dir=sysvi386
	unix_dir=unix
	;;
  i[34567]86-pc-linux-*)
	sys_dir=linux
	unix_dir=unix
	posix_dir=posix
	crt1=crt1.o
	crt1_dir=libc/sys/${sys_dir}	
	gcc_dir=`gcc -print-search-dirs | awk '/^install:/{print $2}'`
	default_newlib_io_c99_formats="yes"
	default_newlib_io_long_double="yes"
	default_newlib_io_long_long="yes"
	default_newlib_io_pos_args="yes"
	#newlib_cflags="${newlib_cflags} -Werror" # DEBUGGING ONLY;BREAKS BUILD
	newlib_cflags="${newlib_cflags} -Wall"
	newlib_cflags="${newlib_cflags} -DHAVE_FCNTL"
	newlib_cflags="${newlib_cflags} -DHAVE_GETOPT"
	newlib_cflags="${newlib_cflags} -D_NO_POSIX_SPAWN"
	# --- Required when building a shared library ------------------------
	newlib_cflags="${newlib_cflags} -fPIC -D_I386MACH_NEED_SOTYPE_FUNCTION"
	# --- The three lines below are optional ------------------------------
	##newlib_cflags="${newlib_cflags} -nostdinc"
	##newlib_cflags="${newlib_cflags} -I`newlib-flags --kernel-dir`/include"
	##newlib_cflags="${newlib_cflags} -idirafter ${gcc_dir}include"
	;;

  m68hc11-*-*|m6811-*-*|m6812-*-*|m68hc12-*-*)
	;;

  m68k-sun-sunos*)
	unix_dir=unix
	;;
  m8*-bug-*)
	sys_dir=m88kbug
	;;
  mep-*-*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	;;
  microblaze*-*-*)
	machine_dir=microblaze
	;;
  mips*-dec-*)
	sys_dir=decstation
	;;
  mmix-knuth-mmixware)
	sys_dir=mmixware
	;;
  moxie*)
        sys_dir=
        ;;
  nios2*)
	sys_dir=
	;;
  or1k-*-elf | or1knd-*-elf)
	sys_dir=or1k
	newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED "
	have_crt0="no"
	;;
  powerpcle-*-pe)
	posix_dir=posix
	;;
  sh*-*)
	sys_dir=sh
	;;
  sparc-sun-sunos*)
	sys_dir=sun4
	unix_dir=unix
	;;
  sparc64*)
	sys_dir=sparc64
	unix_dir=unix
	;;
  spu-*-*)
	default_newlib_io_long_long="yes"
	default_newlib_atexit_dynamic_alloc="no"
	;;
  tic6x*)
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	have_crt0="no"
	;;
  tic80*)
	sys_dir=tic80
	;;
  v70-nec-*)
	sys_dir=sysvnecv70
	;;
  v810-*-*)
	sys_dir=sysnec810
	;;
  v850*-*-*)
	sys_dir=sysnecv850
        if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
          have_crt0="no"
        fi
	;;
  visium-*-*)
	sys_dir=
	;;
  w65-*-*)
	sys_dir=w65
	;;
  z8k-*-coff)
	sys_dir=z8ksim
	;;
esac

# Host specific flag settings -- usually for features that are not
# general enough or broad enough to be handled above.
# THIS TABLE IS ALPHA SORTED.  KEEP IT THAT WAY.

case "${host}" in
  *-*-cygwin*)
	test -z "$cygwin_srcdir" && cygwin_srcdir=`cd ${srcdir}/../winsup/cygwin; pwd`
	export cygwin_srcdir
	default_newlib_io_c99_formats="yes"
	default_newlib_io_long_long="yes"
	default_newlib_io_long_double="yes"
	default_newlib_io_pos_args="yes"
	CC="${CC} -I${cygwin_srcdir}/include"
	newlib_cflags="${newlib_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DGETREENT_PROVIDED -DSIGNAL_PROVIDED -D_COMPILING_NEWLIB -DHAVE_BLKSIZE -DHAVE_FCNTL -DMALLOC_PROVIDED"
	syscall_dir=syscalls
	;;
  *-*-phoenix*)
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES -D_COMPILING_NEWLIB -DHAVE_BLKSIZE -DHAVE_NANOSLEEP"
	default_newlib_io_long_long="yes"
	syscall_dir=
	;;
# RTEMS supplies its own versions of some routines:
#       malloc()            (reentrant version)
#       exit()              RTEMS has a "global" reent to flush
#       signal()/raise()    RTEMS has its own including pthread signals
#       _XYZ_r()            RTEMS has its own reentrant routines
#
#  NOTE: When newlib malloc uses a semaphore, RTEMS will switch to that.
  *-*-rtems*)
	default_newlib_io_long_long="yes"
	default_newlib_io_c99_formats="yes"
	newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections "
	newlib_cflags="${newlib_cflags} -D_COMPILING_NEWLIB"
newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVIDED -DSIGNAL_PROVIDED -DGETREENT_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_NANOSLEEP -DHAVE_BLKSIZE -DHAVE_FCNTL -DHAVE_ASSERT_FUNC"
        # turn off unsupported items in posix directory 
	newlib_cflags="${newlib_cflags} -D_NO_GETLOGIN -D_NO_GETPWENT -D_NO_GETUT -D_NO_GETPASS -D_NO_SIGSET -D_NO_WORDEXP -D_NO_POPEN -D_NO_POSIX_SPAWN"
	;;
# VxWorks supplies its own version of malloc, and the newlib one
# doesn't work because VxWorks does not have sbrk.
  *-wrs-vxworks*)
	newlib_cflags="${newlib_cflags} -DMALLOC_PROVIDED -DMISSING_SYSCALL_NAMES -DHAVE_FCNTL"
	;;
# TIRTOS supplies its own version of malloc
  *-*-tirtos*)
	newlib_cflags="${newlib_cflags} -D__DYNAMIC_REENT__ -DMALLOC_PROVIDED"
	;;
# UDI doesn't have exec, so system() should fail the right way
  a29k-amd-udi)
	newlib_cflags="${newlib_cflags} -DNO_EXEC"
	syscall_dir=syscalls
	;;
  aarch64*-*-*)
	default_newlib_io_long_long="yes"
	syscall_dir=syscalls
	;;
  arc*-*-*)
	syscall_dir=syscalls
	default_newlib_io_long_long="yes"
	;;
  arm*-*-pe)
	syscall_dir=syscalls
	;;
  arm*-*-*)
	syscall_dir=syscalls
# If newlib is supplying syscalls, select which debug protocol is being used.
# ARM_RDP_MONITOR selects the Demon monitor.
# ARM_RDI_MONITOR selects the Angel monitor.
# If neither are defined, then hard coded defaults will be used
# to create the program's environment.
# If --disable-newlib-supplied-syscalls is specified, then the end-user
# may specify the protocol via gcc spec files supplied by libgloss.
	if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
#         newlib_cflags="${newlib_cflags} -DARM_RDP_MONITOR"
	  newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
	fi
	;;
  avr*)
	newlib_cflags="${newlib_cflags} -DNO_EXEC -DSMALL_MEMORY -DMISSING_SYSCALL_NAMES"
	;;
  bfin*)
	syscall_dir=syscalls
	;;
  cris-*-* | crisv32-*-*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DHAVE_RENAME -D_USE_WRITE -DCOMPACT_CTYPE"
	syscall_dir=syscalls
	;;
  cr16-*-*)
	syscall_dir=syscalls
	;;
  crx-*-*)
	newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DMISSING_SYSCALL_NAMES"
	syscall_dir=
	;;
  d10v*)
	newlib_cflags="${newlib_cflags} -DSMALL_MEMORY"
	syscall_dir=syscalls
	;;
  d30v*)
	newlib_cflags="${newlib_cflags} -DABORT_MESSAGE -DSMALL_MEMORY -DMISSING_SYSCALL_NAMES"
	syscall_dir=
	;;
  epiphany*)
	syscall_dir=syscalls
	newlib_cflags="${newlib_cflags} -DSIGNAL_PROVIDED"
	;;
  fido-*-elf)
	newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DHAVE_SYSTEM -DMISSING_SYSCALL_NAMES"
	syscall_dir=
	;;
  fr30-*-*)
	syscall_dir=syscalls
	;;
  frv-*-*)
        syscall_dir=syscalls
	default_newlib_io_long_long="yes"
        ;;
  ft32*-*-*)
        syscall_dir=syscalls
        ;;
  h8300*-*-*)
	syscall_dir=syscalls	
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DSMALL_DTOA -DSMALL_MEMORY"
	# Simulator only extensions for H8300.
	# Uncomment the next line to enable them.
	# newlib_cflags="${newlib_cflags} -D__SIMULATOR__"
	;;	
  h8500-*-*)
	syscall_dir=syscalls	
	newlib_cflags="${newlib_cflags} -DSMALL_DTOA -DSMALL_MEMORY"
	;;	
  i[34567]86-*-sco*)
	newlib_cflags="${newlib_cflags} -DSIGNAL_PROVIDED -DHAVE_FCNTL"
	;;
  i[34567]86-*-netware*)
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES -DNO_EXEC -DABORT_PROVIDED -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DHAVE_FCNTL"
	;;
  i[3-7]86-*-elfiamcu)
	newlib_cflags="${newlib_cflags} -Os -DPREFER_SIZE_OVER_SPEED -ffunction-sections -fomit-frame-pointer -DREENTRANT_SYSCALL_PROVIDED"
	if [ "${newlib_multithread}" = "no" ] ; then
		newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	else
		syscall_dir=syscalls
		newlib_cflags="${newlib_cflags} -D__DYNAMIC_REENT__"
	fi
	;;
  iq2000*)
	syscall_dir=syscalls
	default_newlib_io_long_long="yes"
	;;
  lm32-*-*)
	syscall_dir=syscalls
	;;
  m32c-*-*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES -DABORT_PROVIDED"
	syscall_dir=
  	;;
  m32r-*-*)
	# Pass -msdata=sdata so _impure_ptr goes in .sdata.
	# We don't generate sda relocs however for upward compatibility.
	# FIXME: This is necessary because the default multilib doesn't
	# use --print-multi-lib.
	newlib_cflags="${newlib_cflags} -msdata=sdata"
	syscall_dir=syscalls
	;;
  m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
	newlib_cflags="${newlib_cflags} -DNO_EXEC -DABORT_PROVIDED -DSMALL_MEMORY -DMISSING_SYSCALL_NAMES"
	;;
  m68k-unknown-elf)
	newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DHAVE_SYSTEM -DMISSING_SYSCALL_NAMES"
	syscall_dir=
	;;
  mcore-*-*)
	syscall_dir=syscalls
	;;
  microblaze*-*-*)
   	default_newlib_io_long_long="yes"
 	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES -DSMALL_MEMORY -D_REENT_SMALL"
	;;
  mips64vr*-*-*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	;;
  mips*-*-elf*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	;;
  mmix-*)
	syscall_dir=syscalls
	# We need every symbol 32-bit aligned, so the invalid
	# construct with attribute ((alias ("_ctype_b+127"))) breaks.
	newlib_cflags="${newlib_cflags} -DCOMPACT_CTYPE"
	;;
  mn10?00-*-*)
	syscall_dir=syscalls
	;;
  moxie-*-elf* | moxie-*-rtems*)
        syscall_dir=syscalls
	default_newlib_io_long_long="yes"
        ;;
  moxie-*-moxiebox)
        syscall_dir=syscalls
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -Os -DPREFER_SIZE_OVER_SPEED -DSMALL_MEMORY"
        ;;
  nios2*)
	syscall_dir=
	newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DHAVE_SYSTEM -DMISSING_SYSCALL_NAMES"
	;;
  nds32*)
	syscall_dir=syscalls
	;;
  or1k*|or1knd*)
	syscall_dir=syscalls
	;;
  powerpc*-*-eabialtivec*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	;;
  powerpc*-*-eabispe*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	;;
  powerpc*-*-eabi* | \
  powerpc*-*-elf* | \
  powerpc*-*-linux* | \
  powerpc*-*-rtem* | \
  powerpc*-*-sysv* | \
  powerpc*-*-solaris*)
	default_newlib_io_long_long="yes"
	newlib_cflags="${newlib_cflags} -mrelocatable-lib -mno-eabi -mstrict-align -DMISSING_SYSCALL_NAMES"
	;;
  powerpcle-*-pe)
	newlib_cflags="${newlib_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DHAVE_FCNTL -D_NO_POSIX_SPAWN"
	syscall_dir=syscalls
	;;
  riscv*-*-*)
	syscall_dir=syscalls
	;;
  sh*-*-*)
	default_newlib_io_long_long="yes"
	syscall_dir=syscalls
	;;
  sparc-sun-sunos*)
	newlib_cflags="${newlib_cflags} -DSIGNAL_PROVIDED"
	;;
  sparc64-*-*)
	newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_BLKSIZE -DHAVE_FCNTL"
	# This either belongs elsewhere or nowhere. But I need *something*,
	# so for now it's here ...
	case "${host_os}" in
	  aoutv8 | *32p)
		newlib_cflags="${newlib_cflags} -DTARGET_PTR_SIZE=32" ;;
	  *)
		newlib_cflags="${newlib_cflags} -DTARGET_PTR_SIZE=64" ;;
	esac
	;;
  tic6x*)
	syscall_dir=
	newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED"
	;;
  tic80*)
	syscall_dir=syscalls
	;;
  v850*-*-*)
	syscall_dir=syscalls
	;;
  visium-*-*)
	newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DHAVE_SYSTEM -DMISSING_SYSCALL_NAMES"
	syscall_dir=
	;;
  w65-*-*)
	syscall_dir=syscalls	
	newlib_cflags="${newlib_cflags} -DSMALL_DTOA -DSMALL_MEMORY"
	;;
  xc16x-*)
          syscall_dir=syscalls
        ;;
  xstormy16-*-*)
	syscall_dir=syscalls
	;;
  z8k-*-*)
	syscall_dir=syscalls
	;;
  *)
	newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
	syscall_dir=
	;;
esac

# Use defaults for certain settings if not specified by user

# Enable C99 format support in I/O routines if requested.
if [ "x${newlib_io_c99_formats}" = "x" ]; then
	if [ ${default_newlib_io_c99_formats} = "yes" ]; then
		newlib_io_c99_formats="yes";
	fi
fi

# Enable long long support in I/O routines if requested.
if [ "x${newlib_io_long_long}" = "x" ]; then
	if [ ${default_newlib_io_long_long} = "yes" ]; then
		newlib_io_long_long="yes";
	fi
fi

# Enable long double support in I/O routines if requested.
if [ "x${newlib_io_long_double}" = "x" ]; then
	if [ ${default_newlib_io_long_double} = "yes" ]; then
		newlib_io_long_double="yes";
	fi
fi

# Enable printf positional argument support if requested.
if [ "x${newlib_io_pos_args}" = "x" ]; then
	if [ ${default_newlib_io_pos_args} = "yes" ]; then
		newlib_io_pos_args="yes";
	fi
fi

# Disable atexit dynamic allocation if requested.
if [ "x${newlib_atexit_dynamic_alloc}" = "x" ]; then
	if [ ${default_newlib_atexit_dynamic_alloc} = "yes" ]; then
		newlib_atexit_dynamic_alloc="yes"; 
	fi
fi

# Enable nano-malloc if requested.
if [ "x${newlib_nano_malloc}" = "x" ]; then
	if [ ${default_newlib_nano_malloc} = "yes" ]; then
		newlib_nano_malloc="yes";
	fi
fi

# Remove rpc headers if xdr_dir not specified
if [ "x${xdr_dir}" = "x" ]; then
	noinclude="${noinclude} rpc/types.h rpc/xdr.h"
fi

# Have init/finit if not explicitly specified otherwise
if [ "x${have_init_fini}" != "xno" ]; then
	newlib_cflags="${newlib_cflags} -DHAVE_INIT_FINI"
fi

if test -z "${have_crt0}" && test -n "${sys_dir}"; then
  have_crt0="yes"
fi

# Target-specific defaults
case "${host_cpu}" in
  nvptx*)
	if [ "x${newlib_elix_level}" = "x0" ]; then
		newlib_elix_level=1;
	elif [ "x${newlib_elix_level}" != "x1" ]; then
		newlib_msg_warn="nvptx does not support elix level > 1";
	fi
	if [[ -z ${newlib_global_stdio_streams} ]]; then
		newlib_global_stdio_streams="yes";
	fi
	;;
esac