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