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