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(multiprocessing, \ [ --enable-multiprocessing enable multiprocessing interface], \ [case "${enableval}" in yes) RTEMS_HAS_MULTIPROCESSING=yes ;; no) RTEMS_HAS_MULTIPROCESSING=no ;; *) AC_MSG_ERROR(bad value ${enableval} for enable-multiprocessing option) ;; esac],[RTEMS_HAS_MULTIPROCESSING=no]) 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(rdbg, \ [ --enable-rdbg enable remote debugger], \ [case "${enableval}" in yes) RTEMS_HAS_RDBG=yes ;; no) RTEMS_HAS_RDBG=no ;; *) AC_MSG_ERROR(bad value ${enableval} for enable-rdbg option) ;; esac],[RTEMS_HAS_RDBG=no]) 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 AC_PATH_PROG(PERL,perl) if test -z "$PERL" ; then AC_MSG_WARN( [***] [ perl was not found] [ Note: Some tools will not be built.]) fi 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 either 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 if this is an i386, does gas have good code16 support? RTEMS_I386_GAS_CODE16 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 Set flags to settings all gcc variants are assumed to accept. if test "$ac_cv_prog_gcc" = "yes"; then dnl Add -Wall if using gcc as host compiler CC_CFLAGS_DEFAULT=-Wall dnl Add -pg to profile flags, unless specified in the environment CC_CFLAGS_PROFILE_V=${CC_CFLAGS_PROFILE_V-"-pg"} dnl propagate cflags to ldflags, unless specified in the environment CC_LDFLAGS_PROFILE_V=${CC_LDFLAGS_PROFILE_V-$CC_CFLAGS_PROFILE_V} fi dnl Add -g if the host compiler accepts -g, assume -g means debugging test "$ac_cv_prog_cc_g" = "yes" && CC_CFLAGS_DEBUG_V=${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-cflags 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) RTEMS_CHECK_MAKEFILE(c/src/lib/librpc) if test "$RTEMS_HAS_RDBG" = "yes"; then RTEMS_CHECK_MAKEFILE(c/src/lib/librdbg) fi 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) if test "$RTEMS_HAS_MULTIPROCESSING" = "yes"; then RTEMS_CHECK_MAKEFILE(c/src/tests/mptests) fi 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_GAS_CODE16) 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_HAS_RDBG) 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) AC_SUBST(CC_CFLAGS_PROFILE_V) AC_SUBST(CC_LDFLAGS_PROFILE_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/libchip) 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/include/Makefile c/src/exec/score/include/rtems/Makefile c/src/exec/score/include/rtems/wrap/Makefile c/src/exec/score/include/rtems/score/Makefile c/src/exec/score/${inline_dir}/Makefile c/src/exec/score/${inline_dir}/rtems/Makefile c/src/exec/score/${inline_dir}/rtems/score/Makefile c/src/exec/score/src/Makefile c/src/exec/score/tools/Makefile c/src/exec/score/tools/generic/Makefile 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