1 dnl Initialize autoconf
2 AC_INIT([[[LLVM]]],[[[1.3]]],[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/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`
22 if test -f ${srcdir}/projects/${i}/configure
24 AC_CONFIG_SUBDIRS(projects/${i})
29 dnl Configure a header file
30 AC_CONFIG_HEADERS(include/Config/config.h)
31 AC_CONFIG_MAKEFILE(Makefile)
32 AC_CONFIG_MAKEFILE(Makefile.common)
33 AC_CONFIG_MAKEFILE(lib/Makefile)
34 AC_CONFIG_MAKEFILE(runtime/Makefile)
35 AC_CONFIG_MAKEFILE(test/Makefile)
36 AC_CONFIG_MAKEFILE(test/Makefile.tests)
37 AC_CONFIG_MAKEFILE(test/QMTest/llvm.py)
38 AC_CONFIG_MAKEFILE(test/QMTest/llvmdb.py)
39 AC_CONFIG_MAKEFILE(test/Programs/Makefile)
40 AC_CONFIG_MAKEFILE(test/Programs/Makefile.programs)
41 AC_CONFIG_MAKEFILE(test/Programs/Makefile.tests)
42 AC_CONFIG_MAKEFILE(test/Programs/TEST.aa.Makefile)
43 AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.report)
44 AC_CONFIG_MAKEFILE(test/Programs/TEST.aa.report)
45 AC_CONFIG_MAKEFILE(test/Programs/TEST.example.Makefile)
46 AC_CONFIG_MAKEFILE(test/Programs/TEST.nightly.Makefile)
47 AC_CONFIG_MAKEFILE(test/Programs/TEST.buildrepo.Makefile)
48 AC_CONFIG_MAKEFILE(test/Programs/TEST.jit.Makefile)
49 AC_CONFIG_MAKEFILE(test/Programs/TEST.nightly.report)
50 AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.Makefile)
51 AC_CONFIG_MAKEFILE(test/Programs/TEST.jit.report)
52 AC_CONFIG_MAKEFILE(test/Programs/TEST.typesafe.Makefile)
53 AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.gnuplot)
54 AC_CONFIG_MAKEFILE(test/Programs/TEST.vtl.Makefile)
55 AC_CONFIG_MAKEFILE(test/Programs/External/Makefile)
56 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile)
57 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec)
58 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec2000)
59 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec95)
60 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Makefile)
61 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Makefile.multisrc)
62 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/analyzer/test.in)
63 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/distray/Makefile)
64 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/distray/test.in)
65 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/fourinarow/Makefile)
66 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/fourinarow/test.in)
67 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/mason/Makefile)
68 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/mason/test.in)
69 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/neural/Makefile)
70 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/neural/test.in)
71 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pcompress2/Makefile)
72 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pcompress2/test.in)
73 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pifft/Makefile)
74 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in)
75 AC_CONFIG_MAKEFILE(test/Programs/SingleSource/Makefile)
76 AC_CONFIG_MAKEFILE(test/Programs/SingleSource/Makefile.singlesrc)
77 AC_CONFIG_MAKEFILE(test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile)
78 AC_CONFIG_MAKEFILE(tools/Makefile)
79 AC_CONFIG_MAKEFILE(utils/Makefile)
80 AC_CONFIG_MAKEFILE(projects/Makefile)
82 dnl Find the install program (needs to be done before canonical stuff)
85 dnl Check which host for which we're compiling. This will tell us which LLVM
86 dnl compiler will be used for compiling SSA into object code.
89 dnl Set the "OS" Makefile variable based on the system we are building on.
90 dnl We will use the build machine information to set some variables.
94 if test -d /home/vadve/lattner/local/x86/llvm-gcc
96 AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/x86/llvm-gcc/])
101 if test -d /home/vadve/lattner/local/sparc/llvm-gcc
103 AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/sparc/llvm-gcc/])
107 AC_SUBST(OS,[Cygwin])
110 AC_SUBST(OS,[Darwin])
115 *) AC_SUBST(OS,[Unknown])
119 dnl If we are targetting a Sparc machine running Solaris, pretend that it is
120 dnl V9, since that is all that we support at the moment, and autoconf will only
121 dnl tell us we're a sparc.
123 sparc*-*-solaris*) AC_SUBST(target,[[sparcv9-sun-solaris2.8]])
127 dnl Determine what our target architecture is and configure accordingly.
128 dnl This will allow Makefiles to make a distinction between the hardware and
131 i*86-*) AC_SUBST(ARCH,[x86])
133 sparc*-*) AC_SUBST(ARCH,[Sparc])
135 powerpc*-*) AC_SUBST(ARCH,[PowerPC])
137 *) AC_SUBST(ARCH,[Unknown])
141 dnl Check for compilation tools
146 dnl Ensure that compilation tools are GCC; we use GCC specific extensions
147 if test "$GCC" != "yes"
149 AC_MSG_ERROR([gcc required but not found])
151 if test "$GXX" != "yes"
153 AC_MSG_ERROR([g++ required but not found])
156 dnl Verify that GCC is version 3.0 or higher
157 gccmajor=`$CC --version | head -n 1 | awk '{print $NF;}' | cut -d. -f1`
158 if test "$gccmajor" -lt "3"
160 AC_MSG_ERROR([gcc 3.x required, but you have a lower version])
163 dnl Check for GNU Make. We use its extensions too, so don't build without it
165 if test -z "$_cv_gnu_make_command"
167 AC_MSG_ERROR([GNU Make required but not found])
170 dnl Checks for other tools
175 dnl Checks for tools we can get away with not having:
176 AC_PATH_PROG(DOT,[dot],[true dot])
177 AC_PATH_PROG(ETAGS,[etags],[true etags])
178 dnl Check if we know how to tell etags we are using C++:
179 etags_version=`$ETAGS --version 2>&1`
180 case "$etags_version" in
181 *[Ee]xuberant*) ETAGSFLAGS="--language-force=c++" ;;
182 *GNU\ Emacs*) ETAGSFLAGS="-l c++" ;;
185 AC_SUBST(ETAGSFLAGS,$ETAGSFLAGS)
186 AC_PATH_PROG(PYTHON,[python],[true python])
187 if test "$PYTHON" = "false"
189 AC_MSG_WARN([Python is required for the test suite, but it was not found])
191 AC_PATH_PROG(QMTEST,[qmtest],[true qmtest])
192 if test "$QMTEST" = "false"
194 AC_MSG_WARN([QMTest is required for the test suite, but it was not found])
197 dnl Verify that the version of python available is high enough for qmtest
198 pyversion=`$PYTHON -V 2>&1 | cut -d\ -f2`
199 pymajor=`echo $pyversion | cut -d. -f1`
200 pyminor=`echo $pyversion | cut -d. -f2`
202 if test "$pymajor" -ge "2"
204 if test "$pymajor" -eq "2"
206 if test "$pyminor" -lt "2"
208 AC_MSG_WARN([QMTest requires Python 2.2 or later])
212 AC_MSG_WARN([QMTest requires Python 2.2 or later])
215 dnl Verify that the source directory is valid
216 AC_CONFIG_SRCDIR(["Makefile.config.in"])
218 dnl Checks for libraries:
219 dnl libelf is for sparc only; we can ignore it if we don't have it
220 AC_CHECK_LIB(elf, elf_begin)
222 dnl dlopen() is required for plugin support.
223 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]))
225 dnl mallinfo is optional; the code can compile (minus features) without it
226 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],[Define if mallinfo() is available on this platform.]))
228 dnl pthread locking functions are optional - but llvm will not be thread-safe
230 AC_SEARCH_LIBS(pthread_mutex_lock,pthread,HAVE_PTHREAD_MUTEX_LOCK=1,HAVE_PTHREAD_MUTEX_LOCK=0)
231 AC_SUBST(HAVE_PTHREAD_MUTEX_LOCK)
233 dnl Checks for header files.
234 dnl We don't check for ancient stuff or things that are guaranteed to be there
235 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
239 dnl Checks for POSIX and other various system-specific header files
240 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)
242 dnl Check for things that need to be included in public headers, and so
243 dnl for which we may not have access to a HAVE_* preprocessor #define.
244 dnl (primarily used in DataTypes.h)
245 AC_CHECK_HEADER([sys/types.h],
246 [INCLUDE_SYS_TYPES_H='#include <sys/types.h>'],
247 [INCLUDE_SYS_TYPES_H=''])
248 AC_SUBST(INCLUDE_SYS_TYPES_H)
249 AC_CHECK_HEADER([inttypes.h],
250 [INCLUDE_INTTYPES_H='#include <inttypes.h>'],
251 [INCLUDE_INTTYPES_H=''])
252 AC_SUBST(INCLUDE_INTTYPES_H)
253 AC_CHECK_HEADER([stdint.h],
254 [INCLUDE_STDINT_H='#include <stdint.h>'],
255 [INCLUDE_STDINT_H=''])
256 AC_SUBST(INCLUDE_STDINT_H)
262 AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
263 AC_CHECK_TYPES([uint64_t],,AC_MSG_ERROR([Type uint64_t required but not found]))
267 dnl Check for various C features
270 dnl Check for the endianness of the target
271 AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
273 dnl Check for C++ extensions
276 AC_CXX_HAVE_STD_ITERATOR
277 AC_CXX_HAVE_BI_ITERATOR
278 AC_CXX_HAVE_FWD_ITERATOR
283 dnl Checks for library functions.
286 if test "$ac_cv_func_mmap_fixed_mapped" = "no"
288 AC_MSG_WARN([mmap() required but not found])
291 if test "$ac_cv_func_mmap_file" = "no"
293 AC_MSG_WARN([mmap() of files required but not found])
295 AC_HEADER_MMAP_ANONYMOUS
297 AC_CHECK_FUNCS(getcwd gettimeofday strdup strtoq strtoll backtrace isatty mkstemp getrusage)
298 AC_CHECK_FUNC(mprotect,,AC_MSG_ERROR([Function mprotect() required but not found]))
300 dnl Determine if the linker supports the -R option.
303 dnl --enable/--with command-line options:
304 dnl Check whether they want to do an optimized build:
305 AC_ARG_ENABLE(optimized,AC_HELP_STRING([--enable-optimized],[Compile with optimizations enabled (default is NO)]),,enableval=no)
306 if test ${enableval} = "no"
308 AC_SUBST(ENABLE_OPTIMIZED,[[]])
310 AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
313 AC_DEFUN(EXTERNAL_BENCHMARK,
314 [m4_define([allcapsname],translit($1,a-z,A-Z))
316 AC_HELP_STRING([--enable-$1=ARG],
317 [Use $1 as a benchmark (srcs in DIR)]),
318 checkresult=$enableval,
320 AC_MSG_CHECKING([for $1 benchmark sources])
321 case "$checkresult" in
324 if test -d "$defaultdir"
326 AC_SUBST(allcapsname()[_ROOT],[$defaultdir])
327 AC_SUBST([USE_]allcapsname(),[USE_]allcapsname()=1)
328 checkresult="yes, found in $defaultdir"
334 AC_SUBST(allcapsname()[_ROOT],[])
335 AC_SUBST([USE_]allcapsname(),[])
338 *) if test -d "$checkresult"
340 AC_SUBST(allcapsname()[_ROOT],"$checkresult")
341 AC_SUBST([USE_]allcapsname(),[USE_]allcapsname()=1)
342 checkresult="yes, in $checkresult"
344 AC_SUBST(allcapsname()[_ROOT],[])
345 AC_SUBST([USE_]allcapsname(),[])
346 checkresult="no, not found in $checkresult"
350 AC_MSG_RESULT($checkresult)
351 m4_undefine([allcapsname])
354 EXTERNAL_BENCHMARK(spec95,/home/vadve/shared/benchmarks/spec95/benchspec)
355 EXTERNAL_BENCHMARK(spec2000,/home/vadve/shared/benchmarks/speccpu2000/benchspec)
356 EXTERNAL_BENCHMARK(povray,/home/vadve/shared/benchmarks/povray31)
358 dnl Precompiled Bytecode Option
359 AC_ARG_ENABLE(precompiled_bytecode,AC_HELP_STRING([--enable-precompiled_bytecode],[Use pre-compiled bytecode (default is NO)]),,enableval=no)
360 if test ${enableval} = "no"
364 AC_SUBST(UPB,[[USE_PRECOMPILED_BYTECODE=1]])
368 AC_ARG_ENABLE(llc_diffs,AC_HELP_STRING([--enable-llc_diffs],[Enable LLC Diffs when testing (default is YES)]),,enableval=yes)
369 if test ${enableval} = "no"
371 AC_SUBST(DISABLE_LLC_DIFFS,[DISABLE_LLC_DIFFS:=1])
373 AC_SUBST(DISABLE_LLC_DIFFS,[[]])
377 AC_ARG_ENABLE(jit,AC_HELP_STRING([--enable-jit],[Enable Just In Time Compiling (default is YES)]),,enableval=default)
378 if test ${enableval} = "no"
384 AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
387 AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
395 dnl Find the LLVM GCC-based C/C++ front end
396 AC_ARG_WITH(llvmgccdir,AC_HELP_STRING([--with-llvmgccdir],[Location of LLVM GCC front-end]),AC_SUBST(LLVMGCCDIR,[$withval]))
397 AC_MSG_CHECKING([for llvm-gcc])
399 if test -d "$LLVMGCCDIR"
401 if test -x "$LLVMGCCDIR/bin/gcc"
403 LLVM_GCC_CHECK="$LLVMGCCDIR/bin/gcc"
407 AC_MSG_RESULT($LLVM_GCC_CHECK)
408 if test "$LLVM_GCC_CHECK" = "no"
412 AC_MSG_CHECKING([whether llvm-gcc is sane])
414 if test -x "$LLVM_GCC_CHECK"
416 cp /dev/null conftest.c
417 "$LLVM_GCC_CHECK" -S -o - conftest.c | grep implementation > /dev/null 2>&1
423 llvmcc1path=`"$LLVM_GCC_CHECK" --print-prog-name=cc1`
424 AC_SUBST(LLVMCC1,$llvmcc1path)
425 llvmcc1pluspath=`"$LLVM_GCC_CHECK" --print-prog-name=cc1plus`
426 AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
428 AC_MSG_RESULT($LLVM_GCC_SANE)
429 if test "$LLVM_GCC_SANE" = "no"
434 dnl Location of the bytecode repository
435 AC_ARG_WITH(bcrepos,AC_HELP_STRING([--with-bcrepos],[Location of Bytecode Repository]),AC_SUBST(BCR,[$withval]),AC_SUBST(BCR,[/home/vadve/lattner/LLVMPrograms]))
438 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]))
440 dnl Get libtool's idea of what the shared library suffix is.
441 dnl (This is a hack; it relies on undocumented behavior.)
442 AC_MSG_CHECKING([for shared library suffix])
443 eval "SHLIBEXT=$shrext"
444 AC_MSG_RESULT($SHLIBEXT)
445 dnl Propagate it to the Makefiles and config.h (for gccld & bugpoint).
446 AC_SUBST(SHLIBEXT,$SHLIBEXT)
447 AC_DEFINE_UNQUOTED(SHLIBEXT,"$SHLIBEXT",
448 [Extension that shared libraries have, e.g., ".so".])
450 dnl Create the output files
451 AC_OUTPUT(Makefile.config
452 include/Support/DataTypes.h
453 include/Support/ThreadSupport.h
454 include/Support/hash_map
455 include/Support/hash_set
456 include/Support/iterator)
458 dnl Warn loudly if llvm-gcc was not obviously working
459 if test $llvmgccwarn = yes
461 AC_MSG_WARN([***** llvm C/C++ front end was not found, or does not])
462 AC_MSG_WARN([***** appear to be working.])
463 AC_MSG_WARN([***** ])
464 AC_MSG_WARN([***** Please check configure's --with-llvmgccdir option.])
465 AC_MSG_WARN([***** Runtime libraries (in llvm/runtime) will not be built,])
466 AC_MSG_WARN([***** but you should be able to build the llvm tools.])