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