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