# 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", "")
# It sets the following shell variables:
# newlib_cflags Special CFLAGS to use when building
# 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
newlib_cflags=
libm_machine_dir=
sys_dir=
posix_dir=
signal_dir=signal
+stdio_dir=stdio
stdio64_dir=
syscall_dir=
unix_dir=
mach_add_setjmp=
crt1=
crt1_dir=
+have_crt0=
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
aext=a
oext=o
+lpfx="lib_a-"
case "${target_optspace}:${host}" in
yes:*)
newlib_cflags="${newlib_cflags} -Os"
;;
- :m32r-* | :d10v-* | :d30v-* | :avr-*)
+ :m32r-* | :d10v-* | :d30v-* | :avr-* | :m32c-* )
newlib_cflags="${newlib_cflags} -Os"
;;
no:* | :*)
avr*)
newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -mcall-prologues"
;;
+ bfin)
+ machine_dir=bfin
+ ;;
+ cris | crisv32)
+ machine_dir=cris
+ ;;
+ crx*)
+ machine_dir=crx
+ ;;
d10v*)
machine_dir=d10v
;;
ep9312)
machine_dir=arm
;;
+ fido)
+ machine_dir=m68k
+ newlib_cflags="${newlib_cflags} -DCOMPACT_CTYPE"
+ ;;
fr30)
machine_dir=fr30
;;
iq2000)
machine_dir=iq2000
;;
+ m32c)
+ machine_dir=m32c
+ newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED -DABORT_PROVIDED -DSMALL_MEMORY"
+ ;;
+
m32r*)
machine_dir=m32r
;;
;;
mcore)
;;
+ mep)
+ machine_dir=mep
+ ;;
mips*)
machine_dir=mips
;;
machine_dir=mn10200
;;
mn10300)
+ default_newlib_io_long_long="yes"
machine_dir=mn10300
;;
+ mt*)
+ machine_dir=mt
+ ;;
or16)
;;
or32)
w65*)
machine_dir=w65
;;
+ x86_64)
+ machine_dir=x86_64
+ ;;
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 -ffunction-sections -fdata-sections "
+ ;;
*)
echo '***' "Newlib does not support CPU ${host_cpu}" 1>&2
exit 1
newlib_cflags="${newlib_cflags} -DNO_FLOATING_POINT"
fi
-# Enable printf positional argument support if requested.
-
-if [ "${newlib_io_pos_args}" = "yes" ] ; then
- newlib_cflags="${newlib_cflags} -DWANT_IO_POS_ARGS"
-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
have_sys_mach_dir=yes
stdio64_dir=stdio64
oext=lo
+ lpfx=
aext=la ;;
*) ;; #shared library not supported for ${host}
esac
sys_dir=arc
;;
arm-*-*)
- sys_dir=arm
+ sys_dir=arm
+ if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+ have_crt0="no"
+ fi
+ ;;
+ bfin-*-*)
+ sys_dir=
+ ;;
+ crx*)
+ sys_dir=
;;
d10v*)
sys_dir=d10v
;;
ep9312-*-*)
sys_dir=arm
+ if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+ have_crt0="no"
+ fi
;;
+ frv*)
+ sys_dir=
+ ;;
h8300-*-hms*)
sys_dir=h8300hms
;;
h8500-*-elf*)
sys_dir=h8500hms
;;
+ i[34567]86-*-rdos*)
+ sys_dir=rdos
+ newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
+ ;;
i[34567]86-*-sco*)
sys_dir=sysvi386
unix_dir=unix
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} -D_I386MACH_ALLOW_HW_INTERRUPTS"
newlib_cflags="${newlib_cflags} -DHAVE_FCNTL"
- newlib_cflags="${newlib_cflags} -DWANT_IO_POS_ARGS -DWANT_IO_LONG_DBL"
+ newlib_cflags="${newlib_cflags} -DHAVE_GETOPT"
# --- Required when building a shared library ------------------------
newlib_cflags="${newlib_cflags} -fPIC -D_I386MACH_NEED_SOTYPE_FUNCTION"
# --- The three lines below are optional ------------------------------
m8*-bug-*)
sys_dir=m88kbug
;;
+ mep-*-*)
+ default_newlib_io_long_long="yes"
+ newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
+ ;;
mips*-dec-*)
sys_dir=decstation
;;
sys_dir=sparc64
unix_dir=unix
;;
- strongarm-*-*)
- sys_dir=arm
+ spu-*-*)
+ default_newlib_io_long_long="yes"
+ default_newlib_atexit_dynamic_alloc="no"
;;
- xscale-*-*)
- sys_dir=arm
+ strongarm-*-*)
+ sys_dir=arm
+ if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+ have_crt0="no"
+ fi
;;
thumb-*-*)
- sys_dir=arm
+ sys_dir=arm
+ if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+ have_crt0="no"
+ fi
;;
tic80*)
sys_dir=tic80
v850ea-*-*)
sys_dir=sysnecv850
;;
- frv*)
- sys_dir=
- ;;
w65-*-*)
sys_dir=w65
;;
+ xscale-*-*)
+ sys_dir=arm
+ if [ "x${newlib_may_supply_syscalls}" = "xno" ] ; then
+ have_crt0="no"
+ fi
+ ;;
z8k-*-coff)
sys_dir=z8ksim
;;
*-*-cygwin*)
test -z "$cygwin_srcdir" && cygwin_srcdir=`cd ${srcdir}/../winsup/cygwin; pwd`
export cygwin_srcdir
- newlib_cflags="${newlib_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DSIGNAL_PROVIDED -DWANT_IO_POS_ARGS -DWANT_IO_LONG_DBL -DWANT_PRINTF_LONG_LONG -D_COMPILING_NEWLIB -DHAVE_FCNTL -DMALLOC_PROVIDED -I${cygwin_srcdir}/include"
+ 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 -DSIGNAL_PROVIDED -D_COMPILING_NEWLIB -DHAVE_BLKSIZE -DHAVE_FCNTL -DMALLOC_PROVIDED"
syscall_dir=syscalls
;;
# RTEMS supplies its own versions of some routines:
#
# NOTE: When newlib malloc uses a semaphore, RTEMS will switch to that.
*-*-rtems*)
- newlib_cflags="${newlib_cflags} -DHAVE_GETTIMEOFDAY -DMALLOC_PROVIDED -DEXIT_PROVIDED -DMISSING_SYSCALL_NAMES -DSIGNAL_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_OPENDIR -DNO_EXEC -DWANT_PRINTF_LONG_LONG -DHAVE_FCNTL"
+ default_newlib_io_long_long="yes"
+ newlib_cflags="${newlib_cflags} -DMALLOC_PROVIDED -DEXIT_PROVIDED -DMISSING_SYSCALL_NAMES -DSIGNAL_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_OPENDIR -DNO_EXEC -DHAVE_FCNTL"
;;
# VxWorks supplies its own version of malloc, and the newlib one
# doesn't work because VxWorks does not have sbrk.
;;
arm-*-pe)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
-# Don't use the debugging protocols just yet.
;;
arm-*-*)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
-# Select which debug protocol is being used.
+# 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.
# See also thumb below.
-# newlib_cflags="${newlib_cflags} -DARM_RDP_MONITOR"
- newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
+ if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
+# newlib_cflags="${newlib_cflags} -DARM_RDP_MONITOR"
+ newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
+ fi
+ ;;
+ arc*)
+ newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED"
;;
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
+ ;;
+ crx-*-*)
+ newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DMISSING_SYSCALL_NAMES"
+ syscall_dir=
+ ;;
d10v*)
newlib_cflags="${newlib_cflags} -DSMALL_MEMORY"
syscall_dir=syscalls
;;
ep9312-*-*)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
- newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
+ if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
+ newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
+ fi
+ ;;
+ fido-*-elf)
+ newlib_cflags="${newlib_cflags} -DHAVE_RENAME -DHAVE_SYSTEM -DMISSING_SYSCALL_NAMES"
+ syscall_dir=
;;
fr30-*-*)
- newlib_cflags="${newlib_cflags}"
syscall_dir=syscalls
;;
frv-*-*)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DWANT_PRINTF_LONG_LONG"
+ default_newlib_io_long_long="yes"
;;
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.
;;
iq2000*)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DWANT_PRINTF_LONG_LONG"
+ default_newlib_io_long_long="yes"
;;
m32r-*-*)
# Pass -msdata=sdata so _impure_ptr goes in .sdata.
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-*-*)
- newlib_cflags="${newlib_cflags}"
syscall_dir=syscalls
;;
mips64vr*-*-*)
- newlib_cflags="${newlib_cflags} -DWANT_PRINTF_LONG_LONG -DMISSING_SYSCALL_NAMES"
+ 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
syscall_dir=syscalls
;;
powerpc*-*-eabialtivec*)
- newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES -DWANT_PRINTF_LONG_LONG"
+ default_newlib_io_long_long="yes"
+ newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
;;
powerpc*-*-eabispe*)
- newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES -DWANT_PRINTF_LONG_LONG"
+ default_newlib_io_long_long="yes"
+ newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
;;
powerpc*-*-eabi* | \
powerpc*-*-elf* | \
powerpc*-*-rtem* | \
powerpc*-*-sysv* | \
powerpc*-*-solaris*)
- newlib_cflags="${newlib_cflags} -mrelocatable-lib -mno-eabi -mstrict-align -DMISSING_SYSCALL_NAMES -DWANT_PRINTF_LONG_LONG"
+ 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"
syscall_dir=syscalls
;;
sh*-*-*)
- newlib_cflags="${newlib_cflags} -DHAVE_GETTIMEOFDAY -DWANT_PRINTF_LONG_LONG"
+ 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_GETTIMEOFDAY -DHAVE_FCNTL"
+ 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
;;
strongarm-*-*)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
- newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
- ;;
- xscale-*-*)
- syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
- newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
- newlib_cflags="${newlib_cflags} -DHAVE_SYSTEM -DHAVE_RENAME"
;;
thumb-*-pe)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
# Don't use the debugging protocols just yet.
;;
thumb-*-*)
syscall_dir=syscalls
- newlib_cflags="${newlib_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
-# Select which debug protocol is being used.
+# 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.
-# See also arm and strongarm above.
-# newlib_cflags="${newlib_cflags} -DARM_RDP_MONITOR"
- newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
+# 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
;;
tic80*)
syscall_dir=syscalls
syscall_dir=syscalls
newlib_cflags="${newlib_cflags} -DSMALL_DTOA -DSMALL_MEMORY"
;;
+ xscale-*-*)
+ syscall_dir=syscalls
+ newlib_cflags="${newlib_cflags} -DHAVE_SYSTEM -DHAVE_RENAME"
+ if [ "x${newlib_may_supply_syscalls}" = "xyes" ] ; then
+ newlib_cflags="${newlib_cflags} -DARM_RDI_MONITOR"
+ fi
+ ;;
xstormy16-*-*)
- newlib_cflags="${newlib_cflags} -DHAVE_GETTIMEOFDAY"
syscall_dir=syscalls
;;
z8k-*-*)
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
+
+if test -z "${have_crt0}" && test -n "${sys_dir}"; then
+ have_crt0="yes"
+fi