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