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