mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-19 00:51:18 +08:00
Bare BSP is now only enabled when explicitly specified. Bare BSP options and variables are clearly named so as to be obviously BSP specific. This should avoid conflicts.
471 lines
14 KiB
Plaintext
471 lines
14 KiB
Plaintext
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(ka9q, \
|
|
[ --enable-ka9q enable KA9Q TCP/IP stack], \
|
|
[case "${enableval}" in
|
|
yes) RTEMS_HAS_KA9Q=yes ;;
|
|
no) RTEMS_HAS_KA9Q=no ;;
|
|
*) AC_MSG_ERROR(bad value ${enableval} for enable-ka9q option) ;;
|
|
esac],[RTEMS_HAS_KA9Q=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)
|
|
|
|
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
|
|
;;
|
|
no_cpu-*rtems*)
|
|
target_cpu=no_cpu
|
|
RTEMS_HAS_POSIX_API=no
|
|
;;
|
|
powerpc-*rtems*)
|
|
target_cpu=ppc
|
|
;;
|
|
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
|
|
|
|
dnl check for host library functions
|
|
dnl NOTE: must be called after AC_PROG_CC
|
|
AC_CHECK_FUNCS(strerror)
|
|
|
|
# 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)
|
|
if test -d "$srcdir/c/src/lib/libbsp/$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/$bspdir)
|
|
fi
|
|
else
|
|
AC_MSG_ERROR([unable to find libbsp directory ($bspdir) for $i])
|
|
fi
|
|
;;
|
|
*)
|
|
if test -d "$srcdir/c/src/lib/libbsp/$target_cpu/$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/$target_cpu/$bspdir)
|
|
fi
|
|
else
|
|
AC_MSG_ERROR([unable to find libbsp directory ($bspdir) for $i])
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
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 KA9Q TCP/IP stack is enabled, then find all KA9Q Makefiles
|
|
if test "$RTEMS_HAS_KA9Q" = "yes"; then
|
|
makefiles="$makefiles c/src/lib/libka9q/Makefile"
|
|
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_KA9Q)
|
|
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)
|
|
|
|
# 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
|
|
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/build-tools/scripts/rtems-glom
|
|
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
|