Line 1... |
Line 1... |
# This file is a shell script fragment that supplies the information
|
dnl This is the newlib configure.in file.
|
# necessary to tailor a template configure script into the configure
|
dnl Process this file with autoconf to produce a configure script.
|
# script appropriate for this directory. For more information, check
|
|
# any existing configure script.
|
|
|
|
# We need multilib support.
|
|
# For now default to enabled.
|
|
if [ "${enable_multilib}" = "" ]; then
|
|
enable_multilib=yes
|
|
fi
|
|
|
|
srctrigger=Makefile.in
|
|
srcname="libc"
|
|
target_dependent=true
|
|
|
|
# newlib is configured for a particular target. It must be built with
|
|
# a build environment providing tools for that target. This means
|
|
# that "configure sun4 -target vxworks68" will build a library which
|
|
# can be used on vxworks68; the sun4 is essentially ignored, and there
|
|
# must be a build environment which will generate vxworks68 tools. A
|
|
# simple "configure sun4" will build a library which can be used on a
|
|
# sun4.
|
|
|
|
# Unfortunately, newlib does have one program which must run on the
|
|
# host, namely makedoc, which is used to build documentation.
|
|
|
|
# newlib does not test any features of the build environment (the
|
|
# host). It needs cc, as, ar, and ranlib for the target.
|
|
|
|
if [ -z "${with_multisubdir}" ]; then
|
|
configdirs="doc"
|
|
fi
|
|
|
|
# per-host:
|
AC_PREREQ(2.5)
|
|
AC_INIT(libc)
|
|
|
# This is basically a hack so that we don't have to replicate the same
|
dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
|
# defines in all the Makefiles. We put a standard set of definitions
|
AC_CONFIG_AUX_DIR(..)
|
# in host/any, and use them everywhere.
|
|
|
|
host_makefile_frag=host/any
|
|
|
|
# per-target:
|
|
|
|
newlib_target=
|
|
|
|
case "${enable_target_optspace}:${target}" in
|
|
yes:*)
|
|
target_cflags="-Os"
|
|
;;
|
|
:m32r-* | :d10v-*)
|
|
target_cflags="-Os"
|
|
;;
|
|
no:* | :*)
|
|
target_cflags="-O2"
|
|
;;
|
|
*)
|
|
echo "*** bad value \"${enable_target_optspace}\" for --enable-target-optspace flag; ignored" 1>&2
|
|
target_cflags="-O2"
|
|
;;
|
|
esac
|
|
|
|
unix_dir=
|
|
libc_unix_lib=
|
|
posix_dir=
|
|
libc_posix_lib=
|
|
signal_dir=signal
|
|
libc_signal_lib=
|
|
machine_dir=
|
|
libc_machine_lib=
|
|
sys_dir=
|
|
libc_sys_lib=
|
|
syscall_dir=
|
|
libc_syscall_lib=
|
|
|
|
files=
|
|
links=
|
|
|
|
# Get the source directories to use for the CPU type.
|
|
# machine_dir should supply CPU dependent routines, such as setjmp.
|
|
# target_cflags is passed to gcc when compiling.
|
|
# THIS TABLE IS SORTED. KEEP IT THAT WAY.
|
|
|
|
case "${target_cpu}" in
|
|
a29k)
|
|
machine_dir=a29k
|
|
;;
|
|
arc)
|
|
machine_dir=
|
|
;;
|
|
arm)
|
|
machine_dir=arm
|
|
;;
|
|
d10v*)
|
|
machine_dir=d10v
|
|
;;
|
|
h8300)
|
|
machine_dir=h8300
|
|
;;
|
|
h8500)
|
|
machine_dir=h8500
|
|
;;
|
|
hppa*)
|
|
machine_dir=hppa
|
|
;;
|
|
i960)
|
|
machine_dir=i960
|
|
;;
|
|
i[3456]86)
|
|
# Don't use for these since they provide their own setjmp.
|
|
case ${target} in
|
|
*-*-go32 | *-*-sco* | *-*-cygwin32) machine_dir= ;;
|
|
*) machine_dir=i386 ;;
|
|
esac
|
|
;;
|
|
m32r*)
|
|
machine_dir=m32r
|
|
;;
|
|
m68*)
|
|
machine_dir=m68k
|
|
;;
|
|
m88k)
|
|
machine_dir=m88k
|
|
target_cflags="-m88000"
|
|
;;
|
|
m88110)
|
|
machine_dir=m88k
|
|
target_cflags="-m88110"
|
|
;;
|
|
mips*)
|
|
machine_dir=mips
|
|
;;
|
|
mn10200)
|
|
machine_dir=mn10200
|
|
;;
|
|
mn10300)
|
|
machine_dir=mn10300
|
|
;;
|
|
powerpc*)
|
|
machine_dir=powerpc
|
|
;;
|
|
or32)
|
|
machine_dir=or32
|
|
;;
|
|
sh)
|
|
machine_dir=sh
|
|
;;
|
|
sparc*)
|
|
machine_dir=sparc
|
|
# FIXME: Might wish to make MALLOC_ALIGNMENT more generic.
|
|
target_cflags="${target_cflags} -DMALLOC_ALIGNMENT=8"
|
|
;;
|
|
thumb)
|
|
machine_dir=arm
|
|
;;
|
|
v70)
|
|
;;
|
|
v810)
|
|
;;
|
|
v850)
|
|
machine_dir=v850
|
|
target_cflags="-DPREFER_SIZE_OVER_SPEED -mv850 -msmall-sld -mno-app-regs"
|
|
;;
|
|
w65*)
|
|
fp_dir=ieeefp
|
|
machine_dir=w65
|
|
;;
|
|
z8k)
|
|
machine_dir=z8k
|
|
;;
|
|
*)
|
|
echo '***' "Newlib does not support target cpu ${target_cpu}" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ x"${enable_newlib_mb}" != x ] ; then
|
|
target_cflags="${target_cflags} -DMB_CAPABLE "
|
|
fi
|
|
|
|
# Get the source directories to use for the target. 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 SORTED. KEEP IT THAT WAY.
|
|
|
|
case "${target}" in
|
|
*-*-cygwin32)
|
|
sys_dir=cygwin32
|
|
posix_dir=posix
|
|
;;
|
|
*-*-netware*)
|
|
signal_dir=
|
|
sys_dir=netware
|
|
;;
|
|
*-*-rtems*) # generic RTEMS support
|
|
sys_dir=rtems
|
|
;;
|
|
a29k-*-*)
|
|
sys_dir=a29khif
|
|
signal_dir=
|
|
;;
|
|
arc-*-*)
|
|
sys_dir=arc
|
|
;;
|
|
arm-*-*)
|
|
sys_dir=arm
|
|
;;
|
|
d10v*)
|
|
sys_dir=d10v
|
|
;;
|
|
h8300-*-hms*)
|
|
sys_dir=h8300hms
|
|
;;
|
|
h8300-*-xray*)
|
|
sys_dir=h8300xray
|
|
;;
|
|
h8500-*-hms*)
|
|
sys_dir=h8500hms
|
|
;;
|
|
i[3456]86-*-go32)
|
|
sys_dir=go32
|
|
;;
|
|
i[3456]86-*-sco*)
|
|
sys_dir=sysvi386
|
|
unix_dir=unix
|
|
;;
|
|
m68k-sun-sunos*)
|
|
unix_dir=unix
|
|
;;
|
|
m8*-bug-*)
|
|
sys_dir=m88kbug
|
|
;;
|
|
mn10200-*-*)
|
|
sys_dir=sysmec
|
|
;;
|
|
mips*-dec-*)
|
|
sys_dir=decstation
|
|
;;
|
|
powerpcle-*-pe)
|
|
sys_dir=cygwin32
|
|
posix_dir=posix
|
|
;;
|
|
sh*-*)
|
|
sys_dir=sh
|
|
;;
|
|
sparc-sun-sunos*)
|
|
sys_dir=sun4
|
|
unix_dir=unix
|
|
;;
|
|
sparc64*)
|
|
sys_dir=sparc64
|
|
unix_dir=unix
|
|
;;
|
|
thumb-*-*)
|
|
sys_dir=arm
|
|
;;
|
|
v70-nec-*)
|
|
sys_dir=sysvnecv70
|
|
;;
|
|
v810-*-*)
|
|
sys_dir=sysnec810
|
|
;;
|
|
v850-*-*)
|
|
sys_dir=sysnecv850
|
|
;;
|
|
w65-*-*)
|
|
sys_dir=w65
|
|
;;
|
|
z8k-*-coff)
|
|
sys_dir=z8ksim
|
|
;;
|
|
esac
|
|
|
|
# Target specific flag settings -- usually for features that are not
|
|
# general enough or broad enough to be handled above.
|
|
# THIS TABLE IS SORTED. KEEP IT THAT WAY.
|
|
|
|
case "${target}" in
|
|
*-*-cygwin32)
|
|
target_cflags="${target_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DSIGNAL_PROVIDED"
|
|
syscall_dir=syscalls
|
|
fake_sys_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*)
|
|
target_cflags="${target_cflags} -DHAVE_GETTIMEOFDAY -DMALLOC_PROVIDED -DEXIT_PROVIDED -DMISSING_SYSCALL_NAMES -DSIGNAL_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED"
|
|
;;
|
|
# VxWorks supplies its own version of malloc, and the newlib one
|
|
# doesn't work because VxWorks does not have sbrk.
|
|
*-wrs-vxworks*)
|
|
target_cflags="${target_cflags} -DMALLOC_PROVIDED -DMISSING_SYSCALL_NAMES"
|
|
;;
|
|
# UDI doesn't have exec, so system() should fail the right way
|
|
a29k-amd-udi)
|
|
target_cflags="${target_cflags} -DNO_EXEC"
|
|
syscall_dir=syscalls
|
|
;;
|
|
arc-*-*)
|
|
syscall_dir=syscalls
|
|
;;
|
|
arm-*-pe)
|
|
syscall_dir=syscalls
|
|
target_cflags="${target_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
|
|
# Don't use the debugging protocols just yet.
|
|
;;
|
|
arm-*-*)
|
|
syscall_dir=syscalls
|
|
target_cflags="${target_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
|
|
# 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 thumb target below.
|
|
target_cflags="${target_cflags} -DARM_RDP_MONITOR"
|
|
# target_cflags="${target_cflags} -DARM_RDI_MONITOR"
|
|
;;
|
|
d10v*)
|
|
target_cflags="${target_cflags} -DSMALL_MEMORY"
|
|
syscall_dir=syscalls
|
|
;;
|
|
h8300*-*-*)
|
|
syscall_dir=syscalls
|
|
target_cflags="${target_cflags} -DSMALL_DTOA -DSMALL_MEMORY"
|
|
;;
|
|
h8500-*-*)
|
|
syscall_dir=syscalls
|
|
target_cflags="${target_cflags} -DSMALL_DTOA -DSMALL_MEMORY"
|
|
;;
|
|
i[3456]86-*-sco*)
|
|
target_cflags="${target_cflags} -DSIGNAL_PROVIDED"
|
|
;;
|
|
i[3456]86-*-netware*)
|
|
target_cflags="${target_cflags} -DMISSING_SYSCALL_NAMES -DNO_EXEC -DABORT_PROVIDED -DCLOCK_PROVIDED -DMALLOC_PROVIDED"
|
|
;;
|
|
i[3456]86-*-go32)
|
|
target_cflags="${target_cflags} -DMISSING_SYSCALL_NAMES -DNO_EXEC"
|
|
fake_sys_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.
|
|
target_cflags="${target_cflags} -msdata=sdata"
|
|
syscall_dir=syscalls
|
|
;;
|
|
mn10?00-*-*)
|
|
syscall_dir=syscalls
|
|
;;
|
|
powerpc*-*-eabi* | \
|
|
powerpc*-*-elf* | \
|
|
powerpc*-*-linux* | \
|
|
powerpc*-*-rtem* | \
|
|
powerpc*-*-sysv* | \
|
|
powerpc*-*-solaris*)
|
|
target_cflags="${target_cflags} -mrelocatable-lib -mno-eabi -mstrict-align -DMISSING_SYSCALL_NAMES"
|
|
;;
|
|
powerpcle-*-pe)
|
|
target_cflags="${target_cflags} -DHAVE_OPENDIR -DHAVE_RENAME"
|
|
syscall_dir=syscalls
|
|
;;
|
|
sh*-*-*)
|
|
syscall_dir=syscalls
|
|
;;
|
|
sparc-sun-sunos*)
|
|
target_cflags="${target_cflags} -DSIGNAL_PROVIDED"
|
|
;;
|
|
sparc64-*-*)
|
|
target_cflags="${target_cflags} -DREENTRANT_SYSCALLS_PROVIDED -DHAVE_BLKSIZE -DHAVE_GETTIMEOFDAY"
|
|
# This either belongs elsewhere or nowhere. But I need *something*,
|
|
# so for now it's here ...
|
|
case "${target_os}" in
|
|
aoutv8 | *32p)
|
|
target_cflags="${target_cflags} -DTARGET_PTR_SIZE=32" ;;
|
|
*)
|
|
target_cflags="${target_cflags} -DTARGET_PTR_SIZE=64" ;;
|
|
esac
|
|
;;
|
|
thumb-*-pe)
|
|
syscall_dir=syscalls
|
|
target_cflags="${target_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
|
|
# Don't use the debugging protocols just yet.
|
|
;;
|
|
thumb-*-*)
|
|
syscall_dir=syscalls
|
|
target_cflags="${target_cflags} -DABORT_PROVIDED -DHAVE_GETTIMEOFDAY"
|
|
# 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 target above.
|
|
target_cflags="${target_cflags} -DARM_RDP_MONITOR"
|
|
# target_cflags="${target_cflags} -DARM_RDI_MONITOR"
|
|
;;
|
|
v850-*-*)
|
|
syscall_dir=syscalls
|
|
;;
|
|
w65-*-*)
|
|
syscall_dir=syscalls
|
|
target_cflags="${target_cflags} -DSMALL_DTOA -DSMALL_MEMORY"
|
|
;;
|
|
z8k-*-*)
|
|
syscall_dir=syscalls
|
|
;;
|
|
*)
|
|
target_cflags="${target_cflags} -DMISSING_SYSCALL_NAMES"
|
|
syscall_dir=
|
|
;;
|
|
esac
|
|
|
|
# Determine subdirs based on unix_dir, posix_dir, signal_dir, machine_dir
|
|
# and sys_dir. Subdirs is the list of directories whose Makefiles we edit.
|
|
|
|
subdirs="libc libc/ctype libc/errno libc/locale libc/misc libc/reent libc/stdio libc/stdlib libc/string libc/time libm libm/math"
|
|
|
|
for i in testsuite testsuite/libm.paranoia testsuite/libm.sac ; do
|
|
if [ -d ${srcdir}/$i ] ; then
|
|
subdirs="${subdirs} $i"
|
|
fi
|
|
done
|
|
|
|
if [ ! -z "${unix_dir}" ]; then
|
|
subdirs="${subdirs} libc/${unix_dir}"
|
|
libc_unix_lib=${unix_dir}/lib.a
|
|
fi
|
|
|
|
if [ ! -z "${posix_dir}" ]; then
|
NEWLIB_CONFIGURE(.)
|
subdirs="${subdirs} libc/${posix_dir}"
|
|
libc_posix_lib=${posix_dir}/lib.a
|
configdirs="libc libm"
|
|
|
|
AC_ARG_ENABLE(newlib_hw_fp,
|
|
[ --enable-newlib-hw-fp Turn on hardware floating point math],
|
|
[case "${enableval}" in
|
|
yes) newlib_hw_fp=true ;;
|
|
no) newlib_hw_fp=false ;;
|
|
*) AC_MSG_ERROR(bad value ${enableval} for --enable-newlib-hw-fp) ;;
|
|
esac],[newlib_hw_fp=false])
|
|
AM_CONDITIONAL(NEWLIB_HW_FP, test x$newlib_hw_fp = xtrue)
|
|
|
|
if test -z "${with_multisubdir}"; then
|
|
configdirs="${configdirs} doc"
|
|
have_doc=yes
|
|
else
|
|
have_doc=
|
fi
|
fi
|
|
AM_CONDITIONAL(HAVE_DOC, test x$have_doc = xyes)
|
|
|
if [ ! -z "${signal_dir}" ]; then
|
AC_CONFIG_SUBDIRS(${configdirs})
|
subdirs="${subdirs} libc/${signal_dir}"
|
|
libc_signal_lib=${signal_dir}/lib.a
|
|
fi
|
|
|
|
if [ ! -z "${machine_dir}" ]; then
|
CRT0=
|
subdirs="${subdirs} libc/machine libc/machine/${machine_dir}"
|
CRT0_DIR=
|
libc_machine_lib=machine/lib.a
|
if test -n "${sys_dir}"; then
|
|
CRT0=crt0.o
|
|
CRT0_DIR=libc
|
fi
|
fi
|
|
AC_SUBST(CRT0)
|
|
AC_SUBST(CRT0_DIR)
|
|
|
if [ ! -z "${sys_dir}" ]; then
|
|
subdirs="${subdirs} libc/sys libc/sys/${sys_dir}"
|
|
libc_sys_lib=sys/lib.a
|
|
fi
|
|
|
|
if [ ! -z "${syscall_dir}" ]; then
|
|
subdirs="${subdirs} libc/${syscall_dir}"
|
|
libc_syscall_lib=${syscall_dir}/lib.a
|
|
fi
|
|
|
|
# If newlib_target is set, it is a target specific Makefile fragment.
|
|
# At the moment, no target needs one.
|
|
if [ ! -z "${newlib_target}" ]; then
|
|
target_makefile_frag=config/${newlib_target}.mt
|
|
echo "USING ${target_makefile_frag}..."
|
|
fi
|
|
|
|
# if sys_dir is set, then crt0 is built there.
|
if test "${multilib}" = "yes"; then
|
if [ ! -z "${sys_dir}" ] ; then
|
multilib_arg="--enable-multilib"
|
crt0=crt0.o
|
else
|
crt0_dir=libc
|
multilib_arg=
|
fi
|
fi
|
|
|
# end of per-target determination
|
|
|
|
# post-target:
|
AC_OUTPUT(Makefile,
|
|
[if test -n "$CONFIG_FILES"; then
|
# We want the Makefile to know machine_dir, sys_dir, signal_dir,
|
. ${newlib_basedir}/../config-ml.in
|
# and TARGET_CFLAGS, but we don't want to use a tiny Makefile fragment
|
fi],
|
# for each one. So we use sed to edit the Makefile directly. This
|
srcdir=${srcdir}
|
# isn't the way most of the tools work, but it saves Makefile fragments.
|
host=${host}
|
|
target=${target}
|
# Actually, this is pretty silly. In general, each of these is used
|
with_multisubdir=${with_multisubdir}
|
# by only one makefile. Keeping them here rather than with their
|
ac_configure_args="${multilib_arg} ${ac_configure_args}"
|
# associated makefiles is rather wasteful and counterintuitive.
|
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
|
|
newlib_basedir=${newlib_basedir}
|
sed -e "s:^machine_dir[ ]*=.*$:machine_dir = ${machine_dir}:" \
|
CC="${CC}"
|
-e "s:^sys_dir[ ]*=.*$:sys_dir = ${sys_dir}:" \
|
)
|
-e "s:^signal_dir[ ]*=.*$:signal_dir = ${signal_dir}:" \
|
|
-e "s:^TARGET_CFLAGS[ ]*=.*$:TARGET_CFLAGS = ${target_cflags}:" \
|
|
-e "s:^LIBC_UNIX_LIB[ ]*=.*$:LIBC_UNIX_LIB = ${libc_unix_lib}:" \
|
|
-e "s:^LIBC_POSIX_LIB[ ]*=.*$:LIBC_POSIX_LIB = ${libc_posix_lib}:" \
|
|
-e "s:^LIBC_SIGNAL_LIB[ ]*=.*$:LIBC_SIGNAL_LIB = ${libc_signal_lib}:" \
|
|
-e "s:^LIBC_MACHINE_LIB[ ]*=.*$:LIBC_MACHINE_LIB = ${libc_machine_lib}:" \
|
|
-e "s:^LIBC_SYS_LIB[ ]*=.*$:LIBC_SYS_LIB = ${libc_sys_lib}:" \
|
|
-e "s:^LIBC_SYSCALL_LIB[ ]*=.*$:LIBC_SYSCALL_LIB = ${libc_syscall_lib}:" \
|
|
-e "s:^CRT0[ ]*=.*$:CRT0 = ${crt0}:" \
|
|
-e "s:^CRT0_DIR[ ]*=.*$:CRT0_DIR = ${crt0_dir}:" \
|
|
${Makefile} > Makefile.tem
|
|
rm -f ${Makefile}
|
|
mv Makefile.tem ${Makefile}
|
|
|
|
# We need multilib support.
|
|
if [ "${srcdir}" = "." ] ; then
|
|
if [ "${with_target_subdir}" != "." ] ; then
|
|
. ${with_multisrctop}../../config-ml.in
|
|
else
|
|
. ${with_multisrctop}../config-ml.in
|
|
fi
|
|
else
|
|
. ${srcdir}/../config-ml.in
|
|
fi
|
|
)
|
|