configure.ac revision 1abf2cb59b8d63415780a03329307c0997b2670c
1dnl === configure.ac --------------------------------------------------------===
2dnl                     The LLVM Compiler Infrastructure
3dnl
4dnl This file is distributed under the University of Illinois Open Source
5dnl License. See LICENSE.TXT for details.
6dnl
7dnl===-----------------------------------------------------------------------===
8dnl This is the LLVM configuration script. It is processed by the autoconf
9dnl program to produce a script named configure. This script contains the
10dnl configuration checks that LLVM needs in order to support multiple platforms.
11dnl This file is composed of 10 sections per the recommended organization of
12dnl autoconf input defined in the autoconf documentation. As this file evolves,
13dnl please keep the various types of checks within their sections. The sections
14dnl are as follows:
15dnl
16dnl SECTION 1: Initialization & Setup
17dnl SECTION 2: Architecture, target, and host checks
18dnl SECTION 3: Command line arguments for the configure script.
19dnl SECTION 4: Check for programs we need and that they are the right version
20dnl SECTION 5: Check for libraries
21dnl SECTION 6: Check for header files
22dnl SECTION 7: Check for types and structures
23dnl SECTION 8: Check for specific functions needed
24dnl SECTION 9: Additional checks, variables, etc.
25dnl SECTION 10: Specify the output files and generate it
26dnl
27dnl===-----------------------------------------------------------------------===
28dnl===
29dnl=== SECTION 1: Initialization & Setup
30dnl===
31dnl===-----------------------------------------------------------------------===
32dnl Initialize autoconf and define the package name, version number and
33dnl email address for reporting bugs.
34AC_INIT([[llvm]],[[3.0svn]],[llvmbugs@cs.uiuc.edu])
35
36dnl Provide a copyright substitution and ensure the copyright notice is included
37dnl in the output of --version option of the generated configure script.
38AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign."])
39AC_COPYRIGHT([Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.])
40
41dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we
42dnl use some autoconf macros only available in 2.59.
43AC_PREREQ(2.59)
44
45dnl Verify that the source directory is valid. This makes sure that we are
46dnl configuring LLVM and not some other package (it validates --srcdir argument)
47AC_CONFIG_SRCDIR([lib/VMCore/Module.cpp])
48
49dnl Place all of the extra autoconf files into the config subdirectory. Tell
50dnl various tools where the m4 autoconf macros are.
51AC_CONFIG_AUX_DIR([autoconf])
52
53dnl Quit if the source directory has already been configured.
54dnl NOTE: This relies upon undocumented autoconf behavior.
55if test ${srcdir} != "." ; then
56  if test -f ${srcdir}/include/llvm/Config/config.h ; then
57    AC_MSG_ERROR([Already configured in ${srcdir}])
58  fi
59fi
60
61dnl Configure all of the projects present in our source tree. While we could
62dnl just AC_CONFIG_SUBDIRS on the set of directories in projects that have a
63dnl configure script, that usage of the AC_CONFIG_SUBDIRS macro is deprecated.
64dnl Instead we match on the known projects.
65
66dnl
67dnl One tricky part of doing this is that some projects depend upon other
68dnl projects.  For example, several projects rely upon the LLVM test suite.
69dnl We want to configure those projects first so that their object trees are
70dnl created before running the configure scripts of projects that depend upon
71dnl them.
72dnl
73
74dnl Several projects use llvm-gcc, so configure that first
75if test -d ${srcdir}/projects/llvm-gcc ; then
76  AC_CONFIG_SUBDIRS([projects/llvm-gcc])
77fi
78
79dnl Several projects use the LLVM test suite, so configure it next.
80if test -d ${srcdir}/projects/test-suite ; then
81  AC_CONFIG_SUBDIRS([projects/test-suite])
82fi
83
84dnl llvm-test is the old name of the test-suite, kept here for backwards
85dnl compatibility
86if test -d ${srcdir}/projects/llvm-test ; then
87  AC_CONFIG_SUBDIRS([projects/llvm-test])
88fi
89
90dnl Some projects use poolalloc; configure that next
91if test -d ${srcdir}/projects/poolalloc ; then
92  AC_CONFIG_SUBDIRS([projects/poolalloc])
93fi
94
95if test -d ${srcdir}/projects/llvm-poolalloc ; then
96  AC_CONFIG_SUBDIRS([projects/llvm-poolalloc])
97fi
98
99dnl Check for all other projects
100for i in `ls ${srcdir}/projects`
101do
102  if test -d ${srcdir}/projects/${i} ; then
103    case ${i} in
104      sample)       AC_CONFIG_SUBDIRS([projects/sample])    ;;
105      privbracket)  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
106      llvm-stacker) AC_CONFIG_SUBDIRS([projects/llvm-stacker]) ;;
107      llvm-reopt)   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
108      llvm-java)    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
109      llvm-tv)      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
110      safecode)     AC_CONFIG_SUBDIRS([projects/safecode]) ;;
111      llvm-kernel)  AC_CONFIG_SUBDIRS([projects/llvm-kernel]) ;;
112      llvm-gcc)       ;;
113      test-suite)     ;;
114      llvm-test)      ;;
115      poolalloc)      ;;
116      llvm-poolalloc) ;;
117      *)
118        AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
119        ;;
120    esac
121  fi
122done
123
124dnl Disable the build of polly, even if it is checked out into tools/polly.
125AC_ARG_ENABLE(polly,
126              AS_HELP_STRING([--enable-polly],
127                             [Use polly if available (default is YES)]),,
128                             enableval=default)
129case "$enableval" in
130  yes) AC_SUBST(ENABLE_POLLY,[1]) ;;
131  no)  AC_SUBST(ENABLE_POLLY,[0]) ;;
132  default) AC_SUBST(ENABLE_POLLY,[1]) ;;
133  *) AC_MSG_ERROR([Invalid setting for --enable-polly. Use "yes" or "no"]) ;;
134esac
135
136
137dnl Check if polly is checked out into tools/polly and configure it if
138dnl available.
139if (test -d ${srcdir}/tools/polly) && (test $ENABLE_POLLY -eq 1) ; then
140  AC_SUBST(LLVM_HAS_POLLY,1)
141  AC_CONFIG_SUBDIRS([tools/polly])
142fi
143
144dnl===-----------------------------------------------------------------------===
145dnl===
146dnl=== SECTION 2: Architecture, target, and host checks
147dnl===
148dnl===-----------------------------------------------------------------------===
149
150dnl Check the target for which we're compiling and the host that will do the
151dnl compilations. This will tell us which LLVM compiler will be used for
152dnl compiling SSA into object code. This needs to be done early because
153dnl following tests depend on it.
154AC_CANONICAL_TARGET
155
156dnl Determine the platform type and cache its value. This helps us configure
157dnl the System library to the correct build platform.
158AC_CACHE_CHECK([type of operating system we're going to host on],
159               [llvm_cv_os_type],
160[case $host in
161  *-*-aix*)
162    llvm_cv_link_all_option="-Wl,--whole-archive"
163    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
164    llvm_cv_os_type="AIX"
165    llvm_cv_platform_type="Unix" ;;
166  *-*-irix*)
167    llvm_cv_link_all_option="-Wl,--whole-archive"
168    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
169    llvm_cv_os_type="IRIX"
170    llvm_cv_platform_type="Unix" ;;
171  *-*-cygwin*)
172    llvm_cv_link_all_option="-Wl,--whole-archive"
173    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
174    llvm_cv_os_type="Cygwin"
175    llvm_cv_platform_type="Unix" ;;
176  *-*-darwin*)
177    llvm_cv_link_all_option="-Wl,-all_load"
178    llvm_cv_no_link_all_option="-Wl,-noall_load"
179    llvm_cv_os_type="Darwin"
180    llvm_cv_platform_type="Unix" ;;
181  *-*-minix*)
182    llvm_cv_link_all_option="-Wl,-all_load"
183    llvm_cv_no_link_all_option="-Wl,-noall_load"
184    llvm_cv_os_type="Minix"
185    llvm_cv_platform_type="Unix" ;;
186  *-*-freebsd*)
187    llvm_cv_link_all_option="-Wl,--whole-archive"
188    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
189    llvm_cv_os_type="FreeBSD"
190    llvm_cv_platform_type="Unix" ;;
191  *-*-openbsd*)
192    llvm_cv_link_all_option="-Wl,--whole-archive"
193    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
194    llvm_cv_os_type="OpenBSD"
195    llvm_cv_platform_type="Unix" ;;
196  *-*-netbsd*)
197    llvm_cv_link_all_option="-Wl,--whole-archive"
198    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
199    llvm_cv_os_type="NetBSD"
200    llvm_cv_platform_type="Unix" ;;
201  *-*-dragonfly*)
202    llvm_cv_link_all_option="-Wl,--whole-archive"
203    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
204    llvm_cv_os_type="DragonFly"
205    llvm_cv_platform_type="Unix" ;;
206  *-*-hpux*)
207    llvm_cv_link_all_option="-Wl,--whole-archive"
208    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
209    llvm_cv_os_type="HP-UX"
210    llvm_cv_platform_type="Unix" ;;
211  *-*-interix*)
212    llvm_cv_link_all_option="-Wl,--whole-archive"
213    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
214    llvm_cv_os_type="Interix"
215    llvm_cv_platform_type="Unix" ;;
216  *-*-linux*)
217    llvm_cv_link_all_option="-Wl,--whole-archive"
218    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
219    llvm_cv_os_type="Linux"
220    llvm_cv_platform_type="Unix" ;;
221  *-*-solaris*)
222    llvm_cv_link_all_option="-Wl,-z,allextract"
223    llvm_cv_no_link_all_option="-Wl,-z,defaultextract"
224    llvm_cv_os_type="SunOS"
225    llvm_cv_platform_type="Unix" ;;
226  *-*-auroraux*)
227    llvm_cv_link_all_option="-Wl,-z,allextract"
228    llvm_cv_link_all_option="-Wl,-z,defaultextract"
229    llvm_cv_os_type="AuroraUX"
230    llvm_cv_platform_type="Unix" ;;
231  *-*-win32*)
232    llvm_cv_link_all_option="-Wl,--whole-archive"
233    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
234    llvm_cv_os_type="Win32"
235    llvm_cv_platform_type="Win32" ;;
236  *-*-mingw*)
237    llvm_cv_link_all_option="-Wl,--whole-archive"
238    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
239    llvm_cv_os_type="MingW"
240    llvm_cv_platform_type="Win32" ;;
241  *-*-haiku*)
242    llvm_cv_link_all_option="-Wl,--whole-archive"
243    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
244    llvm_cv_os_type="Haiku"
245    llvm_cv_platform_type="Unix" ;;
246  *-unknown-eabi*)
247    llvm_cv_link_all_option="-Wl,--whole-archive"
248    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
249    llvm_cv_os_type="Freestanding"
250    llvm_cv_platform_type="Unix" ;;
251  *-unknown-elf*)
252    llvm_cv_link_all_option="-Wl,--whole-archive"
253    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
254    llvm_cv_os_type="Freestanding"
255    llvm_cv_platform_type="Unix" ;;
256  *)
257    llvm_cv_link_all_option=""
258    llvm_cv_no_link_all_option=""
259    llvm_cv_os_type="Unknown"
260    llvm_cv_platform_type="Unknown" ;;
261esac])
262
263AC_CACHE_CHECK([type of operating system we're going to target],
264               [llvm_cv_target_os_type],
265[case $target in
266  *-*-aix*)
267    llvm_cv_target_os_type="AIX" ;;
268  *-*-irix*)
269    llvm_cv_target_os_type="IRIX" ;;
270  *-*-cygwin*)
271    llvm_cv_target_os_type="Cygwin" ;;
272  *-*-darwin*)
273    llvm_cv_target_os_type="Darwin" ;;
274  *-*-minix*)
275    llvm_cv_target_os_type="Minix" ;;
276  *-*-freebsd*)
277    llvm_cv_target_os_type="FreeBSD" ;;
278  *-*-openbsd*)
279    llvm_cv_target_os_type="OpenBSD" ;;
280  *-*-netbsd*)
281    llvm_cv_target_os_type="NetBSD" ;;
282  *-*-dragonfly*)
283    llvm_cv_target_os_type="DragonFly" ;;
284  *-*-hpux*)
285    llvm_cv_target_os_type="HP-UX" ;;
286  *-*-interix*)
287    llvm_cv_target_os_type="Interix" ;;
288  *-*-linux*)
289    llvm_cv_target_os_type="Linux" ;;
290  *-*-solaris*)
291    llvm_cv_target_os_type="SunOS" ;;
292  *-*-auroraux*)
293    llvm_cv_target_os_type="AuroraUX" ;;
294  *-*-win32*)
295    llvm_cv_target_os_type="Win32" ;;
296  *-*-mingw*)
297    llvm_cv_target_os_type="MingW" ;;
298  *-*-haiku*)
299    llvm_cv_target_os_type="Haiku" ;;
300  *-*-rtems*)
301    llvm_cv_target_os_type="RTEMS" ;;
302  *-unknown-eabi*)
303    llvm_cv_target_os_type="Freestanding" ;;
304  *)
305    llvm_cv_target_os_type="Unknown" ;;
306esac])
307
308dnl Make sure we aren't attempting to configure for an unknown system
309if test "$llvm_cv_os_type" = "Unknown" ; then
310  AC_MSG_ERROR([Operating system is unknown, configure can't continue])
311fi
312
313dnl Set the "OS" Makefile variable based on the platform type so the
314dnl makefile can configure itself to specific build hosts
315AC_SUBST(OS,$llvm_cv_os_type)
316AC_SUBST(HOST_OS,$llvm_cv_os_type)
317AC_SUBST(TARGET_OS,$llvm_cv_target_os_type)
318
319dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
320AC_SUBST(LINKALL,$llvm_cv_link_all_option)
321AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
322
323dnl Set the "LLVM_ON_*" variables based on llvm_cv_platform_type
324dnl This is used by lib/Support to determine the basic kind of implementation
325dnl to use.
326case $llvm_cv_platform_type in
327  Unix)
328    AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
329    AC_SUBST(LLVM_ON_UNIX,[1])
330    AC_SUBST(LLVM_ON_WIN32,[0])
331    ;;
332  Win32)
333    AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
334    AC_SUBST(LLVM_ON_UNIX,[0])
335    AC_SUBST(LLVM_ON_WIN32,[1])
336    ;;
337esac
338
339dnl Determine what our target architecture is and configure accordingly.
340dnl This will allow Makefiles to make a distinction between the hardware and
341dnl the OS.
342AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
343[case $target in
344  i?86-*)                 llvm_cv_target_arch="x86" ;;
345  amd64-* | x86_64-*)     llvm_cv_target_arch="x86_64" ;;
346  sparc*-*)               llvm_cv_target_arch="Sparc" ;;
347  powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
348  alpha*-*)               llvm_cv_target_arch="Alpha" ;;
349  arm*-*)                 llvm_cv_target_arch="ARM" ;;
350  mips-*)                 llvm_cv_target_arch="Mips" ;;
351  xcore-*)                llvm_cv_target_arch="XCore" ;;
352  msp430-*)               llvm_cv_target_arch="MSP430" ;;
353  s390x-*)                llvm_cv_target_arch="SystemZ" ;;
354  bfin-*)                 llvm_cv_target_arch="Blackfin" ;;
355  mblaze-*)               llvm_cv_target_arch="MBlaze" ;;
356  ptx-*)                  llvm_cv_target_arch="PTX" ;;
357  *)                      llvm_cv_target_arch="Unknown" ;;
358esac])
359
360if test "$llvm_cv_target_arch" = "Unknown" ; then
361  AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
362fi
363
364# Determine the LLVM native architecture for the target
365case "$llvm_cv_target_arch" in
366    x86)     LLVM_NATIVE_ARCH="X86" ;;
367    x86_64)  LLVM_NATIVE_ARCH="X86" ;;
368    *)       LLVM_NATIVE_ARCH="$llvm_cv_target_arch" ;;
369esac
370
371dnl Define a substitution, ARCH, for the target architecture
372AC_SUBST(ARCH,$llvm_cv_target_arch)
373
374dnl Check for the endianness of the target
375AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
376
377dnl Check for build platform executable suffix if we're crosscompiling
378if test "$cross_compiling" = yes; then
379  AC_SUBST(LLVM_CROSS_COMPILING, [1])
380  AC_BUILD_EXEEXT
381  ac_build_prefix=${build_alias}-
382  AC_CHECK_PROG(BUILD_CXX, ${ac_build_prefix}g++, ${ac_build_prefix}g++)
383  if test -z "$BUILD_CXX"; then
384     AC_CHECK_PROG(BUILD_CXX, g++, g++)
385     if test -z "$BUILD_CXX"; then
386       AC_CHECK_PROG(BUILD_CXX, c++, c++, , , /usr/ucb/c++)
387     fi
388  fi
389else
390  AC_SUBST(LLVM_CROSS_COMPILING, [0])
391fi
392
393dnl Check to see if there's a .svn or .git directory indicating that this
394dnl build is being done from a checkout. This sets up several defaults for
395dnl the command line switches. When we build with a checkout directory,
396dnl we get a debug with assertions turned on. Without, we assume a source
397dnl release and we get an optimized build without assertions.
398dnl See --enable-optimized and --enable-assertions below
399if test -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
400  cvsbuild="yes"
401  optimize="no"
402  AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
403else
404  cvsbuild="no"
405  optimize="yes"
406fi
407
408dnl===-----------------------------------------------------------------------===
409dnl===
410dnl=== SECTION 3: Command line arguments for the configure script.
411dnl===
412dnl===-----------------------------------------------------------------------===
413
414dnl --enable-optimized : check whether they want to do an optimized build:
415AC_ARG_ENABLE(optimized, AS_HELP_STRING(
416 --enable-optimized,[Compile with optimizations enabled (default is NO)]),,enableval=$optimize)
417if test ${enableval} = "no" ; then
418  AC_SUBST(ENABLE_OPTIMIZED,[[]])
419else
420  AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
421fi
422
423dnl --enable-profiling : check whether they want to do a profile build:
424AC_ARG_ENABLE(profiling, AS_HELP_STRING(
425 --enable-profiling,[Compile with profiling enabled (default is NO)]),,enableval="no")
426if test ${enableval} = "no" ; then
427  AC_SUBST(ENABLE_PROFILING,[[]])
428else
429  AC_SUBST(ENABLE_PROFILING,[[ENABLE_PROFILING=1]])
430fi
431
432dnl --enable-assertions : check whether they want to turn on assertions or not:
433AC_ARG_ENABLE(assertions,AS_HELP_STRING(
434  --enable-assertions,[Compile with assertion checks enabled (default is YES)]),, enableval="yes")
435if test ${enableval} = "yes" ; then
436  AC_SUBST(DISABLE_ASSERTIONS,[[]])
437else
438  AC_SUBST(DISABLE_ASSERTIONS,[[DISABLE_ASSERTIONS=1]])
439fi
440
441dnl --enable-expensive-checks : check whether they want to turn on expensive debug checks:
442AC_ARG_ENABLE(expensive-checks,AS_HELP_STRING(
443  --enable-expensive-checks,[Compile with expensive debug checks enabled (default is NO)]),, enableval="no")
444if test ${enableval} = "yes" ; then
445  AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[ENABLE_EXPENSIVE_CHECKS=1]])
446  AC_SUBST(EXPENSIVE_CHECKS,[[yes]])
447else
448  AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[]])
449  AC_SUBST(EXPENSIVE_CHECKS,[[no]])
450fi
451
452dnl --enable-debug-runtime : should runtime libraries have debug symbols?
453AC_ARG_ENABLE(debug-runtime,
454   AS_HELP_STRING(--enable-debug-runtime,[Build runtime libs with debug symbols (default is NO)]),,enableval=no)
455if test ${enableval} = "no" ; then
456  AC_SUBST(DEBUG_RUNTIME,[[]])
457else
458  AC_SUBST(DEBUG_RUNTIME,[[DEBUG_RUNTIME=1]])
459fi
460
461dnl --enable-debug-symbols : should even optimized compiler libraries
462dnl have debug symbols?
463AC_ARG_ENABLE(debug-symbols,
464   AS_HELP_STRING(--enable-debug-symbols,[Build compiler with debug symbols (default is NO if optimization is on and YES if it's off)]),,enableval=no)
465if test ${enableval} = "no" ; then
466  AC_SUBST(DEBUG_SYMBOLS,[[]])
467else
468  AC_SUBST(DEBUG_SYMBOLS,[[DEBUG_SYMBOLS=1]])
469fi
470
471dnl --enable-jit: check whether they want to enable the jit
472AC_ARG_ENABLE(jit,
473  AS_HELP_STRING(--enable-jit,
474                 [Enable Just In Time Compiling (default is YES)]),,
475  enableval=default)
476if test ${enableval} = "no"
477then
478  AC_SUBST(JIT,[[]])
479else
480  case "$llvm_cv_target_arch" in
481    x86)         AC_SUBST(TARGET_HAS_JIT,1) ;;
482    Sparc)       AC_SUBST(TARGET_HAS_JIT,0) ;;
483    PowerPC)     AC_SUBST(TARGET_HAS_JIT,1) ;;
484    x86_64)      AC_SUBST(TARGET_HAS_JIT,1) ;;
485    Alpha)       AC_SUBST(TARGET_HAS_JIT,0) ;;
486    ARM)         AC_SUBST(TARGET_HAS_JIT,1) ;;
487    Mips)        AC_SUBST(TARGET_HAS_JIT,0) ;;
488    XCore)       AC_SUBST(TARGET_HAS_JIT,0) ;;
489    MSP430)      AC_SUBST(TARGET_HAS_JIT,0) ;;
490    SystemZ)     AC_SUBST(TARGET_HAS_JIT,0) ;;
491    Blackfin)    AC_SUBST(TARGET_HAS_JIT,0) ;;
492    MBlaze)      AC_SUBST(TARGET_HAS_JIT,0) ;;
493    PTX)         AC_SUBST(TARGET_HAS_JIT,0) ;;
494    *)           AC_SUBST(TARGET_HAS_JIT,0) ;;
495  esac
496fi
497
498dnl Allow enablement of building and installing docs
499AC_ARG_ENABLE(docs,
500              AS_HELP_STRING([--enable-docs],
501                             [Build documents (default is YES)]),,
502                             enableval=default)
503case "$enableval" in
504  yes) AC_SUBST(ENABLE_DOCS,[1]) ;;
505  no)  AC_SUBST(ENABLE_DOCS,[0]) ;;
506  default) AC_SUBST(ENABLE_DOCS,[1]) ;;
507  *) AC_MSG_ERROR([Invalid setting for --enable-docs. Use "yes" or "no"]) ;;
508esac
509
510dnl Allow enablement of doxygen generated documentation
511AC_ARG_ENABLE(doxygen,
512              AS_HELP_STRING([--enable-doxygen],
513                             [Build doxygen documentation (default is NO)]),,
514                             enableval=default)
515case "$enableval" in
516  yes) AC_SUBST(ENABLE_DOXYGEN,[1]) ;;
517  no)  AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
518  default) AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
519  *) AC_MSG_ERROR([Invalid setting for --enable-doxygen. Use "yes" or "no"]) ;;
520esac
521
522dnl Allow disablement of threads
523AC_ARG_ENABLE(threads,
524              AS_HELP_STRING([--enable-threads],
525                             [Use threads if available (default is YES)]),,
526                             enableval=default)
527case "$enableval" in
528  yes) AC_SUBST(ENABLE_THREADS,[1]) ;;
529  no)  AC_SUBST(ENABLE_THREADS,[0]) ;;
530  default) AC_SUBST(ENABLE_THREADS,[1]) ;;
531  *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
532esac
533AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
534
535dnl Allow disablement of pthread.h
536AC_ARG_ENABLE(pthreads,
537              AS_HELP_STRING([--enable-pthreads],
538                             [Use pthreads if available (default is YES)]),,
539                             enableval=default)
540case "$enableval" in
541  yes) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
542  no)  AC_SUBST(ENABLE_PTHREADS,[0]) ;;
543  default) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
544  *) AC_MSG_ERROR([Invalid setting for --enable-pthreads. Use "yes" or "no"]) ;;
545esac
546
547dnl Allow building without position independent code
548AC_ARG_ENABLE(pic,
549  AS_HELP_STRING([--enable-pic],
550                 [Build LLVM with Position Independent Code (default is YES)]),,
551                 enableval=default)
552case "$enableval" in
553  yes) AC_SUBST(ENABLE_PIC,[1]) ;;
554  no)  AC_SUBST(ENABLE_PIC,[0]) ;;
555  default) AC_SUBST(ENABLE_PIC,[1]) ;;
556  *) AC_MSG_ERROR([Invalid setting for --enable-pic. Use "yes" or "no"]) ;;
557esac
558AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
559                   [Define if position independent code is enabled])
560
561dnl Allow building a shared library and linking tools against it.
562AC_ARG_ENABLE(shared,
563  AS_HELP_STRING([--enable-shared],
564                 [Build a shared library and link tools against it (default is NO)]),,
565                 enableval=default)
566case "$enableval" in
567  yes) AC_SUBST(ENABLE_SHARED,[1]) ;;
568  no)  AC_SUBST(ENABLE_SHARED,[0]) ;;
569  default) AC_SUBST(ENABLE_SHARED,[0]) ;;
570  *) AC_MSG_ERROR([Invalid setting for --enable-shared. Use "yes" or "no"]) ;;
571esac
572
573dnl Allow libstdc++ is embedded in LLVM.dll.
574AC_ARG_ENABLE(embed-stdcxx,
575  AS_HELP_STRING([--enable-embed-stdcxx],
576                 [Build a shared library with embedded libstdc++ for Win32 DLL (default is YES)]),,
577                 enableval=default)
578case "$enableval" in
579  yes) AC_SUBST(ENABLE_EMBED_STDCXX,[1]) ;;
580  no)  AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
581  default) AC_SUBST(ENABLE_EMBED_STDCXX,[1]) ;;
582  *) AC_MSG_ERROR([Invalid setting for --enable-embed-stdcxx. Use "yes" or "no"]) ;;
583esac
584
585dnl Enable embedding timestamp information into build.
586AC_ARG_ENABLE(timestamps,
587  AS_HELP_STRING([--enable-timestamps],
588                 [Enable embedding timestamp information in build (default is YES)]),,
589                 enableval=default)
590case "$enableval" in
591  yes) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
592  no)  AC_SUBST(ENABLE_TIMESTAMPS,[0]) ;;
593  default) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
594  *) AC_MSG_ERROR([Invalid setting for --enable-timestamps. Use "yes" or "no"]) ;;
595esac
596AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS,
597                   [Define if timestamp information (e.g., __DATE___) is allowed])
598
599dnl Allow specific targets to be specified for building (or not)
600TARGETS_TO_BUILD=""
601AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
602    [Build specific host targets: all or target1,target2,... Valid targets are:
603     host, x86, x86_64, sparc, powerpc, alpha, arm, mips, spu,
604     xcore, msp430, systemz, blackfin, ptx, cbe, and cpp (default=all)]),,
605    enableval=all)
606if test "$enableval" = host-only ; then
607  enableval=host
608fi
609case "$enableval" in
610  all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU XCore MSP430 SystemZ Blackfin CBackend CppBackend MBlaze PTX" ;;
611  *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
612      case "$a_target" in
613        x86)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
614        x86_64)   TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
615        sparc)    TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
616        powerpc)  TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
617        alpha)    TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
618        arm)      TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
619        mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
620        spu)      TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
621        xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
622        msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
623        systemz)  TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
624        blackfin) TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
625        cbe)      TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;;
626        cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
627        mblaze)   TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
628        ptx)      TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
629        host) case "$llvm_cv_target_arch" in
630            x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
631            x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
632            Sparc)       TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
633            PowerPC)     TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
634            Alpha)       TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
635            ARM)         TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
636            Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
637            MBlaze)      TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
638            CellSPU|SPU) TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
639            XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
640            MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
641            s390x)       TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
642            Blackfin)    TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
643            PTX)         TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
644            *)       AC_MSG_ERROR([Can not set target to build]) ;;
645          esac ;;
646        *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
647      esac
648  done
649  ;;
650esac
651AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
652
653# Determine whether we are building LLVM support for the native architecture.
654# If so, define LLVM_NATIVE_ARCH to that LLVM target.
655for a_target in $TARGETS_TO_BUILD; do
656  if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
657    AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH, $LLVM_NATIVE_ARCH,
658      [LLVM architecture name for the native architecture, if available])
659    LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
660    LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
661    LLVM_NATIVE_MCASMINFO="LLVMInitialize${LLVM_NATIVE_ARCH}MCAsmInfo"
662    LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
663    if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
664      LLVM_NATIVE_ASMPARSER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser"
665    fi
666    AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGET, $LLVM_NATIVE_TARGET,
667      [LLVM name for the native Target init function, if available])
668    AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETINFO, $LLVM_NATIVE_TARGETINFO,
669      [LLVM name for the native TargetInfo init function, if available])
670    AC_DEFINE_UNQUOTED(LLVM_NATIVE_MCASMINFO, $LLVM_NATIVE_MCASMINFO,
671      [LLVM name for the native MCAsmInfo init function, if available])
672    AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPRINTER, $LLVM_NATIVE_ASMPRINTER,
673      [LLVM name for the native AsmPrinter init function, if available])
674    if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
675      AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPARSER, $LLVM_NATIVE_ASMPARSER,
676       [LLVM name for the native AsmParser init function, if available])
677    fi
678  fi
679done
680
681# Build the LLVM_TARGET and LLVM_... macros for Targets.def and the individual
682# target feature def files.
683LLVM_ENUM_TARGETS=""
684LLVM_ENUM_ASM_PRINTERS=""
685LLVM_ENUM_ASM_PARSERS=""
686LLVM_ENUM_DISASSEMBLERS=""
687for target_to_build in $TARGETS_TO_BUILD; do
688  LLVM_ENUM_TARGETS="LLVM_TARGET($target_to_build) $LLVM_ENUM_TARGETS"
689  if test -f ${srcdir}/lib/Target/${target_to_build}/*AsmPrinter.cpp ; then
690    LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
691  fi
692  if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
693    LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
694  fi
695  if test -f ${srcdir}/lib/Target/${target_to_build}/Disassembler/Makefile ; then
696    LLVM_ENUM_DISASSEMBLERS="LLVM_DISASSEMBLER($target_to_build) $LLVM_ENUM_DISASSEMBLERS";
697  fi
698done
699AC_SUBST(LLVM_ENUM_TARGETS)
700AC_SUBST(LLVM_ENUM_ASM_PRINTERS)
701AC_SUBST(LLVM_ENUM_ASM_PARSERS)
702AC_SUBST(LLVM_ENUM_DISASSEMBLERS)
703
704dnl Prevent the CBackend from using printf("%a") for floating point so older
705dnl C compilers that cannot deal with the 0x0p+0 hex floating point format
706dnl can still compile the CBE's output
707AC_ARG_ENABLE([cbe-printf-a],AS_HELP_STRING([--enable-cbe-printf-a],
708  [Enable C Backend output with hex floating point via %a  (default is YES)]),,
709  enableval=default)
710case "$enableval" in
711  yes) AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
712  no)  AC_SUBST(ENABLE_CBE_PRINTF_A,[0]) ;;
713  default)  AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
714  *) AC_MSG_ERROR([Invalid setting for --enable-cbe-printf-a. Use "yes" or "no"]) ;;
715esac
716AC_DEFINE_UNQUOTED([ENABLE_CBE_PRINTF_A],$ENABLE_CBE_PRINTF_A,
717                   [Define if CBE is enabled for printf %a output])
718
719dnl Allow a specific llvm-gcc/llvm-g++ pair to be used with this LLVM config.
720AC_ARG_WITH(llvmgccdir,
721  AS_HELP_STRING([--with-llvmgccdir],
722    [Specify location of llvm-gcc install dir (default searches PATH)]),,
723    withval=default)
724case "$withval" in
725  default) WITH_LLVMGCCDIR=default ;;
726  /* | [[A-Za-z]]:[[\\/]]*)      WITH_LLVMGCCDIR=$withval ;;
727  *) AC_MSG_ERROR([Invalid path for --with-llvmgccdir. Provide full path]) ;;
728esac
729
730dnl Allow a specific llvm-gcc compiler to be used with this LLVM config.
731AC_ARG_WITH(llvmgcc,
732  AS_HELP_STRING([--with-llvmgcc],
733    [Specify location of llvm-gcc driver (default searches PATH)]),
734    LLVMGCC=$with_llvmgcc
735      WITH_LLVMGCCDIR="",)
736
737dnl Allow a specific llvm-g++ compiler to be used with this LLVM config.
738AC_ARG_WITH(llvmgxx,
739  AS_HELP_STRING([--with-llvmgxx],
740    [Specify location of llvm-g++ driver (default searches PATH)]),
741    LLVMGXX=$with_llvmgxx
742    WITH_LLVMGCCDIR="",)
743
744if test -n "$LLVMGCC"; then
745   LLVMGCCCOMMAND="$LLVMGCC"
746fi
747
748if test -n "$LLVMGXX"; then
749   LLVMGXXCOMMAND="$LLVMGXX"
750fi
751
752if test -n "$LLVMGCC" && test -z "$LLVMGXX"; then
753   AC_MSG_ERROR([Invalid llvm-g++. Use --with-llvmgxx when --with-llvmgcc is used]);
754fi
755
756if test -n "$LLVMGXX" && test -z "$LLVMGCC"; then
757   AC_MSG_ERROR([Invalid llvm-gcc. Use --with-llvmgcc when --with-llvmgxx is used]);
758fi
759
760dnl Allow a specific Clang compiler to be used with this LLVM config.
761AC_ARG_WITH(clang,
762  AS_HELP_STRING([--with-clang],
763    [Specify location of clang compiler (default is --with-built-clang)]),
764    [],[with_clang=default])
765
766dnl Enable use of the built Clang.
767AC_ARG_WITH(built-clang,
768  AS_HELP_STRING([--with-built-clang],
769    [Use the compiled Clang as the LLVM compiler (default=check)]),
770    [],[with_built_clang=check])
771
772dnl Select the Clang compiler option.
773dnl
774dnl If --with-clang is given, always honor that; otherwise honor
775dnl --with-built-clang, or check if we have the clang sources.
776AC_MSG_CHECKING([clang compiler])
777WITH_CLANGPATH=""
778WITH_BUILT_CLANG=0
779if test "$with_clang" != "default"; then
780   WITH_CLANGPATH="$with_clang"
781   if ! test -x "$WITH_CLANGPATH"; then
782     AC_MSG_ERROR([invalid --with-clang, path does not specify an executable])
783   fi
784elif test "$with_built_clang" = "yes"; then
785   WITH_BUILT_CLANG=1
786elif test "$with_built_clang" = "no"; then
787   WITH_BUILT_CLANG=0
788else
789   if test "$with_built_clang" != "check"; then
790      AC_MSG_ERROR([invalid value for --with-built-clang.])
791   fi
792
793   if test -f ${srcdir}/tools/clang/README.txt; then
794     WITH_BUILT_CLANG=1
795   fi
796fi
797
798if ! test -z "$WITH_CLANGPATH"; then
799   AC_MSG_RESULT([$WITH_CLANGPATH])
800   WITH_CLANGXXPATH=`"$WITH_CLANGPATH" --print-prog-name=clang++`
801elif test "$WITH_BUILT_CLANG" = "1"; then
802   AC_MSG_RESULT([built])
803else
804   AC_MSG_RESULT([none])
805fi
806AC_SUBST(CLANGPATH,$WITH_CLANGPATH)
807AC_SUBST(CLANGXXPATH,$WITH_CLANGXXPATH)
808AC_SUBST(ENABLE_BUILT_CLANG,$WITH_BUILT_CLANG)
809
810dnl Override the option to use for optimized builds.
811AC_ARG_WITH(optimize-option,
812  AS_HELP_STRING([--with-optimize-option],
813                 [Select the compiler options to use for optimized builds]),,
814                 withval=default)
815AC_MSG_CHECKING([optimization flags])
816case "$withval" in
817  default)
818    case "$llvm_cv_os_type" in
819    FreeBSD) optimize_option=-O2 ;;
820    MingW) optimize_option=-O2 ;;
821    *)     optimize_option=-O3 ;;
822    esac ;;
823  *) optimize_option="$withval" ;;
824esac
825AC_SUBST(OPTIMIZE_OPTION,$optimize_option)
826AC_MSG_RESULT([$optimize_option])
827
828dnl Specify extra build options
829AC_ARG_WITH(extra-options,
830  AS_HELP_STRING([--with-extra-options],
831                 [Specify additional options to compile LLVM with]),,
832                 withval=default)
833case "$withval" in
834  default) EXTRA_OPTIONS= ;;
835  *) EXTRA_OPTIONS=$withval ;;
836esac
837AC_SUBST(EXTRA_OPTIONS,$EXTRA_OPTIONS)
838
839dnl Specify extra linker build options
840AC_ARG_WITH(extra-ld-options,
841  AS_HELP_STRING([--with-extra-ld-options],
842                 [Specify additional options to link LLVM with]),,
843                 withval=default)
844case "$withval" in
845  default) EXTRA_LD_OPTIONS= ;;
846  *) EXTRA_LD_OPTIONS=$withval ;;
847esac
848AC_SUBST(EXTRA_LD_OPTIONS,$EXTRA_LD_OPTIONS)
849
850dnl Allow specific bindings to be specified for building (or not)
851AC_ARG_ENABLE([bindings],AS_HELP_STRING([--enable-bindings],
852    [Build specific language bindings: all,auto,none,{binding-name} (default=auto)]),,
853    enableval=default)
854BINDINGS_TO_BUILD=""
855case "$enableval" in
856  yes | default | auto) BINDINGS_TO_BUILD="auto" ;;
857  all ) BINDINGS_TO_BUILD="ocaml" ;;
858  none | no) BINDINGS_TO_BUILD="" ;;
859  *)for a_binding in `echo $enableval|sed -e 's/,/ /g' ` ; do
860      case "$a_binding" in
861        ocaml) BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD" ;;
862        *) AC_MSG_ERROR([Unrecognized binding $a_binding]) ;;
863      esac
864  done
865  ;;
866esac
867
868dnl Allow the ocaml libdir to be overridden. This could go in a configure
869dnl script for bindings/ocaml/configure, except that its auto value depends on
870dnl OCAMLC, which is found here to support tests.
871AC_ARG_WITH([ocaml-libdir],
872  [AS_HELP_STRING([--with-ocaml-libdir],
873    [Specify install location for ocaml bindings (default is stdlib)])],
874  [],
875  [withval=auto])
876case "$withval" in
877  auto) with_ocaml_libdir="$withval" ;;
878  /* | [[A-Za-z]]:[[\\/]]*) with_ocaml_libdir="$withval" ;;
879  *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
880esac
881
882AC_ARG_WITH(clang-resource-dir,
883  AS_HELP_STRING([--with-clang-resource-dir],
884    [Relative directory from the Clang binary for resource files]),,
885    withval="")
886AC_DEFINE_UNQUOTED(CLANG_RESOURCE_DIR,"$withval",
887                   [Relative directory for resource files])
888
889AC_ARG_WITH(c-include-dirs,
890  AS_HELP_STRING([--with-c-include-dirs],
891    [Colon separated list of directories clang will search for headers]),,
892    withval="")
893AC_DEFINE_UNQUOTED(C_INCLUDE_DIRS,"$withval",
894                   [Directories clang will search for headers])
895
896AC_ARG_WITH(cxx-include-root,
897  AS_HELP_STRING([--with-cxx-include-root],
898    [Directory with the libstdc++ headers.]),,
899    withval="")
900AC_DEFINE_UNQUOTED(CXX_INCLUDE_ROOT,"$withval",
901                   [Directory with the libstdc++ headers.])
902
903AC_ARG_WITH(cxx-include-arch,
904  AS_HELP_STRING([--with-cxx-include-arch],
905    [Architecture of the libstdc++ headers.]),,
906    withval="")
907AC_DEFINE_UNQUOTED(CXX_INCLUDE_ARCH,"$withval",
908                   [Arch the libstdc++ headers.])
909
910AC_ARG_WITH(cxx-include-32bit-dir,
911  AS_HELP_STRING([--with-cxx-include-32bit-dir],
912    [32 bit multilib dir.]),,
913    withval="")
914AC_DEFINE_UNQUOTED(CXX_INCLUDE_32BIT_DIR,"$withval",
915                   [32 bit multilib directory.])
916
917AC_ARG_WITH(cxx-include-64bit-dir,
918  AS_HELP_STRING([--with-cxx-include-64bit-dir],
919    [64 bit multilib directory.]),,
920    withval="")
921AC_DEFINE_UNQUOTED(CXX_INCLUDE_64BIT_DIR,"$withval",
922                   [64 bit multilib directory.])
923
924dnl Allow linking of LLVM with GPLv3 binutils code.
925AC_ARG_WITH(binutils-include,
926  AS_HELP_STRING([--with-binutils-include],
927    [Specify path to binutils/include/ containing plugin-api.h file for gold plugin.]),,
928  withval=default)
929case "$withval" in
930  default) WITH_BINUTILS_INCDIR=default ;;
931  /* | [[A-Za-z]]:[[\\/]]*)      WITH_BINUTILS_INCDIR=$withval ;;
932  *) AC_MSG_ERROR([Invalid path for --with-binutils-include. Provide full path]) ;;
933esac
934if test "x$WITH_BINUTILS_INCDIR" != xdefault ; then
935  AC_SUBST(BINUTILS_INCDIR,$WITH_BINUTILS_INCDIR)
936  if test ! -f "$WITH_BINUTILS_INCDIR/plugin-api.h"; then
937     echo "$WITH_BINUTILS_INCDIR/plugin-api.h"
938     AC_MSG_ERROR([Invalid path to directory containing plugin-api.h.]);
939  fi
940fi
941
942dnl --enable-libffi : check whether the user wants to turn off libffi:
943AC_ARG_ENABLE(libffi,AS_HELP_STRING(
944  --enable-libffi,[Check for the presence of libffi (default is NO)]),
945  [case "$enableval" in
946    yes) llvm_cv_enable_libffi="yes" ;;
947    no)  llvm_cv_enable_libffi="no"  ;;
948    *) AC_MSG_ERROR([Invalid setting for --enable-libffi. Use "yes" or "no"]) ;;
949  esac],
950  llvm_cv_enable_libffi=no)
951
952dnl===-----------------------------------------------------------------------===
953dnl===
954dnl=== SECTION 4: Check for programs we need and that they are the right version
955dnl===
956dnl===-----------------------------------------------------------------------===
957
958dnl Check for compilation tools
959AC_PROG_CPP
960AC_PROG_CC(gcc)
961AC_PROG_CXX(g++)
962
963AC_PROG_NM
964AC_SUBST(NM)
965
966dnl Check for the tools that the makefiles require
967AC_CHECK_GNU_MAKE
968AC_PROG_LN_S
969AC_PATH_PROG(CMP, [cmp], [cmp])
970AC_PATH_PROG(CP, [cp], [cp])
971AC_PATH_PROG(DATE, [date], [date])
972AC_PATH_PROG(FIND, [find], [find])
973AC_PATH_PROG(GREP, [grep], [grep])
974AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
975AC_PATH_PROG(MV,   [mv],   [mv])
976AC_PROG_RANLIB
977AC_CHECK_TOOL(AR, ar, false)
978AC_PATH_PROG(RM,   [rm],   [rm])
979AC_PATH_PROG(SED,  [sed],  [sed])
980AC_PATH_PROG(TAR,  [tar],  [gtar])
981AC_PATH_PROG(BINPWD,[pwd],  [pwd])
982
983dnl Looking for misc. graph plotting software
984AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
985if test "$GRAPHVIZ" != "echo Graphviz" ; then
986  AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
987  dnl If we're targeting for mingw we should emit windows paths, not msys
988  if test "$llvm_cv_os_type" = "MingW" ; then
989    GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
990  fi
991  AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
992   [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
993fi
994AC_PATH_PROG(DOT, [dot], [echo dot])
995if test "$DOT" != "echo dot" ; then
996  AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
997  dnl If we're targeting for mingw we should emit windows paths, not msys
998  if test "$llvm_cv_os_type" = "MingW" ; then
999    DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1000  fi
1001  AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
1002   [Define to path to dot program if found or 'echo dot' otherwise])
1003fi
1004AC_PATH_PROG(FDP, [fdp], [echo fdp])
1005if test "$FDP" != "echo fdp" ; then
1006  AC_DEFINE([HAVE_FDP],[1],[Define if the neat program is available])
1007  dnl If we're targeting for mingw we should emit windows paths, not msys
1008  if test "$llvm_cv_os_type" = "MingW" ; then
1009    FDP=`echo $FDP | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1010  fi
1011  AC_DEFINE_UNQUOTED([LLVM_PATH_FDP],"$FDP${EXEEXT}",
1012   [Define to path to fdp program if found or 'echo fdp' otherwise])
1013fi
1014AC_PATH_PROG(NEATO, [neato], [echo neato])
1015if test "$NEATO" != "echo neato" ; then
1016  AC_DEFINE([HAVE_NEATO],[1],[Define if the neat program is available])
1017  dnl If we're targeting for mingw we should emit windows paths, not msys
1018  if test "$llvm_cv_os_type" = "MingW" ; then
1019    NEATO=`echo $NEATO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1020  fi
1021  AC_DEFINE_UNQUOTED([LLVM_PATH_NEATO],"$NEATO${EXEEXT}",
1022   [Define to path to neato program if found or 'echo neato' otherwise])
1023fi
1024AC_PATH_PROG(TWOPI, [twopi], [echo twopi])
1025if test "$TWOPI" != "echo twopi" ; then
1026  AC_DEFINE([HAVE_TWOPI],[1],[Define if the neat program is available])
1027  dnl If we're targeting for mingw we should emit windows paths, not msys
1028  if test "$llvm_cv_os_type" = "MingW" ; then
1029    TWOPI=`echo $TWOPI | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1030  fi
1031  AC_DEFINE_UNQUOTED([LLVM_PATH_TWOPI],"$TWOPI${EXEEXT}",
1032   [Define to path to twopi program if found or 'echo twopi' otherwise])
1033fi
1034AC_PATH_PROG(CIRCO, [circo], [echo circo])
1035if test "$CIRCO" != "echo circo" ; then
1036  AC_DEFINE([HAVE_CIRCO],[1],[Define if the neat program is available])
1037  dnl If we're targeting for mingw we should emit windows paths, not msys
1038  if test "$llvm_cv_os_type" = "MingW" ; then
1039    CIRCO=`echo $CIRCO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1040  fi
1041  AC_DEFINE_UNQUOTED([LLVM_PATH_CIRCO],"$CIRCO${EXEEXT}",
1042   [Define to path to circo program if found or 'echo circo' otherwise])
1043fi
1044AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
1045if test "$GV" != "echo gv" ; then
1046  AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
1047  dnl If we're targeting for mingw we should emit windows paths, not msys
1048  if test "$llvm_cv_os_type" = "MingW" ; then
1049    GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1050  fi
1051  AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
1052   [Define to path to gv program if found or 'echo gv' otherwise])
1053fi
1054AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
1055if test "$DOTTY" != "echo dotty" ; then
1056  AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
1057  dnl If we're targeting for mingw we should emit windows paths, not msys
1058  if test "$llvm_cv_os_type" = "MingW" ; then
1059    DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1060  fi
1061  AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
1062   [Define to path to dotty program if found or 'echo dotty' otherwise])
1063fi
1064AC_PATH_PROG(XDOT_PY, [xdot.py], [echo xdot.py])
1065if test "$XDOT_PY" != "echo xdot.py" ; then
1066  AC_DEFINE([HAVE_XDOT_PY],[1],[Define if the xdot.py program is available])
1067  dnl If we're targeting for mingw we should emit windows paths, not msys
1068  if test "$llvm_cv_os_type" = "MingW" ; then
1069    XDOT_PY=`echo $XDOT_PY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1070  fi
1071  AC_DEFINE_UNQUOTED([LLVM_PATH_XDOT_PY],"$XDOT_PY${EXEEXT}",
1072   [Define to path to xdot.py program if found or 'echo xdot.py' otherwise])
1073fi
1074
1075dnl Look for a sufficiently recent version of Perl.
1076LLVM_PROG_PERL([5.006])
1077AC_SUBST(PERL)
1078if test x"$PERL" = xnone; then
1079   AC_SUBST(HAVE_PERL,0)
1080   AC_MSG_ERROR([perl is required but was not found, please install it])
1081else
1082   AC_SUBST(HAVE_PERL,1)
1083fi
1084
1085dnl Find the install program
1086AC_PROG_INSTALL
1087dnl Prepend src dir to install path dir if it's a relative path
1088dnl This is a hack for installs that take place in something other
1089dnl than the top level.
1090case "$INSTALL" in
1091 [[\\/$]]* | ?:[[\\/]]* ) ;;
1092 *)  INSTALL="\\\$(TOPSRCDIR)/$INSTALL" ;;
1093esac
1094
1095dnl Checks for documentation and testing tools that we can do without. If these
1096dnl are not found then they are set to "true" which always succeeds but does
1097dnl nothing. This just lets the build output show that we could have done
1098dnl something if the tool was available.
1099AC_PATH_PROG(BZIP2, [bzip2])
1100AC_PATH_PROG(CAT, [cat])
1101AC_PATH_PROG(DOXYGEN, [doxygen])
1102AC_PATH_PROG(GROFF, [groff])
1103AC_PATH_PROG(GZIPBIN, [gzip])
1104AC_PATH_PROG(POD2HTML, [pod2html])
1105AC_PATH_PROG(POD2MAN, [pod2man])
1106AC_PATH_PROG(PDFROFF, [pdfroff])
1107AC_PATH_PROG(RUNTEST, [runtest])
1108DJ_AC_PATH_TCLSH
1109AC_PATH_PROG(ZIP, [zip])
1110AC_PATH_PROGS(OCAMLC, [ocamlc])
1111AC_PATH_PROGS(OCAMLOPT, [ocamlopt])
1112AC_PATH_PROGS(OCAMLDEP, [ocamldep])
1113AC_PATH_PROGS(OCAMLDOC, [ocamldoc])
1114AC_PATH_PROGS(GAS, [gas as])
1115
1116dnl Get the version of the linker in use.
1117AC_LINK_GET_VERSION
1118
1119dnl Determine whether the linker supports the -R option.
1120AC_LINK_USE_R
1121
1122dnl Determine whether the linker supports the -export-dynamic option.
1123AC_LINK_EXPORT_DYNAMIC
1124
1125dnl Determine whether the linker supports the --version-script option.
1126AC_LINK_VERSION_SCRIPT
1127
1128dnl Check for libtool and the library that has dlopen function (which must come
1129dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
1130dnl libtool).
1131AC_LIBTOOL_DLOPEN
1132AC_LIB_LTDL
1133
1134if test "$WITH_LLVMGCCDIR" = "default" ; then
1135  LLVMGCC="llvm-gcc${EXEEXT}"
1136  LLVMGXX="llvm-g++${EXEEXT}"
1137  LLVMGCCCOMMAND="$LLVMGCC"
1138  LLVMGXXCOMMAND="$LLVMGXX"
1139  AC_SUBST(LLVMGCCCOMMAND,$LLVMGCCCOMMAND)
1140  AC_SUBST(LLVMGXXCOMMAND,$LLVMGXXCOMMAND)
1141  AC_PATH_PROG(LLVMGCC, $LLVMGCC, [])
1142  AC_PATH_PROG(LLVMGXX, $LLVMGXX, [])
1143else
1144  if test -z "$LLVMGCC"; then
1145    LLVMGCC="$WITH_LLVMGCCDIR/bin/llvm-gcc${EXEEXT}"
1146    LLVMGCCCOMMAND="$LLVMGCC"
1147  fi
1148  if test -z "$LLVMGXX"; then
1149    LLVMGXX="$WITH_LLVMGCCDIR/bin/llvm-g++${EXEEXT}"
1150    LLVMGXXCOMMAND="$LLVMGXX"
1151  fi
1152
1153  AC_SUBST(LLVMGCC,$LLVMGCC)
1154  AC_SUBST(LLVMGXX,$LLVMGXX)
1155  AC_SUBST(LLVMGCCCOMMAND,$LLVMGCCCOMMAND)
1156  AC_SUBST(LLVMGXXCOMMAND,$LLVMGXXCOMMAND)
1157fi
1158
1159dnl Select the LLVM capable compiler to use, we default to using llvm-gcc if
1160dnl found, otherwise clang if available.
1161AC_ARG_WITH(llvmcc,
1162  AS_HELP_STRING([--with-llvmcc=<name>],
1163    [Choose the LLVM capable compiler to use (llvm-gcc, clang, or none; default=check)]),
1164    [],[with_llvmcc=check])
1165AC_MSG_CHECKING([LLVM capable compiler])
1166if test "$with_llvmcc" != "check"; then
1167   if (test "$with_llvmcc" != "llvm-gcc" &&
1168       test "$with_llvmcc" != "clang" &&
1169       test "$with_llvmcc" != "none"); then
1170      AC_MSG_ERROR([invalid value for --with-llvmcc, expected 'llvm-gcc', 'clang', or 'none'.])
1171   fi
1172   WITH_LLVMCC="$with_llvmcc"
1173elif test -n "$LLVMGCC"; then
1174   WITH_LLVMCC=llvm-gcc
1175elif test -n "$WITH_CLANGPATH" || test "$WITH_BUILT_CLANG" -ne "0"; then
1176   WITH_LLVMCC=clang
1177else
1178   WITH_LLVMCC=none
1179fi
1180AC_MSG_RESULT([$WITH_LLVMCC])
1181AC_SUBST(LLVMCC_OPTION,$WITH_LLVMCC)
1182
1183AC_MSG_CHECKING([tool compatibility])
1184
1185dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
1186dnl ICC; we use GCC specific options in the makefiles so the compiler needs
1187dnl to support those options.
1188dnl "icc" emits gcc signatures
1189dnl "icc -no-gcc" emits no gcc signature BUT is still compatible
1190ICC=no
1191IXX=no
1192case $CC in
1193  icc*|icpc*)
1194    ICC=yes
1195    IXX=yes
1196    ;;
1197   *)
1198    ;;
1199esac
1200
1201if test "$GCC" != "yes" && test "$ICC" != "yes"
1202then
1203  AC_MSG_ERROR([gcc|icc required but not found])
1204fi
1205
1206dnl Ensure that compilation tools are compatible with GCC extensions
1207if test "$GXX" != "yes" && test "$IXX" != "yes"
1208then
1209  AC_MSG_ERROR([g++|clang++|icc required but not found])
1210fi
1211
1212dnl Verify that GCC is version 3.0 or higher
1213if test "$GCC" = "yes"
1214then
1215  AC_COMPILE_IFELSE([[#if !defined(__GNUC__) || __GNUC__ < 3
1216#error Unsupported GCC version
1217#endif
1218]], [], [AC_MSG_ERROR([gcc 3.x required, but you have a lower version])])
1219fi
1220
1221dnl Check for GNU Make.  We use its extensions, so don't build without it
1222if test -z "$llvm_cv_gnu_make_command"
1223then
1224  AC_MSG_ERROR([GNU Make required but not found])
1225fi
1226
1227dnl Tool compatibility is okay if we make it here.
1228AC_MSG_RESULT([ok])
1229
1230dnl Check optional compiler flags.
1231AC_MSG_CHECKING([optional compiler flags])
1232CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
1233CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
1234AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS])
1235
1236dnl===-----------------------------------------------------------------------===
1237dnl===
1238dnl=== SECTION 5: Check for libraries
1239dnl===
1240dnl===-----------------------------------------------------------------------===
1241
1242AC_CHECK_LIB(m,sin)
1243if test "$llvm_cv_os_type" = "MingW" ; then
1244  AC_CHECK_LIB(imagehlp, main)
1245  AC_CHECK_LIB(psapi, main)
1246fi
1247
1248dnl dlopen() is required for plugin support.
1249AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],
1250               [Define if dlopen() is available on this platform.]),
1251               AC_MSG_WARN([dlopen() not found - disabling plugin support]))
1252
1253dnl libffi is optional; used to call external functions from the interpreter
1254if test "$llvm_cv_enable_libffi" = "yes" ; then
1255  AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1],
1256                 [Define if libffi is available on this platform.]),
1257                 AC_MSG_ERROR([libffi not found - configure without --enable-libffi to compile without it]))
1258fi
1259
1260dnl mallinfo is optional; the code can compile (minus features) without it
1261AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
1262               [Define if mallinfo() is available on this platform.]))
1263
1264dnl pthread locking functions are optional - but llvm will not be thread-safe
1265dnl without locks.
1266if test "$ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1267  AC_CHECK_LIB(pthread, pthread_mutex_init)
1268  AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
1269                 AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
1270                           [Have pthread_mutex_lock]))
1271  AC_SEARCH_LIBS(pthread_rwlock_init,pthread,
1272                 AC_DEFINE([HAVE_PTHREAD_RWLOCK_INIT],[1],
1273                 [Have pthread_rwlock_init]))
1274  AC_SEARCH_LIBS(pthread_getspecific,pthread,
1275                 AC_DEFINE([HAVE_PTHREAD_GETSPECIFIC],[1],
1276                 [Have pthread_getspecific]))
1277fi
1278
1279dnl Allow extra x86-disassembler library
1280AC_ARG_WITH(udis86,
1281  AS_HELP_STRING([--with-udis86=<path>],
1282    [Use udis86 external x86 disassembler library]),
1283    [
1284      AC_SUBST(USE_UDIS86, [1])
1285      case "$withval" in
1286        /usr/lib|yes) ;;
1287        *) LDFLAGS="$LDFLAGS -L${withval}" ;;
1288      esac
1289      AC_CHECK_LIB(udis86, ud_init, [], [
1290        echo "Error! You need to have libudis86 around."
1291        exit -1
1292      ])
1293    ],
1294    AC_SUBST(USE_UDIS86, [0]))
1295AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
1296                   [Define if use udis86 library])
1297
1298dnl Allow OProfile support for JIT output.
1299AC_ARG_WITH(oprofile,
1300  AS_HELP_STRING([--with-oprofile=<prefix>],
1301    [Tell OProfile >= 0.9.4 how to symbolize JIT output]),
1302    [
1303      AC_SUBST(USE_OPROFILE, [1])
1304      case "$withval" in
1305        /usr|yes) llvm_cv_oppath=/usr/lib/oprofile ;;
1306        no) llvm_cv_oppath=
1307            AC_SUBST(USE_OPROFILE, [0]) ;;
1308        *) llvm_cv_oppath="${withval}/lib/oprofile"
1309           CPPFLAGS="-I${withval}/include";;
1310      esac
1311      if test -n "$llvm_cv_oppath" ; then
1312        LIBS="$LIBS -L${llvm_cv_oppath} -Wl,-rpath,${llvm_cv_oppath}"
1313        dnl Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537744:
1314        dnl libbfd is not included properly in libopagent in some Debian
1315        dnl versions.  If libbfd isn't found at all, we assume opagent works
1316        dnl anyway.
1317        AC_SEARCH_LIBS(bfd_init, bfd, [], [])
1318        AC_SEARCH_LIBS(op_open_agent, opagent, [], [
1319          echo "Error! You need to have libopagent around."
1320          exit -1
1321        ])
1322        AC_CHECK_HEADER([opagent.h], [], [
1323          echo "Error! You need to have opagent.h around."
1324          exit -1
1325          ])
1326      fi
1327    ],
1328    [
1329      AC_SUBST(USE_OPROFILE, [0])
1330    ])
1331AC_DEFINE_UNQUOTED([USE_OPROFILE],$USE_OPROFILE,
1332                   [Define if we have the oprofile JIT-support library])
1333
1334dnl===-----------------------------------------------------------------------===
1335dnl===
1336dnl=== SECTION 6: Check for header files
1337dnl===
1338dnl===-----------------------------------------------------------------------===
1339
1340dnl First, use autoconf provided macros for specific headers that we need
1341dnl We don't check for ancient stuff or things that are guaranteed to be there
1342dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
1343dnl Generally we're looking for POSIX headers.
1344AC_HEADER_DIRENT
1345AC_HEADER_MMAP_ANONYMOUS
1346AC_HEADER_STAT
1347AC_HEADER_STDC
1348AC_HEADER_SYS_WAIT
1349AC_HEADER_TIME
1350
1351AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
1352AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h termios.h unistd.h])
1353AC_CHECK_HEADERS([utime.h windows.h])
1354AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h sys/uio.h])
1355AC_CHECK_HEADERS([sys/types.h sys/ioctl.h malloc/malloc.h mach/mach.h])
1356AC_CHECK_HEADERS([valgrind/valgrind.h])
1357AC_CHECK_HEADERS([fenv.h])
1358if test "$ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1359  AC_CHECK_HEADERS(pthread.h,
1360                   AC_SUBST(HAVE_PTHREAD, 1),
1361                   AC_SUBST(HAVE_PTHREAD, 0))
1362else
1363  AC_SUBST(HAVE_PTHREAD, 0)
1364fi
1365
1366dnl Try to find ffi.h.
1367if test "$llvm_cv_enable_libffi" = "yes" ; then
1368  AC_CHECK_HEADERS([ffi.h ffi/ffi.h])
1369fi
1370
1371dnl Try to find Darwin specific crash reporting libraries.
1372AC_CHECK_HEADERS([CrashReporterClient.h])
1373
1374dnl Try to find Darwin specific crash reporting global.
1375AC_MSG_CHECKING([__crashreporter_info__])
1376AC_LINK_IFELSE(
1377  AC_LANG_SOURCE(
1378    [[extern const char *__crashreporter_info__;
1379      int main() {
1380        __crashreporter_info__ = "test";
1381        return 0;
1382      }
1383    ]]),
1384  AC_MSG_RESULT(yes)
1385  AC_DEFINE(HAVE_CRASHREPORTER_INFO, 1, Can use __crashreporter_info__),
1386  AC_MSG_RESULT(no)
1387  AC_DEFINE(HAVE_CRASHREPORTER_INFO, 0,
1388            Define if __crashreporter_info__ exists.))
1389
1390dnl===-----------------------------------------------------------------------===
1391dnl===
1392dnl=== SECTION 7: Check for types and structures
1393dnl===
1394dnl===-----------------------------------------------------------------------===
1395
1396AC_HUGE_VAL_CHECK
1397AC_TYPE_PID_T
1398AC_TYPE_SIZE_T
1399AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[Define as the return type of signal handlers (`int' or `void').])
1400AC_STRUCT_TM
1401AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
1402AC_CHECK_TYPES([uint64_t],,
1403         AC_CHECK_TYPES([u_int64_t],,
1404         AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
1405
1406dnl===-----------------------------------------------------------------------===
1407dnl===
1408dnl=== SECTION 8: Check for specific functions needed
1409dnl===
1410dnl===-----------------------------------------------------------------------===
1411
1412AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
1413AC_CHECK_FUNCS([powf fmodf strtof round ])
1414AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
1415AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
1416AC_CHECK_FUNCS([mktemp posix_spawn realpath sbrk setrlimit strdup ])
1417AC_CHECK_FUNCS([strerror strerror_r setenv ])
1418AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
1419AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
1420AC_C_PRINTF_A
1421AC_FUNC_RAND48
1422
1423dnl Check the declaration "Secure API" on Windows environments.
1424AC_CHECK_DECLS([strerror_s])
1425
1426dnl Check symbols in libgcc.a for JIT on Mingw.
1427if test "$llvm_cv_os_type" = "MingW" ; then
1428  AC_CHECK_LIB(gcc,_alloca,AC_DEFINE([HAVE__ALLOCA],[1],[Have host's _alloca]))
1429  AC_CHECK_LIB(gcc,__alloca,AC_DEFINE([HAVE___ALLOCA],[1],[Have host's __alloca]))
1430  AC_CHECK_LIB(gcc,__chkstk,AC_DEFINE([HAVE___CHKSTK],[1],[Have host's __chkstk]))
1431  AC_CHECK_LIB(gcc,___chkstk,AC_DEFINE([HAVE____CHKSTK],[1],[Have host's ___chkstk]))
1432
1433  AC_CHECK_LIB(gcc,__ashldi3,AC_DEFINE([HAVE___ASHLDI3],[1],[Have host's __ashldi3]))
1434  AC_CHECK_LIB(gcc,__ashrdi3,AC_DEFINE([HAVE___ASHRDI3],[1],[Have host's __ashrdi3]))
1435  AC_CHECK_LIB(gcc,__divdi3,AC_DEFINE([HAVE___DIVDI3],[1],[Have host's __divdi3]))
1436  AC_CHECK_LIB(gcc,__fixdfdi,AC_DEFINE([HAVE___FIXDFDI],[1],[Have host's __fixdfdi]))
1437  AC_CHECK_LIB(gcc,__fixsfdi,AC_DEFINE([HAVE___FIXSFDI],[1],[Have host's __fixsfdi]))
1438  AC_CHECK_LIB(gcc,__floatdidf,AC_DEFINE([HAVE___FLOATDIDF],[1],[Have host's __floatdidf]))
1439  AC_CHECK_LIB(gcc,__lshrdi3,AC_DEFINE([HAVE___LSHRDI3],[1],[Have host's __lshrdi3]))
1440  AC_CHECK_LIB(gcc,__moddi3,AC_DEFINE([HAVE___MODDI3],[1],[Have host's __moddi3]))
1441  AC_CHECK_LIB(gcc,__udivdi3,AC_DEFINE([HAVE___UDIVDI3],[1],[Have host's __udivdi3]))
1442  AC_CHECK_LIB(gcc,__umoddi3,AC_DEFINE([HAVE___UMODDI3],[1],[Have host's __umoddi3]))
1443
1444  AC_CHECK_LIB(gcc,__main,AC_DEFINE([HAVE___MAIN],[1],[Have host's __main]))
1445  AC_CHECK_LIB(gcc,__cmpdi2,AC_DEFINE([HAVE___CMPDI2],[1],[Have host's __cmpdi2]))
1446fi
1447
1448dnl Check Win32 API EnumerateLoadedModules.
1449if test "$llvm_cv_os_type" = "MingW" ; then
1450  AC_MSG_CHECKING([whether EnumerateLoadedModules() accepts new decl])
1451  AC_COMPILE_IFELSE([[#include <windows.h>
1452#include <imagehlp.h>
1453extern void foo(PENUMLOADED_MODULES_CALLBACK);
1454extern void foo(BOOL(CALLBACK*)(PCSTR,ULONG_PTR,ULONG,PVOID));]],
1455[
1456  AC_MSG_RESULT([yes])
1457  llvm_cv_win32_elmcb_pcstr="PCSTR"
1458],
1459[
1460  AC_MSG_RESULT([no])
1461  llvm_cv_win32_elmcb_pcstr="PSTR"
1462])
1463  AC_DEFINE_UNQUOTED([WIN32_ELMCB_PCSTR],$llvm_cv_win32_elmcb_pcstr,[Type of 1st arg on ELM Callback])
1464fi
1465
1466dnl Check for variations in the Standard C++ library and STL. These macros are
1467dnl provided by LLVM in the autoconf/m4 directory.
1468AC_FUNC_ISNAN
1469AC_FUNC_ISINF
1470
1471dnl Check for mmap support.We also need to know if /dev/zero is required to
1472dnl be opened for allocating RWX memory.
1473dnl Make sure we aren't attempting to configure for an unknown system
1474if test "$llvm_cv_platform_type" = "Unix" ; then
1475  AC_FUNC_MMAP
1476  AC_FUNC_MMAP_FILE
1477  AC_NEED_DEV_ZERO_FOR_MMAP
1478
1479  if test "$ac_cv_func_mmap_fixed_mapped" = "no"
1480  then
1481    AC_MSG_WARN([mmap() of a fixed address required but not supported])
1482  fi
1483  if test "$ac_cv_func_mmap_file" = "no"
1484  then
1485    AC_MSG_WARN([mmap() of files required but not found])
1486  fi
1487fi
1488
1489dnl atomic builtins are required for threading support.
1490AC_MSG_CHECKING(for GCC atomic builtins)
1491dnl Since we'll be using these atomic builtins in C++ files we should test
1492dnl the C++ compiler.
1493AC_LANG_PUSH([C++])
1494AC_LINK_IFELSE(
1495  AC_LANG_SOURCE(
1496    [[int main() {
1497        volatile unsigned long val = 1;
1498        __sync_synchronize();
1499        __sync_val_compare_and_swap(&val, 1, 0);
1500        __sync_add_and_fetch(&val, 1);
1501        __sync_sub_and_fetch(&val, 1);
1502        return 0;
1503      }
1504    ]]),
1505  AC_LANG_POP([C++])
1506  AC_MSG_RESULT(yes)
1507  AC_DEFINE(LLVM_MULTITHREADED, 1, Build multithreading support into LLVM),
1508  AC_MSG_RESULT(no)
1509  AC_DEFINE(LLVM_MULTITHREADED, 0, Build multithreading support into LLVM)
1510  AC_MSG_WARN([LLVM will be built thread-unsafe because atomic builtins are missing]))
1511
1512dnl===-----------------------------------------------------------------------===
1513dnl===
1514dnl=== SECTION 9: Additional checks, variables, etc.
1515dnl===
1516dnl===-----------------------------------------------------------------------===
1517
1518dnl Handle 32-bit linux systems running a 64-bit kernel.
1519dnl This has to come after section 4 because it invokes the compiler.
1520if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
1521  AC_IS_LINUX_MIXED
1522  if test "$llvm_cv_linux_mixed" = "yes"; then
1523    llvm_cv_target_arch="x86"
1524    ARCH="x86"
1525  fi
1526fi
1527
1528dnl Check, whether __dso_handle is present
1529AC_CHECK_FUNCS([__dso_handle])
1530
1531dnl Check wether llvm-gcc is based on dragonegg
1532AC_CACHE_CHECK([whether llvm-gcc is dragonegg],[llvm_cv_llvmgcc_dragonegg],
1533[llvm_cv_llvmgcc_dragonegg="no"
1534if test -n "$LLVMGCC" ; then
1535  cp /dev/null conftest.c
1536  $LLVMGCC -fplugin-arg-dragonegg-emit-ir -S -o - conftest.c > /dev/null 2>&1
1537  if test $? -eq 0 ; then
1538    llvm_cv_llvmgcc_dragonegg="yes"
1539  fi
1540  rm conftest.c
1541fi])
1542
1543dnl Set the flags needed to emit LLVM IR and to disable optimizations
1544dnl in llvmgcc
1545if test "$llvm_cv_llvmgcc_dragonegg" = "yes" ; then
1546  LLVMCC_EMITIR_FLAG="-fplugin-arg-dragonegg-emit-ir"
1547  LLVMCC_DISABLEOPT_FLAGS="-fplugin-arg-dragonegg-llvm-ir-optimize=0"
1548else
1549  LLVMCC_EMITIR_FLAG="-emit-llvm"
1550  LLVMCC_DISABLEOPT_FLAGS="-mllvm -disable-llvm-optzns"
1551fi
1552
1553AC_SUBST(LLVMCC_EMITIR_FLAG)
1554
1555dnl See if the llvm-gcc executable can compile to LLVM assembly
1556AC_CACHE_CHECK([whether llvm-gcc is sane],[llvm_cv_llvmgcc_sanity],
1557[llvm_cv_llvmgcc_sanity="no"
1558if test -n "$LLVMGCC" ; then
1559  cp /dev/null conftest.c
1560  $LLVMGCC "$LLVMCC_EMITIR_FLAG" -S -o - conftest.c | \
1561      grep 'target datalayout =' > /dev/null 2>&1
1562  if test $? -eq 0 ; then
1563    llvm_cv_llvmgcc_sanity="yes"
1564  fi
1565  rm conftest.c
1566fi])
1567
1568dnl Since we have a sane llvm-gcc, identify it and its sub-tools
1569dnl Furthermore, add some information about the tools
1570if test "$llvm_cv_llvmgcc_sanity" = "yes" ; then
1571  AC_MSG_CHECKING([llvm-gcc component support])
1572  llvmcc1path=`$LLVMGCC --print-prog-name=cc1`
1573  AC_SUBST(LLVMCC1,$llvmcc1path)
1574  llvmcc1pluspath=`$LLVMGCC --print-prog-name=cc1plus`
1575  AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
1576  llvmgccdir=`echo "$llvmcc1path" | sed 's,/libexec/.*,,'`
1577  AC_SUBST(LLVMGCCDIR,$llvmgccdir)
1578  llvmgcclangs=[`$LLVMGCC -v --help 2>&1 | grep '^Configured with:' | sed 's/^.*--enable-languages=\([^ ]*\).*/\1/'`]
1579  AC_SUBST(LLVMGCC_LANGS,$llvmgcclangs)
1580  AC_SUBST(LLVMGCC_DRAGONEGG,$llvm_cv_llvmgcc_dragonegg)
1581  AC_SUBST(LLVMCC_DISABLEOPT_FLAGS)
1582  AC_MSG_RESULT([ok])
1583fi
1584
1585dnl Propagate the shared library extension that the libltdl checks did to
1586dnl the Makefiles so we can use it there too
1587AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
1588
1589dnl Propagate the run-time library path variable that the libltdl
1590dnl checks found to the Makefiles so we can use it there too
1591AC_SUBST(SHLIBPATH_VAR,$libltdl_cv_shlibpath_var)
1592
1593# Translate the various configuration directories and other basic
1594# information into substitutions that will end up in Makefile.config.in
1595# that these configured values can be used by the makefiles
1596if test "${prefix}" = "NONE" ; then
1597  prefix="/usr/local"
1598fi
1599eval LLVM_PREFIX="${prefix}";
1600eval LLVM_BINDIR="${prefix}/bin";
1601eval LLVM_LIBDIR="${prefix}/lib";
1602eval LLVM_DATADIR="${prefix}/share/llvm";
1603eval LLVM_DOCSDIR="${prefix}/share/doc/llvm";
1604eval LLVM_ETCDIR="${prefix}/etc/llvm";
1605eval LLVM_INCLUDEDIR="${prefix}/include";
1606eval LLVM_INFODIR="${prefix}/info";
1607eval LLVM_MANDIR="${prefix}/man";
1608LLVM_CONFIGTIME=`date`
1609AC_SUBST(LLVM_PREFIX)
1610AC_SUBST(LLVM_BINDIR)
1611AC_SUBST(LLVM_LIBDIR)
1612AC_SUBST(LLVM_DATADIR)
1613AC_SUBST(LLVM_DOCSDIR)
1614AC_SUBST(LLVM_ETCDIR)
1615AC_SUBST(LLVM_INCLUDEDIR)
1616AC_SUBST(LLVM_INFODIR)
1617AC_SUBST(LLVM_MANDIR)
1618AC_SUBST(LLVM_CONFIGTIME)
1619
1620# Place the various directores into the config.h file as #defines so that we
1621# can know about the installation paths within LLVM.
1622AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX",
1623                   [Installation prefix directory])
1624AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR",
1625                   [Installation directory for binary executables])
1626AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR",
1627                   [Installation directory for libraries])
1628AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR",
1629                   [Installation directory for data files])
1630AC_DEFINE_UNQUOTED(LLVM_DOCSDIR, "$LLVM_DOCSDIR",
1631                   [Installation directory for documentation])
1632AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR",
1633                   [Installation directory for config files])
1634AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR",
1635                   [Installation directory for include files])
1636AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR",
1637                   [Installation directory for .info files])
1638AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR",
1639                   [Installation directory for man pages])
1640AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME",
1641                   [Time at which LLVM was configured])
1642AC_DEFINE_UNQUOTED(LLVM_HOSTTRIPLE, "$host",
1643                   [Host triple we were built on])
1644
1645# Determine which bindings to build.
1646if test "$BINDINGS_TO_BUILD" = auto ; then
1647  BINDINGS_TO_BUILD=""
1648  if test "x$OCAMLC" != x -a "x$OCAMLDEP" != x ; then
1649    BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD"
1650  fi
1651fi
1652AC_SUBST(BINDINGS_TO_BUILD,$BINDINGS_TO_BUILD)
1653
1654# This isn't really configurey, but it avoids having to repeat the list in
1655# other files.
1656AC_SUBST(ALL_BINDINGS,ocaml)
1657
1658# Do any work necessary to ensure that bindings have what they need.
1659binding_prereqs_failed=0
1660for a_binding in $BINDINGS_TO_BUILD ; do
1661  case "$a_binding" in
1662  ocaml)
1663    if test "x$OCAMLC" = x ; then
1664      AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlc not found. Try configure OCAMLC=/path/to/ocamlc])
1665      binding_prereqs_failed=1
1666    fi
1667    if test "x$OCAMLDEP" = x ; then
1668      AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamldep not found. Try configure OCAMLDEP=/path/to/ocamldep])
1669      binding_prereqs_failed=1
1670    fi
1671    if test "x$OCAMLOPT" = x ; then
1672      AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlopt not found. Try configure OCAMLOPT=/path/to/ocamlopt])
1673      dnl ocamlopt is optional!
1674    fi
1675    if test "x$with_ocaml_libdir" != xauto ; then
1676      AC_SUBST(OCAML_LIBDIR,$with_ocaml_libdir)
1677    else
1678      ocaml_stdlib="`"$OCAMLC" -where`"
1679      if test "$LLVM_PREFIX" '<' "$ocaml_stdlib" -a "$ocaml_stdlib" '<' "$LLVM_PREFIX~"
1680      then
1681        # ocaml stdlib is beneath our prefix; use stdlib
1682        AC_SUBST(OCAML_LIBDIR,$ocaml_stdlib)
1683      else
1684        # ocaml stdlib is outside our prefix; use libdir/ocaml
1685        AC_SUBST(OCAML_LIBDIR,$LLVM_LIBDIR/ocaml)
1686      fi
1687    fi
1688    ;;
1689  esac
1690done
1691if test "$binding_prereqs_failed" = 1 ; then
1692  AC_MSG_ERROR([Prequisites for bindings not satisfied. Fix them or use configure --disable-bindings.])
1693fi
1694
1695dnl Determine whether the compiler supports -fvisibility-inlines-hidden.
1696AC_CXX_USE_VISIBILITY_INLINES_HIDDEN
1697
1698dnl Determine linker rpath flag
1699if test "$llvm_cv_link_use_r" = "yes" ; then
1700  RPATH="-Wl,-R"
1701else
1702  RPATH="-Wl,-rpath"
1703fi
1704AC_SUBST(RPATH)
1705
1706dnl Determine linker rdynamic flag
1707if test "$llvm_cv_link_use_export_dynamic" = "yes" ; then
1708  RDYNAMIC="-Wl,-export-dynamic"
1709else
1710  RDYNAMIC=""
1711fi
1712AC_SUBST(RDYNAMIC)
1713
1714dnl===-----------------------------------------------------------------------===
1715dnl===
1716dnl=== SECTION 10: Specify the output files and generate it
1717dnl===
1718dnl===-----------------------------------------------------------------------===
1719
1720dnl Configure header files
1721dnl WARNING: dnl If you add or remove any of the following config headers, then
1722dnl you MUST also update Makefile.rules so that the variable FilesToConfig
1723dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
1724dnl files can be updated automatically when their *.in sources change.
1725AC_CONFIG_HEADERS([include/llvm/Config/config.h include/llvm/Config/llvm-config.h])
1726AH_TOP([#ifndef CONFIG_H
1727#define CONFIG_H])
1728AH_BOTTOM([#endif])
1729
1730AC_CONFIG_FILES([include/llvm/Config/Targets.def])
1731AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def])
1732AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def])
1733AC_CONFIG_FILES([include/llvm/Config/Disassemblers.def])
1734AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
1735
1736dnl Configure the makefile's configuration data
1737AC_CONFIG_FILES([Makefile.config])
1738
1739dnl Configure the RPM spec file for LLVM
1740AC_CONFIG_FILES([llvm.spec])
1741
1742dnl Configure doxygen's configuration file
1743AC_CONFIG_FILES([docs/doxygen.cfg])
1744if test -f ${srcdir}/tools/clang/README.txt; then
1745  AC_CONFIG_FILES([tools/clang/docs/doxygen.cfg])
1746fi
1747
1748dnl Configure llvmc's Base plugin
1749AC_CONFIG_FILES([tools/llvmc/src/Base.td])
1750
1751dnl Do the first stage of configuration for llvm-config.in.
1752AC_CONFIG_FILES([tools/llvm-config/llvm-config.in])
1753
1754dnl Do special configuration of Makefiles
1755AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
1756AC_CONFIG_MAKEFILE(Makefile)
1757AC_CONFIG_MAKEFILE(Makefile.common)
1758AC_CONFIG_MAKEFILE(examples/Makefile)
1759AC_CONFIG_MAKEFILE(lib/Makefile)
1760AC_CONFIG_MAKEFILE(runtime/Makefile)
1761AC_CONFIG_MAKEFILE(test/Makefile)
1762AC_CONFIG_MAKEFILE(test/Makefile.tests)
1763AC_CONFIG_MAKEFILE(unittests/Makefile)
1764AC_CONFIG_MAKEFILE(tools/Makefile)
1765AC_CONFIG_MAKEFILE(utils/Makefile)
1766AC_CONFIG_MAKEFILE(projects/Makefile)
1767AC_CONFIG_MAKEFILE(bindings/Makefile)
1768AC_CONFIG_MAKEFILE(bindings/ocaml/Makefile.ocaml)
1769
1770dnl Finally, crank out the output
1771AC_OUTPUT
1772