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