dnl===-----------------------------------------------------------------------===
dnl Initialize autoconf and define the package name, version number and
dnl email address for reporting bugs.
-AC_INIT([[llvm]],[[1.4]],[llvmbugs@cs.uiuc.edu])
+AC_INIT([[llvm]],[[1.7cvs]],[llvmbugs@cs.uiuc.edu])
dnl Provide a copyright substitution and ensure the copyright notice is included
dnl in the output of --version option of the generated configure script.
-AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2005 U University of Illinois at Urbana-Champaign."])
-AC_COPYRIGHT($LLVM_COPYRIGHT)
+AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2005 University of Illinois at Urbana-Champaign."])
+AC_COPYRIGHT([Copyright (c) 2003-2005 University of Illinois at Urbana-Champaign.])
dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we
dnl use some autoconf macros only available in 2.59.
"llvm-test") AC_CONFIG_SUBDIRS([projects/llvm-test]) ;;
"llvm-reopt") AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
"llvm-gcc") AC_CONFIG_SUBDIRS([projects/llvm-gcc]) ;;
- "Java") AC_CONFIG_SUBDIRS([projects/Java]) ;;
+ "llvm-java") AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
"llvm-tv") AC_CONFIG_SUBDIRS([projects/llvm-tv]) ;;
- "llvm-fefw") AC_CONFIG_SUBDIRS([projects/llvm-fefw]) ;;
- "poolalloc") AC_CONFIG_SUBDIRS([projects/poolalloc]) ;;
+ "llvm-poolalloc") AC_CONFIG_SUBDIRS([projects/llvm-poolalloc]) ;;
*)
AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
;;
dnl Determine the platform type and cache its value. This helps us configure
dnl the System library to the correct build platform.
-AC_CACHE_CHECK([support for generic build operating system],
- [llvm_cv_platform_type],
+AC_CACHE_CHECK([type of operating system we're on],
+ [llvm_cv_os_type],
[case $build in
- *-*-aix*) llvm_cv_platform_type="AIX" ;;
- *-*-cygwin*) llvm_cv_platform_type="Cygwin" ;;
- *-*-darwin*) llvm_cv_platform_type="Darwin" ;;
- *-*-freebsd*) llvm_cv_platform_type="FreeBSD" ;;
- *-*-interix*) llvm_cv_platform_type="Interix" ;;
- *-*-linux*) llvm_cv_platform_type="Linux" ;;
- *-*-solaris*) llvm_cv_platform_type="SunOS" ;;
- *-*-win32*) llvm_cv_platform_type="Win32" ;;
- *-*-mingw*) llvm_cv_platform_type="Win32" ;;
- *) llvm_cv_platform_type="Unknown" ;;
+ *-*-aix*)
+ llvm_cv_os_type="AIX"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-cygwin*)
+ llvm_cv_os_type="Cygwin"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-darwin*)
+ llvm_cv_os_type="Darwin"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-freebsd*)
+ llvm_cv_os_type="FreeBSD"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-hpux*)
+ llvm_cv_os_type="HP-UX"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-interix*)
+ llvm_cv_os_type="Interix"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-linux*)
+ llvm_cv_os_type="Linux"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-solaris*)
+ llvm_cv_os_type="SunOS"
+ llvm_cv_platform_type="Unix" ;;
+ *-*-win32*)
+ llvm_cv_os_type="Win32"
+ llvm_cv_platform_type="Win32" ;;
+ *-*-mingw*)
+ llvm_cv_os_type="MingW"
+ llvm_cv_platform_type="Win32" ;;
+ *)
+ llvm_cv_os_type="Unknown"
+ llvm_cv_platform_type="Unknown" ;;
esac])
dnl Make sure we aren't attempting to configure for an unknown system
-if test "$llvm_cv_platform_type" = "Unknown" ; then
- AC_MSG_ERROR([Operating system platform is unknown, configure can't continue])
+if test "$llvm_cv_os_type" = "Unknown" ; then
+ AC_MSG_ERROR([Operating system is unknown, configure can't continue])
fi
dnl Set the "OS" Makefile variable based on the platform type so the
dnl makefile can configure itself to specific build hosts
-AC_SUBST(OS,$llvm_cv_platform_type)
-
-dnl Make a link from lib/System/platform to lib/System/$llvm_cv_platform_type
-dnl This helps the #inclusion of the system specific include files
-dnl for the operating system abstraction library, lib/System.
-AC_CONFIG_LINKS(lib/System/platform:lib/System/$llvm_cv_platform_type)
-
-dnl If we are targetting a Sparc machine running Solaris, pretend that it is
-dnl V9, since that is all that we support at the moment, and autoconf will only
-dnl tell us we're a sparc.
-case $target in
- sparc*-*-solaris*) AC_SUBST(target,[[sparcv9-sun-solaris2.8]])
- ;;
+AC_SUBST(OS,$llvm_cv_os_type)
+
+dnl Set the "LLVM_ON_*" variables based on llvm_cvs_platform_type
+dnl This is used by lib/System to determine the basic kind of implementation
+dnl to use.
+case $llvm_cv_platform_type in
+ Unix)
+ AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
+ AC_SUBST(LLVM_ON_UNIX,[1])
+ AC_SUBST(LLVM_ON_WIN32,[0])
+ ;;
+ Win32)
+ AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
+ AC_SUBST(LLVM_ON_UNIX,[0])
+ AC_SUBST(LLVM_ON_WIN32,[1])
+ ;;
esac
dnl Determine what our target architecture is and configure accordingly.
dnl the OS.
AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
[case $target in
- i*86-*) llvm_cv_target_arch="x86" ;;
- sparc*-*) llvm_cv_target_arch="Sparc" ;;
- powerpc*-*) llvm_cv_target_arch="PowerPC" ;;
- *) llvm_cv_target_arch="Unknown" ;;
+ i?86-*) llvm_cv_target_arch="x86" ;;
+ amd64-* | x86_64-*) llvm_cv_target_arch="x86_64" ;;
+ sparc*-*) llvm_cv_target_arch="Sparc" ;;
+ powerpc*-*) llvm_cv_target_arch="PowerPC" ;;
+ alpha*-*) llvm_cv_target_arch="Alpha" ;;
+ ia64-*) llvm_cv_target_arch="IA64" ;;
+ *) llvm_cv_target_arch="Unknown" ;;
esac])
if test "$llvm_cv_target_arch" = "Unknown" ; then
x86) AC_SUBST(JIT,[[TARGET_HAS_JIT=1]]) ;;
Sparc) AC_SUBST(JIT,[[TARGET_HAS_JIT=1]]) ;;
PowerPC) AC_SUBST(JIT,[[TARGET_HAS_JIT=1]]) ;;
+ x86_64) AC_SUBST(JIT,[[]]) ;;
+ Alpha) AC_SUBST(JIT,[[TARGET_HAS_JIT=1]]) ;;
+ IA64) AC_SUBST(JIT,[[]]) ;;
*) AC_SUBST(JIT,[[]]) ;;
esac
fi
*) AC_MSG_ERROR([Invalid setting for --enable-doxygen. Use "yes" or "no"]) ;;
esac
+dnl Allow disablement of threads
+AC_ARG_ENABLE(threads,
+ AS_HELP_STRING([--enable-threads],
+ [Use threads if available (default is YES)]),,
+ enableval=yes)
+case "$enableval" in
+ yes) AC_SUBST(ENABLE_THREADS,[1]) ;;
+ no) AC_SUBST(ENABLE_THREADS,[0]) ;;
+ *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
+esac
+AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
+
+dnl Allow specific targets to be specified for building (or not)
+TARGETS_TO_BUILD=""
+AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-target],
+ [Build specific host targets: all,host-only,{target-name} (default=all)]),,
+ enableval=all)
+case "$enableval" in
+ all) TARGETS_TO_BUILD="X86 SparcV8 SparcV9 PowerPC Alpha IA64 Skeleton" ;;
+ host-only)
+ case "$llvm_cv_target_arch" in
+ x86) TARGETS_TO_BUILD="X86" ;;
+ x86_64) TARGETS_TO_BUILD="X86" ;;
+ Sparc) TARGETS_TO_BUILD="SparcV8 SparcV9" ;;
+ PowerPC) TARGETS_TO_BUILD="PowerPC" ;;
+ Alpha) TARGETS_TO_BUILD="Alpha" ;;
+ IA64) TARGETS_TO_BUILD="IA64" ;;
+ *) AC_MSG_ERROR([Can not set target to build]) ;;
+ esac
+ ;;
+ *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
+ case "$a_target" in
+ x86) TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
+ x86_64) TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
+ sparc) TARGETS_TO_BUILD="SparcV8 SparcV9 $TARGETS_TO_BUILD" ;;
+ powerpc) TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
+ alpha) TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
+ ia64) TARGETS_TO_BUILD="IA64 $TARGETS_TO_BUILD" ;;
+ skeleton)TARGETS_TO_BUILD="Skeleton $TARGETS_TO_BUILD";;
+ *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
+ esac
+ done
+ ;;
+esac
+TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD"
+AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
+
+dnl Allow a specific llvm-gcc/llvm-g++ pair to be used with this LLVM config.
+AC_ARG_WITH(llvmgccdir,
+ AS_HELP_STRING([--with-llvmgccdir],
+ [Specify location of llvm-gcc install dir (default searches PATH)]),,
+ withval=default)
+case "$withval" in
+ default) WITH_LLVMGCCDIR=default ;;
+ /*) WITH_LLVMGCCDIR=$withval ;;
+ *) AC_MSG_ERROR([Invalid path for --with-llvmgccdir. Provide full path]) ;;
+esac
+
+
dnl===-----------------------------------------------------------------------===
dnl===
dnl=== SECTION 4: Check for programs we need and that they are the right version
AC_PATH_PROG(DATE, [date], [date])
AC_PATH_PROG(FIND, [find], [find])
AC_PATH_PROG(GREP, [grep], [grep])
-AC_PATH_PROG(LLVMGCC, [llvm-gcc], [llvm-gcc])
-AC_PATH_PROG(LLVMGXX, [llvm-g++], [llvm-g++])
AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
AC_PATH_PROG(MV, [mv], [mv])
-AC_PATH_PROG(PAX, [pax], [pax])
AC_PROG_RANLIB
AC_PATH_PROG(RM, [rm], [rm])
AC_PATH_PROG(SED, [sed], [sed])
AC_PATH_PROG(TAR, [tar], [gtar])
+AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
+if test "$GRAPHVIZ" != "echo Graphviz" ; then
+ AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
+ AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ",
+ [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
+fi
+AC_PATH_PROG(GV, [gv], [echo gv])
+if test "$GV" != "echo gv" ; then
+ AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
+ AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV",
+ [Define to path to gv program if found or 'echo gv' otherwise])
+fi
dnl Find the install program
AC_PROG_INSTALL
AC_LIB_LTDL
AC_PROG_LIBTOOL
+if test "$lt_cv_dlopen_self" = "yes" ; then
+ AC_DEFINE([CAN_DLOPEN_SELF],[1],
+ [Define if dlopen(0) will open the symbols of the program])
+fi
+
dnl Check if we know how to tell etags we are using C++:
etags_version=`$ETAGS --version 2>&1`
case "$etags_version" in
esac
AC_SUBST(ETAGSFLAGS,$ETAGSFLAGS)
+if test "$WITH_LLVMGCCDIR" = "default" ; then
+ LLVMGCC="llvm-gcc${EXEEXT}"
+ LLVMGXX="llvm-g++${EXEEXT}"
+ AC_PATH_PROG(LLVMGCC, $LLVMGCC, [])
+ AC_PATH_PROG(LLVMGXX, $LLVMGXX, [])
+else
+ LLVMGCC="$WITH_LLVMGCCDIR/bin/llvm-gcc${EXEEXT}"
+ LLVMGXX="$WITH_LLVMGCCDIR/bin/llvm-g++${EXEEXT}"
+ AC_SUBST(LLVMGCC,$LLVMGCC)
+ AC_SUBST(LLVMGXX,$LLVMGXX)
+fi
+
AC_MSG_CHECKING([tool compatibility])
dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
dnl Verify that GCC is version 3.0 or higher
if test "$GCC" = "yes"
then
- gccmajor=`$CC --version | head -n 1 | awk '{print $NF;}' | cut -d. -f1`
+ gccmajor=`$CC --version | head -n 1 | sed 's/[[^0-9]]*\([[0-9.]]\).*/\1/'`
if test "$gccmajor" -lt "3"
then
AC_MSG_ERROR([gcc 3.x required, but you have a lower version])
dnl libelf is for sparc only; we can ignore it if we don't have it
AC_CHECK_LIB(elf, elf_begin)
+
dnl lt_dlopen may be required for plugin support.
AC_SEARCH_LIBS(lt_dlopen,ltdl,AC_DEFINE([HAVE_LT_DLOPEN],[1],
[Define if lt_dlopen() is available on this platform]),
dnl pthread locking functions are optional - but llvm will not be thread-safe
dnl without locks.
-AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
- AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
- [Have pthread_mutex_lock]))
+if test "$ENABLE_THREADS" -eq 1 ; then
+ AC_CHECK_LIB(pthread,pthread_mutex_init)
+ AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
+ AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
+ [Have pthread_mutex_lock]))
+fi
dnl===-----------------------------------------------------------------------===
dnl===
dnl===
dnl===-----------------------------------------------------------------------===
+dnl First, use autoconf provided macros for specific headers that we need
dnl We don't check for ancient stuff or things that are guaranteed to be there
dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
+dnl Generally we're looking for POSIX headers.
+AC_HEADER_DIRENT
+AC_HEADER_MMAP_ANONYMOUS
+AC_HEADER_STAT
AC_HEADER_STDC
-
-dnl However, we do need some system specific header files. Generally we're
-dnl looking for POSIX headers.
AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS([sys/time.h sys/mman.h sys/resource.h sys/time.h sys/types.h])
-AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h limits.h link.h])
-AC_CHECK_HEADERS([malloc.h unistd.h windows.h])
AC_HEADER_TIME
-AC_HEADER_MMAP_ANONYMOUS
-dnl Check for things that need to be included in public headers, and so
-dnl for which we may not have access to a HAVE_* preprocessor #define.
-dnl (primarily used in DataTypes.h)
-AC_CHECK_HEADERS([inttypes.h stdint.h])
+AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
+AC_CHECK_HEADERS([malloc.h signal.h stdint.h unistd.h utime.h windows.h])
+AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h sys/types.h])
+AC_CHECK_HEADERS([malloc/malloc.h])
+AC_CHECK_HEADERS([rw/stdex/hash_map.h rw/stdex/hash_set.h])
+if test "$ENABLE_THREADS" -eq 1 ; then
+ AC_CHECK_HEADERS(pthread.h)
+fi
dnl===-----------------------------------------------------------------------===
dnl===
dnl===
dnl===-----------------------------------------------------------------------===
-AC_CHECK_FUNCS([backtrace getcwd getpagesize getrusage gettimeofday isatty ])
-AC_CHECK_FUNCS([mkdtemp mkstemp mktemp ])
-AC_CHECK_FUNCS([realpath strdup strtoq strtoll sysconf ])
+AC_CHECK_FUNCS([backtrace getcwd getpagesize getrusage gettimeofday ])
+AC_CHECK_FUNCS([isatty mkdtemp mkstemp mktemp ])
+AC_CHECK_FUNCS([realpath sbrk setrlimit strdup strerror strerror_r ])
+AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
AC_C_PRINTF_A
AC_FUNC_ALLOCA
AC_FUNC_RAND48
AC_FUNC_ISINF
dnl Check for mmap and mprotect support. We need both to do the JIT and for
-dnl bytecode loading, etc.
+dnl bytecode loading, etc. We also need to know if /dev/zero is required to
+dnl be opened for allocating RWX memory.
AC_FUNC_MMAP
AC_FUNC_MMAP_FILE
+AC_NEED_DEV_ZERO_FOR_MMAP
AC_CHECK_FUNC(mprotect,,
AC_MSG_ERROR([Function mprotect() required but not found]))
if test "$ac_cv_func_mmap_fixed_mapped" = "no"
then
- AC_MSG_WARN([mmap() required but not found])
+ AC_MSG_WARN([mmap() of a fixed address required but not supported])
fi
if test "$ac_cv_func_mmap_file" = "no"
then
dnl===
dnl===-----------------------------------------------------------------------===
-dnl See if the llvmgcc executable can compile to LLVM assembly
+dnl See if the llvm-gcc executable can compile to LLVM assembly
AC_CACHE_CHECK([whether llvm-gcc is sane],[llvm_cv_llvmgcc_sanity],
[llvm_cv_llvmgcc_sanity="no"
if test -x "$LLVMGCC" ; then
rm conftest.c
fi])
-dnl Since we have a sane llvmgcc, identify it and its sub-tools
+dnl Since we have a sane llvm-gcc, identify it and its sub-tools
if test "$llvm_cv_llvmgcc_sanity" = "yes" ; then
llvmcc1path=`"$LLVMGCC" --print-prog-name=cc1`
AC_SUBST(LLVMCC1,$llvmcc1path)
dnl===-----------------------------------------------------------------------===
dnl Configure header files
-AC_CONFIG_HEADERS(include/llvm/Config/config.h)
-
+dnl WARNING: dnl If you add or remove any of the following config headers, then
+dnl you MUST also update Makefile.rules so that the variable FilesToConfig
+dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
+dnl files can be updated automatically when their *.in sources change.
+AC_CONFIG_HEADERS([include/llvm/Config/config.h])
AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
AC_CONFIG_HEADERS([include/llvm/ADT/hash_map])
AC_CONFIG_HEADERS([include/llvm/ADT/hash_set])
-AC_CONFIG_HEADERS([include/llvm/Support/ThreadSupport.h])
AC_CONFIG_HEADERS([include/llvm/ADT/iterator])
dnl Configure the makefile's configuration data
AC_CONFIG_FILES([Makefile.config])
-dnl Configure llvmc's configuration files
-AC_CONFIG_FILES([tools/llvmc/st tools/llvmc/cpp tools/llvmc/ll tools/llvmc/c])
-
dnl Configure doxygen's configuration file
AC_CONFIG_FILES([docs/doxygen.cfg])
dnl Do special configuration of Makefiles
+AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
AC_CONFIG_MAKEFILE(Makefile)
AC_CONFIG_MAKEFILE(Makefile.common)
AC_CONFIG_MAKEFILE(examples/Makefile)
dnl Warn loudly if llvm-gcc was not obviously working
if test "$llvm_cv_llvmgcc_sanity" = "no" ; then
- AC_MSG_WARN([***** llvmgcc/llvmg++ was not found, or does not appear to be ])
+ AC_MSG_WARN([***** llvm-gcc/llvm-g++ was not found, or does not appear to be ])
AC_MSG_WARN([***** working. Please make sure you have llvmgcc and llvmg++ in])
AC_MSG_WARN([***** your path before configuring LLVM. The runtime libraries])
AC_MSG_WARN([***** (llvm/runtime) will not be built but you should be able to])