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