1 dnl Initialize autoconf
2 AC_INIT([[LLVM]],[[1.4]],[llvmbugs@cs.uiuc.edu])
4 dnl Place all of the extra autoconf files into the config subdirectory
5 AC_CONFIG_AUX_DIR([autoconf])
7 dnl Quit if the source directory has already been configured.
8 dnl NOTE: This relies upon undocumented autoconf behavior.
9 if test ${srcdir} != "."
11 if test -f ${srcdir}/include/llvm/Config/config.h
13 AC_MSG_ERROR([Already configured in ${srcdir}])
17 dnl Configure all of the projects present in our source tree.
18 for i in `ls ${srcdir}/projects`
20 if test -d ${srcdir}/projects/${i} ; then
23 "sample") AC_CONFIG_SUBDIRS([projects/sample]) ;;
24 "Stacker") AC_CONFIG_SUBDIRS([projects/Stacker]) ;;
25 "llvm-test") AC_CONFIG_SUBDIRS([projects/llvm-test]) ;;
26 "llvm-reopt") AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
27 "llvm-gcc") AC_CONFIG_SUBDIRS([projects/llvm-gcc]) ;;
28 "llvm-java") AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
29 "llvm-tv") AC_CONFIG_SUBDIRS([projects/llvm-tv]) ;;
30 "llvm-fefw") AC_CONFIG_SUBDIRS([projects/llvm-fefw]) ;;
31 *) AC_CONFIG_SUBDIRS(${i}) ;;
36 dnl Configure header files
37 AC_CONFIG_HEADERS(include/llvm/Config/config.h)
39 dnl Configure other output file
40 AC_CONFIG_FILES(Makefile.config
41 include/llvm/Support/DataTypes.h
42 include/llvm/Support/ThreadSupport.h
43 include/llvm/ADT/hash_map
44 include/llvm/ADT/hash_set
45 include/llvm/ADT/iterator)
47 dnl Do special configuration of Makefiles
48 AC_CONFIG_MAKEFILE(Makefile)
49 AC_CONFIG_MAKEFILE(Makefile.common)
50 AC_CONFIG_MAKEFILE(examples/Makefile)
51 AC_CONFIG_MAKEFILE(lib/Makefile)
52 AC_CONFIG_MAKEFILE(runtime/Makefile)
53 AC_CONFIG_MAKEFILE(test/Makefile)
54 AC_CONFIG_MAKEFILE(test/Makefile.tests)
55 AC_CONFIG_MAKEFILE(test/QMTest/llvm.py)
56 AC_CONFIG_MAKEFILE(test/QMTest/llvmdb.py)
57 AC_CONFIG_MAKEFILE(tools/Makefile)
58 AC_CONFIG_MAKEFILE(utils/Makefile)
59 AC_CONFIG_MAKEFILE(projects/Makefile)
61 dnl Find the install program (needs to be done before canonical stuff)
64 dnl Check which host for which we're compiling. This will tell us which LLVM
65 dnl compiler will be used for compiling SSA into object code.
68 dnl Set the "OS" Makefile variable based on the system we are building on.
69 dnl We will use the build machine information to set some variables.
71 AC_MSG_CHECKING([support for generic build operating system])
79 platform_type="Cygwin"
83 platform_type="Darwin"
87 platform_type="FreeBSD"
91 platform_type="Interix"
96 if test -d /home/vadve/lattner/local/x86/llvm-gcc
98 AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/x86/llvm-gcc/])
103 platform_type="SunOS"
104 if test -d /home/vadve/lattner/local/sparc/llvm-gcc
106 AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/sparc/llvm-gcc/])
111 platform_type="Win32"
114 AC_SUBST(OS,[Unknown])
115 platform_type="Unknown"
119 dnl Make sure we aren't attempting to configure for an unknown system
120 if test "$platform_type" = "Unknown" ; then
121 AC_MSG_ERROR([Platform is unknown, configure can't continue])
124 dnl Make a link from lib/System/platform to lib/System/$platform_type
125 dnl This helps the #inclusion of the system specific include files
126 dnl for the operating system abstraction library
127 AC_CONFIG_LINKS(lib/System/platform:lib/System/$platform_type)
129 AC_MSG_RESULT($platform_type)
131 AC_MSG_CHECKING(target architecture)
132 dnl If we are targetting a Sparc machine running Solaris, pretend that it is
133 dnl V9, since that is all that we support at the moment, and autoconf will only
134 dnl tell us we're a sparc.
136 sparc*-*-solaris*) AC_SUBST(target,[[sparcv9-sun-solaris2.8]])
140 dnl Determine what our target architecture is and configure accordingly.
141 dnl This will allow Makefiles to make a distinction between the hardware and
150 AC_SUBST(ARCH,[Sparc])
154 AC_SUBST(ARCH,[PowerPC])
158 AC_SUBST(ARCH,[Unknown])
164 dnl Check for compilation tools
169 dnl Ensure that compilation tools are GCC; we use GCC specific extensions
170 if test "$GCC" != "yes"
172 AC_MSG_ERROR([gcc required but not found])
174 if test "$GXX" != "yes"
176 AC_MSG_ERROR([g++ required but not found])
179 dnl Verify that GCC is version 3.0 or higher
180 gccmajor=`$CC --version | head -n 1 | awk '{print $NF;}' | cut -d. -f1`
181 if test "$gccmajor" -lt "3"
183 AC_MSG_ERROR([gcc 3.x required, but you have a lower version])
186 dnl Check for GNU Make. We use its extensions too, so don't build without it
188 if test -z "$_cv_gnu_make_command"
190 AC_MSG_ERROR([GNU Make required but not found])
193 dnl Checks for other tools
198 dnl Checks for tools we can get away with not having:
199 AC_PATH_PROG(DOT,[dot],[true dot])
200 AC_PATH_PROG(ETAGS,[etags],[true etags])
201 dnl Check if we know how to tell etags we are using C++:
202 etags_version=`$ETAGS --version 2>&1`
203 case "$etags_version" in
204 *[Ee]xuberant*) ETAGSFLAGS="--language-force=c++" ;;
205 *GNU\ Emacs*) ETAGSFLAGS="-l c++" ;;
208 AC_SUBST(ETAGSFLAGS,$ETAGSFLAGS)
209 AC_PATH_PROG(PYTHON,[python],[true python])
210 if test "$PYTHON" = "false"
212 AC_MSG_WARN([Python is required for the test suite, but it was not found])
214 AC_PATH_PROG(QMTEST,[qmtest],[true qmtest])
215 if test "$QMTEST" = "false"
217 AC_MSG_WARN([QMTest is required for the test suite, but it was not found])
220 dnl Verify that the version of python available is high enough for qmtest
221 pyversion=`$PYTHON -V 2>&1 | cut -d\ -f2`
222 pymajor=`echo $pyversion | cut -d. -f1`
223 pyminor=`echo $pyversion | cut -d. -f2`
225 if test "$pymajor" -ge "2"
227 if test "$pymajor" -eq "2"
229 if test "$pyminor" -lt "2"
231 AC_MSG_WARN([QMTest requires Python 2.2 or later])
235 AC_MSG_WARN([QMTest requires Python 2.2 or later])
238 dnl Verify that the source directory is valid
239 AC_CONFIG_SRCDIR(["Makefile.config.in"])
241 dnl Checks for libraries:
242 dnl libelf is for sparc only; we can ignore it if we don't have it
243 AC_CHECK_LIB(elf, elf_begin)
245 dnl dlopen() is required for plugin support.
246 AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],[Define if dlopen() is available on this platform.]),AC_MSG_WARN([dlopen() not found - disabling plugin support]))
248 dnl mallinfo is optional; the code can compile (minus features) without it
249 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],[Define if mallinfo() is available on this platform.]))
251 dnl pthread locking functions are optional - but llvm will not be thread-safe
253 AC_SEARCH_LIBS(pthread_mutex_lock,pthread,HAVE_PTHREAD_MUTEX_LOCK=1,HAVE_PTHREAD_MUTEX_LOCK=0)
254 AC_SUBST(HAVE_PTHREAD_MUTEX_LOCK)
256 dnl Checks for header files.
257 dnl We don't check for ancient stuff or things that are guaranteed to be there
258 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
262 dnl Checks for POSIX and other various system-specific header files
263 AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h unistd.h malloc.h sys/mman.h sys/resource.h dlfcn.h link.h execinfo.h windows.h)
265 dnl Check for things that need to be included in public headers, and so
266 dnl for which we may not have access to a HAVE_* preprocessor #define.
267 dnl (primarily used in DataTypes.h)
268 AC_CHECK_HEADER([sys/types.h],
269 [INCLUDE_SYS_TYPES_H='#include <sys/types.h>'],
270 [INCLUDE_SYS_TYPES_H=''])
271 AC_SUBST(INCLUDE_SYS_TYPES_H)
272 AC_CHECK_HEADER([inttypes.h],
273 [INCLUDE_INTTYPES_H='#include <inttypes.h>'],
274 [INCLUDE_INTTYPES_H=''])
275 AC_SUBST(INCLUDE_INTTYPES_H)
276 AC_CHECK_HEADER([stdint.h],
277 [INCLUDE_STDINT_H='#include <stdint.h>'],
278 [INCLUDE_STDINT_H=''])
279 AC_SUBST(INCLUDE_STDINT_H)
285 AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
286 AC_CHECK_TYPES([uint64_t],,
287 AC_CHECK_TYPES([u_int64_t],,
288 AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
292 dnl Check for various C features
295 dnl Check for the endianness of the target
296 AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
298 dnl Check for C++ extensions
301 AC_CXX_HAVE_STD_ITERATOR
302 AC_CXX_HAVE_BI_ITERATOR
303 AC_CXX_HAVE_FWD_ITERATOR
308 dnl Checks for library functions.
311 if test "$ac_cv_func_mmap_fixed_mapped" = "no"
313 AC_MSG_WARN([mmap() required but not found])
316 if test "$ac_cv_func_mmap_file" = "no"
318 AC_MSG_WARN([mmap() of files required but not found])
320 AC_HEADER_MMAP_ANONYMOUS
322 AC_CHECK_FUNCS(getcwd gettimeofday strdup strtoq strtoll backtrace isatty mkstemp getrusage)
323 AC_CHECK_FUNC(mprotect,,AC_MSG_ERROR([Function mprotect() required but not found]))
325 dnl Determine if the linker supports the -R option.
328 dnl --enable/--with command-line options:
329 dnl Check whether they want to do an optimized build:
330 AC_ARG_ENABLE(optimized,AC_HELP_STRING([--enable-optimized],[Compile with optimizations enabled (default is NO)]),,enableval=no)
331 if test ${enableval} = "no"
333 AC_SUBST(ENABLE_OPTIMIZED,[[]])
335 AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
339 AC_ARG_ENABLE(jit,AC_HELP_STRING([--enable-jit],[Enable Just In Time Compiling (default is YES)]),,enableval=default)
340 if test ${enableval} = "no"
346 AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
349 AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
357 dnl Find the LLVM GCC-based C/C++ front end
358 AC_ARG_WITH(llvmgccdir,AC_HELP_STRING([--with-llvmgccdir],[Location of LLVM GCC front-end]),AC_SUBST(LLVMGCCDIR,[$withval]))
359 AC_MSG_CHECKING([for llvm-gcc])
361 if test -d "$LLVMGCCDIR"
363 if test -x "$LLVMGCCDIR/bin/gcc"
365 LLVM_GCC_CHECK="$LLVMGCCDIR/bin/gcc"
369 AC_MSG_RESULT($LLVM_GCC_CHECK)
370 if test "$LLVM_GCC_CHECK" = "no"
374 AC_MSG_CHECKING([whether llvm-gcc is sane])
376 if test -x "$LLVM_GCC_CHECK"
378 cp /dev/null conftest.c
379 "$LLVM_GCC_CHECK" -S -o - conftest.c | grep implementation > /dev/null 2>&1
385 llvmcc1path=`"$LLVM_GCC_CHECK" --print-prog-name=cc1`
386 AC_SUBST(LLVMCC1,$llvmcc1path)
387 llvmcc1pluspath=`"$LLVM_GCC_CHECK" --print-prog-name=cc1plus`
388 AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
390 AC_MSG_RESULT($LLVM_GCC_SANE)
391 if test "$LLVM_GCC_SANE" = "no"
397 AC_ARG_WITH(papi,AC_HELP_STRING([--with-papi],[Location of PAPI]),AC_SUBST(PAPIDIR,[$withval]),AC_SUBST(PAPIDIR,[/home/vadve/shared/Sparc/papi-2.3.4.1]))
399 dnl Get libtool's idea of what the shared library suffix is.
400 dnl (This is a hack; it relies on undocumented behavior.)
401 AC_MSG_CHECKING([for shared library suffix])
402 eval "SHLIBEXT=$shrext"
403 AC_MSG_RESULT($SHLIBEXT)
404 dnl Propagate it to the Makefiles and config.h (for gccld & bugpoint).
405 AC_SUBST(SHLIBEXT,$SHLIBEXT)
406 AC_DEFINE_UNQUOTED(SHLIBEXT,"$SHLIBEXT",
407 [Extension that shared libraries have, e.g., ".so".])
409 # Translate the various configuration directories and other basic
410 # information into substitutions that will end up in config.h.in so
411 # that these configured values can be hard-wired into a program.
412 eval LLVM_PREFIX="${prefix}";
413 eval LLVM_BINDIR="${prefix}/bin";
414 eval LLVM_LIBDIR="${prefix}/lib";
415 eval LLVM_DATADIR="${prefix}/data";
416 eval LLVM_DOCSDIR="${prefix}/docs";
417 eval LLVM_ETCDIR="${prefix}/etc";
418 eval LLVM_INCLUDEDIR="${prefix}/include";
419 eval LLVM_INFODIR="${prefix}/info";
420 eval LLVM_MANDIR="${prefix}/man";
421 LLVM_CONFIGTIME=`date`
422 AC_SUBST(LLVM_PREFIX)
423 AC_SUBST(LLVM_BINDIR)
424 AC_SUBST(LLVM_LIBDIR)
425 AC_SUBST(LLVM_DATADIR)
426 AC_SUBST(LLVM_DOCSDIR)
427 AC_SUBST(LLVM_ETCDIR)
428 AC_SUBST(LLVM_INCLUDEDIR)
429 AC_SUBST(LLVM_INFODIR)
430 AC_SUBST(LLVM_MANDIR)
431 AC_SUBST(LLVM_CONFIGTIME)
432 AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX", [Installation prefix directory])
433 AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR", [Installation directory for binary executables])
434 AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR", [Installation directory for libraries])
435 AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR", [Installation directory for data files])
436 AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DOCSDIR", [Installation directory for documentation])
437 AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR", [Installation directory for config files])
438 AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR", [Installation directory for include files])
439 AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR", [Installation directory for .info files])
440 AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR", [Installation directory for man pages])
441 AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME", [Time at which LLVM was configured])
443 dnl Create the output files
446 dnl Warn loudly if llvm-gcc was not obviously working
447 if test $llvmgccwarn = yes
449 AC_MSG_WARN([***** llvm C/C++ front end was not found, or does not])
450 AC_MSG_WARN([***** appear to be working.])
451 AC_MSG_WARN([***** ])
452 AC_MSG_WARN([***** Please check configure's --with-llvmgccdir option.])
453 AC_MSG_WARN([***** Runtime libraries (in llvm/runtime) will not be built,])
454 AC_MSG_WARN([***** but you should be able to build the llvm tools.])