1 if( WIN32 AND NOT CYGWIN )
2 # We consider Cygwin as another Unix
3 set(PURE_WINDOWS 1)
4 endif()
6 include(CheckIncludeFile)
7 include(CheckIncludeFileCXX)
8 include(CheckLibraryExists)
9 include(CheckSymbolExists)
10 include(CheckFunctionExists)
11 include(CheckCXXSourceCompiles)
12 include(TestBigEndian)
14 include(HandleLLVMStdlib)
16 if( UNIX AND NOT BEOS )
17 # Used by check_symbol_exists:
18 set(CMAKE_REQUIRED_LIBRARIES m)
19 endif()
20 # x86_64 FreeBSD 9.2 requires libcxxrt to be specified explicitly.
21 if( CMAKE_SYSTEM MATCHES "FreeBSD-9.2-RELEASE" AND
22 CMAKE_SIZEOF_VOID_P EQUAL 8 )
23 list(APPEND CMAKE_REQUIRED_LIBRARIES "cxxrt")
24 endif()
26 # Helper macros and functions
27 macro(add_cxx_include result files)
28 set(${result} "")
29 foreach (file_name ${files})
30 set(${result} "${${result}}#include<${file_name}>\n")
31 endforeach()
32 endmacro(add_cxx_include files result)
34 function(check_type_exists type files variable)
35 add_cxx_include(includes "${files}")
36 CHECK_CXX_SOURCE_COMPILES("
37 ${includes} ${type} typeVar;
38 int main() {
39 return 0;
40 }
41 " ${variable})
42 endfunction()
44 # include checks
45 check_include_file(dirent.h HAVE_DIRENT_H)
46 check_include_file(dlfcn.h HAVE_DLFCN_H)
47 check_include_file(errno.h HAVE_ERRNO_H)
48 check_include_file(execinfo.h HAVE_EXECINFO_H)
49 check_include_file(fcntl.h HAVE_FCNTL_H)
50 check_include_file(inttypes.h HAVE_INTTYPES_H)
51 check_include_file(limits.h HAVE_LIMITS_H)
52 check_include_file(link.h HAVE_LINK_H)
53 check_include_file(malloc.h HAVE_MALLOC_H)
54 check_include_file(malloc/malloc.h HAVE_MALLOC_MALLOC_H)
55 check_include_file(ndir.h HAVE_NDIR_H)
56 if( NOT PURE_WINDOWS )
57 check_include_file(pthread.h HAVE_PTHREAD_H)
58 endif()
59 check_include_file(signal.h HAVE_SIGNAL_H)
60 check_include_file(stdint.h HAVE_STDINT_H)
61 check_include_file(sys/dir.h HAVE_SYS_DIR_H)
62 check_include_file(sys/ioctl.h HAVE_SYS_IOCTL_H)
63 check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
64 check_include_file(sys/ndir.h HAVE_SYS_NDIR_H)
65 check_include_file(sys/param.h HAVE_SYS_PARAM_H)
66 check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H)
67 check_include_file(sys/stat.h HAVE_SYS_STAT_H)
68 check_include_file(sys/time.h HAVE_SYS_TIME_H)
69 check_include_file(sys/uio.h HAVE_SYS_UIO_H)
70 check_include_file(sys/wait.h HAVE_SYS_WAIT_H)
71 check_include_file(termios.h HAVE_TERMIOS_H)
72 check_include_file(unistd.h HAVE_UNISTD_H)
73 check_include_file(utime.h HAVE_UTIME_H)
74 check_include_file(valgrind/valgrind.h HAVE_VALGRIND_VALGRIND_H)
75 check_include_file(zlib.h HAVE_ZLIB_H)
76 check_include_file(fenv.h HAVE_FENV_H)
77 check_symbol_exists(FE_ALL_EXCEPT "fenv.h" HAVE_DECL_FE_ALL_EXCEPT)
78 check_symbol_exists(FE_INEXACT "fenv.h" HAVE_DECL_FE_INEXACT)
80 check_include_file(mach/mach.h HAVE_MACH_MACH_H)
81 check_include_file(mach-o/dyld.h HAVE_MACH_O_DYLD_H)
83 # size_t must be defined before including cxxabi.h on FreeBSD 10.0.
84 check_cxx_source_compiles("
85 #include <stddef.h>
86 #include <cxxabi.h>
87 int main() { return 0; }
88 " HAVE_CXXABI_H)
90 # library checks
91 if( NOT PURE_WINDOWS )
92 check_library_exists(pthread pthread_create "" HAVE_LIBPTHREAD)
93 if (HAVE_LIBPTHREAD)
94 check_library_exists(pthread pthread_getspecific "" HAVE_PTHREAD_GETSPECIFIC)
95 check_library_exists(pthread pthread_rwlock_init "" HAVE_PTHREAD_RWLOCK_INIT)
96 check_library_exists(pthread pthread_mutex_lock "" HAVE_PTHREAD_MUTEX_LOCK)
97 else()
98 # this could be Android
99 check_library_exists(c pthread_create "" PTHREAD_IN_LIBC)
100 if (PTHREAD_IN_LIBC)
101 check_library_exists(c pthread_getspecific "" HAVE_PTHREAD_GETSPECIFIC)
102 check_library_exists(c pthread_rwlock_init "" HAVE_PTHREAD_RWLOCK_INIT)
103 check_library_exists(c pthread_mutex_lock "" HAVE_PTHREAD_MUTEX_LOCK)
104 endif()
105 endif()
106 check_library_exists(dl dlopen "" HAVE_LIBDL)
107 check_library_exists(rt clock_gettime "" HAVE_LIBRT)
108 if (LLVM_ENABLE_ZLIB)
109 check_library_exists(z compress2 "" HAVE_LIBZ)
110 else()
111 set(HAVE_LIBZ 0)
112 endif()
113 check_library_exists(edit el_init "" HAVE_LIBEDIT)
114 if(LLVM_ENABLE_TERMINFO)
115 set(HAVE_TERMINFO 0)
116 foreach(library tinfo terminfo curses ncurses ncursesw)
117 string(TOUPPER ${library} library_suffix)
118 check_library_exists(${library} setupterm "" HAVE_TERMINFO_${library_suffix})
119 if(HAVE_TERMINFO_${library_suffix})
120 set(HAVE_TERMINFO 1)
121 set(TERMINFO_LIBS "${library}")
122 break()
123 endif()
124 endforeach()
125 else()
126 set(HAVE_TERMINFO 0)
127 endif()
128 endif()
130 # function checks
131 check_symbol_exists(arc4random "stdlib.h" HAVE_DECL_ARC4RANDOM)
132 check_symbol_exists(backtrace "execinfo.h" HAVE_BACKTRACE)
133 check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE)
134 check_symbol_exists(getrusage sys/resource.h HAVE_GETRUSAGE)
135 check_symbol_exists(setrlimit sys/resource.h HAVE_SETRLIMIT)
136 check_symbol_exists(isatty unistd.h HAVE_ISATTY)
137 check_symbol_exists(isinf cmath HAVE_ISINF_IN_CMATH)
138 check_symbol_exists(isinf math.h HAVE_ISINF_IN_MATH_H)
139 check_symbol_exists(finite ieeefp.h HAVE_FINITE_IN_IEEEFP_H)
140 check_symbol_exists(isnan cmath HAVE_ISNAN_IN_CMATH)
141 check_symbol_exists(isnan math.h HAVE_ISNAN_IN_MATH_H)
142 check_symbol_exists(ceilf math.h HAVE_CEILF)
143 check_symbol_exists(floorf math.h HAVE_FLOORF)
144 check_symbol_exists(fmodf math.h HAVE_FMODF)
145 check_symbol_exists(log math.h HAVE_LOG)
146 check_symbol_exists(log2 math.h HAVE_LOG2)
147 check_symbol_exists(log10 math.h HAVE_LOG10)
148 check_symbol_exists(exp math.h HAVE_EXP)
149 check_symbol_exists(exp2 math.h HAVE_EXP2)
150 check_symbol_exists(exp10 math.h HAVE_EXP10)
151 check_symbol_exists(futimens sys/stat.h HAVE_FUTIMENS)
152 check_symbol_exists(futimes sys/time.h HAVE_FUTIMES)
153 if( HAVE_SETJMP_H )
154 check_symbol_exists(longjmp setjmp.h HAVE_LONGJMP)
155 check_symbol_exists(setjmp setjmp.h HAVE_SETJMP)
156 check_symbol_exists(siglongjmp setjmp.h HAVE_SIGLONGJMP)
157 check_symbol_exists(sigsetjmp setjmp.h HAVE_SIGSETJMP)
158 endif()
159 if( HAVE_SYS_UIO_H )
160 check_symbol_exists(writev sys/uio.h HAVE_WRITEV)
161 endif()
162 check_symbol_exists(nearbyintf math.h HAVE_NEARBYINTF)
163 check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO)
164 check_symbol_exists(malloc_zone_statistics malloc/malloc.h
165 HAVE_MALLOC_ZONE_STATISTICS)
166 check_symbol_exists(mkdtemp "stdlib.h;unistd.h" HAVE_MKDTEMP)
167 check_symbol_exists(mkstemp "stdlib.h;unistd.h" HAVE_MKSTEMP)
168 check_symbol_exists(mktemp "stdlib.h;unistd.h" HAVE_MKTEMP)
169 check_symbol_exists(closedir "sys/types.h;dirent.h" HAVE_CLOSEDIR)
170 check_symbol_exists(opendir "sys/types.h;dirent.h" HAVE_OPENDIR)
171 check_symbol_exists(readdir "sys/types.h;dirent.h" HAVE_READDIR)
172 check_symbol_exists(getcwd unistd.h HAVE_GETCWD)
173 check_symbol_exists(gettimeofday sys/time.h HAVE_GETTIMEOFDAY)
174 check_symbol_exists(getrlimit "sys/types.h;sys/time.h;sys/resource.h" HAVE_GETRLIMIT)
175 check_symbol_exists(posix_spawn spawn.h HAVE_POSIX_SPAWN)
176 check_symbol_exists(pread unistd.h HAVE_PREAD)
177 check_symbol_exists(realpath stdlib.h HAVE_REALPATH)
178 check_symbol_exists(sbrk unistd.h HAVE_SBRK)
179 check_symbol_exists(srand48 stdlib.h HAVE_RAND48_SRAND48)
180 if( HAVE_RAND48_SRAND48 )
181 check_symbol_exists(lrand48 stdlib.h HAVE_RAND48_LRAND48)
182 if( HAVE_RAND48_LRAND48 )
183 check_symbol_exists(drand48 stdlib.h HAVE_RAND48_DRAND48)
184 if( HAVE_RAND48_DRAND48 )
185 set(HAVE_RAND48 1 CACHE INTERNAL "are srand48/lrand48/drand48 available?")
186 endif()
187 endif()
188 endif()
189 check_symbol_exists(strtoll stdlib.h HAVE_STRTOLL)
190 check_symbol_exists(strtoq stdlib.h HAVE_STRTOQ)
191 check_symbol_exists(strerror string.h HAVE_STRERROR)
192 check_symbol_exists(strerror_r string.h HAVE_STRERROR_R)
193 check_symbol_exists(strerror_s string.h HAVE_DECL_STRERROR_S)
194 check_symbol_exists(setenv stdlib.h HAVE_SETENV)
195 if( PURE_WINDOWS )
196 check_symbol_exists(_chsize_s io.h HAVE__CHSIZE_S)
198 check_function_exists(_alloca HAVE__ALLOCA)
199 check_function_exists(__alloca HAVE___ALLOCA)
200 check_function_exists(__chkstk HAVE___CHKSTK)
201 check_function_exists(___chkstk HAVE____CHKSTK)
203 check_function_exists(__ashldi3 HAVE___ASHLDI3)
204 check_function_exists(__ashrdi3 HAVE___ASHRDI3)
205 check_function_exists(__divdi3 HAVE___DIVDI3)
206 check_function_exists(__fixdfdi HAVE___FIXDFDI)
207 check_function_exists(__fixsfdi HAVE___FIXSFDI)
208 check_function_exists(__floatdidf HAVE___FLOATDIDF)
209 check_function_exists(__lshrdi3 HAVE___LSHRDI3)
210 check_function_exists(__moddi3 HAVE___MODDI3)
211 check_function_exists(__udivdi3 HAVE___UDIVDI3)
212 check_function_exists(__umoddi3 HAVE___UMODDI3)
214 check_function_exists(__main HAVE___MAIN)
215 check_function_exists(__cmpdi2 HAVE___CMPDI2)
216 endif()
217 if( HAVE_DLFCN_H )
218 if( HAVE_LIBDL )
219 list(APPEND CMAKE_REQUIRED_LIBRARIES dl)
220 endif()
221 check_symbol_exists(dlerror dlfcn.h HAVE_DLERROR)
222 check_symbol_exists(dlopen dlfcn.h HAVE_DLOPEN)
223 if( HAVE_LIBDL )
224 list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES dl)
225 endif()
226 endif()
228 check_symbol_exists(__GLIBC__ stdio.h LLVM_USING_GLIBC)
229 if( LLVM_USING_GLIBC )
230 add_llvm_definitions( -D_GNU_SOURCE )
231 endif()
233 set(headers "sys/types.h")
235 if (HAVE_INTTYPES_H)
236 set(headers ${headers} "inttypes.h")
237 endif()
239 if (HAVE_STDINT_H)
240 set(headers ${headers} "stdint.h")
241 endif()
243 check_type_exists(int64_t "${headers}" HAVE_INT64_T)
244 check_type_exists(uint64_t "${headers}" HAVE_UINT64_T)
245 check_type_exists(u_int64_t "${headers}" HAVE_U_INT64_T)
247 # available programs checks
248 function(llvm_find_program name)
249 string(TOUPPER ${name} NAME)
250 string(REGEX REPLACE "\\." "_" NAME ${NAME})
252 find_program(LLVM_PATH_${NAME} NAMES ${ARGV})
253 mark_as_advanced(LLVM_PATH_${NAME})
254 if(LLVM_PATH_${NAME})
255 set(HAVE_${NAME} 1 CACHE INTERNAL "Is ${name} available ?")
256 mark_as_advanced(HAVE_${NAME})
257 else(LLVM_PATH_${NAME})
258 set(HAVE_${NAME} "" CACHE INTERNAL "Is ${name} available ?")
259 endif(LLVM_PATH_${NAME})
260 endfunction()
262 if (LLVM_ENABLE_DOXYGEN)
263 llvm_find_program(dot)
264 endif ()
266 if( LLVM_ENABLE_FFI )
267 find_path(FFI_INCLUDE_PATH ffi.h PATHS ${FFI_INCLUDE_DIR})
268 if( EXISTS "${FFI_INCLUDE_PATH}/ffi.h" )
269 set(FFI_HEADER ffi.h CACHE INTERNAL "")
270 set(HAVE_FFI_H 1 CACHE INTERNAL "")
271 else()
272 find_path(FFI_INCLUDE_PATH ffi/ffi.h PATHS ${FFI_INCLUDE_DIR})
273 if( EXISTS "${FFI_INCLUDE_PATH}/ffi/ffi.h" )
274 set(FFI_HEADER ffi/ffi.h CACHE INTERNAL "")
275 set(HAVE_FFI_FFI_H 1 CACHE INTERNAL "")
276 endif()
277 endif()
279 if( NOT FFI_HEADER )
280 message(FATAL_ERROR "libffi includes are not found.")
281 endif()
283 find_library(FFI_LIBRARY_PATH ffi PATHS ${FFI_LIBRARY_DIR})
284 if( NOT FFI_LIBRARY_PATH )
285 message(FATAL_ERROR "libffi is not found.")
286 endif()
288 list(APPEND CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH})
289 list(APPEND CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH})
290 check_symbol_exists(ffi_call ${FFI_HEADER} HAVE_FFI_CALL)
291 list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH})
292 list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH})
293 else()
294 unset(HAVE_FFI_FFI_H CACHE)
295 unset(HAVE_FFI_H CACHE)
296 unset(HAVE_FFI_CALL CACHE)
297 endif( LLVM_ENABLE_FFI )
299 # Define LLVM_HAS_ATOMICS if gcc or MSVC atomic builtins are supported.
300 include(CheckAtomic)
302 if( LLVM_ENABLE_PIC )
303 set(ENABLE_PIC 1)
304 else()
305 set(ENABLE_PIC 0)
306 endif()
308 check_cxx_compiler_flag("-Wno-variadic-macros" SUPPORTS_NO_VARIADIC_MACROS_FLAG)
310 set(USE_NO_MAYBE_UNINITIALIZED 0)
311 set(USE_NO_UNINITIALIZED 0)
313 # Disable gcc's potentially uninitialized use analysis as it presents lots of
314 # false positives.
315 if (CMAKE_COMPILER_IS_GNUCXX)
316 check_cxx_compiler_flag("-Wmaybe-uninitialized" HAS_MAYBE_UNINITIALIZED)
317 if (HAS_MAYBE_UNINITIALIZED)
318 set(USE_NO_MAYBE_UNINITIALIZED 1)
319 else()
320 # Only recent versions of gcc make the distinction between -Wuninitialized
321 # and -Wmaybe-uninitialized. If -Wmaybe-uninitialized isn't supported, just
322 # turn off all uninitialized use warnings.
323 check_cxx_compiler_flag("-Wuninitialized" HAS_UNINITIALIZED)
324 set(USE_NO_UNINITIALIZED ${HAS_UNINITIALIZED})
325 endif()
326 endif()
328 # By default, we target the host, but this can be overridden at CMake
329 # invocation time.
330 include(GetHostTriple)
331 get_host_triple(LLVM_INFERRED_HOST_TRIPLE)
333 set(LLVM_HOST_TRIPLE "${LLVM_INFERRED_HOST_TRIPLE}" CACHE STRING
334 "Host on which LLVM binaries will run")
336 # Determine the native architecture.
337 string(TOLOWER "${LLVM_TARGET_ARCH}" LLVM_NATIVE_ARCH)
338 if( LLVM_NATIVE_ARCH STREQUAL "host" )
339 string(REGEX MATCH "^[^-]*" LLVM_NATIVE_ARCH ${LLVM_HOST_TRIPLE})
340 endif ()
342 if (LLVM_NATIVE_ARCH MATCHES "i[2-6]86")
343 set(LLVM_NATIVE_ARCH X86)
344 elseif (LLVM_NATIVE_ARCH STREQUAL "x86")
345 set(LLVM_NATIVE_ARCH X86)
346 elseif (LLVM_NATIVE_ARCH STREQUAL "amd64")
347 set(LLVM_NATIVE_ARCH X86)
348 elseif (LLVM_NATIVE_ARCH STREQUAL "x86_64")
349 set(LLVM_NATIVE_ARCH X86)
350 elseif (LLVM_NATIVE_ARCH MATCHES "sparc")
351 set(LLVM_NATIVE_ARCH Sparc)
352 elseif (LLVM_NATIVE_ARCH MATCHES "powerpc")
353 set(LLVM_NATIVE_ARCH PowerPC)
354 elseif (LLVM_NATIVE_ARCH MATCHES "aarch64")
355 set(LLVM_NATIVE_ARCH AArch64)
356 elseif (LLVM_NATIVE_ARCH MATCHES "arm64")
357 set(LLVM_NATIVE_ARCH AArch64)
358 elseif (LLVM_NATIVE_ARCH MATCHES "arm")
359 set(LLVM_NATIVE_ARCH ARM)
360 elseif (LLVM_NATIVE_ARCH MATCHES "mips")
361 set(LLVM_NATIVE_ARCH Mips)
362 elseif (LLVM_NATIVE_ARCH MATCHES "xcore")
363 set(LLVM_NATIVE_ARCH XCore)
364 elseif (LLVM_NATIVE_ARCH MATCHES "msp430")
365 set(LLVM_NATIVE_ARCH MSP430)
366 elseif (LLVM_NATIVE_ARCH MATCHES "c6000")
367 set(LLVM_NATIVE_ARCH C6000)
368 elseif (LLVM_NATIVE_ARCH MATCHES "hexagon")
369 set(LLVM_NATIVE_ARCH Hexagon)
370 elseif (LLVM_NATIVE_ARCH MATCHES "s390x")
371 set(LLVM_NATIVE_ARCH SystemZ)
372 else ()
373 message(FATAL_ERROR "Unknown architecture ${LLVM_NATIVE_ARCH}")
374 endif ()
376 # If build targets includes "host", then replace with native architecture.
377 list(FIND LLVM_TARGETS_TO_BUILD "host" idx)
378 if( NOT idx LESS 0 )
379 list(REMOVE_AT LLVM_TARGETS_TO_BUILD ${idx})
380 list(APPEND LLVM_TARGETS_TO_BUILD ${LLVM_NATIVE_ARCH})
381 list(REMOVE_DUPLICATES LLVM_TARGETS_TO_BUILD)
382 endif()
384 list(FIND LLVM_TARGETS_TO_BUILD ${LLVM_NATIVE_ARCH} NATIVE_ARCH_IDX)
385 if (NATIVE_ARCH_IDX EQUAL -1)
386 message(STATUS
387 "Native target ${LLVM_NATIVE_ARCH} is not selected; lli will not JIT code")
388 else ()
389 message(STATUS "Native target architecture is ${LLVM_NATIVE_ARCH}")
390 set(LLVM_NATIVE_TARGET LLVMInitialize${LLVM_NATIVE_ARCH}Target)
391 set(LLVM_NATIVE_TARGETINFO LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo)
392 set(LLVM_NATIVE_TARGETMC LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC)
393 set(LLVM_NATIVE_ASMPRINTER LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter)
395 # We don't have an ASM parser for all architectures yet.
396 if (EXISTS ${CMAKE_SOURCE_DIR}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/CMakeLists.txt)
397 set(LLVM_NATIVE_ASMPARSER LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser)
398 endif ()
400 # We don't have an disassembler for all architectures yet.
401 if (EXISTS ${CMAKE_SOURCE_DIR}/lib/Target/${LLVM_NATIVE_ARCH}/Disassembler/CMakeLists.txt)
402 set(LLVM_NATIVE_DISASSEMBLER LLVMInitialize${LLVM_NATIVE_ARCH}Disassembler)
403 endif ()
404 endif ()
406 if( MINGW )
407 set(HAVE_LIBIMAGEHLP 1)
408 set(HAVE_LIBPSAPI 1)
409 set(HAVE_LIBSHELL32 1)
410 # TODO: Check existence of libraries.
411 # include(CheckLibraryExists)
412 # CHECK_LIBRARY_EXISTS(imagehlp ??? . HAVE_LIBIMAGEHLP)
413 endif( MINGW )
415 if (NOT HAVE_STRTOLL)
416 # Use _strtoi64 if strtoll is not available.
417 check_symbol_exists(_strtoi64 stdlib.h have_strtoi64)
418 if (have_strtoi64)
419 set(HAVE_STRTOLL 1)
420 set(strtoll "_strtoi64")
421 set(strtoull "_strtoui64")
422 endif ()
423 endif ()
425 if( MSVC )
426 set(SHLIBEXT ".lib")
427 set(stricmp "_stricmp")
428 set(strdup "_strdup")
429 endif( MSVC )
431 if( PURE_WINDOWS )
432 CHECK_CXX_SOURCE_COMPILES("
433 #include <windows.h>
434 #include <imagehlp.h>
435 extern \"C\" void foo(PENUMLOADED_MODULES_CALLBACK);
436 extern \"C\" void foo(BOOL(CALLBACK*)(PCSTR,ULONG_PTR,ULONG,PVOID));
437 int main(){return 0;}"
438 HAVE_ELMCB_PCSTR)
439 if( HAVE_ELMCB_PCSTR )
440 set(WIN32_ELMCB_PCSTR "PCSTR")
441 else()
442 set(WIN32_ELMCB_PCSTR "PSTR")
443 endif()
444 endif( PURE_WINDOWS )
446 # FIXME: Signal handler return type, currently hardcoded to 'void'
447 set(RETSIGTYPE void)
449 if( LLVM_ENABLE_THREADS )
450 # Check if threading primitives aren't supported on this platform
451 if( NOT HAVE_PTHREAD_H AND NOT WIN32 )
452 set(LLVM_ENABLE_THREADS 0)
453 endif()
454 endif()
456 if( LLVM_ENABLE_THREADS )
457 message(STATUS "Threads enabled.")
458 else( LLVM_ENABLE_THREADS )
459 message(STATUS "Threads disabled.")
460 endif()
462 if (LLVM_ENABLE_ZLIB )
463 # Check if zlib is available in the system.
464 if ( NOT HAVE_ZLIB_H OR NOT HAVE_LIBZ )
465 set(LLVM_ENABLE_ZLIB 0)
466 endif()
467 endif()
469 set(LLVM_PREFIX ${CMAKE_INSTALL_PREFIX})
471 if (LLVM_ENABLE_DOXYGEN)
472 message(STATUS "Doxygen enabled.")
473 find_package(Doxygen REQUIRED)
475 if (DOXYGEN_FOUND)
476 # If we find doxygen and we want to enable doxygen by default create a
477 # global aggregate doxygen target for generating llvm and any/all
478 # subprojects doxygen documentation.
479 if (LLVM_BUILD_DOCS)
480 add_custom_target(doxygen ALL)
481 endif()
483 option(LLVM_DOXYGEN_EXTERNAL_SEARCH "Enable doxygen external search." OFF)
484 if (LLVM_DOXYGEN_EXTERNAL_SEARCH)
485 set(LLVM_DOXYGEN_SEARCHENGINE_URL "" CACHE STRING "URL to use for external searhc.")
486 set(LLVM_DOXYGEN_SEARCH_MAPPINGS "" CACHE STRING "Doxygen Search Mappings")
487 endif()
488 endif()
489 else()
490 message(STATUS "Doxygen disabled.")
491 endif()
493 if (LLVM_ENABLE_SPHINX)
494 message(STATUS "Sphinx enabled.")
495 find_package(Sphinx REQUIRED)
496 if (LLVM_BUILD_DOCS)
497 add_custom_target(sphinx ALL)
498 endif()
499 else()
500 message(STATUS "Sphinx disabled.")
501 endif()
503 set(LLVM_BINDINGS "")
504 if(WIN32)
505 message(STATUS "Go bindings disabled.")
506 else()
507 find_program(GO_EXECUTABLE NAMES go DOC "go executable")
508 if(GO_EXECUTABLE STREQUAL "GO_EXECUTABLE-NOTFOUND")
509 message(STATUS "Go bindings disabled.")
510 else()
511 execute_process(COMMAND ${GO_EXECUTABLE} run ${CMAKE_SOURCE_DIR}/bindings/go/conftest.go
512 RESULT_VARIABLE GO_CONFTEST)
513 if(GO_CONFTEST STREQUAL "0")
514 set(LLVM_BINDINGS "${LLVM_BINDINGS} go")
515 message(STATUS "Go bindings enabled.")
516 else()
517 message(STATUS "Go bindings disabled, need at least Go 1.2.")
518 endif()
519 endif()
520 endif()
522 include(FindOCaml)
523 include(AddOCaml)
524 if(WIN32)
525 message(STATUS "OCaml bindings disabled.")
526 else()
527 find_package(OCaml)
528 if( NOT OCAML_FOUND )
529 message(STATUS "OCaml bindings disabled.")
530 else()
531 if( OCAML_VERSION VERSION_LESS "4.00.0" )
532 message(STATUS "OCaml bindings disabled, need OCaml >=4.00.0.")
533 else()
534 find_ocamlfind_package(ctypes VERSION 0.3 OPTIONAL)
535 if( HAVE_OCAML_CTYPES )
536 message(STATUS "OCaml bindings enabled.")
537 find_ocamlfind_package(oUnit VERSION 2 OPTIONAL)
538 set(LLVM_BINDINGS "${LLVM_BINDINGS} ocaml")
539 else()
540 message(STATUS "OCaml bindings disabled, need ctypes >=0.3.")
541 endif()
542 endif()
543 endif()
544 endif()
546 string(REPLACE " " ";" LLVM_BINDINGS_LIST "${LLVM_BINDINGS}")