diff options
Diffstat (limited to '')
-rw-r--r-- | README.configure | 4 | ||||
-rw-r--r-- | aclocal.m4 | 303 | ||||
-rw-r--r-- | c/src/make/compilers/gcc-target-default.cfg | 23 | ||||
-rw-r--r-- | make/compilers/gcc-portsw.cfg | 12 | ||||
-rw-r--r-- | make/compilers/gcc-target-default.cfg | 23 |
5 files changed, 281 insertions, 84 deletions
diff --git a/README.configure b/README.configure index 618a5ec8b6..82dbfbd9d6 100644 --- a/README.configure +++ b/README.configure @@ -23,7 +23,7 @@ RTEMS-specific option are supported: --disable-posix --disable-tests --disable-ka9q - --enable-cpp + --enable-cxx --enable-gcc28 (also use enable-libcdir when disabled) --enable-gmake-print-directory --enable-libcdir=<DIRECTORY> (do not use if gcc 2.8 is enabled) @@ -42,7 +42,7 @@ By default, the RTEMS port of the KA9Q TCP/IP stack is build for targets that support it. It can be disabled with the --disable-ka9q option. By default, the RTEMS support of C++ is disabled. It can be enabled -with the --enable-cpp option. If the rtems++ C++ library is installed +with the --enable-cxx option. If the rtems++ C++ library is installed it will also be build. By default, the RTEMS test suites are configured. The --disable-tests diff --git a/aclocal.m4 b/aclocal.m4 index ed512b9097..bd2ae60766 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,11 +1,6 @@ -dnl some macros for rtems host configuration checks -dnl -dnl Author: Ralf Corsepius (corsepiu@faw.uni-ulm.de), 97/11/29 -dnl -dnl Last Modified: 98/01/10 -dnl -dnl $Id$ -dnl +dnl aclocal.m4 generated automatically by aclocal 1.2 + +dnl $Id$ dnl macro to detect mkdir AC_DEFUN(RTEMS_PATH_MKDIR, @@ -44,10 +39,279 @@ rm -rf conftestdata AC_MSG_RESULT($rtems_cv_prog_MKDIR_M) ]) + +dnl $Id$ + +dnl canonicalize target name +dnl NOTE: Most rtems targets do not fullfil autoconf's +dnl target 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 + +AC_DEFUN(RTEMS_CANONICAL_TARGET_CPU, +[AC_MSG_CHECKING(rtems target cpu) +changequote(<<, >>)dnl +target_cpu=`echo $target | sed 's%^\([^-]*\)-\(.*\)$%\1%'` +changequote([, ])dnl +AC_MSG_RESULT($target_cpu) +]) + +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) +]) + +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* +])]) + +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* +])]) + +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) +]) + +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) +]) + +dnl $Id$ + +dnl RTEMS_CHECK_MAKEFILE(path) +dnl Search for Makefile.in's within the directory starting +dnl at path and append an entry for Makefile to global variable +dnl "makefiles" (from configure.in) for each Makefile.in found +dnl +AC_DEFUN(RTEMS_CHECK_MAKEFILE, +[RTEMS_CHECK_FILES_IN($1,Makefile,makefiles) +]) + +dnl $Id$ + dnl RTEMS_CHECK_FILES_IN(path,file,var) dnl path .. path relative to srcdir, where to start searching for files dnl file .. name of the files to search for -dnl var .. shell variable to append found files +dnl var .. shell variable to append files found AC_DEFUN(RTEMS_CHECK_FILES_IN, [ AC_MSG_CHECKING(for $2.in in $1) @@ -63,25 +327,4 @@ else fi ]) -dnl RTEMS_CHECK_MAKEFILE(path) -dnl Search for Makefile.in's within the directory starting -dnl at path and append an entry for Makefile to global variable -dnl "makefiles" (from configure.in) for each Makefile.in found -dnl -AC_DEFUN(RTEMS_CHECK_MAKEFILE, -[RTEMS_CHECK_FILES_IN($1,Makefile,makefiles) -]) - -dnl canonicalize target name -dnl NOTE: Most rtems targets do not fullfil autoconf's -dnl target 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 -AC_DEFUN(RTEMS_CANONICAL_TARGET_CPU, -[AC_MSG_CHECKING(rtems target cpu) -changequote(<<, >>)dnl -target_cpu=`echo $target | sed 's%^\([^-]*\)-\(.*\)$%\1%'` -changequote([, ])dnl -AC_MSG_RESULT($target_cpu) -]) diff --git a/c/src/make/compilers/gcc-target-default.cfg b/c/src/make/compilers/gcc-target-default.cfg index c832a08143..15758388a1 100644 --- a/c/src/make/compilers/gcc-target-default.cfg +++ b/c/src/make/compilers/gcc-target-default.cfg @@ -158,20 +158,17 @@ MKLIB=echo library is complete: # # NOTE: we override COMPILE.c # -# NOTE: Remove -pipe if it causes you problems. Using it can decrease -# compile time. -# COMPILE.c=$(CC) $(CFLAGS) $(XCFLAGS) -c ${ARCH}/%.o: %.c - ${COMPILE.c} -pipe -o $@ $< + ${COMPILE.c} -o $@ $< ${ARCH}/%.o: %.cc - ${COMPILE.c} -pipe -o $@ $< + ${COMPILE.c} -o $@ $< ${ARCH}/%.o: %.S - ${COMPILE.c} -pipe -DASM -o $@ $< + ${COMPILE.c} -DASM -o $@ $< # strip out C++ style comments. ${ARCH}/%.o: %.s @@ -224,20 +221,6 @@ ifneq ($(words $(C_FILES) $(CC_FILES) $(S_FILES)), 0) $(MV) $(DEPEND).tmp $(DEPEND) endif - -# List (possibly empty) of required managers -# We require: -# region -- used by lib/libcsupport for malloc() -# ext -- used by libc for libc reentrancy hooks - -MANAGERS_REQUIRED=region ext sem - -# Create a RTEMS executable based on MANAGERS which was set in -# app's Makefile - -MANAGERS_NOT_WANTED=$(filter-out $(MANAGERS), $(MANAGER_LIST)) -MANAGERS_NOT_WANTED:=$(filter-out $(MANAGERS_REQUIRED), $(MANAGERS_NOT_WANTED)) - # spell out all the LINK_FILE's, rather than using -lbsp, so # that $(LINK_FILES) can be a dependency diff --git a/make/compilers/gcc-portsw.cfg b/make/compilers/gcc-portsw.cfg index 89be269701..8d408a8722 100644 --- a/make/compilers/gcc-portsw.cfg +++ b/make/compilers/gcc-portsw.cfg @@ -228,18 +228,6 @@ ifneq ($(words $(C_FILES) $(CC_FILES) $(S_FILES)), 0) $(CHMOD) -f g+w $(DEPEND) endif -# List (possibly empty) of required managers -# We require: -# region -- used by lib/libcsupport for malloc() -# ext -- used by libc for libc reentrancy hooks - -MANAGERS_REQUIRED=region ext sem - -# Create a RTEMS executable based on MANAGERS which was set in -# app's Makefile - -MANAGERS_NOT_WANTED=$(filter-out $(MANAGERS), $(MANAGER_LIST)) -MANAGERS_NOT_WANTED:=$(filter-out $(MANAGERS_REQUIRED), $(MANAGERS_NOT_WANTED)) # spell out all the LINK_FILE's, rather than using -lbsp, so # that $(LINK_FILES) can be a dependency diff --git a/make/compilers/gcc-target-default.cfg b/make/compilers/gcc-target-default.cfg index c832a08143..15758388a1 100644 --- a/make/compilers/gcc-target-default.cfg +++ b/make/compilers/gcc-target-default.cfg @@ -158,20 +158,17 @@ MKLIB=echo library is complete: # # NOTE: we override COMPILE.c # -# NOTE: Remove -pipe if it causes you problems. Using it can decrease -# compile time. -# COMPILE.c=$(CC) $(CFLAGS) $(XCFLAGS) -c ${ARCH}/%.o: %.c - ${COMPILE.c} -pipe -o $@ $< + ${COMPILE.c} -o $@ $< ${ARCH}/%.o: %.cc - ${COMPILE.c} -pipe -o $@ $< + ${COMPILE.c} -o $@ $< ${ARCH}/%.o: %.S - ${COMPILE.c} -pipe -DASM -o $@ $< + ${COMPILE.c} -DASM -o $@ $< # strip out C++ style comments. ${ARCH}/%.o: %.s @@ -224,20 +221,6 @@ ifneq ($(words $(C_FILES) $(CC_FILES) $(S_FILES)), 0) $(MV) $(DEPEND).tmp $(DEPEND) endif - -# List (possibly empty) of required managers -# We require: -# region -- used by lib/libcsupport for malloc() -# ext -- used by libc for libc reentrancy hooks - -MANAGERS_REQUIRED=region ext sem - -# Create a RTEMS executable based on MANAGERS which was set in -# app's Makefile - -MANAGERS_NOT_WANTED=$(filter-out $(MANAGERS), $(MANAGER_LIST)) -MANAGERS_NOT_WANTED:=$(filter-out $(MANAGERS_REQUIRED), $(MANAGERS_NOT_WANTED)) - # spell out all the LINK_FILE's, rather than using -lbsp, so # that $(LINK_FILES) can be a dependency |