forked from Imagelibrary/rtems
This is the first real automake patch.
It adds automake support to c/build-tools and cleans up a few minor
issues.
I consider this to be a testing probe to examine problems with automake.
Therefore, this patch is just a more or less harmless replacement of the
former RTEMS Makefiles and I expect it not last for long. If you want to
give automake Makefiles a public try and if you want/need to learn about
problems with it, then it's about time for a new snapshot, IMO. I may
have screwed up something not directly related to automake, but I expect
very few (none to be precise) problems with automake. However, somebody
should at least try building on Cygwin. If you feel a bit more
adventureous, then I also can continue to submit more patches.
[FYI: I still have a couple of automake files laying around, but they
need some cleanup before being submitted as patches. Now, that I am just
into it, I'll perhaps submit another one tonight :-]
After applying this patch (patch -p1 -E <
<path-to>/rtems-rc-19990318-0), first run the "autogen" script from the
toplevel source directory, before committing to CVS. Be careful about
dependencies between Makefile.am and Makefile.ins when cutting tarballs
from CVS. Makefile.ins are required to be newer than Makefile.ams,
otherwise users would need to have automake, autoconf and perl. Some
people recommend to "touch" all Makefile.in after checkout from cvs (cf.
egcs/contrib/egcs_update).
ATTENTION:
* This patch adds a number of new files.
* remove aclocal/exeext.m4 and aclocal/cygwin.m4 from CVS, They are now
covered by autoconf-2.13`s AC_EXEEXT.
Some features/side-effects which are probably interesting for you:
In a configured build-tree "cd c/build-tools", then try
* "make RTEMS_BSP=<bsp> install"
* "make RTEMS_BSP=<bsp> dist"
424 lines
12 KiB
Plaintext
424 lines
12 KiB
Plaintext
dnl Process this file with autoconf to produce a configure script.
|
|
dnl
|
|
dnl $Id$
|
|
|
|
AC_PREREQ(2.13)
|
|
AC_INIT(README)
|
|
RTEMS_TOP(.)
|
|
|
|
dnl Checks for programs.
|
|
AC_PROG_MAKE_SET
|
|
AC_CANONICAL_SYSTEM
|
|
|
|
AC_ARG_WITH(cross-host,[ --with-cross-host=HOST host (cygnus)], \
|
|
host=$withval)
|
|
|
|
RTEMS_ENABLE_GMAKE_PRINT
|
|
RTEMS_ENABLE_MULTIPROCESSING
|
|
RTEMS_ENABLE_POSIX
|
|
RTEMS_ENABLE_NETWORKING
|
|
RTEMS_ENABLE_RDBG
|
|
RTEMS_ENABLE_INLINES
|
|
RTEMS_ENABLE_CXX
|
|
RTEMS_ENABLE_GCC28
|
|
RTEMS_ENABLE_LIBCDIR
|
|
RTEMS_ENABLE_BARE
|
|
|
|
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
|
|
RTEMS_PATH_PERL
|
|
|
|
dnl check mkdir behaviour, try to get mkdir -p -m 0755
|
|
dnl NOTE: This is considered obsolete
|
|
dnl MKDIR is not used anywhere in the source tree anymore.
|
|
dnl In Makefile.ins/Makefile.ams, use
|
|
dnl "mkinstalldirs" for recursive mkdir and
|
|
dnl "mkdir" for non-recursive mkdir, instead
|
|
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)
|
|
|
|
RTEMS_PATH_KSH
|
|
|
|
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
|
|
|
|
RTEMS_CANONICAL_TARGET_CPU
|
|
RTEMS_CHECK_CPU
|
|
RTEMS_CANONICAL_HOST
|
|
|
|
changequote(,)dnl
|
|
case "${target}" in
|
|
i[3456]86-go32-rtems*)
|
|
rtems_bsp="go32 go32_p5"
|
|
skip_startfiles="yes"
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
changequote([,])dnl
|
|
|
|
# Override the set of BSPs to be built.
|
|
AC_ARG_ENABLE(rtemsbsp, \
|
|
[ --enable-rtemsbsp=bsp1 bsp2 .. BSPs to include in build], \
|
|
rtems_bsp=$enableval \
|
|
)
|
|
|
|
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
|
|
dnl check for .exe (Cygwin)
|
|
AC_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 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)
|
|
RTEMS_CHECK_MAKEFILE(c/src/exec/score/cpu/$target_cpu)
|
|
|
|
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
|
|
|
|
RTEMS_ENABLE_TESTS
|
|
|
|
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
|
|
RTEMS_ENABLE_HWAPI
|
|
if test "$RTEMS_HAS_HWAPI" = "yes"; then
|
|
AC_MSG_CHECKING(whether libwapi is present)
|
|
if test -f ${srcdir}/c/src/lib/libhwapi/Makefile.in ; then
|
|
AC_MSG_RESULT(yes)
|
|
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
|
|
fi
|
|
|
|
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(make)
|
|
RTEMS_CHECK_MAKEFILE(c/src/lib/libchip)
|
|
RTEMS_CHECK_MAKEFILE(c/src/lib/libmisc)
|
|
RTEMS_CHECK_MAKEFILE(c/src/tests/samples)
|
|
|
|
AC_CONFIG_SUBDIRS(c/build-tools)
|
|
# FIXME: libwapi needs a separate configure.in in future ;-
|
|
# AC_CONFIG_SUBDIRS(c/src/lib/libwapi)
|
|
|
|
# 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
|