configure.ac revision 2650835b68cb3bf70a752a420bf36005b8c7d4a3
1dnl Initialize autoconf
2AC_INIT([[LLVM]],[[1.4]],[llvmbugs@cs.uiuc.edu])
3
4dnl Place all of the extra autoconf files into the config subdirectory
5dnl Tell various tools where the m4 autoconf macros are
6dnl Have configure verify that the source directory is valid.
7AC_CONFIG_AUX_DIR([autoconf])
8dnl AC_CONFIG_MACRO_DIR(autoconf/m4)
9dnl Verify that the source directory is valid
10AC_CONFIG_SRCDIR(["Makefile.config.in"])
11
12dnl Quit if the source directory has already been configured.
13dnl NOTE: This relies upon undocumented autoconf behavior.
14if test ${srcdir} != "." ; then
15	if test -f ${srcdir}/include/llvm/Config/config.h ; then
16		AC_MSG_ERROR([Already configured in ${srcdir}])
17	fi
18fi
19
20dnl Configure all of the projects present in our source tree.
21for i in `ls ${srcdir}/projects`
22do
23  if test -d ${srcdir}/projects/${i} ; then
24    case ${i} in
25      "CVS") ;;
26      "sample")       AC_CONFIG_SUBDIRS([projects/sample])    ;;
27      "Stacker")      AC_CONFIG_SUBDIRS([projects/Stacker])   ;;
28      "llvm-test")    AC_CONFIG_SUBDIRS([projects/llvm-test]) ;;
29      "llvm-reopt")   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
30      "llvm-gcc")     AC_CONFIG_SUBDIRS([projects/llvm-gcc])  ;;
31      "llvm-java")    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
32      "llvm-tv")      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
33      "llvm-fefw")    AC_CONFIG_SUBDIRS([projects/llvm-fefw]) ;;
34      *)              AC_CONFIG_SUBDIRS(${i}) ;;
35    esac
36  fi
37done
38
39dnl Configure header files
40AC_CONFIG_HEADERS(include/llvm/Config/config.h)
41
42dnl Configure other output file
43AC_CONFIG_FILES(Makefile.config
44 include/llvm/Support/DataTypes.h
45 include/llvm/Support/ThreadSupport.h
46 include/llvm/ADT/hash_map
47 include/llvm/ADT/hash_set
48 include/llvm/ADT/iterator)
49
50dnl Do special configuration of Makefiles
51AC_CONFIG_MAKEFILE(Makefile)
52AC_CONFIG_MAKEFILE(Makefile.common)
53AC_CONFIG_MAKEFILE(examples/Makefile)
54AC_CONFIG_MAKEFILE(lib/Makefile)
55AC_CONFIG_MAKEFILE(runtime/Makefile)
56AC_CONFIG_MAKEFILE(test/Makefile)
57AC_CONFIG_MAKEFILE(test/Makefile.tests)
58AC_CONFIG_MAKEFILE(test/QMTest/llvm.py)
59AC_CONFIG_MAKEFILE(test/QMTest/llvmdb.py)
60AC_CONFIG_MAKEFILE(tools/Makefile)
61AC_CONFIG_MAKEFILE(utils/Makefile)
62AC_CONFIG_MAKEFILE(projects/Makefile)
63
64dnl Find the install program (needs to be done before canonical stuff)
65AC_PROG_INSTALL
66
67dnl Check which host for which we're compiling.  This will tell us which LLVM
68dnl compiler will be used for compiling SSA into object code.
69AC_CANONICAL_TARGET
70
71dnl Set the "OS" Makefile variable based on the system we are building on.
72dnl We will use the build machine information to set some variables.
73
74AC_MSG_CHECKING([support for generic build operating system])
75case $build in
76	*-*-aix*)
77             AC_SUBST(OS,[AIX])
78             platform_type="AIX"
79             ;;
80	*-*-cygwin*)
81             AC_SUBST(OS,[Cygwin])
82             platform_type="Cygwin"
83             ;;
84	*-*-darwin*)
85             AC_SUBST(OS,[Darwin])
86             platform_type="Darwin"
87             ;;
88        *-*-freebsd*)
89             AC_SUBST(OS,[Linux])
90             platform_type="FreeBSD"
91             ;;
92        *-*-interix*)
93             AC_SUBST(OS,[SunOS])
94             platform_type="Interix"
95             ;;
96	*-*-linux*)
97             AC_SUBST(OS,[Linux])
98             platform_type="Linux"
99             if test -d /home/vadve/lattner/local/x86/llvm-gcc
100	     then
101	       AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/x86/llvm-gcc/])
102             fi
103             ;;
104	*-*-solaris*)
105             AC_SUBST(OS,[SunOS])
106             platform_type="SunOS"
107             if test -d /home/vadve/lattner/local/sparc/llvm-gcc
108             then
109               AC_SUBST(LLVMGCCDIR,[/home/vadve/lattner/local/sparc/llvm-gcc/])
110             fi
111             ;;
112        *-*-win32*)
113             AC_SUBST(OS,[Win32])
114             platform_type="Win32"
115	     ;;
116        *-*-mingw*)
117             AC_SUBST(OS,[Win32])
118             platform_type="Win32"
119	     ;;
120	*)   
121             AC_SUBST(OS,[Unknown])
122             platform_type="Unknown"
123	     ;;
124esac
125
126dnl Make sure we aren't attempting to configure for an unknown system
127if test "$platform_type" = "Unknown" ; then
128  AC_MSG_ERROR([Platform is unknown, configure can't continue])
129fi
130
131dnl Make a link from lib/System/platform to lib/System/$platform_type
132dnl This helps the #inclusion of the system specific include files
133dnl for the operating system abstraction library
134AC_CONFIG_LINKS(lib/System/platform:lib/System/$platform_type)
135
136
137AC_MSG_CHECKING(target architecture)
138dnl If we are targetting a Sparc machine running Solaris, pretend that it is
139dnl V9, since that is all that we support at the moment, and autoconf will only
140dnl tell us we're a sparc.
141case $target in
142	sparc*-*-solaris*)  AC_SUBST(target,[[sparcv9-sun-solaris2.8]])
143	                    ;;
144esac
145
146dnl Determine what our target architecture is and configure accordingly.
147dnl This will allow Makefiles to make a distinction between the hardware and
148dnl the OS.
149case $target in
150	i*86-*)       
151          ARCH="x86"
152          AC_SUBST(ARCH,[x86])
153	  ;;
154	sparc*-*)         
155          ARCH="Sparc"
156          AC_SUBST(ARCH,[Sparc])
157	  ;;
158	powerpc*-*)       
159          ARCH="PowerPC"
160          AC_SUBST(ARCH,[PowerPC])
161	  ;;
162	*)                
163          ARCH="Unknown"
164          AC_SUBST(ARCH,[Unknown])
165	  ;;
166esac
167
168AC_MSG_RESULT($ARCH)
169
170dnl Check for compilation tools
171AC_PROG_CXX
172AC_PROG_CC(gcc)
173dnl Ensure that compilation tools are GCC; we use GCC specific extensions
174if test "$GCC" != "yes"
175then
176	AC_MSG_ERROR([gcc required but not found])
177fi
178AC_PROG_CPP
179dnl Ensure that compilation tools are GCC; we use GCC specific extensions
180if test "$GXX" != "yes"
181then
182	AC_MSG_ERROR([g++ required but not found])
183fi
184
185dnl Verify that GCC is version 3.0 or higher
186gccmajor=`$CC --version | head -n 1 | awk '{print $NF;}' | cut -d. -f1`
187if test "$gccmajor" -lt "3"
188then
189	AC_MSG_ERROR([gcc 3.x required, but you have a lower version])
190fi
191
192dnl Check for GNU Make.  We use its extensions too, so don't build without it
193AC_CHECK_GNU_MAKE
194if test -z "$_cv_gnu_make_command"
195then
196	AC_MSG_ERROR([GNU Make required but not found])
197fi
198
199dnl Checks for other tools
200AC_PROG_FLEX
201AC_PROG_BISON
202AC_PROG_LIBTOOL
203
204dnl Checks for tools we can get away with not having:
205AC_PATH_PROG(DOT,[dot],[true dot])
206AC_PATH_PROG(ETAGS,[etags],[true etags])
207dnl Check if we know how to tell etags we are using C++:
208etags_version=`$ETAGS --version 2>&1`
209case "$etags_version" in
210	*[Ee]xuberant*) ETAGSFLAGS="--language-force=c++" ;;
211	*GNU\ Emacs*) ETAGSFLAGS="-l c++" ;;
212	*) ETAGSFLAGS="" ;;
213esac
214AC_SUBST(ETAGSFLAGS,$ETAGSFLAGS)
215AC_PATH_PROG(PYTHON,[python],[true python])
216if test "$PYTHON" = "false"
217then
218	AC_MSG_WARN([Python is required for the test suite, but it was not found])
219fi
220AC_PATH_PROG(QMTEST,[qmtest],[true qmtest])
221if test "$QMTEST" = "false"
222then
223	AC_MSG_WARN([QMTest is required for the test suite, but it was not found])
224fi
225
226dnl Verify that the version of python available is high enough for qmtest
227pyversion=`$PYTHON -V 2>&1 | cut -d\  -f2`
228pymajor=`echo $pyversion | cut -d. -f1`
229pyminor=`echo $pyversion | cut -d. -f2`
230
231if test "$pymajor" -ge "2"
232then
233	if test "$pymajor" -eq "2"
234	then
235		if test "$pyminor" -lt "2"
236		then
237			AC_MSG_WARN([QMTest requires Python 2.2 or later])
238		fi
239	fi
240else
241	AC_MSG_WARN([QMTest requires Python 2.2 or later])
242fi
243
244dnl Checks for libraries:
245dnl libelf is for sparc only; we can ignore it if we don't have it
246AC_CHECK_LIB(elf, elf_begin)
247
248dnl dlopen() is required for plugin support.
249AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],[Define if dlopen() is available on this platform.]),AC_MSG_WARN([dlopen() not found - disabling plugin support]))
250
251dnl mallinfo is optional; the code can compile (minus features) without it
252AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],[Define if mallinfo() is available on this platform.]))
253
254dnl pthread locking functions are optional - but llvm will not be thread-safe
255dnl without locks.
256AC_SEARCH_LIBS(pthread_mutex_lock,pthread,HAVE_PTHREAD_MUTEX_LOCK=1,HAVE_PTHREAD_MUTEX_LOCK=0)
257AC_SUBST(HAVE_PTHREAD_MUTEX_LOCK)
258
259dnl Checks for header files.
260dnl We don't check for ancient stuff or things that are guaranteed to be there
261dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
262AC_HEADER_STDC
263AC_HEADER_SYS_WAIT
264
265dnl Checks for POSIX and other various system-specific header files
266AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h unistd.h malloc.h sys/mman.h sys/resource.h dlfcn.h link.h execinfo.h windows.h)
267
268dnl Check for things that need to be included in public headers, and so
269dnl for which we may not have access to a HAVE_* preprocessor #define.
270dnl (primarily used in DataTypes.h)
271AC_CHECK_HEADER([sys/types.h],
272                [INCLUDE_SYS_TYPES_H='#include <sys/types.h>'],
273                [INCLUDE_SYS_TYPES_H=''])
274AC_SUBST(INCLUDE_SYS_TYPES_H)
275AC_CHECK_HEADER([inttypes.h],
276                [INCLUDE_INTTYPES_H='#include <inttypes.h>'],
277                [INCLUDE_INTTYPES_H=''])
278AC_SUBST(INCLUDE_INTTYPES_H)
279AC_CHECK_HEADER([stdint.h],
280                [INCLUDE_STDINT_H='#include <stdint.h>'],
281                [INCLUDE_STDINT_H=''])
282AC_SUBST(INCLUDE_STDINT_H)
283
284
285dnl Check for types
286AC_TYPE_PID_T
287AC_TYPE_SIZE_T
288AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
289AC_CHECK_TYPES([uint64_t],,
290               AC_CHECK_TYPES([u_int64_t],,
291                              AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
292AC_HEADER_TIME
293AC_STRUCT_TM
294
295dnl Check for various C features
296AC_C_PRINTF_A
297
298dnl Check for the endianness of the target
299AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
300
301dnl Check for C++ extensions
302AC_CXX_HAVE_HASH_MAP
303AC_CXX_HAVE_HASH_SET
304AC_CXX_HAVE_STD_ITERATOR
305AC_CXX_HAVE_BI_ITERATOR
306AC_CXX_HAVE_FWD_ITERATOR
307
308AC_FUNC_ISNAN
309AC_FUNC_ISINF
310
311dnl Checks for library functions.
312AC_FUNC_ALLOCA
313AC_FUNC_MMAP
314if test "$ac_cv_func_mmap_fixed_mapped" = "no"
315then
316	AC_MSG_WARN([mmap() required but not found])
317fi
318AC_FUNC_MMAP_FILE
319if test "$ac_cv_func_mmap_file" = "no"
320then
321	AC_MSG_WARN([mmap() of files required but not found])
322fi
323AC_HEADER_MMAP_ANONYMOUS
324AC_TYPE_SIGNAL
325AC_CHECK_FUNCS(getcwd gettimeofday strdup strtoq strtoll backtrace isatty mkstemp getrusage)
326AC_CHECK_FUNC(mprotect,,AC_MSG_ERROR([Function mprotect() required but not found]))
327
328dnl Determine if the linker supports the -R option.
329AC_LINK_USE_R
330
331dnl --enable/--with command-line options:
332dnl Check whether they want to do an optimized build:
333AC_ARG_ENABLE(optimized,AS_HELP_STRING(--enable-optimized,Compile with optimizations enabled (default is NO)),,enableval=no)
334if test ${enableval} = "no"
335then
336	AC_SUBST(ENABLE_OPTIMIZED,[[]])
337else
338	AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
339fi
340
341dnl JIT Option
342AC_ARG_ENABLE(jit,AS_HELP_STRING(--enable-jit,Enable Just In Time Compiling (default is YES)),,enableval=default)
343if test ${enableval} = "no"
344then
345	AC_SUBST(JIT,[[]])
346else
347	case $target in
348		*i*86*)
349			AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
350			;;
351		*sparc*)
352			AC_SUBST(JIT,[[TARGET_HAS_JIT=1]])
353			;;
354		*)
355			AC_SUBST(JIT,[[]])
356			;;
357	esac
358fi
359
360dnl Find the LLVM GCC-based C/C++ front end
361AC_ARG_WITH(llvmgccdir,AS_HELP_STRING(--with-llvmgccdir,Location of LLVM GCC front-end),AC_SUBST(LLVMGCCDIR,[$withval]))
362AC_MSG_CHECKING([for llvm-gcc])
363LLVM_GCC_CHECK=no
364if test -d "$LLVMGCCDIR"
365then
366	if test -x "$LLVMGCCDIR/bin/gcc"
367	then
368		LLVM_GCC_CHECK="$LLVMGCCDIR/bin/gcc"
369	fi
370fi
371llvmgccwarn=no
372AC_MSG_RESULT($LLVM_GCC_CHECK)
373if test "$LLVM_GCC_CHECK" = "no"
374then
375    llvmgccwarn=yes
376fi
377AC_MSG_CHECKING([whether llvm-gcc is sane])
378LLVM_GCC_SANE=no
379if test -x "$LLVM_GCC_CHECK"
380then
381	cp /dev/null conftest.c
382    "$LLVM_GCC_CHECK" -S -o - conftest.c | grep implementation > /dev/null 2>&1
383	if test $? -eq 0
384	then
385		LLVM_GCC_SANE=yes
386	fi
387	rm conftest.c
388	llvmcc1path=`"$LLVM_GCC_CHECK" --print-prog-name=cc1`
389	AC_SUBST(LLVMCC1,$llvmcc1path)
390	llvmcc1pluspath=`"$LLVM_GCC_CHECK" --print-prog-name=cc1plus`
391	AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
392fi
393AC_MSG_RESULT($LLVM_GCC_SANE)
394if test "$LLVM_GCC_SANE" = "no"
395then
396	llvmgccwarn=yes
397fi
398
399dnl Get libtool's idea of what the shared library suffix is.
400dnl (This is a hack; it relies on undocumented behavior.)
401AC_MSG_CHECKING([for shared library suffix])
402eval "SHLIBEXT=$shrext_cmds"
403AC_MSG_RESULT($SHLIBEXT)
404dnl Propagate it to the Makefiles and config.h (for gccld & bugpoint).
405AC_SUBST(SHLIBEXT,$SHLIBEXT)
406AC_DEFINE_UNQUOTED(SHLIBEXT,"$SHLIBEXT",
407                   [Extension that shared libraries have, e.g., ".so".])
408
409# Translate the various configuration directories and other basic
410# information into substitutions that will end up in config.h.in so
411# that these configured values can be hard-wired into a program.
412eval LLVM_PREFIX="${prefix}";
413eval LLVM_BINDIR="${prefix}/bin";
414eval LLVM_LIBDIR="${prefix}/lib";
415eval LLVM_DATADIR="${prefix}/data";
416eval LLVM_DOCSDIR="${prefix}/docs";
417eval LLVM_ETCDIR="${prefix}/etc";
418eval LLVM_INCLUDEDIR="${prefix}/include";
419eval LLVM_INFODIR="${prefix}/info";
420eval LLVM_MANDIR="${prefix}/man";
421LLVM_CONFIGTIME=`date`
422AC_SUBST(LLVM_PREFIX)
423AC_SUBST(LLVM_BINDIR)
424AC_SUBST(LLVM_LIBDIR)
425AC_SUBST(LLVM_DATADIR)
426AC_SUBST(LLVM_DOCSDIR)
427AC_SUBST(LLVM_ETCDIR)
428AC_SUBST(LLVM_INCLUDEDIR)
429AC_SUBST(LLVM_INFODIR)
430AC_SUBST(LLVM_MANDIR)
431AC_SUBST(LLVM_CONFIGTIME)
432AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX", [Installation prefix directory])
433AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR", [Installation directory for binary executables])
434AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR", [Installation directory for libraries])
435AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR", [Installation directory for data files])
436AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DOCSDIR", [Installation directory for documentation])
437AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR", [Installation directory for config files])
438AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR", [Installation directory for include files])
439AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR", [Installation directory for .info files])
440AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR", [Installation directory for man pages])
441AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME", [Time at which LLVM was configured])
442
443dnl Create the output files
444AC_OUTPUT
445
446dnl Warn loudly if llvm-gcc was not obviously working
447if test $llvmgccwarn = yes
448then
449	AC_MSG_WARN([***** llvm C/C++ front end was not found, or does not])
450	AC_MSG_WARN([***** appear to be working.])
451	AC_MSG_WARN([***** ])
452	AC_MSG_WARN([***** Please check configure's --with-llvmgccdir option.])
453	AC_MSG_WARN([***** Runtime libraries (in llvm/runtime) will not be built,])
454	AC_MSG_WARN([***** but you should be able to build the llvm tools.])
455fi
456
457