summaryrefslogblamecommitdiffstats
path: root/configure.in
blob: 48c9091c8db34da4a96253bea898caa72ae3102d (plain) (tree)
1
2
3
4
5
6
7
                                                                  


         


               





                                                                       


                                                                          

                               


                                                                              
                      
                                                              


                                 
                                                                     
                                
 
                     
                                                            


                            
                                                                    

                           
                              
                                                                                  
                        

                             

                                                                              
 

                                                                                
                        
                                 
                                 
                                                                   
                                
 
                      
                                                                        



                                                               
                            





                                                                           

                                           


                           



                   
            









                                                               

                         
 
                     

                        










                                                         

                             



                                        





                                                               




                                                                   
 

                   
                   
                                 
                   
                          

                          
                       
                                
                             

                              
                                                        
                       
                              
                        
          
                 
                         
                              
          
                  
                      

                                                         
                       
                              
                          
          

                                  


          





                                                                  
                          


                                                           
                                                                  



                  












































                                                                          
                                  
                                                        
                                      
                                     
 
                                            
                                        
                                                         
  
 
                                     
                                                       










                                                              





                                                                         


                                         
 
                                    



                                  
                                                       
                                                     

                                                             
 











                                                                   
                                         








                                                                       
      

  
                                              
                                                  
 



                                                   



                           
                   
 










                                                                       



                                                                   
 



                                                           
 

                                                                  
                 
                      






                                                                 

 

                                                   
                                      








                                               

                                                       
                      


                                                                 




                                                                   
                                                                        






                                                            



                                                                
 
 
                        

                        
                            
                             
                        
                          
                             

                          


                        

                                                         
                          

                                         
 

                                            
                                             

           


                           
          

                   


                                 
                                       


                                       
                                         

                                





                               


                         





                                    
          
                                
                        



                                      

                                                                       
    
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" ) ] )

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
  hppa1.1-*-rtems*)
	target_cpu=hppa1_1
	;;
  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_HAS_POSIX_API=no
        RTEMS_HOST=Linux
	;;
  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_HAS_POSIX_API=no
        RTEMS_HOST=Solaris
	;;
  *) 
	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

dnl NOTE: host_os is automatically set by autoconf

if [[ "${program_prefix}" = "NONE" ]] ; then
  if [[ "${target}" = "${host}" ]] ; then
    program_prefix=
  else
    program_prefix=${target}-
  fi
fi

dnl check target cc
CC="$program_prefix"gcc
RTEMS_PROG_CC

dnl check if the compiler supports --specs if gcc28 is requested
if test "$RTEMS_USE_GCC272" != "yes" ; then
  RTEMS_GCC_SPECS
  if test "$rtems_cv_gcc_specs" = "no"; then
    AC_MSG_WARN([*** disabling --enable-gcc28])
     RTEMS_USE_GCC272=yes
  fi
fi

dnl check if the target compiler may use --pipe
RTEMS_GCC_PIPE

dnl check for g++
if test "$RTEMS_HAS_CPLUSPLUS" = "yes"; then
  CXX="$program_prefix"g++
  RTEMS_PROG_CXX
  AC_PATH_PROG(CXX_FOR_TARGET,"$program_prefix"g++,no)
else
  CXX_FOR_TARGET="no"
fi

RTEMS_CANONICALIZE_TOOLS
test "$rtems_cv_gcc_pipe" = "yes" && CC_FOR_TARGET="$CC_FOR_TARGET --pipe"

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

    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?
    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
  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([Are the test suites 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" = "yes"; then
     RTEMS_CHECK_MAKEFILE(c/src/tests/psxtests)
   fi
fi 

# If the HWAPI is enabled, the find the HWAPI Makefiles
AC_MSG_CHECKING([Is the HWAPI 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_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(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