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