89a4eef4f731f64968b06bfbc00dc286fc412d1f
[oota-llvm.git] / autoconf / configure.ac
1 dnl Initialize autoconf
2 AC_INIT([[[LLVM]]],[[[1.3]]],[llvmbugs@cs.uiuc.edu])
3
4 dnl Place all of the extra autoconf files into the config subdirectory
5 AC_CONFIG_AUX_DIR([autoconf])
6
7 dnl Quit if the source directory has already been configured.
8 dnl NOTE: This relies upon undocumented autoconf behavior.
9 if test ${srcdir} != "."
10 then
11         if test -f ${srcdir}/include/Config/config.h
12         then
13                 AC_MSG_ERROR([Already configured in ${srcdir}])
14         fi
15 fi
16
17 dnl Configure all of the projects present in our source tree.
18 for i in `ls ${srcdir}/projects`
19 do
20   if test ${i} != "CVS"
21   then
22     if test -f ${srcdir}/projects/${i}/configure
23     then
24       AC_CONFIG_SUBDIRS(projects/${i})
25     fi
26   fi
27 done
28
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)
81
82 dnl Find the install program (needs to be done before canonical stuff)
83 AC_PROG_INSTALL
84
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.
87 AC_CANONICAL_TARGET
88
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.
91 case $build in
92         *-*-linux*)
93              AC_SUBST(OS,[Linux])
94                          if test -d /home/vadve/lattner/local/x86/llvm-gcc
95                          then
96                            AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/x86/llvm-gcc/])
97                          fi
98                  ;;
99         *-*-solaris*)
100              AC_SUBST(OS,[SunOS])
101                          if test -d /home/vadve/lattner/local/sparc/llvm-gcc
102                          then
103                    AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/sparc/llvm-gcc/])
104                          fi
105                  ;;
106         *-*-cygwin*)
107              AC_SUBST(OS,[Cygwin])
108                  ;;
109         *-*-darwin*)
110              AC_SUBST(OS,[Darwin])
111                  ;;
112         *-*-aix*)
113              AC_SUBST(OS,[AIX])
114                  ;;
115         *)       AC_SUBST(OS,[Unknown])
116                  ;;
117 esac
118
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.
122 case $target in
123         sparc*-*-solaris*)  AC_SUBST(target,[[sparcv9-sun-solaris2.8]])
124                             ;;
125 esac
126
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
129 dnl the OS.
130 case $target in
131         i*86-*)           AC_SUBST(ARCH,[x86])
132                           ;;
133         sparc*-*)         AC_SUBST(ARCH,[Sparc])
134                           ;;
135         powerpc*-*)       AC_SUBST(ARCH,[PowerPC])
136                           ;;
137         *)                AC_SUBST(ARCH,[Unknown])
138                           ;;
139 esac
140
141 dnl Check for compilation tools
142 AC_PROG_CXX
143 AC_PROG_CC(gcc)
144 AC_PROG_CPP
145
146 dnl Ensure that compilation tools are GCC; we use GCC specific extensions
147 if test "$GCC" != "yes"
148 then
149         AC_MSG_ERROR([gcc required but not found])
150 fi
151 if test "$GXX" != "yes"
152 then
153         AC_MSG_ERROR([g++ required but not found])
154 fi
155
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"
159 then
160         AC_MSG_ERROR([gcc 3.x required, but you have a lower version])
161 fi
162
163 dnl Check for GNU Make.  We use its extensions too, so don't build without it
164 CHECK_GNU_MAKE
165 if test -z "$_cv_gnu_make_command"
166 then
167         AC_MSG_ERROR([GNU Make required but not found])
168 fi
169
170 dnl Checks for other tools
171 AC_PROG_FLEX
172 AC_PROG_BISON
173 AC_PROG_LIBTOOL
174
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++" ;;
183         *) ETAGSFLAGS="" ;;
184 esac
185 AC_SUBST(ETAGSFLAGS,$ETAGSFLAGS)
186 AC_PATH_PROG(PYTHON,[python],[true python])
187 if test "$PYTHON" = "false"
188 then
189         AC_MSG_WARN([Python is required for the test suite, but it was not found])
190 fi
191 AC_PATH_PROG(QMTEST,[qmtest],[true qmtest])
192 if test "$QMTEST" = "false"
193 then
194         AC_MSG_WARN([QMTest is required for the test suite, but it was not found])
195 fi
196
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`
201
202 if test "$pymajor" -ge "2"
203 then
204         if test "$pymajor" -eq "2"
205         then
206                 if test "$pyminor" -lt "2"
207                 then
208                         AC_MSG_WARN([QMTest requires Python 2.2 or later])
209                 fi
210         fi
211 else
212         AC_MSG_WARN([QMTest requires Python 2.2 or later])
213 fi
214
215 dnl Verify that the source directory is valid
216 AC_CONFIG_SRCDIR(["Makefile.config.in"])
217
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)
221
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]))
224
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.]))
227
228 dnl pthread locking functions are optional - but llvm will not be thread-safe
229 dnl without locks.
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)
232
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.
236 AC_HEADER_STDC
237 AC_HEADER_SYS_WAIT
238
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)
241
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)
257
258
259 dnl Check for types
260 AC_TYPE_PID_T
261 AC_TYPE_SIZE_T
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]))
264 AC_HEADER_TIME
265 AC_STRUCT_TM
266
267 dnl Check for various C features
268 AC_C_PRINTF_A
269
270 dnl Check for the endianness of the target
271 AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
272
273 dnl Check for C++ extensions
274 AC_CXX_HAVE_HASH_MAP
275 AC_CXX_HAVE_HASH_SET
276 AC_CXX_HAVE_STD_ITERATOR
277 AC_CXX_HAVE_BI_ITERATOR
278 AC_CXX_HAVE_FWD_ITERATOR
279
280 AC_FUNC_ISNAN
281 AC_FUNC_ISINF
282
283 dnl Checks for library functions.
284 AC_FUNC_ALLOCA
285 AC_FUNC_MMAP
286 if test "$ac_cv_func_mmap_fixed_mapped" = "no"
287 then
288         AC_MSG_WARN([mmap() required but not found])
289 fi
290 AC_FUNC_MMAP_FILE
291 if test "$ac_cv_func_mmap_file" = "no"
292 then
293         AC_MSG_WARN([mmap() of files required but not found])
294 fi
295 AC_HEADER_MMAP_ANONYMOUS
296 AC_TYPE_SIGNAL
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]))
299
300 dnl Determine if the linker supports the -R option.
301 AC_LINK_USE_R
302
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"
307 then
308         AC_SUBST(ENABLE_OPTIMIZED,[[]])
309 else
310         AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
311 fi
312
313 AC_DEFUN(EXTERNAL_BENCHMARK,
314 [m4_define([allcapsname],translit($1,a-z,A-Z))
315  AC_ARG_ENABLE($1,
316  AC_HELP_STRING([--enable-$1=ARG], 
317                 [Use $1 as a benchmark (srcs in DIR)]),
318  checkresult=$enableval,
319  checkresult=auto)
320 AC_MSG_CHECKING([for $1 benchmark sources])
321 case "$checkresult" in
322 auto|yes)
323     defaultdir=$2
324         if test -d "$defaultdir"
325         then
326                 AC_SUBST(allcapsname()[_ROOT],[$defaultdir])
327                 AC_SUBST([USE_]allcapsname(),[USE_]allcapsname()=1)
328         checkresult="yes, found in $defaultdir"
329     else
330         checkresult=no
331     fi
332     ;;
333 no)
334     AC_SUBST(allcapsname()[_ROOT],[])
335     AC_SUBST([USE_]allcapsname(),[])
336     checkresult=no
337     ;;
338 *)  if test -d "$checkresult"
339     then
340         AC_SUBST(allcapsname()[_ROOT],"$checkresult")
341         AC_SUBST([USE_]allcapsname(),[USE_]allcapsname()=1)
342         checkresult="yes, in $checkresult"
343     else
344         AC_SUBST(allcapsname()[_ROOT],[])
345         AC_SUBST([USE_]allcapsname(),[])
346         checkresult="no, not found in $checkresult"
347     fi
348     ;;
349 esac
350 AC_MSG_RESULT($checkresult)
351 m4_undefine([allcapsname])
352 ])
353
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)
357
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"
361 then
362         AC_SUBST(UPB,[[]])
363 else
364         AC_SUBST(UPB,[[USE_PRECOMPILED_BYTECODE=1]])
365 fi
366
367 dnl LLC Diff Option
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"
370 then
371         AC_SUBST(DISABLE_LLC_DIFFS,[DISABLE_LLC_DIFFS:=1])
372 else
373         AC_SUBST(DISABLE_LLC_DIFFS,[[]])
374 fi
375
376 dnl JIT Option
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"
379 then
380         AC_SUBST(JIT,[[]])
381 else
382         case $target in
383                 *i*86*)
384                         AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
385                         ;;
386                 *sparc*)
387                         AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
388                         ;;
389                 *)
390                         AC_SUBST(JIT,[[]])
391                         ;;
392         esac
393 fi
394
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])
398 LLVM_GCC_CHECK=no
399 if test -d "$LLVMGCCDIR"
400 then
401         if test -x "$LLVMGCCDIR/bin/gcc"
402         then
403                 LLVM_GCC_CHECK="$LLVMGCCDIR/bin/gcc"
404         fi
405 fi
406 llvmgccwarn=no
407 AC_MSG_RESULT($LLVM_GCC_CHECK)
408 if test "$LLVM_GCC_CHECK" = "no"
409 then
410     llvmgccwarn=yes
411 fi
412 AC_MSG_CHECKING([whether llvm-gcc is sane])
413 LLVM_GCC_SANE=no
414 if test -x "$LLVM_GCC_CHECK"
415 then
416         cp /dev/null conftest.c
417     "$LLVM_GCC_CHECK" -S -o - conftest.c | grep implementation > /dev/null 2>&1
418         if test $? -eq 0
419         then
420                 LLVM_GCC_SANE=yes
421         fi
422         rm conftest.c
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)
427 fi
428 AC_MSG_RESULT($LLVM_GCC_SANE)
429 if test "$LLVM_GCC_SANE" = "no"
430 then
431         llvmgccwarn=yes
432 fi
433
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]))
436
437 dnl Location of PAPI
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]))
439
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".])
449
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)
457
458 dnl Warn loudly if llvm-gcc was not obviously working
459 if test $llvmgccwarn = yes
460 then
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.])
467 fi
468