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