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 header files
30 AC_CONFIG_HEADERS(include/Config/config.h)
32 dnl Configure other output file
33 AC_CONFIG_FILES(Makefile.config
34 include/Support/DataTypes.h
35 include/Support/ThreadSupport.h
36 include/Support/hash_map
37 include/Support/hash_set
38 include/Support/iterator)
40 dnl Do special configuration of Makefiles
41 AC_CONFIG_MAKEFILE(Makefile)
42 AC_CONFIG_MAKEFILE(Makefile.common)
43 AC_CONFIG_MAKEFILE(lib/Makefile)
44 AC_CONFIG_MAKEFILE(runtime/Makefile)
45 AC_CONFIG_MAKEFILE(test/Makefile)
46 AC_CONFIG_MAKEFILE(test/Makefile.tests)
47 AC_CONFIG_MAKEFILE(test/QMTest/llvm.py)
48 AC_CONFIG_MAKEFILE(test/QMTest/llvmdb.py)
49 AC_CONFIG_MAKEFILE(test/Programs/Makefile)
50 AC_CONFIG_MAKEFILE(test/Programs/Makefile.programs)
51 AC_CONFIG_MAKEFILE(test/Programs/Makefile.tests)
52 AC_CONFIG_MAKEFILE(test/Programs/TEST.aa.Makefile)
53 AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.report)
54 AC_CONFIG_MAKEFILE(test/Programs/TEST.aa.report)
55 AC_CONFIG_MAKEFILE(test/Programs/TEST.example.Makefile)
56 AC_CONFIG_MAKEFILE(test/Programs/TEST.nightly.Makefile)
57 AC_CONFIG_MAKEFILE(test/Programs/TEST.buildrepo.Makefile)
58 AC_CONFIG_MAKEFILE(test/Programs/TEST.jit.Makefile)
59 AC_CONFIG_MAKEFILE(test/Programs/TEST.nightly.report)
60 AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.Makefile)
61 AC_CONFIG_MAKEFILE(test/Programs/TEST.jit.report)
62 AC_CONFIG_MAKEFILE(test/Programs/TEST.typesafe.Makefile)
63 AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.gnuplot)
64 AC_CONFIG_MAKEFILE(test/Programs/TEST.vtl.Makefile)
65 AC_CONFIG_MAKEFILE(test/Programs/External/Makefile)
66 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile)
67 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec)
68 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec2000)
69 AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec95)
70 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Makefile)
71 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Makefile.multisrc)
72 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/analyzer/test.in)
73 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/distray/Makefile)
74 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/distray/test.in)
75 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/fourinarow/Makefile)
76 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/fourinarow/test.in)
77 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/mason/Makefile)
78 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/mason/test.in)
79 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/neural/Makefile)
80 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/neural/test.in)
81 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pcompress2/Makefile)
82 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pcompress2/test.in)
83 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pifft/Makefile)
84 AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in)
85 AC_CONFIG_MAKEFILE(test/Programs/SingleSource/Makefile)
86 AC_CONFIG_MAKEFILE(test/Programs/SingleSource/Makefile.singlesrc)
87 AC_CONFIG_MAKEFILE(test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile)
88 AC_CONFIG_MAKEFILE(tools/Makefile)
89 AC_CONFIG_MAKEFILE(utils/Makefile)
90 AC_CONFIG_MAKEFILE(projects/Makefile)
92 dnl Find the install program (needs to be done before canonical stuff)
95 dnl Check which host for which we're compiling. This will tell us which LLVM
96 dnl compiler will be used for compiling SSA into object code.
99 dnl Set the "OS" Makefile variable based on the system we are building on.
100 dnl We will use the build machine information to set some variables.
104 if test -d /home/vadve/lattner/local/x86/llvm-gcc
106 AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/x86/llvm-gcc/])
111 if test -d /home/vadve/lattner/local/sparc/llvm-gcc
113 AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/sparc/llvm-gcc/])
117 AC_SUBST(OS,[Cygwin])
120 AC_SUBST(OS,[Darwin])
125 *) AC_SUBST(OS,[Unknown])
129 dnl If we are targetting a Sparc machine running Solaris, pretend that it is
130 dnl V9, since that is all that we support at the moment, and autoconf will only
131 dnl tell us we're a sparc.
133 sparc*-*-solaris*) AC_SUBST(target,[[sparcv9-sun-solaris2.8]])
137 dnl Determine what our target architecture is and configure accordingly.
138 dnl This will allow Makefiles to make a distinction between the hardware and
141 i*86-*) AC_SUBST(ARCH,[x86])
143 sparc*-*) AC_SUBST(ARCH,[Sparc])
145 powerpc*-*) AC_SUBST(ARCH,[PowerPC])
147 *) AC_SUBST(ARCH,[Unknown])
151 dnl Check for compilation tools
156 dnl Ensure that compilation tools are GCC; we use GCC specific extensions
157 if test "$GCC" != "yes"
159 AC_MSG_ERROR([gcc required but not found])
161 if test "$GXX" != "yes"
163 AC_MSG_ERROR([g++ required but not found])
166 dnl Verify that GCC is version 3.0 or higher
167 gccmajor=`$CC --version | head -n 1 | awk '{print $NF;}' | cut -d. -f1`
168 if test "$gccmajor" -lt "3"
170 AC_MSG_ERROR([gcc 3.x required, but you have a lower version])
173 dnl Check for GNU Make. We use its extensions too, so don't build without it
175 if test -z "$_cv_gnu_make_command"
177 AC_MSG_ERROR([GNU Make required but not found])
180 dnl Checks for other tools
185 dnl Checks for tools we can get away with not having:
186 AC_PATH_PROG(DOT,[dot],[true dot])
187 AC_PATH_PROG(ETAGS,[etags],[true etags])
188 dnl Check if we know how to tell etags we are using C++:
189 etags_version=`$ETAGS --version 2>&1`
190 case "$etags_version" in
191 *[Ee]xuberant*) ETAGSFLAGS="--language-force=c++" ;;
192 *GNU\ Emacs*) ETAGSFLAGS="-l c++" ;;
195 AC_SUBST(ETAGSFLAGS,$ETAGSFLAGS)
196 AC_PATH_PROG(PYTHON,[python],[true python])
197 if test "$PYTHON" = "false"
199 AC_MSG_WARN([Python is required for the test suite, but it was not found])
201 AC_PATH_PROG(QMTEST,[qmtest],[true qmtest])
202 if test "$QMTEST" = "false"
204 AC_MSG_WARN([QMTest is required for the test suite, but it was not found])
207 dnl Verify that the version of python available is high enough for qmtest
208 pyversion=`$PYTHON -V 2>&1 | cut -d\ -f2`
209 pymajor=`echo $pyversion | cut -d. -f1`
210 pyminor=`echo $pyversion | cut -d. -f2`
212 if test "$pymajor" -ge "2"
214 if test "$pymajor" -eq "2"
216 if test "$pyminor" -lt "2"
218 AC_MSG_WARN([QMTest requires Python 2.2 or later])
222 AC_MSG_WARN([QMTest requires Python 2.2 or later])
225 dnl Verify that the source directory is valid
226 AC_CONFIG_SRCDIR(["Makefile.config.in"])
228 dnl Checks for libraries:
229 dnl libelf is for sparc only; we can ignore it if we don't have it
230 AC_CHECK_LIB(elf, elf_begin)
232 dnl dlopen() is required for plugin support.
233 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]))
235 dnl mallinfo is optional; the code can compile (minus features) without it
236 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],[Define if mallinfo() is available on this platform.]))
238 dnl pthread locking functions are optional - but llvm will not be thread-safe
240 AC_SEARCH_LIBS(pthread_mutex_lock,pthread,HAVE_PTHREAD_MUTEX_LOCK=1,HAVE_PTHREAD_MUTEX_LOCK=0)
241 AC_SUBST(HAVE_PTHREAD_MUTEX_LOCK)
243 dnl Checks for header files.
244 dnl We don't check for ancient stuff or things that are guaranteed to be there
245 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
249 dnl Checks for POSIX and other various system-specific header files
250 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)
252 dnl Check for things that need to be included in public headers, and so
253 dnl for which we may not have access to a HAVE_* preprocessor #define.
254 dnl (primarily used in DataTypes.h)
255 AC_CHECK_HEADER([sys/types.h],
256 [INCLUDE_SYS_TYPES_H='#include <sys/types.h>'],
257 [INCLUDE_SYS_TYPES_H=''])
258 AC_SUBST(INCLUDE_SYS_TYPES_H)
259 AC_CHECK_HEADER([inttypes.h],
260 [INCLUDE_INTTYPES_H='#include <inttypes.h>'],
261 [INCLUDE_INTTYPES_H=''])
262 AC_SUBST(INCLUDE_INTTYPES_H)
263 AC_CHECK_HEADER([stdint.h],
264 [INCLUDE_STDINT_H='#include <stdint.h>'],
265 [INCLUDE_STDINT_H=''])
266 AC_SUBST(INCLUDE_STDINT_H)
272 AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
273 AC_CHECK_TYPES([uint64_t],,AC_MSG_ERROR([Type uint64_t required but not found]))
277 dnl Check for various C features
280 dnl Check for the endianness of the target
281 AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
283 dnl Check for C++ extensions
286 AC_CXX_HAVE_STD_ITERATOR
287 AC_CXX_HAVE_BI_ITERATOR
288 AC_CXX_HAVE_FWD_ITERATOR
293 dnl Checks for library functions.
296 if test "$ac_cv_func_mmap_fixed_mapped" = "no"
298 AC_MSG_WARN([mmap() required but not found])
301 if test "$ac_cv_func_mmap_file" = "no"
303 AC_MSG_WARN([mmap() of files required but not found])
305 AC_HEADER_MMAP_ANONYMOUS
307 AC_CHECK_FUNCS(getcwd gettimeofday strdup strtoq strtoll backtrace isatty mkstemp getrusage)
308 AC_CHECK_FUNC(mprotect,,AC_MSG_ERROR([Function mprotect() required but not found]))
310 dnl Determine if the linker supports the -R option.
313 dnl --enable/--with command-line options:
314 dnl Check whether they want to do an optimized build:
315 AC_ARG_ENABLE(optimized,AC_HELP_STRING([--enable-optimized],[Compile with optimizations enabled (default is NO)]),,enableval=no)
316 if test ${enableval} = "no"
318 AC_SUBST(ENABLE_OPTIMIZED,[[]])
320 AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
323 AC_DEFUN(EXTERNAL_BENCHMARK,
324 [m4_define([allcapsname],translit($1,a-z,A-Z))
326 AC_HELP_STRING([--enable-$1=ARG],
327 [Use $1 as a benchmark (srcs in DIR)]),
328 checkresult=$enableval,
330 AC_MSG_CHECKING([for $1 benchmark sources])
331 case "$checkresult" in
334 if test -d "$defaultdir"
336 AC_SUBST(allcapsname()[_ROOT],[$defaultdir])
337 AC_SUBST([USE_]allcapsname(),[USE_]allcapsname()=1)
338 checkresult="yes, found in $defaultdir"
344 AC_SUBST(allcapsname()[_ROOT],[])
345 AC_SUBST([USE_]allcapsname(),[])
348 *) if test -d "$checkresult"
350 AC_SUBST(allcapsname()[_ROOT],"$checkresult")
351 AC_SUBST([USE_]allcapsname(),[USE_]allcapsname()=1)
352 checkresult="yes, in $checkresult"
354 AC_SUBST(allcapsname()[_ROOT],[])
355 AC_SUBST([USE_]allcapsname(),[])
356 checkresult="no, not found in $checkresult"
360 AC_MSG_RESULT($checkresult)
361 m4_undefine([allcapsname])
364 EXTERNAL_BENCHMARK(spec95,/home/vadve/shared/benchmarks/spec95/benchspec)
365 EXTERNAL_BENCHMARK(spec2000,/home/vadve/shared/benchmarks/speccpu2000/benchspec)
366 EXTERNAL_BENCHMARK(povray,/home/vadve/shared/benchmarks/povray31)
368 dnl Precompiled Bytecode Option
369 AC_ARG_ENABLE(precompiled_bytecode,AC_HELP_STRING([--enable-precompiled_bytecode],[Use pre-compiled bytecode (default is NO)]),,enableval=no)
370 if test ${enableval} = "no"
374 AC_SUBST(UPB,[[USE_PRECOMPILED_BYTECODE=1]])
378 AC_ARG_ENABLE(llc_diffs,AC_HELP_STRING([--enable-llc_diffs],[Enable LLC Diffs when testing (default is YES)]),,enableval=yes)
379 if test ${enableval} = "no"
381 AC_SUBST(DISABLE_LLC_DIFFS,[DISABLE_LLC_DIFFS:=1])
383 AC_SUBST(DISABLE_LLC_DIFFS,[[]])
387 AC_ARG_ENABLE(jit,AC_HELP_STRING([--enable-jit],[Enable Just In Time Compiling (default is YES)]),,enableval=default)
388 if test ${enableval} = "no"
394 AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
397 AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
405 dnl Find the LLVM GCC-based C/C++ front end
406 AC_ARG_WITH(llvmgccdir,AC_HELP_STRING([--with-llvmgccdir],[Location of LLVM GCC front-end]),AC_SUBST(LLVMGCCDIR,[$withval]))
407 AC_MSG_CHECKING([for llvm-gcc])
409 if test -d "$LLVMGCCDIR"
411 if test -x "$LLVMGCCDIR/bin/gcc"
413 LLVM_GCC_CHECK="$LLVMGCCDIR/bin/gcc"
417 AC_MSG_RESULT($LLVM_GCC_CHECK)
418 if test "$LLVM_GCC_CHECK" = "no"
422 AC_MSG_CHECKING([whether llvm-gcc is sane])
424 if test -x "$LLVM_GCC_CHECK"
426 cp /dev/null conftest.c
427 "$LLVM_GCC_CHECK" -S -o - conftest.c | grep implementation > /dev/null 2>&1
433 llvmcc1path=`"$LLVM_GCC_CHECK" --print-prog-name=cc1`
434 AC_SUBST(LLVMCC1,$llvmcc1path)
435 llvmcc1pluspath=`"$LLVM_GCC_CHECK" --print-prog-name=cc1plus`
436 AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
438 AC_MSG_RESULT($LLVM_GCC_SANE)
439 if test "$LLVM_GCC_SANE" = "no"
444 dnl Location of the bytecode repository
445 AC_ARG_WITH(bcrepos,AC_HELP_STRING([--with-bcrepos],[Location of Bytecode Repository]),AC_SUBST(BCR,[$withval]),AC_SUBST(BCR,[/home/vadve/lattner/LLVMPrograms]))
448 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]))
450 dnl Get libtool's idea of what the shared library suffix is.
451 dnl (This is a hack; it relies on undocumented behavior.)
452 AC_MSG_CHECKING([for shared library suffix])
453 eval "SHLIBEXT=$shrext"
454 AC_MSG_RESULT($SHLIBEXT)
455 dnl Propagate it to the Makefiles and config.h (for gccld & bugpoint).
456 AC_SUBST(SHLIBEXT,$SHLIBEXT)
457 AC_DEFINE_UNQUOTED(SHLIBEXT,"$SHLIBEXT",
458 [Extension that shared libraries have, e.g., ".so".])
460 dnl Create the output files
463 dnl Warn loudly if llvm-gcc was not obviously working
464 if test $llvmgccwarn = yes
466 AC_MSG_WARN([***** llvm C/C++ front end was not found, or does not])
467 AC_MSG_WARN([***** appear to be working.])
468 AC_MSG_WARN([***** ])
469 AC_MSG_WARN([***** Please check configure's --with-llvmgccdir option.])
470 AC_MSG_WARN([***** Runtime libraries (in llvm/runtime) will not be built,])
471 AC_MSG_WARN([***** but you should be able to build the llvm tools.])