dnl Process this file with autoconf to produce a configure script.
dnl
dnl $Id$
AC_PREREQ(2.12)
AC_INIT(README)
dnl Checks for programs.
AC_PROG_MAKE_SET
AC_CANONICAL_SYSTEM
AC_ARG_WITH(cross-host,[ --with-cross-host=HOST host (cygnus)], \
host=$withval)
AC_ARG_ENABLE(gmake-print-directory, \
[ --enable-gmake-print-directory enable GNU Make's print directory], \
[case "${enableval}" in
yes) RTEMS_USE_OWN_PDIR=no ;;
no) RTEMS_USE_OWN_PDIR=yes ;;
*) AC_MSG_ERROR(bad value ${enableval} for gmake-print-directory option) ;;
esac],[RTEMS_USE_OWN_PDIR=yes])
AC_ARG_ENABLE(posix, \
[ --enable-posix enable posix interface], \
[case "${enableval}" in
yes) RTEMS_HAS_POSIX_API=yes ;;
no) RTEMS_HAS_POSIX_API=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for enable-posix option) ;;
esac],[RTEMS_HAS_POSIX_API=yes])
AC_ARG_ENABLE(networking, \
[ --enable-networking enable TCP/IP stack], \
[case "${enableval}" in
yes) RTEMS_HAS_NETWORKING=yes ;;
no) RTEMS_HAS_NETWORKING=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for enable-networking option) ;;
esac],[RTEMS_HAS_NETWORKING=yes])
AC_ARG_ENABLE(rtems-inlines, \
[ --enable-rtems-inlines enable RTEMS inline functions (use macros)], \
[case "${enableval}" in
yes) RTEMS_USE_MACROS=no ;;
no) RTEMS_USE_MACROS=yes ;;
*) AC_MSG_ERROR(bad value ${enableval} for disable-rtems-inlines option) ;;
esac],[RTEMS_USE_MACROS=no])
AC_ARG_ENABLE(cxx, \
[ --enable-cxx enable C++ support, and build the rtems++ library], \
[case "${enableval}" in
yes) RTEMS_HAS_CPLUSPLUS=yes ;;
no) RTEMS_HAS_CPLUSPLUS=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for enable-cxx option) ;;
esac], [RTEMS_HAS_CPLUSPLUS=no])
AC_ARG_ENABLE(gcc28, \
[ --enable-gcc28 enable use of gcc 2.8.x features], \
[case "${enableval}" in
yes) RTEMS_USE_GCC272=no ;;
no) RTEMS_USE_GCC272=yes ;;
*) AC_MSG_ERROR(bad value ${enableval} for gcc-28 option) ;;
esac],[RTEMS_USE_GCC272=no])
AC_ARG_ENABLE(libcdir, \
[ --enable-libcdir=directory set the directory for the C library], \
[ RTEMS_LIBC_DIR="${enableval}" ; \
test -d ${enableval} || AC_MSG_ERROR("$enableval is not a directory" ) ] )
AC_ARG_ENABLE(bare-cpu-cflags,
[ --enable-bare-cpu-cflags \
specify a particular cpu cflag (bare bsp specific)],
[case "${enableval}" in
no) BARE_CPU_CFLAGS="" ;;
*) BARE_CPU_CFLAGS="${enableval}" ;;
esac],
[BARE_CPU_CFLAGS=""])
AC_ARG_ENABLE(bare-cpu-model,
[ --enable-bare-cpu-model \
specify a particular cpu model (bare bsp specific)],
[case "${enableval}" in
no) BARE_CPU_MODEL="" ;;
*) BARE_CPU_MODEL="${enableval}" ;;
esac],
[BARE_CPU_MODEL=""])
RTEMS_PREFIX=${target_cpu}-${target_vendor}
dnl BEGIN configure.host.in
AC_PATH_PROG(CAT,cat)
AC_PATH_PROG(RM,rm)
AC_PATH_PROG(CP,cp)
AC_PATH_PROG(MV,mv)
AC_PATH_PROG(LN,ln)
AC_PROG_LN_S
AC_PATH_PROG(CHMOD,chmod)
AC_PATH_PROG(SORT,sort)
AC_PROG_INSTALL
dnl check mkdir behaviour, try to get mkdir -p -m 0755
RTEMS_PATH_MKDIR
RTEMS_PROG_MKDIR_M
RTEMS_PROG_MKDIR_P
test "$rtems_cv_prog_MKDIR_P" = "yes" && MKDIR="$MKDIR -p"
#test "$rtems_cv_prog_MKDIR_M" = "yes" && MKDIR="$MKDIR -m 0755"
AC_PATH_PROG(TOUCH,touch)
AC_PATH_PROG(CMP,cmp)
AC_PATH_PROG(SED,sed)
AC_PATH_PROGS(M4,gm4 m4)
dnl NOTE: prefer bash over ksh over sh
AC_PATH_PROGS(KSH,bash ksh sh)
if test -z "$KSH"; then
dnl NOTE: This cannot happen -- /bin/sh must always exist
AC_MSG_ERROR(
[***]
[ Cannot determine a usable shell bash/ksh/sh]
[ Please contact your system administrator] );
fi
dnl BEGIN configure.target.in
dnl echo "TARGET"
dnl echo " cpu --> $target_cpu"
dnl echo " os --> $target_os"
dnl echo " vendor --> $target_vendor"
dnl canonicalize target name
dnl NOTE: Most rtems targets do not fullfil autoconf
dnl targets naming conventions "processor-vendor-os"
dnl Therefore autoconf's AC_CANONICAL_TARGET will fail for them
dnl and we have to fix it for rtems ourselves
dnl
dnl The original plan was to do CPU-BSP-rtems or CPU-rtems to
dnl imply all BSPs. Eventually we would like to build a collection
dnl of CPU model specific RTEMS libraries which in conjunction with
dnl a BSP library would be used to link an application.
RTEMS_HOST=$host_os
case "${target}" in
# hpux unix port should go here
i[[3456]]86-go32-rtems*)
target_cpu=i386
rtems_bsp="go32 go32_p5"
skip_startfiles="yes"
RTEMS_HAS_POSIX_API=no
;;
i[[3456]]86-pc-linux*) # unix "simulator" port
target_cpu=unix
RTEMS_HOST=Linux
# override these settings
RTEMS_HAS_POSIX_API=no
;;
i[[3456]]86-*freebsd2*) # unix "simulator" port
target_cpu=unix
RTEMS_HOST=FreeBSD
# override these settings
RTEMS_HAS_POSIX_API=no
;;
no_cpu-*rtems*)
target_cpu=no_cpu
RTEMS_HAS_POSIX_API=no
;;
ppc*-*rtems*)
target_cpu=powerpc
;;
sparc-sun-solaris*) # unix "simulator" port
target_cpu=unix
RTEMS_HOST=Solaris
# override these settings
RTEMS_HAS_POSIX_API=no
;;
*)
RTEMS_CANONICAL_TARGET_CPU
;;
esac
# Override the set of BSPs to be built.
AC_ARG_ENABLE(rtemsbsp, \
[ --enable-rtemsbsp=bsp1 bsp2 .. BSPs to include in build], \
rtems_bsp=$enableval \
)
# Is this a supported CPU?
AC_MSG_CHECKING([if cpu $target_cpu is supported])
if test -d "$srcdir/c/src/exec/score/cpu/$target_cpu"; then
AC_MSG_RESULT(yes)
makefiles="$makefiles c/src/exec/score/cpu/$target_cpu/Makefile"
else
AC_MSG_ERROR(no)
fi
RTEMS_TOOL_PREFIX
dnl check target cc
RTEMS_PROG_CC
dnl check if the compiler supports --specs
RTEMS_GCC_SPECS
dnl check if the target compiler may use --pipe
RTEMS_GCC_PIPE
dnl check if the compiler supports --specs if gcc28 is requested
if test "$RTEMS_USE_GCC272" != "yes" ; then
if test "$rtems_cv_gcc_specs" = "no"; then
AC_MSG_WARN([*** disabling --enable-gcc28])
RTEMS_USE_GCC272=yes
fi
fi
test "$rtems_cv_gcc_pipe" = "yes" && CC_FOR_TARGET="$CC_FOR_TARGET --pipe"
dnl check for g++
if test "$RTEMS_HAS_CPLUSPLUS" = "yes"; then
RTEMS_PROG_CXX
if test "$rtems_cv_prog_cc_cross" != "$rtems_cv_prog_cxx_cross"; then
AC_MSG_ERROR([***]
[Inconsistency in compiler configuration:]
[Target C compiler and Target C++ compiler]
[must both ether be cross compilers or native compilers]
[Hint: If building a posix bsp: LD_LIBRARY_PATH?] )
fi
else
CXX_FOR_TARGET="no"
fi
RTEMS_CANONICALIZE_TOOLS
dnl check host cc
AC_PROG_CC
RTEMS_CYGWIN32
RTEMS_EXEEXT
dnl FIXME: HACK for egcs/cygwin mixing '\\' and '/' in gcc -print-*
case $host_os in
*cygwin32*) GCCSED="| sed 's%\\\\%/%g'" ;;
*) ;;
esac
AC_SUBST(GCCSED)
dnl FIXME: This is a kludge
dnl Add -Wall if using gcc as host compiler
test "$ac_cv_prog_gcc" = "yes" && CC_CFLAGS_DEFAULT=-Wall
dnl Add -g if the host compiler accepts -g, assume -g means debugging
test "$ac_cv_prog_cc_g" = "yes" && CC_CFLAGS_DEBUG_V=-g
dnl check for host library functions
dnl NOTE: must be called after AC_PROG_CC
AC_CHECK_FUNCS(strerror)
dnl check for SysV IPC used by simulators
if test "$target_cpu" = "unix" ; then
RTEMS_SYSV_SEM
if test "$rtems_cv_sysv_sem" != "yes" ; then
AC_MSG_ERROR([System V semaphores don't work, required by simulator])
fi
RTEMS_SYSV_SHM
if test "$rtems_cv_sysv_shm" != "yes" ; then
AC_MSG_ERROR([System V shared memory doesn't work, required by simulator])
fi
RTEMS_SYSV_MSG
if test "$rtems_cv_sysv_msg" != "yes" ; then
AC_MSG_ERROR([System V messages don't work, required by simulator])
fi
fi
# find all the Executive Makefiles
RTEMS_CHECK_MAKEFILE(c/src/exec/score/tools/$target_cpu)
RTEMS_CHECK_MAKEFILE(c/src/exec/rtems)
RTEMS_CHECK_MAKEFILE(c/src/exec/sapi)
if test "$RTEMS_HAS_POSIX_API" = "yes"; then
RTEMS_CHECK_MAKEFILE(c/src/exec/posix)
makefiles="$makefiles c/src/exec/wrapup/posix/Makefile"
fi
# find all the Makefiles for the BSPs
if test -d "$srcdir/c/src/lib/libbsp/$target_cpu"; then
makefiles="$makefiles c/src/lib/libbsp/$target_cpu/Makefile"
if test -z "$rtems_bsp"; then
AC_MSG_CHECKING([for bsps])
files=`ls $srcdir/c/src/lib/libbsp/$target_cpu`
for file in $files; do
case $file in
shared*);;
Makefile*);;
READ*);;
CVS*);;
pxfl*);;
go32*);; # so the i386 port can pick up the other Makefiles
# Now account for BSPs with build variants
gen68360) rtems_bsp="$rtems_bsp gen68360 gen68360_040";;
p4000) rtems_bsp="$rtems_bsp p4600 p4650";;
mvme162) rtems_bsp="$rtems_bsp mvme162 mvme162lx";;
*) rtems_bsp="$rtems_bsp $file";;
esac;
done
makefiles="$makefiles c/src/lib/libbsp/bare/Makefile"
AC_MSG_RESULT([$rtems_bsp done])
fi
# collect makefiles for each bsp
for i in $rtems_bsp; do
# make sure there is a make/custom file for the bsp
if test ! -r "$srcdir/make/custom/${i}.cfg"; then
AC_MSG_ERROR([no make/custom/${i}.cfg file for BSP $i])
fi
# account for "aliased" bsps which share source code
case $i in
mvme162lx) bspdir=mvme162 ;; # mvme162 board variant
gen68360_040) bspdir=gen68360 ;; # 68360 in companion mode
go32_p5) bspdir=go32 ;; # go32 on Pentium class CPU
p4600) bspdir=p4000 ;; # p4000 board with IDT 4600
p4650) bspdir=p4000 ;; # p4000 board with IDT 4650
*) bspdir=$i;;
esac
# Is there code where there should be for this BSP?
# The bare bsp is a special case as it is not under the target_cpu path
case $i in
bare)
bspcpudir=
if test "X${BARE_CPU_CFLAGS}" = "X" ; then
AC_MSG_ERROR([--enable-bare-cpu-flags not specified for bare bsp])
fi
if test "X${BARE_CPU_MODEL}" = "X" ; then
AC_MSG_ERROR([--enable-bare-cpu-model not specified for bare bsp])
fi
;;
*)
bspcpudir=$target_cpu/
;;
esac
if test -d "$srcdir/c/src/lib/libbsp/$bspcpudir$bspdir"; then
RTEMS_BSP_LIST="$RTEMS_BSP_LIST $i"
# make sure the Makefiles in a bsp directory are only done once
echo $bspdirs | grep $bspdir >/dev/null 2>&1
if test $? -ne 0 ; then
bspdirs="$bspdirs $bspdir"
RTEMS_CHECK_MAKEFILE(c/src/lib/libbsp/$bspcpudir$bspdir)
RTEMS_CHECK_MAKEFILE(c/src/lib/libbsp/${bspcpudir}shared)
fi
else
AC_MSG_ERROR([unable to find libbsp directory ($bspdir) for $i])
fi
done
fi
# find all the CPU dependent library Makefiles
RTEMS_CHECK_MAKEFILE(c/src/lib/libcpu/$target_cpu)
dnl Workaround for go32
if test "$skip_startfiles" != "yes"; then
RTEMS_CHECK_MAKEFILE(c/src/lib/start/$target_cpu)
fi
dnl END configure.target.in
PROJECT_ROOT=`pwd;`
# If RTEMS macros are enabled, then use them. Otherwise, use inlines.
if test "$RTEMS_USE_MACROS" = "yes"; then
inline_dir=macros
if test "$RTEMS_HAS_POSIX_API" = "yes"; then
# The problem is that there is currently no code in posix/macros :)
AC_MSG_ERROR(Macros are not implemented for the POSIX API)
fi
else
inline_dir=inline
fi
# If the TCP/IP stack is enabled, then find all TCP/IP Makefiles
AC_MSG_CHECKING([if networking is enabled? ])
AC_MSG_RESULT($RTEMS_HAS_NETWORKING)
if test "$RTEMS_HAS_NETWORKING" = "yes"; then
RTEMS_CHECK_MAKEFILE(c/src/lib/libnetworking)
fi
# If the C++ support is enabled, then include the Makefiles
if test "$RTEMS_HAS_CPLUSPLUS" = "yes"; then
makefiles="$makefiles c/src/lib/librtems++/Makefile"
fi
# If the tests are enabled, then find all the test suite Makefiles
AC_MSG_CHECKING([if the test suites are enabled? ])
tests_enabled=yes
AC_ARG_ENABLE(tests, \
[ --enable-tests enable tests], \
[case "${enableval}" in
yes) AC_MSG_RESULT(yes) ;;
no) AC_MSG_RESULT(no) ; tests_enabled=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for tests option) ;;
esac],
AC_MSG_RESULT(yes)
)
RTEMS_CHECK_MAKEFILE(c/src/tests/tools/$target_cpu)
if test "$tests_enabled" = "yes"; then
RTEMS_CHECK_MAKEFILE(c/src/tests/libtests)
RTEMS_CHECK_MAKEFILE(c/src/tests/sptests)
RTEMS_CHECK_MAKEFILE(c/src/tests/tmtests)
RTEMS_CHECK_MAKEFILE(c/src/tests/mptests)
if test "$RTEMS_HAS_POSIX_API" = "yes"; then
RTEMS_CHECK_MAKEFILE(c/src/tests/psxtests)
fi
fi
# If the HWAPI is enabled, the find the HWAPI Makefiles
AC_MSG_CHECKING([if the HWAPI is enabled? ])
AC_ARG_ENABLE(hwapi, \
[ --enable-hwapi enable hardware API library], \
[case "${enableval}" in
yes) AC_MSG_RESULT(yes)
if test -f ${srcdir}/c/src/lib/libhwapi/Makefile.in ; then
makefiles="$makefiles c/src/lib/libhwapi/Makefile"
RTEMS_CHECK_MAKEFILE(c/src/lib/libhwapi/analog)
RTEMS_CHECK_MAKEFILE(c/src/lib/libhwapi/discrete)
RTEMS_CHECK_MAKEFILE(c/src/lib/libhwapi/drivers)
RTEMS_CHECK_MAKEFILE(c/src/lib/libhwapi/non_volatile_memory)
RTEMS_CHECK_MAKEFILE(c/src/lib/libhwapi/serial)
RTEMS_CHECK_MAKEFILE(c/src/lib/libhwapi/support)
RTEMS_CHECK_MAKEFILE(c/src/lib/libhwapi/wrapup)
else
AC_MSG_ERROR(No source code found for the HWAPI)
fi
;;
no) AC_MSG_RESULT(no) ;;
*) AC_MSG_ERROR(bad value ${enableval} for hwapi option) ;;
esac],
AC_MSG_RESULT(no)
)
AC_SUBST(rtems_cv_prog_cc_cross)
AC_SUBST(RTEMS_BSP_LIST)
AC_SUBST(RTEMS_HOST)
AC_SUBST(RTEMS_LIBC_DIR)
AC_SUBST(RTEMS_USE_OWN_PDIR)
AC_SUBST(RTEMS_HAS_POSIX_API)
AC_SUBST(RTEMS_HAS_NETWORKING)
AC_SUBST(RTEMS_USE_MACROS)
AC_SUBST(RTEMS_HAS_CPLUSPLUS)
AC_SUBST(RTEMS_USE_GCC272)
AC_SUBST(RTEMS_LIBC_DIR)
AC_SUBST(BARE_CPU_CFLAGS)
AC_SUBST(BARE_CPU_MODEL)
AC_SUBST(PROJECT_ROOT)
AC_SUBST(program_prefix)
AC_SUBST(CC_CFLAGS_DEFAULT)
AC_SUBST(CC_CFLAGS_DEBUG_V)
# pick up all the Makefiles in required parts of the tree
RTEMS_CHECK_MAKEFILE(c/build-tools)
RTEMS_CHECK_MAKEFILE(make)
RTEMS_CHECK_MAKEFILE(c/src/lib/libmisc)
RTEMS_CHECK_MAKEFILE(c/src/tests/samples)
AC_CONFIG_HEADER(c/build-tools/src/config.h)
# try not to explicitly list a Makefile here
AC_OUTPUT(
Makefile
make/host.cfg
make/target.cfg
make/Templates/Makefile.inc
make/compilers/gcc.cfg
c/Makefile
c/src/Makefile
c/src/exec/Makefile
c/src/exec/score/Makefile
c/src/exec/score/cpu/Makefile
c/src/exec/score/headers/Makefile
c/src/exec/score/${inline_dir}/Makefile
c/src/exec/score/src/Makefile
c/src/exec/score/tools/Makefile
c/src/exec/score/tools/generic/Makefile
c/src/exec/score/tools/generic/size_rtems
c/src/exec/wrapup/Makefile
c/src/exec/wrapup/rtems/Makefile
c/src/lib/Makefile
c/src/lib/include/Makefile
c/src/lib/libbsp/Makefile
c/src/lib/libbsp/shmdr/Makefile
c/src/lib/libc/Makefile
c/src/lib/libcpu/Makefile
c/src/lib/start/Makefile
c/src/lib/wrapup/Makefile
c/src/tests/Makefile
c/src/tests/support/Makefile
c/src/tests/support/include/Makefile
c/src/tests/support/stubdr/Makefile
c/src/tests/support/wrapup/Makefile
c/src/tests/tools/Makefile
c/src/tests/tools/generic/Makefile
$makefiles
c/update-tools/Makefile)
echo
echo target architecture: $target_cpu.
echo available BSPs: $rtems_bsp.
echo \'make all\' will build the following BSPs: $RTEMS_BSP_LIST.
echo other BSPs can be built with \'make RTEMS_BSP=\"bsp1 bsp2 ...\"\'
echo