Missing file from previous commmit (127341) for InitializeTargetAsmParser function.
[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 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         mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
618         spu)      TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
619         xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
620         msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
621         systemz)  TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
622         blackfin) TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
623         cbe)      TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;;
624         cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
625         mblaze)   TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
626         ptx)      TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
627         host) case "$llvm_cv_target_arch" in
628             x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
629             x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
630             Sparc)       TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
631             PowerPC)     TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
632             Alpha)       TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
633             ARM)         TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
634             Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
635             MBlaze)      TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
636             CellSPU|SPU) TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
637             XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
638             MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
639             s390x)       TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
640             Blackfin)    TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
641             PTX)         TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
642             *)       AC_MSG_ERROR([Can not set target to build]) ;;
643           esac ;;
644         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
645       esac
646   done
647   ;;
648 esac
649 AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
650
651 # Determine whether we are building LLVM support for the native architecture.
652 # If so, define LLVM_NATIVE_ARCH to that LLVM target.
653 for a_target in $TARGETS_TO_BUILD; do
654   if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
655     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH, $LLVM_NATIVE_ARCH,
656       [LLVM architecture name for the native architecture, if available])
657     LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
658     LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
659     LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
660     LLVM_NATIVE_ASMPARSER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser"
661     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGET, $LLVM_NATIVE_TARGET,
662       [LLVM name for the native Target init function, if available])
663     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETINFO, $LLVM_NATIVE_TARGETINFO,
664       [LLVM name for the native TargetInfo init function, if available])
665     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPRINTER, $LLVM_NATIVE_ASMPRINTER,
666       [LLVM name for the native AsmPrinter init function, if available])
667     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPARSER, $LLVM_NATIVE_ASMPARSER,
668       [LLVM name for the native AsmParser init function, if available])
669   fi
670 done
671
672 # Build the LLVM_TARGET and LLVM_... macros for Targets.def and the individual
673 # target feature def files.
674 LLVM_ENUM_TARGETS=""
675 LLVM_ENUM_ASM_PRINTERS=""
676 LLVM_ENUM_ASM_PARSERS=""
677 LLVM_ENUM_DISASSEMBLERS=""
678 for target_to_build in $TARGETS_TO_BUILD; do
679   LLVM_ENUM_TARGETS="LLVM_TARGET($target_to_build) $LLVM_ENUM_TARGETS"
680   if test -f ${srcdir}/lib/Target/${target_to_build}/*AsmPrinter.cpp ; then
681     LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
682   fi
683   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
684     LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
685   fi
686   if test -f ${srcdir}/lib/Target/${target_to_build}/Disassembler/Makefile ; then
687     LLVM_ENUM_DISASSEMBLERS="LLVM_DISASSEMBLER($target_to_build) $LLVM_ENUM_DISASSEMBLERS";
688   fi
689 done
690 AC_SUBST(LLVM_ENUM_TARGETS)
691 AC_SUBST(LLVM_ENUM_ASM_PRINTERS)
692 AC_SUBST(LLVM_ENUM_ASM_PARSERS)
693 AC_SUBST(LLVM_ENUM_DISASSEMBLERS)
694
695 dnl Prevent the CBackend from using printf("%a") for floating point so older
696 dnl C compilers that cannot deal with the 0x0p+0 hex floating point format
697 dnl can still compile the CBE's output
698 AC_ARG_ENABLE([cbe-printf-a],AS_HELP_STRING([--enable-cbe-printf-a],
699   [Enable C Backend output with hex floating point via %a  (default is YES)]),,
700   enableval=default)
701 case "$enableval" in
702   yes) AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
703   no)  AC_SUBST(ENABLE_CBE_PRINTF_A,[0]) ;;
704   default)  AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
705   *) AC_MSG_ERROR([Invalid setting for --enable-cbe-printf-a. Use "yes" or "no"]) ;;
706 esac
707 AC_DEFINE_UNQUOTED([ENABLE_CBE_PRINTF_A],$ENABLE_CBE_PRINTF_A,
708                    [Define if CBE is enabled for printf %a output])
709
710 dnl Allow a specific llvm-gcc/llvm-g++ pair to be used with this LLVM config.
711 AC_ARG_WITH(llvmgccdir,
712   AS_HELP_STRING([--with-llvmgccdir],
713     [Specify location of llvm-gcc install dir (default searches PATH)]),,
714     withval=default)
715 case "$withval" in
716   default) WITH_LLVMGCCDIR=default ;;
717   /* | [[A-Za-z]]:[[\\/]]*)      WITH_LLVMGCCDIR=$withval ;;
718   *) AC_MSG_ERROR([Invalid path for --with-llvmgccdir. Provide full path]) ;;
719 esac
720
721 dnl Allow a specific llvm-gcc compiler to be used with this LLVM config.
722 AC_ARG_WITH(llvmgcc,
723   AS_HELP_STRING([--with-llvmgcc],
724     [Specify location of llvm-gcc driver (default searches PATH)]),
725     LLVMGCC=$with_llvmgcc
726       WITH_LLVMGCCDIR="",)
727
728 dnl Allow a specific llvm-g++ compiler to be used with this LLVM config.
729 AC_ARG_WITH(llvmgxx,
730   AS_HELP_STRING([--with-llvmgxx],
731     [Specify location of llvm-g++ driver (default searches PATH)]),
732     LLVMGXX=$with_llvmgxx
733     WITH_LLVMGCCDIR="",)
734
735 if test -n "$LLVMGCC"; then
736    LLVMGCCCOMMAND="$LLVMGCC"
737 fi
738
739 if test -n "$LLVMGXX"; then
740    LLVMGXXCOMMAND="$LLVMGXX"
741 fi
742
743 if test -n "$LLVMGCC" && test -z "$LLVMGXX"; then
744    AC_MSG_ERROR([Invalid llvm-g++. Use --with-llvmgxx when --with-llvmgcc is used]);
745 fi
746
747 if test -n "$LLVMGXX" && test -z "$LLVMGCC"; then
748    AC_MSG_ERROR([Invalid llvm-gcc. Use --with-llvmgcc when --with-llvmgxx is used]);
749 fi
750
751 dnl Allow a specific Clang compiler to be used with this LLVM config.
752 AC_ARG_WITH(clang,
753   AS_HELP_STRING([--with-clang],
754     [Specify location of clang compiler (default is --with-built-clang)]),
755     [],[with_clang=default])
756
757 dnl Enable use of the built Clang.
758 AC_ARG_WITH(built-clang,
759   AS_HELP_STRING([--with-built-clang],
760     [Use the compiled Clang as the LLVM compiler (default=check)]),
761     [],[with_built_clang=check])
762
763 dnl Select the Clang compiler option.
764 dnl
765 dnl If --with-clang is given, always honor that; otherwise honor
766 dnl --with-built-clang, or check if we have the clang sources.
767 AC_MSG_CHECKING([clang compiler])
768 WITH_CLANGPATH=""
769 WITH_BUILT_CLANG=0
770 if test "$with_clang" != "default"; then
771    WITH_CLANGPATH="$with_clang"
772    if ! test -x "$WITH_CLANGPATH"; then
773      AC_MSG_ERROR([invalid --with-clang, path does not specify an executable])
774    fi
775 elif test "$with_built_clang" = "yes"; then
776    WITH_BUILT_CLANG=1
777 elif test "$with_built_clang" = "no"; then
778    WITH_BUILT_CLANG=0
779 else
780    if test "$with_built_clang" != "check"; then
781       AC_MSG_ERROR([invalid value for --with-built-clang.])
782    fi
783
784    if test -f ${srcdir}/tools/clang/README.txt; then
785      WITH_BUILT_CLANG=1
786    fi
787 fi
788
789 if ! test -z "$WITH_CLANGPATH"; then
790    AC_MSG_RESULT([$WITH_CLANGPATH])
791    WITH_CLANGXXPATH=`"$WITH_CLANGPATH" --print-prog-name=clang++`
792 elif test "$WITH_BUILT_CLANG" = "1"; then
793    AC_MSG_RESULT([built])
794 else
795    AC_MSG_RESULT([none])
796 fi
797 AC_SUBST(CLANGPATH,$WITH_CLANGPATH)
798 AC_SUBST(CLANGXXPATH,$WITH_CLANGXXPATH)
799 AC_SUBST(ENABLE_BUILT_CLANG,$WITH_BUILT_CLANG)
800
801 dnl Override the option to use for optimized builds.
802 AC_ARG_WITH(optimize-option,
803   AS_HELP_STRING([--with-optimize-option],
804                  [Select the compiler options to use for optimized builds]),,
805                  withval=default)
806 AC_MSG_CHECKING([optimization flags])
807 case "$withval" in
808   default)
809     case "$llvm_cv_os_type" in
810     FreeBSD) optimize_option=-O2 ;;
811     MingW) optimize_option=-O2 ;;
812     *)     optimize_option=-O3 ;;
813     esac ;;
814   *) optimize_option="$withval" ;;
815 esac
816 AC_SUBST(OPTIMIZE_OPTION,$optimize_option)
817 AC_MSG_RESULT([$optimize_option])
818
819 dnl Specify extra build options
820 AC_ARG_WITH(extra-options,
821   AS_HELP_STRING([--with-extra-options],
822                  [Specify additional options to compile LLVM with]),,
823                  withval=default)
824 case "$withval" in
825   default) EXTRA_OPTIONS= ;;
826   *) EXTRA_OPTIONS=$withval ;;
827 esac
828 AC_SUBST(EXTRA_OPTIONS,$EXTRA_OPTIONS)
829
830 dnl Allow specific bindings to be specified for building (or not)
831 AC_ARG_ENABLE([bindings],AS_HELP_STRING([--enable-bindings],
832     [Build specific language bindings: all,auto,none,{binding-name} (default=auto)]),,
833     enableval=default)
834 BINDINGS_TO_BUILD=""
835 case "$enableval" in
836   yes | default | auto) BINDINGS_TO_BUILD="auto" ;;
837   all ) BINDINGS_TO_BUILD="ocaml" ;;
838   none | no) BINDINGS_TO_BUILD="" ;;
839   *)for a_binding in `echo $enableval|sed -e 's/,/ /g' ` ; do
840       case "$a_binding" in
841         ocaml) BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD" ;;
842         *) AC_MSG_ERROR([Unrecognized binding $a_binding]) ;;
843       esac
844   done
845   ;;
846 esac
847
848 dnl Allow the ocaml libdir to be overridden. This could go in a configure
849 dnl script for bindings/ocaml/configure, except that its auto value depends on
850 dnl OCAMLC, which is found here to support tests.
851 AC_ARG_WITH([ocaml-libdir],
852   [AS_HELP_STRING([--with-ocaml-libdir],
853     [Specify install location for ocaml bindings (default is stdlib)])],
854   [],
855   [withval=auto])
856 case "$withval" in
857   auto) with_ocaml_libdir="$withval" ;;
858   /* | [[A-Za-z]]:[[\\/]]*) with_ocaml_libdir="$withval" ;;
859   *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
860 esac
861
862 AC_ARG_WITH(clang-resource-dir,
863   AS_HELP_STRING([--with-clang-resource-dir],
864     [Relative directory from the Clang binary for resource files]),,
865     withval="")
866 AC_DEFINE_UNQUOTED(CLANG_RESOURCE_DIR,"$withval",
867                    [Relative directory for resource files])
868
869 AC_ARG_WITH(c-include-dirs,
870   AS_HELP_STRING([--with-c-include-dirs],
871     [Colon separated list of directories clang will search for headers]),,
872     withval="")
873 AC_DEFINE_UNQUOTED(C_INCLUDE_DIRS,"$withval",
874                    [Directories clang will search for headers])
875
876 AC_ARG_WITH(cxx-include-root,
877   AS_HELP_STRING([--with-cxx-include-root],
878     [Directory with the libstdc++ headers.]),,
879     withval="")
880 AC_DEFINE_UNQUOTED(CXX_INCLUDE_ROOT,"$withval",
881                    [Directory with the libstdc++ headers.])
882
883 AC_ARG_WITH(cxx-include-arch,
884   AS_HELP_STRING([--with-cxx-include-arch],
885     [Architecture of the libstdc++ headers.]),,
886     withval="")
887 AC_DEFINE_UNQUOTED(CXX_INCLUDE_ARCH,"$withval",
888                    [Arch the libstdc++ headers.])
889
890 AC_ARG_WITH(cxx-include-32bit-dir,
891   AS_HELP_STRING([--with-cxx-include-32bit-dir],
892     [32 bit multilib dir.]),,
893     withval="")
894 AC_DEFINE_UNQUOTED(CXX_INCLUDE_32BIT_DIR,"$withval",
895                    [32 bit multilib directory.])
896
897 AC_ARG_WITH(cxx-include-64bit-dir,
898   AS_HELP_STRING([--with-cxx-include-64bit-dir],
899     [64 bit multilib directory.]),,
900     withval="")
901 AC_DEFINE_UNQUOTED(CXX_INCLUDE_64BIT_DIR,"$withval",
902                    [64 bit multilib directory.])
903
904 dnl Allow linking of LLVM with GPLv3 binutils code.
905 AC_ARG_WITH(binutils-include,
906   AS_HELP_STRING([--with-binutils-include],
907     [Specify path to binutils/include/ containing plugin-api.h file for gold plugin.]),,
908   withval=default)
909 case "$withval" in
910   default) WITH_BINUTILS_INCDIR=default ;;
911   /* | [[A-Za-z]]:[[\\/]]*)      WITH_BINUTILS_INCDIR=$withval ;;
912   *) AC_MSG_ERROR([Invalid path for --with-binutils-include. Provide full path]) ;;
913 esac
914 if test "x$WITH_BINUTILS_INCDIR" != xdefault ; then
915   AC_SUBST(BINUTILS_INCDIR,$WITH_BINUTILS_INCDIR)
916   if test ! -f "$WITH_BINUTILS_INCDIR/plugin-api.h"; then
917      echo "$WITH_BINUTILS_INCDIR/plugin-api.h"
918      AC_MSG_ERROR([Invalid path to directory containing plugin-api.h.]);
919   fi
920 fi
921
922 dnl --enable-libffi : check whether the user wants to turn off libffi:
923 AC_ARG_ENABLE(libffi,AS_HELP_STRING(
924   --enable-libffi,[Check for the presence of libffi (default is NO)]),
925   [case "$enableval" in
926     yes) llvm_cv_enable_libffi="yes" ;;
927     no)  llvm_cv_enable_libffi="no"  ;;
928     *) AC_MSG_ERROR([Invalid setting for --enable-libffi. Use "yes" or "no"]) ;;
929   esac],
930   llvm_cv_enable_libffi=no)
931
932 dnl===-----------------------------------------------------------------------===
933 dnl===
934 dnl=== SECTION 4: Check for programs we need and that they are the right version
935 dnl===
936 dnl===-----------------------------------------------------------------------===
937
938 dnl Check for compilation tools
939 AC_PROG_CPP
940 AC_PROG_CC(gcc)
941 AC_PROG_CXX(g++)
942
943 AC_PROG_NM
944 AC_SUBST(NM)
945
946 dnl Check for the tools that the makefiles require
947 AC_CHECK_GNU_MAKE
948 AC_PROG_LN_S
949 AC_PATH_PROG(CMP, [cmp], [cmp])
950 AC_PATH_PROG(CP, [cp], [cp])
951 AC_PATH_PROG(DATE, [date], [date])
952 AC_PATH_PROG(FIND, [find], [find])
953 AC_PATH_PROG(GREP, [grep], [grep])
954 AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
955 AC_PATH_PROG(MV,   [mv],   [mv])
956 AC_PROG_RANLIB
957 AC_CHECK_TOOL(AR, ar, false)
958 AC_PATH_PROG(RM,   [rm],   [rm])
959 AC_PATH_PROG(SED,  [sed],  [sed])
960 AC_PATH_PROG(TAR,  [tar],  [gtar])
961 AC_PATH_PROG(BINPWD,[pwd],  [pwd])
962
963 dnl Looking for misc. graph plotting software
964 AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
965 if test "$GRAPHVIZ" != "echo Graphviz" ; then
966   AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
967   dnl If we're targeting for mingw we should emit windows paths, not msys
968   if test "$llvm_cv_os_type" = "MingW" ; then
969     GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
970   fi
971   AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
972    [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
973 fi
974 AC_PATH_PROG(DOT, [dot], [echo dot])
975 if test "$DOT" != "echo dot" ; then
976   AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
977   dnl If we're targeting for mingw we should emit windows paths, not msys
978   if test "$llvm_cv_os_type" = "MingW" ; then
979     DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
980   fi
981   AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
982    [Define to path to dot program if found or 'echo dot' otherwise])
983 fi
984 AC_PATH_PROG(FDP, [fdp], [echo fdp])
985 if test "$FDP" != "echo fdp" ; then
986   AC_DEFINE([HAVE_FDP],[1],[Define if the neat 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     FDP=`echo $FDP | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
990   fi
991   AC_DEFINE_UNQUOTED([LLVM_PATH_FDP],"$FDP${EXEEXT}",
992    [Define to path to fdp program if found or 'echo fdp' otherwise])
993 fi
994 AC_PATH_PROG(NEATO, [neato], [echo neato])
995 if test "$NEATO" != "echo neato" ; then
996   AC_DEFINE([HAVE_NEATO],[1],[Define if the neat 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     NEATO=`echo $NEATO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1000   fi
1001   AC_DEFINE_UNQUOTED([LLVM_PATH_NEATO],"$NEATO${EXEEXT}",
1002    [Define to path to neato program if found or 'echo neato' otherwise])
1003 fi
1004 AC_PATH_PROG(TWOPI, [twopi], [echo twopi])
1005 if test "$TWOPI" != "echo twopi" ; then
1006   AC_DEFINE([HAVE_TWOPI],[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     TWOPI=`echo $TWOPI | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1010   fi
1011   AC_DEFINE_UNQUOTED([LLVM_PATH_TWOPI],"$TWOPI${EXEEXT}",
1012    [Define to path to twopi program if found or 'echo twopi' otherwise])
1013 fi
1014 AC_PATH_PROG(CIRCO, [circo], [echo circo])
1015 if test "$CIRCO" != "echo circo" ; then
1016   AC_DEFINE([HAVE_CIRCO],[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     CIRCO=`echo $CIRCO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1020   fi
1021   AC_DEFINE_UNQUOTED([LLVM_PATH_CIRCO],"$CIRCO${EXEEXT}",
1022    [Define to path to circo program if found or 'echo circo' otherwise])
1023 fi
1024 AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
1025 if test "$GV" != "echo gv" ; then
1026   AC_DEFINE([HAVE_GV],[1],[Define if the gv 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     GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1030   fi
1031   AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
1032    [Define to path to gv program if found or 'echo gv' otherwise])
1033 fi
1034 AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
1035 if test "$DOTTY" != "echo dotty" ; then
1036   AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty 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     DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1040   fi
1041   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
1042    [Define to path to dotty program if found or 'echo dotty' otherwise])
1043 fi
1044 AC_PATH_PROG(XDOT_PY, [xdot.py], [echo xdot.py])
1045 if test "$XDOT_PY" != "echo xdot.py" ; then
1046   AC_DEFINE([HAVE_XDOT_PY],[1],[Define if the xdot.py 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     XDOT_PY=`echo $XDOT_PY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1050   fi
1051   AC_DEFINE_UNQUOTED([LLVM_PATH_XDOT_PY],"$XDOT_PY${EXEEXT}",
1052    [Define to path to xdot.py program if found or 'echo xdot.py' otherwise])
1053 fi
1054
1055 dnl Look for a sufficiently recent version of Perl.
1056 LLVM_PROG_PERL([5.006])
1057 AC_SUBST(PERL)
1058 if test x"$PERL" = xnone; then
1059    AC_SUBST(HAVE_PERL,0)
1060    AC_MSG_ERROR([perl is required but was not found, please install it])
1061 else
1062    AC_SUBST(HAVE_PERL,1)
1063 fi
1064
1065 dnl Find the install program
1066 AC_PROG_INSTALL
1067 dnl Prepend src dir to install path dir if it's a relative path
1068 dnl This is a hack for installs that take place in something other
1069 dnl than the top level.
1070 case "$INSTALL" in
1071  [[\\/$]]* | ?:[[\\/]]* ) ;;
1072  *)  INSTALL="\\\$(TOPSRCDIR)/$INSTALL" ;;
1073 esac
1074
1075 dnl Checks for documentation and testing tools that we can do without. If these
1076 dnl are not found then they are set to "true" which always succeeds but does
1077 dnl nothing. This just lets the build output show that we could have done
1078 dnl something if the tool was available.
1079 AC_PATH_PROG(BZIP2, [bzip2])
1080 AC_PATH_PROG(CAT, [cat])
1081 AC_PATH_PROG(DOXYGEN, [doxygen])
1082 AC_PATH_PROG(GROFF, [groff])
1083 AC_PATH_PROG(GZIPBIN, [gzip])
1084 AC_PATH_PROG(POD2HTML, [pod2html])
1085 AC_PATH_PROG(POD2MAN, [pod2man])
1086 AC_PATH_PROG(PDFROFF, [pdfroff])
1087 AC_PATH_PROG(RUNTEST, [runtest])
1088 DJ_AC_PATH_TCLSH
1089 AC_PATH_PROG(ZIP, [zip])
1090 AC_PATH_PROGS(OCAMLC, [ocamlc])
1091 AC_PATH_PROGS(OCAMLOPT, [ocamlopt])
1092 AC_PATH_PROGS(OCAMLDEP, [ocamldep])
1093 AC_PATH_PROGS(OCAMLDOC, [ocamldoc])
1094 AC_PATH_PROGS(GAS, [gas as])
1095
1096 dnl Get the version of the linker in use.
1097 AC_LINK_GET_VERSION
1098
1099 dnl Determine whether the linker supports the -R option.
1100 AC_LINK_USE_R
1101
1102 dnl Determine whether the linker supports the -export-dynamic option.
1103 AC_LINK_EXPORT_DYNAMIC
1104
1105 dnl Determine whether the linker supports the --version-script option.
1106 AC_LINK_VERSION_SCRIPT
1107
1108 dnl Check for libtool and the library that has dlopen function (which must come
1109 dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
1110 dnl libtool).
1111 AC_LIBTOOL_DLOPEN
1112 AC_LIB_LTDL
1113
1114 if test "$WITH_LLVMGCCDIR" = "default" ; then
1115   LLVMGCC="llvm-gcc${EXEEXT}"
1116   LLVMGXX="llvm-g++${EXEEXT}"
1117   LLVMGCCCOMMAND="$LLVMGCC"
1118   LLVMGXXCOMMAND="$LLVMGXX"
1119   AC_SUBST(LLVMGCCCOMMAND,$LLVMGCCCOMMAND)
1120   AC_SUBST(LLVMGXXCOMMAND,$LLVMGXXCOMMAND)
1121   AC_PATH_PROG(LLVMGCC, $LLVMGCC, [])
1122   AC_PATH_PROG(LLVMGXX, $LLVMGXX, [])
1123 else
1124   if test -z "$LLVMGCC"; then
1125     LLVMGCC="$WITH_LLVMGCCDIR/bin/llvm-gcc${EXEEXT}"
1126     LLVMGCCCOMMAND="$LLVMGCC"
1127   fi
1128   if test -z "$LLVMGXX"; then
1129     LLVMGXX="$WITH_LLVMGCCDIR/bin/llvm-g++${EXEEXT}"
1130     LLVMGXXCOMMAND="$LLVMGXX"
1131   fi
1132
1133   AC_SUBST(LLVMGCC,$LLVMGCC)
1134   AC_SUBST(LLVMGXX,$LLVMGXX)
1135   AC_SUBST(LLVMGCCCOMMAND,$LLVMGCCCOMMAND)
1136   AC_SUBST(LLVMGXXCOMMAND,$LLVMGXXCOMMAND)
1137 fi
1138
1139 dnl Select the LLVM capable compiler to use, we default to using llvm-gcc if
1140 dnl found, otherwise clang if available.
1141 AC_ARG_WITH(llvmcc,
1142   AS_HELP_STRING([--with-llvmcc=<name>],
1143     [Choose the LLVM capable compiler to use (llvm-gcc, clang, or none; default=check)]),
1144     [],[with_llvmcc=check])
1145 AC_MSG_CHECKING([LLVM capable compiler])
1146 if test "$with_llvmcc" != "check"; then
1147    if (test "$with_llvmcc" != "llvm-gcc" &&
1148        test "$with_llvmcc" != "clang" &&
1149        test "$with_llvmcc" != "none"); then
1150       AC_MSG_ERROR([invalid value for --with-llvmcc, expected 'llvm-gcc', 'clang', or 'none'.])
1151    fi
1152    WITH_LLVMCC="$with_llvmcc"
1153 elif test -n "$LLVMGCC"; then
1154    WITH_LLVMCC=llvm-gcc
1155 elif test -n "$WITH_CLANGPATH" || test "$WITH_BUILT_CLANG" -ne "0"; then
1156    WITH_LLVMCC=clang
1157 else
1158    WITH_LLVMCC=none
1159 fi
1160 AC_MSG_RESULT([$WITH_LLVMCC])
1161 AC_SUBST(LLVMCC_OPTION,$WITH_LLVMCC)
1162
1163 AC_MSG_CHECKING([tool compatibility])
1164
1165 dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
1166 dnl ICC; we use GCC specific options in the makefiles so the compiler needs
1167 dnl to support those options.
1168 dnl "icc" emits gcc signatures
1169 dnl "icc -no-gcc" emits no gcc signature BUT is still compatible
1170 ICC=no
1171 IXX=no
1172 case $CC in
1173   icc*|icpc*)
1174     ICC=yes
1175     IXX=yes
1176     ;;
1177    *)
1178     ;;
1179 esac
1180
1181 if test "$GCC" != "yes" && test "$ICC" != "yes"
1182 then
1183   AC_MSG_ERROR([gcc|icc required but not found])
1184 fi
1185
1186 dnl Ensure that compilation tools are compatible with GCC extensions
1187 if test "$GXX" != "yes" && test "$IXX" != "yes"
1188 then
1189   AC_MSG_ERROR([g++|clang++|icc required but not found])
1190 fi
1191
1192 dnl Verify that GCC is version 3.0 or higher
1193 if test "$GCC" = "yes"
1194 then
1195   AC_COMPILE_IFELSE([[#if !defined(__GNUC__) || __GNUC__ < 3
1196 #error Unsupported GCC version
1197 #endif
1198 ]], [], [AC_MSG_ERROR([gcc 3.x required, but you have a lower version])])
1199 fi
1200
1201 dnl Check for GNU Make.  We use its extensions, so don't build without it
1202 if test -z "$llvm_cv_gnu_make_command"
1203 then
1204   AC_MSG_ERROR([GNU Make required but not found])
1205 fi
1206
1207 dnl Tool compatibility is okay if we make it here.
1208 AC_MSG_RESULT([ok])
1209
1210 dnl Check optional compiler flags.
1211 AC_MSG_CHECKING([optional compiler flags])
1212 CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
1213 CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
1214 AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS])
1215
1216 dnl===-----------------------------------------------------------------------===
1217 dnl===
1218 dnl=== SECTION 5: Check for libraries
1219 dnl===
1220 dnl===-----------------------------------------------------------------------===
1221
1222 AC_CHECK_LIB(m,sin)
1223 if test "$llvm_cv_os_type" = "MingW" ; then
1224   AC_CHECK_LIB(imagehlp, main)
1225   AC_CHECK_LIB(psapi, main)
1226 fi
1227
1228 dnl dlopen() is required for plugin support.
1229 AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],
1230                [Define if dlopen() is available on this platform.]),
1231                AC_MSG_WARN([dlopen() not found - disabling plugin support]))
1232
1233 dnl libffi is optional; used to call external functions from the interpreter
1234 if test "$llvm_cv_enable_libffi" = "yes" ; then
1235   AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1],
1236                  [Define if libffi is available on this platform.]),
1237                  AC_MSG_ERROR([libffi not found - configure without --enable-libffi to compile without it]))
1238 fi
1239
1240 dnl mallinfo is optional; the code can compile (minus features) without it
1241 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
1242                [Define if mallinfo() is available on this platform.]))
1243
1244 dnl pthread locking functions are optional - but llvm will not be thread-safe
1245 dnl without locks.
1246 if test "$ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1247   AC_CHECK_LIB(pthread, pthread_mutex_init)
1248   AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
1249                  AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
1250                            [Have pthread_mutex_lock]))
1251   AC_SEARCH_LIBS(pthread_rwlock_init,pthread,
1252                  AC_DEFINE([HAVE_PTHREAD_RWLOCK_INIT],[1],
1253                  [Have pthread_rwlock_init]))
1254   AC_SEARCH_LIBS(pthread_getspecific,pthread,
1255                  AC_DEFINE([HAVE_PTHREAD_GETSPECIFIC],[1],
1256                  [Have pthread_getspecific]))
1257 fi
1258
1259 dnl Allow extra x86-disassembler library
1260 AC_ARG_WITH(udis86,
1261   AS_HELP_STRING([--with-udis86=<path>],
1262     [Use udis86 external x86 disassembler library]),
1263     [
1264       AC_SUBST(USE_UDIS86, [1])
1265       case "$withval" in
1266         /usr/lib|yes) ;;
1267         *) LDFLAGS="$LDFLAGS -L${withval}" ;;
1268       esac
1269       AC_CHECK_LIB(udis86, ud_init, [], [
1270         echo "Error! You need to have libudis86 around."
1271         exit -1
1272       ])
1273     ],
1274     AC_SUBST(USE_UDIS86, [0]))
1275 AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
1276                    [Define if use udis86 library])
1277
1278 dnl Allow OProfile support for JIT output.
1279 AC_ARG_WITH(oprofile,
1280   AS_HELP_STRING([--with-oprofile=<prefix>],
1281     [Tell OProfile >= 0.9.4 how to symbolize JIT output]),
1282     [
1283       AC_SUBST(USE_OPROFILE, [1])
1284       case "$withval" in
1285         /usr|yes) llvm_cv_oppath=/usr/lib/oprofile ;;
1286         no) llvm_cv_oppath=
1287             AC_SUBST(USE_OPROFILE, [0]) ;;
1288         *) llvm_cv_oppath="${withval}/lib/oprofile"
1289            CPPFLAGS="-I${withval}/include";;
1290       esac
1291       if test -n "$llvm_cv_oppath" ; then
1292         LIBS="$LIBS -L${llvm_cv_oppath} -Wl,-rpath,${llvm_cv_oppath}"
1293         dnl Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537744:
1294         dnl libbfd is not included properly in libopagent in some Debian
1295         dnl versions.  If libbfd isn't found at all, we assume opagent works
1296         dnl anyway.
1297         AC_SEARCH_LIBS(bfd_init, bfd, [], [])
1298         AC_SEARCH_LIBS(op_open_agent, opagent, [], [
1299           echo "Error! You need to have libopagent around."
1300           exit -1
1301         ])
1302         AC_CHECK_HEADER([opagent.h], [], [
1303           echo "Error! You need to have opagent.h around."
1304           exit -1
1305           ])
1306       fi
1307     ],
1308     [
1309       AC_SUBST(USE_OPROFILE, [0])
1310     ])
1311 AC_DEFINE_UNQUOTED([USE_OPROFILE],$USE_OPROFILE,
1312                    [Define if we have the oprofile JIT-support library])
1313
1314 dnl===-----------------------------------------------------------------------===
1315 dnl===
1316 dnl=== SECTION 6: Check for header files
1317 dnl===
1318 dnl===-----------------------------------------------------------------------===
1319
1320 dnl First, use autoconf provided macros for specific headers that we need
1321 dnl We don't check for ancient stuff or things that are guaranteed to be there
1322 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
1323 dnl Generally we're looking for POSIX headers.
1324 AC_HEADER_DIRENT
1325 AC_HEADER_MMAP_ANONYMOUS
1326 AC_HEADER_STAT
1327 AC_HEADER_STDC
1328 AC_HEADER_SYS_WAIT
1329 AC_HEADER_TIME
1330
1331 AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
1332 AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h termios.h unistd.h])
1333 AC_CHECK_HEADERS([utime.h windows.h])
1334 AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h sys/uio.h])
1335 AC_CHECK_HEADERS([sys/types.h sys/ioctl.h malloc/malloc.h mach/mach.h])
1336 AC_CHECK_HEADERS([valgrind/valgrind.h])
1337 AC_CHECK_HEADERS([fenv.h])
1338 if test "$ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1339   AC_CHECK_HEADERS(pthread.h,
1340                    AC_SUBST(HAVE_PTHREAD, 1),
1341                    AC_SUBST(HAVE_PTHREAD, 0))
1342 else
1343   AC_SUBST(HAVE_PTHREAD, 0)
1344 fi
1345
1346 dnl Try to find ffi.h.
1347 if test "$llvm_cv_enable_libffi" = "yes" ; then
1348   AC_CHECK_HEADERS([ffi.h ffi/ffi.h])
1349 fi
1350
1351 dnl Try to find Darwin specific crash reporting libraries.
1352 AC_CHECK_HEADERS([CrashReporterClient.h])
1353
1354 dnl Try to find Darwin specific crash reporting global.
1355 AC_MSG_CHECKING([__crashreporter_info__])
1356 AC_LINK_IFELSE(
1357   AC_LANG_SOURCE(
1358     [[extern const char *__crashreporter_info__;
1359       int main() {
1360         __crashreporter_info__ = "test";
1361         return 0;
1362       }
1363     ]]),
1364   AC_MSG_RESULT(yes)
1365   AC_DEFINE(HAVE_CRASHREPORTER_INFO, 1, Can use __crashreporter_info__),
1366   AC_MSG_RESULT(no)
1367   AC_DEFINE(HAVE_CRASHREPORTER_INFO, 0,
1368             Define if __crashreporter_info__ exists.))
1369
1370 dnl===-----------------------------------------------------------------------===
1371 dnl===
1372 dnl=== SECTION 7: Check for types and structures
1373 dnl===
1374 dnl===-----------------------------------------------------------------------===
1375
1376 AC_HUGE_VAL_CHECK
1377 AC_TYPE_PID_T
1378 AC_TYPE_SIZE_T
1379 AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[Define as the return type of signal handlers (`int' or `void').])
1380 AC_STRUCT_TM
1381 AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
1382 AC_CHECK_TYPES([uint64_t],,
1383          AC_CHECK_TYPES([u_int64_t],,
1384          AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
1385
1386 dnl===-----------------------------------------------------------------------===
1387 dnl===
1388 dnl=== SECTION 8: Check for specific functions needed
1389 dnl===
1390 dnl===-----------------------------------------------------------------------===
1391
1392 AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
1393 AC_CHECK_FUNCS([powf fmodf strtof round ])
1394 AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
1395 AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
1396 AC_CHECK_FUNCS([mktemp posix_spawn realpath sbrk setrlimit strdup ])
1397 AC_CHECK_FUNCS([strerror strerror_r setenv ])
1398 AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
1399 AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
1400 AC_C_PRINTF_A
1401 AC_FUNC_RAND48
1402
1403 dnl Check the declaration "Secure API" on Windows environments.
1404 AC_CHECK_DECLS([strerror_s])
1405
1406 dnl Check symbols in libgcc.a for JIT on Mingw.
1407 if test "$llvm_cv_os_type" = "MingW" ; then
1408   AC_CHECK_LIB(gcc,_alloca,AC_DEFINE([HAVE__ALLOCA],[1],[Have host's _alloca]))
1409   AC_CHECK_LIB(gcc,__alloca,AC_DEFINE([HAVE___ALLOCA],[1],[Have host's __alloca]))
1410   AC_CHECK_LIB(gcc,__chkstk,AC_DEFINE([HAVE___CHKSTK],[1],[Have host's __chkstk]))
1411   AC_CHECK_LIB(gcc,___chkstk,AC_DEFINE([HAVE____CHKSTK],[1],[Have host's ___chkstk]))
1412
1413   AC_CHECK_LIB(gcc,__ashldi3,AC_DEFINE([HAVE___ASHLDI3],[1],[Have host's __ashldi3]))
1414   AC_CHECK_LIB(gcc,__ashrdi3,AC_DEFINE([HAVE___ASHRDI3],[1],[Have host's __ashrdi3]))
1415   AC_CHECK_LIB(gcc,__divdi3,AC_DEFINE([HAVE___DIVDI3],[1],[Have host's __divdi3]))
1416   AC_CHECK_LIB(gcc,__fixdfdi,AC_DEFINE([HAVE___FIXDFDI],[1],[Have host's __fixdfdi]))
1417   AC_CHECK_LIB(gcc,__fixsfdi,AC_DEFINE([HAVE___FIXSFDI],[1],[Have host's __fixsfdi]))
1418   AC_CHECK_LIB(gcc,__floatdidf,AC_DEFINE([HAVE___FLOATDIDF],[1],[Have host's __floatdidf]))
1419   AC_CHECK_LIB(gcc,__lshrdi3,AC_DEFINE([HAVE___LSHRDI3],[1],[Have host's __lshrdi3]))
1420   AC_CHECK_LIB(gcc,__moddi3,AC_DEFINE([HAVE___MODDI3],[1],[Have host's __moddi3]))
1421   AC_CHECK_LIB(gcc,__udivdi3,AC_DEFINE([HAVE___UDIVDI3],[1],[Have host's __udivdi3]))
1422   AC_CHECK_LIB(gcc,__umoddi3,AC_DEFINE([HAVE___UMODDI3],[1],[Have host's __umoddi3]))
1423
1424   AC_CHECK_LIB(gcc,__main,AC_DEFINE([HAVE___MAIN],[1],[Have host's __main]))
1425   AC_CHECK_LIB(gcc,__cmpdi2,AC_DEFINE([HAVE___CMPDI2],[1],[Have host's __cmpdi2]))
1426 fi
1427
1428 dnl Check for variations in the Standard C++ library and STL. These macros are
1429 dnl provided by LLVM in the autoconf/m4 directory.
1430 AC_FUNC_ISNAN
1431 AC_FUNC_ISINF
1432
1433 dnl Check for mmap support.We also need to know if /dev/zero is required to
1434 dnl be opened for allocating RWX memory.
1435 dnl Make sure we aren't attempting to configure for an unknown system
1436 if test "$llvm_cv_platform_type" = "Unix" ; then
1437   AC_FUNC_MMAP
1438   AC_FUNC_MMAP_FILE
1439   AC_NEED_DEV_ZERO_FOR_MMAP
1440
1441   if test "$ac_cv_func_mmap_fixed_mapped" = "no"
1442   then
1443     AC_MSG_WARN([mmap() of a fixed address required but not supported])
1444   fi
1445   if test "$ac_cv_func_mmap_file" = "no"
1446   then
1447     AC_MSG_WARN([mmap() of files required but not found])
1448   fi
1449 fi
1450
1451 dnl atomic builtins are required for threading support.
1452 AC_MSG_CHECKING(for GCC atomic builtins)
1453 dnl Since we'll be using these atomic builtins in C++ files we should test
1454 dnl the C++ compiler.
1455 AC_LANG_PUSH([C++])
1456 AC_LINK_IFELSE(
1457   AC_LANG_SOURCE(
1458     [[int main() {
1459         volatile unsigned long val = 1;
1460         __sync_synchronize();
1461         __sync_val_compare_and_swap(&val, 1, 0);
1462         __sync_add_and_fetch(&val, 1);
1463         __sync_sub_and_fetch(&val, 1);
1464         return 0;
1465       }
1466     ]]),
1467   AC_LANG_POP([C++])
1468   AC_MSG_RESULT(yes)
1469   AC_DEFINE(LLVM_MULTITHREADED, 1, Build multithreading support into LLVM),
1470   AC_MSG_RESULT(no)
1471   AC_DEFINE(LLVM_MULTITHREADED, 0, Build multithreading support into LLVM)
1472   AC_MSG_WARN([LLVM will be built thread-unsafe because atomic builtins are missing]))
1473
1474 dnl===-----------------------------------------------------------------------===
1475 dnl===
1476 dnl=== SECTION 9: Additional checks, variables, etc.
1477 dnl===
1478 dnl===-----------------------------------------------------------------------===
1479
1480 dnl Handle 32-bit linux systems running a 64-bit kernel.
1481 dnl This has to come after section 4 because it invokes the compiler.
1482 if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
1483   AC_IS_LINUX_MIXED
1484   if test "$llvm_cv_linux_mixed" = "yes"; then
1485     llvm_cv_target_arch="x86"
1486     ARCH="x86"
1487   fi
1488 fi
1489
1490 dnl Check, whether __dso_handle is present
1491 AC_CHECK_FUNCS([__dso_handle])
1492
1493 dnl Check wether llvm-gcc is based on dragonegg
1494 AC_CACHE_CHECK([whether llvm-gcc is dragonegg],[llvm_cv_llvmgcc_dragonegg],
1495 [llvm_cv_llvmgcc_dragonegg="no"
1496 if test -n "$LLVMGCC" ; then
1497   cp /dev/null conftest.c
1498   $LLVMGCC -fplugin-arg-dragonegg-emit-ir -S -o - conftest.c > /dev/null 2>&1
1499   if test $? -eq 0 ; then
1500     llvm_cv_llvmgcc_dragonegg="yes"
1501   fi
1502   rm conftest.c
1503 fi])
1504
1505 dnl Set the flags needed to emit LLVM IR and to disable optimizations
1506 dnl in llvmgcc
1507 if test "$llvm_cv_llvmgcc_dragonegg" = "yes" ; then
1508   LLVMCC_EMITIR_FLAG="-fplugin-arg-dragonegg-emit-ir"
1509   LLVMCC_DISABLEOPT_FLAGS="-fplugin-arg-dragonegg-disable-llvm-optzns"
1510 else
1511   LLVMCC_EMITIR_FLAG="-emit-llvm"
1512   LLVMCC_DISABLEOPT_FLAGS="-mllvm -disable-llvm-optzns"
1513 fi
1514
1515 AC_SUBST(LLVMCC_EMITIR_FLAG)
1516
1517 dnl See if the llvm-gcc executable can compile to LLVM assembly
1518 AC_CACHE_CHECK([whether llvm-gcc is sane],[llvm_cv_llvmgcc_sanity],
1519 [llvm_cv_llvmgcc_sanity="no"
1520 if test -n "$LLVMGCC" ; then
1521   cp /dev/null conftest.c
1522   $LLVMGCC "$LLVMCC_EMITIR_FLAG" -S -o - conftest.c | \
1523       grep 'target datalayout =' > /dev/null 2>&1
1524   if test $? -eq 0 ; then
1525     llvm_cv_llvmgcc_sanity="yes"
1526   fi
1527   rm conftest.c
1528 fi])
1529
1530 dnl Since we have a sane llvm-gcc, identify it and its sub-tools
1531 dnl Furthermore, add some information about the tools
1532 if test "$llvm_cv_llvmgcc_sanity" = "yes" ; then
1533   AC_MSG_CHECKING([llvm-gcc component support])
1534   llvmcc1path=`$LLVMGCC --print-prog-name=cc1`
1535   AC_SUBST(LLVMCC1,$llvmcc1path)
1536   llvmcc1pluspath=`$LLVMGCC --print-prog-name=cc1plus`
1537   AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
1538   llvmgccdir=`echo "$llvmcc1path" | sed 's,/libexec/.*,,'`
1539   AC_SUBST(LLVMGCCDIR,$llvmgccdir)
1540   llvmgcclangs=[`$LLVMGCC -v --help 2>&1 | grep '^Configured with:' | sed 's/^.*--enable-languages=\([^ ]*\).*/\1/'`]
1541   AC_SUBST(LLVMGCC_LANGS,$llvmgcclangs)
1542   AC_SUBST(LLVMGCC_DRAGONEGG,$llvm_cv_llvmgcc_dragonegg)
1543   AC_SUBST(LLVMCC_DISABLEOPT_FLAGS)
1544   AC_MSG_RESULT([ok])
1545 fi
1546
1547 dnl Propagate the shared library extension that the libltdl checks did to
1548 dnl the Makefiles so we can use it there too
1549 AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
1550
1551 dnl Propagate the run-time library path variable that the libltdl
1552 dnl checks found to the Makefiles so we can use it there too
1553 AC_SUBST(SHLIBPATH_VAR,$libltdl_cv_shlibpath_var)
1554
1555 # Translate the various configuration directories and other basic
1556 # information into substitutions that will end up in Makefile.config.in
1557 # that these configured values can be used by the makefiles
1558 if test "${prefix}" = "NONE" ; then
1559   prefix="/usr/local"
1560 fi
1561 eval LLVM_PREFIX="${prefix}";
1562 eval LLVM_BINDIR="${prefix}/bin";
1563 eval LLVM_LIBDIR="${prefix}/lib";
1564 eval LLVM_DATADIR="${prefix}/share/llvm";
1565 eval LLVM_DOCSDIR="${prefix}/share/doc/llvm";
1566 eval LLVM_ETCDIR="${prefix}/etc/llvm";
1567 eval LLVM_INCLUDEDIR="${prefix}/include";
1568 eval LLVM_INFODIR="${prefix}/info";
1569 eval LLVM_MANDIR="${prefix}/man";
1570 LLVM_CONFIGTIME=`date`
1571 AC_SUBST(LLVM_PREFIX)
1572 AC_SUBST(LLVM_BINDIR)
1573 AC_SUBST(LLVM_LIBDIR)
1574 AC_SUBST(LLVM_DATADIR)
1575 AC_SUBST(LLVM_DOCSDIR)
1576 AC_SUBST(LLVM_ETCDIR)
1577 AC_SUBST(LLVM_INCLUDEDIR)
1578 AC_SUBST(LLVM_INFODIR)
1579 AC_SUBST(LLVM_MANDIR)
1580 AC_SUBST(LLVM_CONFIGTIME)
1581
1582 # Place the various directores into the config.h file as #defines so that we
1583 # can know about the installation paths within LLVM.
1584 AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX",
1585                    [Installation prefix directory])
1586 AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR",
1587                    [Installation directory for binary executables])
1588 AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR",
1589                    [Installation directory for libraries])
1590 AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR",
1591                    [Installation directory for data files])
1592 AC_DEFINE_UNQUOTED(LLVM_DOCSDIR, "$LLVM_DOCSDIR",
1593                    [Installation directory for documentation])
1594 AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR",
1595                    [Installation directory for config files])
1596 AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR",
1597                    [Installation directory for include files])
1598 AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR",
1599                    [Installation directory for .info files])
1600 AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR",
1601                    [Installation directory for man pages])
1602 AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME",
1603                    [Time at which LLVM was configured])
1604 AC_DEFINE_UNQUOTED(LLVM_HOSTTRIPLE, "$host",
1605                    [Host triple we were built on])
1606
1607 # Determine which bindings to build.
1608 if test "$BINDINGS_TO_BUILD" = auto ; then
1609   BINDINGS_TO_BUILD=""
1610   if test "x$OCAMLC" != x -a "x$OCAMLDEP" != x ; then
1611     BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD"
1612   fi
1613 fi
1614 AC_SUBST(BINDINGS_TO_BUILD,$BINDINGS_TO_BUILD)
1615
1616 # This isn't really configurey, but it avoids having to repeat the list in
1617 # other files.
1618 AC_SUBST(ALL_BINDINGS,ocaml)
1619
1620 # Do any work necessary to ensure that bindings have what they need.
1621 binding_prereqs_failed=0
1622 for a_binding in $BINDINGS_TO_BUILD ; do
1623   case "$a_binding" in
1624   ocaml)
1625     if test "x$OCAMLC" = x ; then
1626       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlc not found. Try configure OCAMLC=/path/to/ocamlc])
1627       binding_prereqs_failed=1
1628     fi
1629     if test "x$OCAMLDEP" = x ; then
1630       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamldep not found. Try configure OCAMLDEP=/path/to/ocamldep])
1631       binding_prereqs_failed=1
1632     fi
1633     if test "x$OCAMLOPT" = x ; then
1634       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlopt not found. Try configure OCAMLOPT=/path/to/ocamlopt])
1635       dnl ocamlopt is optional!
1636     fi
1637     if test "x$with_ocaml_libdir" != xauto ; then
1638       AC_SUBST(OCAML_LIBDIR,$with_ocaml_libdir)
1639     else
1640       ocaml_stdlib="`"$OCAMLC" -where`"
1641       if test "$LLVM_PREFIX" '<' "$ocaml_stdlib" -a "$ocaml_stdlib" '<' "$LLVM_PREFIX~"
1642       then
1643         # ocaml stdlib is beneath our prefix; use stdlib
1644         AC_SUBST(OCAML_LIBDIR,$ocaml_stdlib)
1645       else
1646         # ocaml stdlib is outside our prefix; use libdir/ocaml
1647         AC_SUBST(OCAML_LIBDIR,$LLVM_LIBDIR/ocaml)
1648       fi
1649     fi
1650     ;;
1651   esac
1652 done
1653 if test "$binding_prereqs_failed" = 1 ; then
1654   AC_MSG_ERROR([Prequisites for bindings not satisfied. Fix them or use configure --disable-bindings.])
1655 fi
1656
1657 dnl Determine whether the compiler supports -fvisibility-inlines-hidden.
1658 AC_CXX_USE_VISIBILITY_INLINES_HIDDEN
1659
1660 dnl Determine linker rpath flag
1661 if test "$llvm_cv_link_use_r" = "yes" ; then
1662   RPATH="-Wl,-R"
1663 else
1664   RPATH="-Wl,-rpath"
1665 fi
1666 AC_SUBST(RPATH)
1667
1668 dnl Determine linker rdynamic flag
1669 if test "$llvm_cv_link_use_export_dynamic" = "yes" ; then
1670   RDYNAMIC="-Wl,-export-dynamic"
1671 else
1672   RDYNAMIC=""
1673 fi
1674 AC_SUBST(RDYNAMIC)
1675
1676 dnl===-----------------------------------------------------------------------===
1677 dnl===
1678 dnl=== SECTION 10: Specify the output files and generate it
1679 dnl===
1680 dnl===-----------------------------------------------------------------------===
1681
1682 dnl Configure header files
1683 dnl WARNING: dnl If you add or remove any of the following config headers, then
1684 dnl you MUST also update Makefile.rules so that the variable FilesToConfig
1685 dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
1686 dnl files can be updated automatically when their *.in sources change.
1687 AC_CONFIG_HEADERS([include/llvm/Config/config.h include/llvm/Config/llvm-config.h])
1688 AH_TOP([#ifndef CONFIG_H
1689 #define CONFIG_H])
1690 AH_BOTTOM([#endif])
1691
1692 AC_CONFIG_FILES([include/llvm/Config/Targets.def])
1693 AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def])
1694 AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def])
1695 AC_CONFIG_FILES([include/llvm/Config/Disassemblers.def])
1696 AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
1697
1698 dnl Configure the makefile's configuration data
1699 AC_CONFIG_FILES([Makefile.config])
1700
1701 dnl Configure the RPM spec file for LLVM
1702 AC_CONFIG_FILES([llvm.spec])
1703
1704 dnl Configure llvmc's Base plugin
1705 AC_CONFIG_FILES([tools/llvmc/src/Base.td])
1706
1707 dnl Do the first stage of configuration for llvm-config.in.
1708 AC_CONFIG_FILES([tools/llvm-config/llvm-config.in])
1709
1710 dnl Do special configuration of Makefiles
1711 AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
1712 AC_CONFIG_MAKEFILE(Makefile)
1713 AC_CONFIG_MAKEFILE(Makefile.common)
1714 AC_CONFIG_MAKEFILE(examples/Makefile)
1715 AC_CONFIG_MAKEFILE(lib/Makefile)
1716 AC_CONFIG_MAKEFILE(runtime/Makefile)
1717 AC_CONFIG_MAKEFILE(test/Makefile)
1718 AC_CONFIG_MAKEFILE(test/Makefile.tests)
1719 AC_CONFIG_MAKEFILE(unittests/Makefile)
1720 AC_CONFIG_MAKEFILE(tools/Makefile)
1721 AC_CONFIG_MAKEFILE(utils/Makefile)
1722 AC_CONFIG_MAKEFILE(projects/Makefile)
1723 AC_CONFIG_MAKEFILE(bindings/Makefile)
1724 AC_CONFIG_MAKEFILE(bindings/ocaml/Makefile.ocaml)
1725
1726 dnl Finally, crank out the output
1727 AC_OUTPUT