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