summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--aclocal/canonicalize-tools.m442
-rw-r--r--aclocal/gcc-pipe.m420
-rw-r--r--aclocal/gcc-specs.m420
-rw-r--r--aclocal/prog-cc.m476
-rw-r--r--aclocal/prog-cxx.m476
5 files changed, 234 insertions, 0 deletions
diff --git a/aclocal/canonicalize-tools.m4 b/aclocal/canonicalize-tools.m4
new file mode 100644
index 0000000000..a3825cb746
--- /dev/null
+++ b/aclocal/canonicalize-tools.m4
@@ -0,0 +1,42 @@
+dnl $Id$
+dnl
+dnl Set target tools
+dnl
+dnl 98/02/12 Ralf Corsepius (corsepiu@faw.uni-ulm.de)
+dnl
+
+AC_DEFUN(RTEMS_CANONICALIZE_TOOLS,
+[AC_REQUIRE([RTEMS_PROG_CC])dnl
+if test "$rtems_cv_prog_gcc" = "yes" ; then
+ dnl We are using gcc, now ask it about its tools
+ dnl Necessary if gcc was configured to use the target's native tools
+ dnl or uses prefixes for gnutools (e.g. gas instead of as)
+ AR_FOR_TARGET=`$CC_FOR_TARGET --print-prog-name=ar`
+ AS_FOR_TARGET=`$CC_FOR_TARGET --print-prog-name=as`
+ LD_FOR_TARGET=`$CC_FOR_TARGET --print-prog-name=ld`
+ NM_FOR_TARGET=`$CC_FOR_TARGET --print-prog-name=nm`
+ RANLIB_FOR_TARGET=`$CC_FOR_TARGET --print-prog-name=ranlib`
+fi
+
+dnl check whether the tools exist
+dnl FIXME: What shall be done if they don't exist?
+
+dnl NOTE: CC_FOR_TARGET should always be valid at this point,
+dnl cf. RTEMS_PROG_CC
+AC_PATH_PROG(CC_FOR_TARGET,"$program_prefix"gcc,no)
+
+dnl FIXME: This may fail if the compiler has not been recognized as gcc
+dnl and uses tools with different names
+AC_PATH_PROG(AR_FOR_TARGET,"$program_prefix"ar,no)
+AC_PATH_PROG(AS_FOR_TARGET,"$program_prefix"as,no)
+AC_PATH_PROG(NM_FOR_TARGET,"$program_prefix"nm,no)
+AC_PATH_PROG(LD_FOR_TARGET,"$program_prefix"ld,no)
+
+dnl NOTE: This is doubtful, but should not disturb all current rtems'
+dnl targets (remark: solaris fakes ranlib!!)
+AC_PATH_PROG(RANLIB_FOR_TARGET,"$program_prefix"ranlib,no)
+
+dnl NOTE: These may not be available, if not using gnutools
+AC_PATH_PROG(OBJCOPY_FOR_TARGET,"$program_prefix"objcopy,no)
+AC_PATH_PROG(SIZE_FOR_TARGET,"$program_prefix"size,no)
+])
diff --git a/aclocal/gcc-pipe.m4 b/aclocal/gcc-pipe.m4
new file mode 100644
index 0000000000..0c9ae41441
--- /dev/null
+++ b/aclocal/gcc-pipe.m4
@@ -0,0 +1,20 @@
+dnl
+dnl $Id$
+dnl
+dnl Check whether the target compiler accepts -pipe
+dnl
+dnl 98/02/11 Ralf Corsepius corsepiu@faw.uni-ulm.de
+dnl
+
+AC_DEFUN(RTEMS_GCC_PIPE,
+[AC_REQUIRE([RTEMS_PROG_CC])
+AC_CACHE_CHECK(whether $CC_FOR_TARGET accepts --pipe,rtems_cv_gcc_pipe,
+[
+echo 'void f(){}' >conftest.c
+if test -z "`${CC_FOR_TARGET} --pipe -c conftest.c 2>&1`";then
+ rtems_cv_gcc_pipe=yes
+else
+ rtems_cv_gcc_pipe=no
+fi
+rm -f conftest*
+])])
diff --git a/aclocal/gcc-specs.m4 b/aclocal/gcc-specs.m4
new file mode 100644
index 0000000000..017ca40745
--- /dev/null
+++ b/aclocal/gcc-specs.m4
@@ -0,0 +1,20 @@
+dnl
+dnl $Id$
+dnl
+dnl Check whether the target compiler accepts -specs
+dnl
+dnl 98/02/11 Ralf Corsepius corsepiu@faw.uni-ulm.de
+dnl
+
+AC_DEFUN(RTEMS_GCC_SPECS,
+[AC_REQUIRE([RTEMS_PROG_CC])
+AC_CACHE_CHECK(whether $CC_FOR_TARGET accepts -specs,rtems_cv_gcc_specs,
+[touch confspec
+echo 'void f(){}' >conftest.c
+if test -z "`${CC_FOR_TARGET} -specs confspec -c conftest.c 2>&1`";then
+ rtems_cv_gcc_specs=yes
+else
+ rtems_cv_gcc_specs=no
+fi
+rm -f confspec conftest*
+])])
diff --git a/aclocal/prog-cc.m4 b/aclocal/prog-cc.m4
new file mode 100644
index 0000000000..755cecfe35
--- /dev/null
+++ b/aclocal/prog-cc.m4
@@ -0,0 +1,76 @@
+dnl
+dnl $Id$
+dnl
+dnl Check for target gcc
+dnl
+dnl Adaptation of autoconf-2.12's AC_PROG_CC to rtems
+dnl
+dnl 98/02/10 Ralf Corsepius (corsepiu@faw.uni-ulm.de)
+dnl
+
+AC_DEFUN(RTEMS_PROG_CC,
+[
+AC_BEFORE([$0], [AC_PROG_CPP])dnl
+AC_BEFORE([$0], [AC_PROG_CC])dnl
+AC_CHECK_PROG(CC, gcc, gcc)
+if test -z "$CC"; then
+ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+ test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
+fi
+
+RTEMS_PROG_CC_WORKS
+AC_PROG_CC_GNU
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+dnl Check whether -g works, even if CFLAGS is set, in case the package
+dnl plays around with CFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ AC_PROG_CC_G
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+
+CC_FOR_TARGET=$CC
+rtems_cv_prog_gcc=$ac_cv_prog_gcc
+rtems_cv_prog_cc_g=$ac_cv_prog_cc_g
+
+dnl restore initial values
+unset CC
+unset ac_cv_prog_gcc
+unset ac_cv_prog_cc_g
+unset ac_cv_prog_CC
+])
+
+
+dnl Almost identical to AC_PROG_CC_WORKS
+dnl added malloc to program fragment, because rtems has its own malloc
+dnl which is not available while bootstrapping rtems
+
+AC_DEFUN(RTEMS_PROG_CC_WORKS,
+[AC_MSG_CHECKING([whether the target C compiler ($CC $CFLAGS $LDFLAGS) works])
+AC_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILER(
+[void *malloc() { return 0; }
+ main(){return(0);}],
+rtems_cv_prog_cc_works, rtems_cv_prog_cc_cross)
+AC_LANG_RESTORE
+AC_MSG_RESULT($rtems_cv_prog_cc_works)
+if test $rtems_cv_prog_cc_works = no; then
+ AC_MSG_ERROR([installation or configuration problem: target C compiler cannot create executables.])
+fi
+AC_MSG_CHECKING([whether the target C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler])
+AC_MSG_RESULT($rtems_cv_prog_cc_cross)
+])
diff --git a/aclocal/prog-cxx.m4 b/aclocal/prog-cxx.m4
new file mode 100644
index 0000000000..47a61ba57e
--- /dev/null
+++ b/aclocal/prog-cxx.m4
@@ -0,0 +1,76 @@
+dnl
+dnl $Id$
+dnl
+dnl Check for target g++
+dnl
+dnl Adaptation of autoconf-2.12's AC_PROG_CXX to rtems
+dnl
+dnl 98/02/10 Ralf Corsepius (corsepiu@faw.uni-ulm.de)
+dnl
+
+AC_DEFUN(RTEMS_PROG_CXX,
+[
+AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
+AC_BEFORE([$0], [AC_PROG_CXX])dnl
+AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
+
+RTEMS_PROG_CXX_WORKS
+AC_PROG_CXX_GNU
+
+if test $ac_cv_prog_gxx = yes; then
+ GXX=yes
+dnl Check whether -g works, even if CXXFLAGS is set, in case the package
+dnl plays around with CXXFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+ ac_test_CXXFLAGS="${CXXFLAGS+set}"
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS=
+ AC_PROG_CXX_G
+ if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ elif test $ac_cv_prog_cxx_g = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-O2"
+ fi
+else
+ GXX=
+ test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
+fi
+CXX_FOR_TARGET=$CXX
+
+dnl restore initial values
+unset CXX
+unset ac_cv_prog_gxx
+])
+
+
+dnl Almost identical to AC_PROG_CXX_WORKS
+dnl Additional handling of malloc
+dnl NOTE: using newlib with a native compiler is cross-compiling, indeed.
+AC_DEFUN(RTEMS_PROG_CXX_WORKS,
+[AC_MSG_CHECKING([whether the target C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works])
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+
+dnl this fails if rtems uses newlib, because rtems has its own malloc which
+dnl is not available at bootstrap
+AC_TRY_COMPILER(
+ [main(){return(0);}],
+ rtems_cv_prog_cxx_works, rtems_cv_prog_cxx_cross)
+if test "$rtems_cv_prog_cxx_works" = "no"; then
+ dnl now retry with our own version of malloc
+ AC_TRY_COMPILER(
+ [extern "C" void *malloc();
+ void *malloc() { return (0); }
+ main(){return(0);}],
+ rtems_cv_prog_cxx_works, rtems_cv_prog_cxx_cross)
+fi
+AC_LANG_RESTORE
+AC_MSG_RESULT($rtems_cv_prog_cxx_works)
+if test $rtems_cv_prog_cxx_works = no; then
+ AC_MSG_ERROR([installation or configuration problem: target C++ compiler cannot create executables.])
+fi
+AC_MSG_CHECKING([whether the target C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler])
+AC_MSG_RESULT($rtems_cv_prog_cxx_cross)
+])