1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.15.0],
5 [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
12 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
13 # The extra brackets are to foil regex-based scans.
14 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
16 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects]
17 m4_esyscmd([case `automake --version | head -n 1` in # parallel-tests is default in automake 1.13+, we need to explicitly enable it
18 *1.11*|*1.12*) echo parallel-tests;; # for 1.11 and 1.12 but not below as those versions don't recognize the flag
19 esac])) # TODO: remove this hack once we require automake 1.11+
21 AC_CONFIG_HEADERS([config.h])
29 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
31 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
32 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
33 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
35 # This is the version number of the corlib-runtime interface. When
36 # making changes to this interface (by changing the layout
37 # of classes the runtime knows about, changing icall signature or
38 # semantics etc), increment this variable.
40 # This can be reset to 0 when Mono's version number is bumped
41 # since it's part of the corlib version (the prefix '1' in the full
42 # version number is to ensure the number isn't treated as octal in C)
44 MONO_CORLIB_VERSION=`printf "1%02d%02d%02d%03d" $MONO_VERSION_MAJOR $MONO_VERSION_MINOR 0 $MONO_CORLIB_COUNTER`
46 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,$MONO_CORLIB_VERSION,[Version of the corlib-runtime interface])
47 AC_SUBST(MONO_CORLIB_VERSION)
51 echo "Run configure using ./configure --host=i686-pc-mingw32"
55 # In case of cygwin, override LN_S, irrespective of what it determines.
56 # The build uses cygwin, but the actual runtime doesn't.
58 *cygwin* ) LN_S='cp -p';;
66 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
67 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
68 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
69 CFLAGS_FOR_LIBGC=$CFLAGS
70 CPPFLAGS_FOR_BTLS=$CPPFLAGS
71 CFLAGS_FOR_BTLS=$CFLAGS
73 # libgc uses some deprecated APIs
74 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
77 # These are the flags that need to be stored in the mono.pc file for
78 # compiling code that will embed Mono
82 AC_SUBST(libmono_cflags)
83 AC_SUBST(libmono_ldflags)
85 # Variable to have relocatable .pc files (lib, or lib64)
86 # realpath isn't always available, and requires that all but the tip of the provided
87 # path exists. Fall back to the old behaviour, but realpath allows depth >1
88 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
89 # too deep for the old method to work
90 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
91 AC_SUBST(reloc_libdir)
93 # Set to yes if Unix sockets cannot be created in an anonymous namespace
96 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
97 extra_runtime_ldflags=""
101 # Current autotools (v1.15) doesn't have a triplet we can use for wasm so the kludge we do is to
102 # work around it by using a feature flag instead
103 AC_ARG_ENABLE(wasm,[ --enable-wasm Hack to set the current runtime to target wasm], enable_wasm=$enableval)
105 # Thread configuration inspired by sleepycat's db
106 AC_MSG_CHECKING([host platform characteristics])
121 if test "x$enable_wasm" = "xyes"; then
122 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
123 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -D_GNU_SOURCE -DNO_UNALIGNED_ACCESS -s WASM=1"
125 libgc_threads=pthreads
131 *-mingw*|*-*-cygwin*)
132 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
133 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
136 if test "x$cross_compiling" = "xno"; then
137 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
141 if test "x$host" = "x$target"; then
146 # Windows Vista or later is required
147 CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -D_WIN32_WINNT=0x0600 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
148 LDFLAGS="$LDFLAGS -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
149 libmono_cflags="-mms-bitfields -mwindows"
150 libmono_ldflags="-mms-bitfields -mwindows"
155 with_sgen_default_concurrent=yes
157 # This forces libgc to use the DllMain based thread registration code on win32
158 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
161 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
162 libmono_cflags="-D_REENTRANT"
163 LDFLAGS="$LDFLAGS -pthread"
164 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
165 libmono_ldflags="-pthread"
168 libgc_threads=pthreads
171 with_sgen_default_concurrent=yes
174 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
175 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
176 libmono_ldflags="-lpthread -pthread"
178 libgc_threads=pthreads
182 with_sgen_default_concurrent=yes
185 if test "x$PTHREAD_CFLAGS" = "x"; then
186 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
189 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
190 libmono_cflags="$PTHREAD_CFLAGS"
192 if test "x$PTHREAD_LIBS" = "x"; then
193 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
194 libmono_ldflags="-pthread"
196 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
197 libmono_ldflags="$PTHREAD_LIBS"
199 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
201 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
203 libgc_threads=pthreads
206 with_sgen_default_concurrent=yes
209 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
210 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
211 if test "x$disable_munmap" != "xyes"; then
212 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
214 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
215 LDFLAGS="$LDFLAGS -pthread"
217 AC_DEFINE(PTHREAD_POINTER_ID)
219 libgc_threads=pthreads
223 with_sgen_default_concurrent=yes
227 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
228 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
230 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
231 if test "x$disable_munmap" != "xyes"; then
232 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
234 libmono_cflags="-D_REENTRANT"
236 libgc_threads=pthreads
243 # Android doesn't support boehm, as it's missing <link.h>
247 # isinf(3) requires -lm; see isinf check below
248 LDFLAGS="$LDFLAGS -lm"
250 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
251 # PAGE_SIZE; breaks mono/io-layer/collection.c
252 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
253 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
254 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
256 # to bypass the underscore linker check, can't work when cross-compiling
261 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
262 if test "x$disable_munmap" != "xyes"; then
263 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
265 libmono_cflags="-D_REENTRANT"
267 libgc_threads=pthreads
269 if test "x$cross_compiling" != "xno"; then
270 # to bypass the underscore linker check, not
271 # available during cross-compilation
285 # https://bugzilla.novell.com/show_bug.cgi?id=504411
289 with_sgen_default_concurrent=yes
292 echo "nacl no longer supported."
296 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
297 # +ESdbgasm only valid on bundled cc on RISC
298 # silently ignored for ia64
299 if test $GCC != "yes"; then
300 CFLAGS="$CFLAGS +ESdbgasm"
301 # Arrange for run-time dereferencing of null
302 # pointers to produce a SIGSEGV signal.
303 LDFLAGS="$LDFLAGS -z"
305 CFLAGS="$CFLAGS +ESdbgasm"
306 LDFLAGS="$LDFLAGS -z"
307 libmono_cflags="-D_REENTRANT"
308 libmono_ldflags="-lpthread"
309 libgc_threads=pthreads
314 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
316 libmono_cflags="-D_REENTRANT"
317 libgc_threads=pthreads
320 enable_solaris_tar_check=yes
323 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
326 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
327 libmono_cflags="-D_THREAD_SAFE"
329 AC_DEFINE(PTHREAD_POINTER_ID)
330 AC_DEFINE(USE_MACH_SEMA, 1, [...])
332 libgc_threads=pthreads
334 if test "x$cross_compiling" = "xyes"; then
335 has_broken_apple_cpp=yes
337 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
338 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
339 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
341 dnl Snow Leopard and newer config.guess reports as this
343 BROKEN_DARWIN_FLAGS="-arch i386 -D_XOPEN_SOURCE"
344 BROKEN_DARWIN_CPPFLAGS="-D_XOPEN_SOURCE"
345 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
346 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
347 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
348 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
349 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
350 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
351 with_sgen_default_concurrent=yes
354 with_sgen_default_concurrent=yes
366 CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_THREAD_SAFE"
367 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
369 LIBS="$LIBS -lnetwork -ltextencoding"
371 AC_DEFINE(PTHREAD_POINTER_ID)
372 dnl Haiku does not support static TLS with __thread
374 libgc_threads=pthreads
378 dnl Set up a 64-bit build
379 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
381 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
382 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
383 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
384 dnl specifiy 64-bit mode for tools.
385 AR="/usr/bin/ar -X64"
386 NM="/usr/bin/nm -X64"
387 dnl SGen is the future (changes to Boehm support code would be
388 dnl required if you wish to re-enable Boehm)
393 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
395 dnl use pthread TLS, __thread has issues with the compiler flags we use
397 dnl ppc Linux is the same? test further
401 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
411 if test x$need_link_unlink = xyes; then
412 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
415 if test x$host_win32 = xyes; then
416 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
419 if test x$target_win32 = xyes; then
420 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
423 if test x$host_darwin = xyes; then
424 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
427 # Defined for all targets/platforms using classic Windows API support.
428 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
429 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
431 AC_SUBST(extra_runtime_ldflags)
432 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
433 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
434 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
435 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
436 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
437 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
438 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
439 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
440 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
442 if test -z "$HOST_DARWIN_TRUE"; then :
443 PLATFORM_AOT_SUFFIX=.dylib
446 if test -z "$HOST_LINUX_TRUE"; then :
447 PLATFORM_AOT_SUFFIX=.so
450 if test -z "$HOST_WIN32_TRUE"; then :
451 PLATFORM_AOT_SUFFIX=.dll
454 AC_SUBST(PLATFORM_AOT_SUFFIX)
456 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
458 AC_CHECK_TOOL(CC, gcc, gcc)
460 AC_CHECK_TOOL(CXX, g++, g++)
466 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
468 # Set ASFLAGS if not already set.
469 : ${CCASFLAGS='$(CFLAGS)'}
473 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
474 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
475 if test "x$CXX" = "xg++"; then
476 if test "x$GXX" != "xyes"; then
477 # automake/libtool is so broken, it requires g++ even if the c++ sources
478 # are inside automake conditionals
479 AC_MSG_ERROR([You need to install g++])
483 dnl may require a specific autoconf version
484 dnl AC_PROG_CC_FOR_BUILD
485 dnl CC_FOR_BUILD not automatically detected
487 CFLAGS_FOR_BUILD=$CFLAGS
489 if test "x$cross_compiling" = "xyes"; then
494 AC_SUBST(CC_FOR_BUILD)
495 AC_SUBST(CFLAGS_FOR_BUILD)
497 AC_SUBST(BUILD_EXEEXT)
499 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
500 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
505 # This causes monodis to not link correctly
506 #AC_DISABLE_FAST_INSTALL
508 #lookup makedev() header
512 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
515 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
516 AC_SUBST(export_ldflags)
518 # Test whenever ld supports -version-script
522 AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h sys/prctl.h)
523 AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h arpa/inet.h complex.h unwind.h)
524 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
525 [], [], [#include <stddef.h>
526 #include <sys/socket.h>
527 #include <linux/socket.h>])
529 AC_CHECK_HEADERS(sys/user.h, [], [],
531 #ifdef HAVE_SYS_PARAM_H
532 # include <sys/param.h>
536 AC_CHECK_HEADERS(linux/serial.h)
538 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
539 if test x$have_zlib = xyes; then
540 AC_TRY_COMPILE([#include <zlib.h>], [
541 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
543 #error No good zlib found
546 AC_MSG_RESULT(Using system zlib)
547 zlib_msg="system zlib"
548 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
550 AC_MSG_RESULT(Using embedded zlib)
552 zlib_msg="bundled zlib"
556 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
557 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
559 # for mono/metadata/debug-symfile.c
560 AC_CHECK_HEADERS(elf.h)
563 AC_CHECK_HEADERS(poll.h)
564 AC_CHECK_HEADERS(sys/poll.h)
565 AC_CHECK_HEADERS(sys/wait.h)
566 AC_CHECK_HEADERS(grp.h)
567 AC_CHECK_HEADERS(syslog.h)
568 AC_CHECK_FUNCS(vsyslog)
571 AC_CHECK_HEADERS(wchar.h)
572 AC_CHECK_HEADERS(ieeefp.h)
573 AC_MSG_CHECKING(for isinf)
574 AC_TRY_LINK([#include <math.h>], [
578 AC_DEFINE(HAVE_ISINF, 1, [isinf available])
580 # We'll have to use signals
584 AC_CHECK_FUNCS(_finite, , AC_MSG_CHECKING(for _finite in math.h)
585 AC_TRY_LINK([#include <math.h>],
587 AC_DEFINE(HAVE__FINITE, 1, [Have _finite in -lm]) AC_MSG_RESULT(yes),
590 # for Linux statfs support
591 AC_CHECK_HEADERS(linux/magic.h)
593 # For Android NDK unified headers
594 if test x$platform_android = xyes; then
595 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
596 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
598 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
599 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
600 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
601 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
602 # doesn't contain the required definitions (NDK 14)
603 if test x$have_android_signal_inlines = xyes; then
604 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
606 AC_LANG_PROGRAM([#include <android/legacy_signal_inlines.h>],[
608 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
612 android_sigrtminmax_work=yes
615 android_sigrtminmax_work=no
619 if test x$android_sigrtminmax_work = xno; then
620 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
624 # Attempt to detect whether we're using Android NDK unified headers
625 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
626 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
628 android_unified_headers=no
629 if test x$have_android_api_level = xyes; then
630 if test x$have_android_versioning = xyes; then
631 AC_MSG_CHECKING([whether using Android NDK unified headers])
633 # Both macros are defined only in the NDK unified headers
636 #include <android/api-level.h>
637 #include <android/versioning.h>
639 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
641 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
645 android_unified_headers=yes
648 android_unified_headers=no
654 if test x$android_unified_headers = xyes; then
655 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
659 # not 64 bit clean in cross-compile
660 if test "x$enable_wasm" = "xyes"; then
661 AC_DEFINE(SIZEOF_VOID_P,4)
662 AC_DEFINE(SIZEOF_LONG,4)
663 ac_cv_sizeof_void_p="4"
664 ac_cv_sizeof_long="4"
666 AC_CHECK_SIZEOF(void *)
667 AC_CHECK_SIZEOF(long)
671 AC_CHECK_SIZEOF(long long)
673 AC_CACHE_CHECK([for clang],
686 AC_ARG_ENABLE(visibility-hidden,
687 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
688 disable_visibility_hidden=yes, disable_visibility_hidden=no)
691 if test x"$GCC" = xyes; then
692 WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes -Wno-format-zero-length'
694 # We require C99 with some GNU extensions, e.g. `linux` macro
695 CFLAGS="$CFLAGS -std=gnu99"
697 # The runtime code does not respect ANSI C strict aliasing rules
698 CFLAGS="$CFLAGS -fno-strict-aliasing"
700 # We rely on signed overflow to behave
701 CFLAGS="$CFLAGS -fwrapv"
703 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
704 if test x"$disable_visibility_hidden" = xno; then
705 # Don't export any symbols by default
706 SHARED_CFLAGS="-fvisibility=hidden"
707 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
711 # Check for the normal version, since gcc ignores unknown -Wno options
712 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
713 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
717 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
723 if test "x$mono_cv_clang" = "xyes"; then
724 # https://bugzilla.samba.org/show_bug.cgi?id=8118
725 WARN="$WARN -Qunused-arguments"
726 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
727 # We rely on zero length arrays in structs
728 WARN="$WARN -Wno-zero-length-array"
731 # The Sun Forte compiler complains about inline functions that access static variables
732 # so disable all inlining.
735 CFLAGS="$CFLAGS -Dinline="
739 CFLAGS="$CFLAGS -g $WARN"
740 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
741 CPPFLAGS="$CPPFLAGS -g $WARN"
743 # Where's the 'mcs' source tree?
744 if test -d $srcdir/mcs; then
750 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
751 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
752 mcsdir=$with_mcs_path
756 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
759 # A sanity check to catch cases where the package was unpacked
760 # with an ancient tar program (Solaris)
762 AC_ARG_ENABLE(solaris-tar-check,
763 [ --disable-solaris-tar-check disable solaris tar check],
764 do_solaris_tar_check=no, do_solaris_tar_check=yes)
766 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
767 AC_MSG_CHECKING(integrity of package)
768 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
772 errorm="Your mono distribution is incomplete; if unpacking from a tar file, make sure you use GNU tar; see http://www.mono-project.com/IncompletePackage for more details"
773 AC_MSG_ERROR([$errorm])
777 if test "x$with_mcs_path" != "x"; then
778 mcs_topdir=$(cd "$mcsdir" && pwd)
779 mcs_topdir_from_srcdir=$mcs_topdir
781 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
782 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
785 # Convert mcs_topdir* paths to Windows syntax.
786 if test x$cross_compiling$host_win32 = xnoyes; then
787 mcs_topdir=$(cygpath -m $mcs_topdir)
788 case $mcs_topdir_from_srcdir in
790 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
795 AC_SUBST([mcs_topdir])
796 AC_SUBST([mcs_topdir_from_srcdir])
798 # gettext: prepare the translation directories.
799 # we do not configure the full gettext, as we consume it dynamically from C#
802 if test "x$USE_NLS" = "xyes"; then
803 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
805 if test "x$HAVE_MSGFMT" = "xno"; then
806 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
810 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
813 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
814 if test x$with_crosspkgdir = "x"; then
815 if test -s $PKG_CONFIG_PATH; then
816 pkg_config_path=$PKG_CONFIG_PATH
819 pkg_config_path=$with_crosspkgdir
820 PKG_CONFIG_PATH=$pkg_config_path
821 export PKG_CONFIG_PATH
825 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
826 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
827 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
829 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
830 if test x$werror_flag = xyes; then
831 WERROR_CFLAGS="-Werror"
833 AC_SUBST([WERROR_CFLAGS])
834 AC_SUBST([SHARED_CFLAGS])
836 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
837 GLIB_LIBS='$(top_builddir)/mono/eglib/libeglib.la -lm'
839 AC_SUBST(GLIB_CFLAGS)
842 # Enable support for fast thread-local storage
843 # Some systems have broken support, so we allow to disable it.
844 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
846 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
847 # This does not work on some platforms (bug #55253)
848 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
850 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
851 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
852 # Same as --with-shared_mono=no
853 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
855 if test "x$enable_static" = "xno"; then
859 if test "x$enable_shared" = "xno"; then
863 if test "x$enable_libraries" = "xno"; then
867 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
869 if test "x$host_win32" = "xyes"; then
870 # Boehm GC requires the runtime to be in its own dll
874 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
875 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
876 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
877 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
879 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
880 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
881 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
883 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
884 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
888 # Pass it to libgc as well
889 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
896 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
898 if test x$enable_small_config = xyes; then
899 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
900 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
903 AC_ARG_ENABLE(system-aot, [ --enable-system-aot Enable the Ahead-Of-Time compilation of system assemblies during the build (on by default on some platforms)], enable_system_aot=$enableval, enable_system_aot=default)
905 DISABLED_FEATURES=none
908 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
909 AC_MSG_CHECKING([CSharp compiler to use])
910 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
911 if test x$withval = xmcs; then
913 elif test x$withval = xroslyn; then
915 elif test x$withval = xdefault; then
918 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
920 ],[csc_compiler=default])
922 if test $csc_compiler = default; then
923 if test $endian = big; then
925 elif test $endian = little; then
927 powerpc*) csc_compiler=mcs ;;
928 *) csc_compiler=roslyn ;;
934 AC_MSG_RESULT($csc_compiler)
936 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
937 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
938 AC_ARG_WITH(jemalloc-assert, [ --with-jemalloc_assert=yes,no If jemalloc performs runtime checks for memory correctness (defaults to no)], [], [with_jemalloc_assert=no])
941 if test x$target_win32 = xyes; then
943 with_jemalloc_assert=no
944 with_jemalloc_always=no
947 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
948 if test "x$with_jemalloc_assert" = "xyes"; then
949 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
950 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
951 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
954 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
955 if test "x$with_jemalloc_always" = "xyes"; then
957 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
958 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
959 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
962 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
963 if test "x$with_jemalloc" = "xyes"; then
964 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
965 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
966 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
968 if test "x$target_mach" = "xyes"; then
969 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
972 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
973 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
975 AC_SUBST(JEMALLOC_CFLAGS)
976 AC_SUBST(JEMALLOC_CPPFLAGS)
977 AC_SUBST(JEMALLOC_LDFLAGS)
978 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
982 # Set the build profiles and options before things which use them
985 AC_ARG_WITH(profile4_x, [ --with-profile4_x=yes,no If you want to install the 4.x FX (defaults to yes)], [], [with_profile4_x=default])
986 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
987 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
988 AC_ARG_WITH(monotouch_watch, [ --with-monotouch_watch=yes,no If you want to build the Xamarin.WatchOS assemblies (defaults to no)], [], [with_monotouch_watch=default])
989 AC_ARG_WITH(monotouch_tv, [ --with-monotouch_tv=yes,no If you want to build the Xamarin.TVOS assemblies (defaults to no)], [], [with_monotouch_tv=default])
990 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
991 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
992 AC_ARG_WITH(testing_aot_hybrid, [ --with-testing_aot_hybrid=yes,no If you want to build the testing_aot_hybrid assemblies (defaults to no)], [], [with_testing_aot_hybrid=default])
993 AC_ARG_WITH(testing_aot_full, [ --with-testing_aot_full=yes,no If you want to build the testing_aot_full assemblies (defaults to no)], [], [with_testing_aot_full=default])
994 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
995 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
996 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
997 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1000 AC_ARG_WITH(runtime_preset, [ --with-runtime_preset=net_4_x,all,aot,hybridaot,fullaot,bitcode,unreal Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1001 AC_ARG_WITH(spectre-mitigation, [ --with-spectre-mitigation=yes,no If you want to build the runtime with compiler flags that enable Spectre mitigation (defaults to no)], [], [with_spectre_mitigation=default])
1002 AC_ARG_WITH(spectre-indirect-branch-choice, [ --with-spectre-indirect-branch-choice=keep,thunk,inline,extern Convert indirect branches to the specified kind of thunk (defaults to inline)], [], [with_spectre_indirect_branch_choice=inline])
1003 AC_ARG_WITH(spectre-function-return-choice, [ --with-spectre-function-return-choice=keep,thunk,inline,extern Convert function return instructions to the specified kind of thunk (defaults to inline)], [], [with_spectre_function_return_choice=inline])
1006 dnl Spectre compiler mitigation flag checks
1008 if test "x$with_spectre_mitigation" = "xyes"; then
1009 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1011 SPECTRE_INDIRECT_BRANCH_KIND=
1012 case "x$with_spectre_indirect_branch_choice" in
1013 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1014 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1015 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1016 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1017 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1020 SPECTRE_FUNCTION_RETURN_KIND=""
1021 case "x$with_spectre_function_return_choice" in
1022 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1023 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1024 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1025 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1026 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1029 AX_CHECK_COMPILE_FLAG(
1030 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1031 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1034 AX_CHECK_COMPILE_FLAG(
1035 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1036 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1039 if test "x$SPECTRE_CFLAGS" != "x" ; then
1040 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1041 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1042 spectre_mitigation_status="mitigation enabled"
1045 spectre_mitigation_status="no mitigation"
1049 dnl Profile defaults
1051 TEST_PROFILE=default
1052 enable_llvm_default=no
1054 with_profile4_x_default=no
1055 with_monodroid_default=no
1056 with_monotouch_default=no
1057 with_monotouch_watch_default=no
1058 with_monotouch_tv_default=no
1059 with_xammac_default=no
1060 with_testing_aot_hybrid_default=no
1061 with_testing_aot_full_default=no
1062 with_winaot_default=no
1063 with_orbis_default=no
1064 with_unreal_default=no
1065 with_wasm_default=no
1067 with_bitcode_default=no
1068 with_cooperative_gc_default=no
1070 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1072 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1074 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1075 DISABLE_MCS_DOCS_default=yes
1076 elif test x$with_runtime_preset = xnet_4_x; then
1077 with_profile4_x_default=yes
1078 elif test x$with_runtime_preset = xall; then
1079 with_profile4_x_default=yes
1080 with_monodroid_default=yes
1081 with_monotouch_default=yes
1082 with_monotouch_watch_default=yes
1083 with_monotouch_tv_default=yes
1084 with_xammac_default=yes
1085 with_winaot_default=yes
1086 with_orbis_default=yes
1087 with_unreal_default=yes
1088 with_wasm_default=yes
1089 elif test x$with_runtime_preset = xfullaot; then
1090 DISABLE_MCS_DOCS_default=yes
1091 with_testing_aot_full_default=yes
1092 TEST_PROFILE=testing_aot_full
1094 mono_feature_disable_com='yes'
1095 mono_feature_disable_remoting='yes'
1096 mono_feature_disable_reflection_emit_save='yes'
1097 mono_feature_disable_reflection_emit='yes'
1098 mono_feature_disable_appdomains='yes'
1100 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1101 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1103 elif test x$with_runtime_preset = xbitcode; then
1104 DISABLE_MCS_DOCS_default=yes
1105 with_testing_aot_full_default=yes
1106 with_bitcode_default=yes
1107 with_cooperative_gc_default=yes
1108 TEST_PROFILE=testing_aot_full
1109 enable_llvm_default=yes
1111 mono_feature_disable_com='yes'
1112 mono_feature_disable_remoting='yes'
1113 mono_feature_disable_reflection_emit_save='yes'
1114 mono_feature_disable_reflection_emit='yes'
1115 mono_feature_disable_appdomains='yes'
1117 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1118 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1120 elif test x$with_runtime_preset = xhybridaot; then
1121 DISABLE_MCS_DOCS_default=yes
1122 with_testing_aot_hybrid_default=yes
1123 TEST_PROFILE=testing_aot_hybrid
1125 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1126 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1127 elif test x$with_runtime_preset = xaot; then
1128 with_profile4_x_default=yes
1130 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1133 DISABLE_MCS_DOCS_default=yes
1134 elif test x$with_runtime_preset = xwinaot; then
1135 DISABLE_MCS_DOCS_default=yes
1136 with_winaot_default=yes
1139 mono_feature_disable_com='yes'
1140 mono_feature_disable_remoting='yes'
1141 mono_feature_disable_reflection_emit_save='yes'
1142 mono_feature_disable_reflection_emit='yes'
1143 mono_feature_disable_appdomains='yes'
1145 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1146 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1148 elif test x$with_runtime_preset = xorbis; then
1149 DISABLE_MCS_DOCS_default=yes
1150 with_orbis_default=yes
1153 mono_feature_disable_com='yes'
1154 mono_feature_disable_remoting='yes'
1155 mono_feature_disable_reflection_emit_save='yes'
1156 mono_feature_disable_reflection_emit='yes'
1157 mono_feature_disable_appdomains='yes'
1159 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1160 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1162 elif test x$with_runtime_preset = xunreal; then
1163 DISABLE_MCS_DOCS_default=yes
1164 with_unreal_default=yes
1167 mono_feature_disable_com='yes'
1168 mono_feature_disable_remoting='yes'
1169 mono_feature_disable_appdomains='no'
1171 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1172 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1173 elif test x$with_runtime_preset = xwasm; then
1174 DISABLE_MCS_DOCS_default=yes
1175 with_wasm_default=yes
1178 mono_feature_disable_com='yes'
1179 mono_feature_disable_remoting='yes'
1180 mono_feature_disable_reflection_emit_save='yes'
1181 mono_feature_disable_reflection_emit='yes'
1182 mono_feature_disable_appdomains='yes'
1184 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1185 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1187 with_profile4_x_default=yes
1190 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1191 AC_SUBST(AOT_BUILD_FLAGS)
1192 AC_SUBST(AOT_RUN_FLAGS)
1193 # For llvmonlycheck + fullaotcheck
1194 AC_SUBST(INVARIANT_AOT_OPTIONS)
1197 AC_SUBST(TEST_PROFILE)
1199 if test "x$with_profile4_x" = "xdefault"; then
1200 with_profile4_x=$with_profile4_x_default
1202 if test "x$with_monodroid" = "xdefault"; then
1203 with_monodroid=$with_monodroid_default
1205 if test "x$with_monotouch" = "xdefault"; then
1206 with_monotouch=$with_monotouch_default
1208 if test "x$with_monotouch_watch" = "xdefault"; then
1209 with_monotouch_watch=$with_monotouch_watch_default
1211 if test "x$with_monotouch_tv" = "xdefault"; then
1212 with_monotouch_tv=$with_monotouch_tv_default
1214 if test "x$with_bitcode" = "xdefault"; then
1215 with_bitcode=$with_bitcode_default
1217 if test "x$with_xammac" = "xdefault"; then
1218 with_xammac=$with_xammac_default
1220 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1221 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1223 if test "x$with_testing_aot_full" = "xdefault"; then
1224 with_testing_aot_full=$with_testing_aot_full_default
1226 if test "x$with_winaot" = "xdefault"; then
1227 with_winaot=$with_winaot_default
1229 if test "x$with_orbis" = "xdefault"; then
1230 with_orbis=$with_orbis_default
1232 if test "x$with_unreal" = "xdefault"; then
1233 with_unreal=$with_unreal_default
1235 if test "x$with_wasm" = "xdefault"; then
1236 with_wasm=$with_wasm_default
1240 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1241 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1242 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1243 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1244 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1245 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1246 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1247 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1248 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1249 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1250 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1251 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1252 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1253 AM_CONDITIONAL(FULL_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full"] || [test "x$TEST_PROFILE" = "xwinaot"] || [test "x$TEST_PROFILE" = "xorbis"] || [test "x$TEST_PROFILE" = "xwasm"])
1254 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1256 default_profile=net_4_x
1257 if test -z "$INSTALL_MONODROID_TRUE"; then :
1258 default_profile=monodroid
1260 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1261 default_profile=monotouch
1263 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1264 default_profile=xammac
1266 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1267 default_profile=testing_aot_hybrid
1269 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1270 default_profile=testing_aot_full
1272 if test -z "$INSTALL_WINAOT_TRUE"; then :
1273 default_profile=winaot
1275 if test -z "$INSTALL_ORBIS_TRUE"; then :
1276 default_profile=orbis
1278 if test -z "$INSTALL_UNREAL_TRUE"; then :
1279 default_profile=unreal
1281 if test -z "$INSTALL_WASM_TRUE"; then :
1282 default_profile=wasm
1284 if test -z "$INSTALL_4_x_TRUE"; then :
1285 default_profile=net_4_x
1287 DEFAULT_PROFILE=$default_profile
1288 AC_SUBST(DEFAULT_PROFILE)
1291 # End build profile configuration
1294 if test x$USE_NLS = xprofile_default; then
1296 AC_MSG_CHECKING([NLS used])
1298 # We make the default value for USE_NLS
1299 # "no" on OSX because it isn't available on most
1300 # default OSX installs. The most common configurations will
1301 # all disable it, so this saves us typing.
1302 if test x$host_darwin = xyes; then
1309 AC_MSG_RESULT([$USE_NLS])
1312 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1313 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1314 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1315 security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1317 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1318 eval "mono_feature_disable_$feature='yes'"
1320 DISABLED_FEATURES=$enable_minimal
1321 disabled="Disabled: $enable_minimal"
1324 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1326 if test "x$mono_feature_disable_aot" = "xyes"; then
1327 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1328 enable_system_aot=no
1329 AC_MSG_NOTICE([Disabled AOT compiler])
1332 if test "x$mono_feature_disable_profiler" = "xyes"; then
1333 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1334 AC_MSG_NOTICE([Disabled support for the profiler])
1336 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1338 if test "x$mono_feature_disable_decimal" = "xyes"; then
1339 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1340 AC_MSG_NOTICE([Disabled support for decimal])
1343 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1344 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1345 AC_MSG_NOTICE([Disabled support for P/Invoke])
1348 if test "x$mono_feature_disable_debug" = "xyes"; then
1349 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1350 AC_MSG_NOTICE([Disabled support for runtime debugging])
1353 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1354 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1355 mono_feature_disable_reflection_emit_save=yes
1356 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1359 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1360 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1361 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1364 if test "x$mono_feature_disable_large_code" = "xyes"; then
1365 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1366 AC_MSG_NOTICE([Disabled support for large assemblies])
1369 if test "x$mono_feature_disable_logging" = "xyes"; then
1370 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1371 AC_MSG_NOTICE([Disabled support for logging])
1374 if test "x$mono_feature_disable_com" = "xyes"; then
1375 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1376 AC_MSG_NOTICE([Disabled COM support])
1379 if test "x$mono_feature_disable_ssa" = "xyes"; then
1380 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1381 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1384 if test "x$mono_feature_disable_generics" = "xyes"; then
1385 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1386 AC_MSG_NOTICE([Disabled Generics Support])
1389 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1390 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1391 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1394 if test "x$mono_feature_disable_portability" = "xyes"; then
1395 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1396 AC_MSG_NOTICE([Disabled IO Portability layer])
1399 if test "x$mono_feature_disable_attach" = "xyes"; then
1400 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1401 AC_MSG_NOTICE([Disabled agent attach])
1404 if test "x$mono_feature_disable_verifier" = "xyes"; then
1405 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1406 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1409 if test "x$mono_feature_disable_jit" = "xyes"; then
1410 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1411 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1414 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1416 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1417 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1418 AC_MSG_NOTICE([Disabled the interpreter])
1421 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1423 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1424 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1427 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1429 if test "x$mono_feature_disable_simd" = "xyes"; then
1430 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1431 AC_MSG_NOTICE([Disabled SIMD support])
1434 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1435 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1436 AC_MSG_NOTICE([Disabled Soft Debugger.])
1439 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1441 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1442 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1443 AC_MSG_NOTICE([Disabled Performance Counters.])
1445 if test "x$mono_feature_disable_normalization" = "xyes"; then
1446 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1447 AC_MSG_NOTICE([Disabled String normalization support.])
1450 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1451 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1452 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1453 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1456 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1457 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1458 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1461 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1462 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1463 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1466 if test "x$mono_feature_disable_remoting" = "xyes"; then
1467 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1468 AC_MSG_NOTICE([Disabled remoting])
1471 if test "x$mono_feature_disable_security" = "xyes"; then
1472 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1473 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1476 if test "x$mono_feature_disable_lldb" = "xyes"; then
1477 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1478 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1481 if test "x$mono_feature_disable_mdb" = "xyes"; then
1482 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1483 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1486 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1487 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1488 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1492 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1493 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1494 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1497 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1498 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1499 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1502 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1503 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1504 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1507 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1508 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1510 has_extension_module=no
1511 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1513 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1514 if test x$extension = xdefault ; then
1515 has_extension_module=yes;
1518 if test x$enable_extension_module = xyes; then
1519 has_extension_module=yes;
1523 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1525 if test x$has_extension_module != xno ; then
1526 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1527 AC_MSG_NOTICE([Enabling mono extension module.])
1531 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1533 AC_MSG_CHECKING(for visibility __attribute__)
1536 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1537 int main () { doit (); return 0; }
1540 have_visibility_hidden=yes
1543 have_visibility_hidden=no
1548 dnl Boehm GC configuration
1551 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1553 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1554 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1556 if test "x$support_boehm" = "xyes"; then
1558 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1559 if test x$enable_parallel_mark = xyes; then
1560 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1570 if test "x$support_boehm" = "xyes"; then
1574 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1575 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1576 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1578 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1580 if test x$target_win32 = xyes; then
1581 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1582 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1585 gc_msg="Included Boehm GC with typed GC"
1586 if test x$enable_parallel_mark = xyes; then
1587 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1588 gc_msg="$gc_msg and parallel mark"
1590 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1595 AC_MSG_WARN("External Boehm is no longer supported")
1599 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1603 AC_MSG_WARN("Compiling mono without GC.")
1604 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1605 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1609 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1613 AC_ARG_WITH(large-heap, [ --with-large-heap=yes,no Enable support for GC heaps larger than 3GB (defaults to no)], [large_heap=$withval], [large_heap=no])
1614 if test "x$large_heap" = "xyes"; then
1615 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1618 AC_SUBST(LIBGC_CPPFLAGS)
1619 AC_SUBST(LIBGC_LIBS)
1620 AC_SUBST(LIBGC_STATIC_LIBS)
1622 AC_SUBST(BOEHM_DEFINES)
1625 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1628 dnl End of Boehm GC Configuration
1631 dnl *************************************
1632 dnl *** Checks for zero length arrays ***
1633 dnl *************************************
1634 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1642 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1645 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1648 dnl ***********************************
1649 dnl *** Checks for signals
1650 dnl ***********************************
1651 AC_CHECK_HEADERS(signal.h)
1652 AC_CHECK_FUNCS(sigaction)
1653 AC_CHECK_FUNCS(kill)
1654 AC_CHECK_FUNCS(signal)
1656 # signal() is declared inline in Android headers
1657 # so we need to workaround it by overriding the check.
1658 if test x$platform_android = xyes; then
1659 AC_DEFINE(HAVE_SIGNAL,1)
1662 if test x$host_win32 = xno; then
1663 dnl *************************************
1664 dnl *** Checks for time capabilities ***
1665 dnl *************************************
1667 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1668 AC_TRY_COMPILE([#include <time.h>], [
1669 const int foo = CLOCK_MONOTONIC;
1672 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1677 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1678 AC_TRY_COMPILE([#include <time.h>], [
1679 const int foo = CLOCK_MONOTONIC_COARSE;
1682 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1687 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1688 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1689 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1691 dnl hires monotonic clock support
1692 AC_SEARCH_LIBS(clock_gettime, rt)
1693 AC_CHECK_FUNCS(clock_nanosleep)
1695 dnl dynamic loader support
1696 AC_CHECK_FUNC(dlopen, DL_LIB="",
1697 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1699 if test x$dl_support = xno; then
1700 AC_MSG_WARN([No dynamic loading support available])
1702 LIBS="$LIBS $DL_LIB"
1703 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1704 dnl from glib's configure.ac
1705 AC_CACHE_CHECK([for preceeding underscore in symbols],
1707 AC_TRY_RUN([#include <dlfcn.h>
1708 int mono_underscore_test (void) { return 42; }
1710 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1711 handle = dlopen ((void*)0, 0);
1713 f1 = dlsym (handle, "mono_underscore_test");
1714 f2 = dlsym (handle, "_mono_underscore_test");
1715 } return (!f2 || f1);
1717 [mono_cv_uscore=yes],
1718 [mono_cv_uscore=no],
1721 if test "x$mono_cv_uscore" = "xyes"; then
1722 MONO_DL_NEED_USCORE=1
1724 MONO_DL_NEED_USCORE=0
1726 AC_SUBST(MONO_DL_NEED_USCORE)
1727 AC_CHECK_FUNC(dlerror)
1730 dnl ******************************************************************
1731 dnl *** Checks for the IKVM JNI interface library ***
1732 dnl ******************************************************************
1733 AC_ARG_WITH(ikvm-native, [ --with-ikvm-native=yes,no build the IKVM JNI interface library (defaults to yes)],[with_ikvm_native=$withval],[with_ikvm_native=$ikvm_native])
1736 if test x$with_ikvm_native = xyes; then
1737 ikvm_native_dir=ikvm-native
1738 jdk_headers_found="IKVM Native"
1741 AC_SUBST(ikvm_native_dir)
1743 AC_CHECK_HEADERS(execinfo.h)
1745 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1747 AC_CHECK_FUNCS(getgrgid_r)
1748 AC_CHECK_FUNCS(getgrnam_r)
1749 AC_CHECK_FUNCS(getresuid)
1750 AC_CHECK_FUNCS(setresuid)
1751 AC_CHECK_FUNCS(kqueue)
1752 AC_CHECK_FUNCS(backtrace_symbols)
1753 AC_CHECK_FUNCS(mkstemp)
1754 AC_CHECK_FUNCS(mmap)
1755 AC_CHECK_FUNCS(madvise)
1756 AC_CHECK_FUNCS(getrusage)
1757 AC_CHECK_FUNCS(getpriority)
1758 AC_CHECK_FUNCS(setpriority)
1759 AC_CHECK_FUNCS(dl_iterate_phdr)
1760 AC_CHECK_FUNCS(dladdr)
1761 AC_CHECK_FUNCS(sysconf)
1762 AC_CHECK_FUNCS(getrlimit)
1763 AC_CHECK_FUNCS(prctl)
1765 AC_CHECK_FUNCS(sched_getaffinity)
1766 AC_CHECK_FUNCS(sched_setaffinity)
1767 AC_CHECK_FUNCS(sched_getcpu)
1769 if test x$platform_android != xyes; then
1770 AC_CHECK_FUNCS(getpwnam_r)
1771 AC_CHECK_FUNCS(getpwuid_r)
1774 AC_FUNC_STRERROR_R()
1776 dnl ****************************************************************
1777 dnl *** Check for sched_setaffinity from glibc versions before ***
1778 dnl *** 2.3.4. The older versions of the function only take 2 ***
1779 dnl *** parameters, not 3. ***
1781 dnl *** Because the interface change was not made in a minor ***
1782 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1783 dnl *** won't always indicate the interface sched_affinity has. ***
1784 dnl ****************************************************************
1785 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1786 AC_TRY_COMPILE([#include <sched.h>], [
1788 sched_setaffinity(0, &mask);
1790 # Yes, we have it...
1792 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1794 # We have the new, three-parameter version
1797 AC_TRY_COMPILE([#include <sched.h>], [
1798 CPU_COUNT((void *) 0);
1801 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1803 # We have the new, three-parameter version
1807 dnl ******************************************************************
1808 dnl *** Check for large file support ***
1809 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1810 dnl ******************************************************************
1812 # Check that off_t can represent 2**63 - 1 correctly, working around
1813 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1814 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1816 AC_DEFUN([LARGE_FILES], [
1817 large_CPPFLAGS=$CPPFLAGS
1818 CPPFLAGS="$CPPFLAGS $1"
1820 #include <sys/types.h>
1823 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1824 #define COMPILE_TIME_ASSERT(pred) \
1825 switch(0){case 0:case pred:;}
1826 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1829 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1830 large_CPPFLAGS="$large_CPPFLAGS $1"
1835 CPPFLAGS=$large_CPPFLAGS
1838 AC_MSG_CHECKING(if off_t is 64 bits wide)
1840 if test $large_offt = no; then
1841 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1842 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1844 if test $large_offt = no; then
1845 AC_MSG_WARN([No 64 bit file size support available])
1848 dnl *****************************
1849 dnl *** Checks for libsocket ***
1850 dnl *****************************
1851 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1855 dnl *****************************
1856 dnl *** Checks for libinotify ***
1857 dnl *****************************
1858 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1861 dnl *******************************
1862 dnl *** Checks for MSG_NOSIGNAL ***
1863 dnl *******************************
1864 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1865 AC_TRY_COMPILE([#include <sys/socket.h>], [
1866 int f = MSG_NOSIGNAL;
1868 # Yes, we have it...
1870 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1872 # We'll have to use signals
1876 dnl *****************************
1877 dnl *** Checks for IPPROTO_IP ***
1878 dnl *****************************
1879 AC_MSG_CHECKING(for IPPROTO_IP)
1880 AC_TRY_COMPILE([#include <netinet/in.h>], [
1881 int level = IPPROTO_IP;
1883 # Yes, we have it...
1885 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1887 # We'll have to use getprotobyname
1891 dnl *******************************
1892 dnl *** Checks for IPPROTO_IPV6 ***
1893 dnl *******************************
1894 AC_MSG_CHECKING(for IPPROTO_IPV6)
1895 AC_TRY_COMPILE([#include <netinet/in.h>], [
1896 int level = IPPROTO_IPV6;
1898 # Yes, we have it...
1900 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1902 # We'll have to use getprotobyname
1906 dnl ******************************
1907 dnl *** Checks for IPPROTO_TCP ***
1908 dnl ******************************
1909 AC_MSG_CHECKING(for IPPROTO_TCP)
1910 AC_TRY_COMPILE([#include <netinet/in.h>], [
1911 int level = IPPROTO_TCP;
1913 # Yes, we have it...
1915 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1917 # We'll have to use getprotobyname
1921 dnl *****************************
1922 dnl *** Checks for SOL_IP ***
1923 dnl *****************************
1924 AC_MSG_CHECKING(for SOL_IP)
1925 AC_TRY_COMPILE([#include <netdb.h>], [
1928 # Yes, we have it...
1930 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1932 # We'll have to use getprotobyname
1936 dnl *****************************
1937 dnl *** Checks for SOL_IPV6 ***
1938 dnl *****************************
1939 AC_MSG_CHECKING(for SOL_IPV6)
1940 AC_TRY_COMPILE([#include <netdb.h>], [
1941 int level = SOL_IPV6;
1943 # Yes, we have it...
1945 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1947 # We'll have to use getprotobyname
1951 dnl *****************************
1952 dnl *** Checks for SOL_TCP ***
1953 dnl *****************************
1954 AC_MSG_CHECKING(for SOL_TCP)
1955 AC_TRY_COMPILE([#include <netdb.h>], [
1956 int level = SOL_TCP;
1958 # Yes, we have it...
1960 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
1962 # We'll have to use getprotobyname
1966 dnl *****************************
1967 dnl *** Checks for IP_PKTINFO ***
1968 dnl *****************************
1969 AC_MSG_CHECKING(for IP_PKTINFO)
1970 AC_TRY_COMPILE([#include <linux/in.h>], [
1971 int level = IP_PKTINFO;
1973 # Yes, we have it...
1975 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1980 dnl *****************************
1981 dnl *** Checks for IPV6_PKTINFO ***
1982 dnl *****************************
1983 AC_MSG_CHECKING(for IPV6_PKTINFO)
1984 AC_TRY_COMPILE([#include <netdb.h>], [
1985 int level = IPV6_PKTINFO;
1987 # Yes, we have it...
1989 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
1994 dnl **********************************
1995 dnl *** Checks for IP_DONTFRAG ***
1996 dnl **********************************
1997 AC_MSG_CHECKING(for IP_DONTFRAG)
1998 AC_TRY_COMPILE([#include <netinet/in.h>], [
1999 int level = IP_DONTFRAG;
2001 # Yes, we have it...
2003 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2008 dnl **********************************
2009 dnl *** Checks for IP_DONTFRAGMENT ***
2010 dnl **********************************
2011 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2012 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2013 int level = IP_DONTFRAGMENT;
2015 # Yes, we have it...
2017 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2022 dnl **********************************
2023 dnl *** Checks for IP_MTU_DISCOVER ***
2024 dnl **********************************
2025 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2026 AC_TRY_COMPILE([#include <linux/in.h>], [
2027 int level = IP_MTU_DISCOVER;
2029 # Yes, we have it...
2031 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2036 dnl **********************************
2037 dnl *** Checks for IP_PMTUDISC_DO ***
2038 dnl **********************************
2039 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2040 AC_TRY_COMPILE([#include <linux/in.h>], [
2041 int level = IP_PMTUDISC_DO;
2043 # Yes, we have it...
2045 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2050 dnl *********************************
2051 dnl *** Check for struct ip_mreqn ***
2052 dnl *********************************
2053 AC_MSG_CHECKING(for struct ip_mreqn)
2054 AC_TRY_COMPILE([#include <netinet/in.h>], [
2055 struct ip_mreqn mreq;
2056 mreq.imr_address.s_addr = 0;
2058 # Yes, we have it...
2060 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2062 # We'll just have to try and use struct ip_mreq
2064 AC_MSG_CHECKING(for struct ip_mreq)
2065 AC_TRY_COMPILE([#include <netinet/in.h>], [
2066 struct ip_mreq mreq;
2067 mreq.imr_interface.s_addr = 0;
2069 # Yes, we have it...
2071 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2073 # No multicast support
2078 dnl **********************************
2079 dnl *** Check for getaddrinfo ***
2080 dnl **********************************
2081 AC_MSG_CHECKING(for getaddrinfo)
2086 getaddrinfo(NULL,NULL,NULL,NULL);
2088 # Yes, we have it...
2090 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2095 dnl **********************************
2096 dnl *** Check for gethostbyname2_r ***
2097 dnl **********************************
2098 AC_MSG_CHECKING(for gethostbyname2_r)
2104 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2106 # Yes, we have it...
2108 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2113 dnl **********************************
2114 dnl *** Check for gethostbyname2 ***
2115 dnl **********************************
2116 AC_MSG_CHECKING(for gethostbyname2)
2121 gethostbyname2(NULL,0);
2123 # Yes, we have it...
2125 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2130 dnl **********************************
2131 dnl *** Check for gethostbyname ***
2132 dnl **********************************
2133 AC_MSG_CHECKING(for gethostbyname)
2138 gethostbyname(NULL);
2140 # Yes, we have it...
2142 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2147 dnl **********************************
2148 dnl *** Check for getprotobyname ***
2149 dnl **********************************
2150 AC_MSG_CHECKING(for getprotobyname)
2155 getprotobyname(NULL);
2157 # Yes, we have it...
2159 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2164 dnl **********************************
2165 dnl *** Check for getnameinfo ***
2166 dnl **********************************
2167 AC_MSG_CHECKING(for getnameinfo)
2172 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2174 # Yes, we have it...
2176 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2182 dnl **********************************
2183 dnl *** Check for inet_ntop ***
2184 dnl **********************************
2185 AC_MSG_CHECKING(for inet_ntop)
2188 #include <arpa/inet.h>
2190 inet_ntop (0, NULL, NULL, 0);
2192 # Yes, we have it...
2194 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2199 dnl *****************************
2200 dnl *** Checks for libnsl ***
2201 dnl *****************************
2202 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2204 AC_CHECK_FUNCS(inet_pton inet_aton)
2206 dnl *****************************
2207 dnl *** Checks for libxnet ***
2208 dnl *****************************
2211 AC_MSG_CHECKING(for Solaris XPG4 support)
2212 if test -f /usr/lib/libxnet.so; then
2213 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2214 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2215 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2222 if test "$GCC" = "yes"; then
2223 CFLAGS="$CFLAGS -Wno-char-subscripts"
2228 dnl *****************************
2229 dnl *** Checks for libpthread ***
2230 dnl *****************************
2231 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2232 # and libpthread does not exist
2236 dnl Haiku has pthread in libroot (libc equiv)
2237 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2240 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2243 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2246 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2249 AC_CHECK_HEADERS(pthread.h)
2250 AC_CHECK_HEADERS(pthread_np.h)
2251 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2252 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2253 AC_CHECK_FUNCS(pthread_kill)
2254 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2255 AC_TRY_COMPILE([ #include <pthread.h>], [
2256 pthread_mutexattr_t attr;
2257 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2262 AC_ERROR(Posix system lacks support for recursive mutexes)
2264 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2265 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2266 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2268 dnl **********************************
2269 dnl *** Check for mincore ***
2270 dnl **********************************
2271 AC_MSG_CHECKING(for mincore)
2274 #include <sys/types.h>
2275 #include <sys/mman.h>
2277 mincore(NULL, 0, NULL);
2279 # Yes, we have it...
2281 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2286 dnl ***********************************
2287 dnl *** Checks for working __thread ***
2288 dnl ***********************************
2289 AC_MSG_CHECKING(for working __thread)
2290 if test "x$with_tls" != "x__thread"; then
2291 AC_MSG_RESULT(disabled)
2292 elif test "x$cross_compiling" = "xyes"; then
2293 AC_MSG_RESULT(cross compiling, assuming yes)
2296 #if defined(__APPLE__) && defined(__clang__)
2297 #error "__thread does not currently work with clang on Mac OS X"
2300 #include <pthread.h>
2302 static int res1, res2;
2304 void thread_main (void *arg)
2319 pthread_create (&t1, NULL, thread_main, 1);
2320 pthread_create (&t2, NULL, thread_main, 2);
2322 pthread_join (t1, NULL);
2323 pthread_join (t2, NULL);
2325 return !(res1 + res2 == 2);
2335 dnl **************************************
2336 dnl *** Checks for working sigaltstack ***
2337 dnl **************************************
2338 AC_MSG_CHECKING(for working sigaltstack)
2339 if test "x$with_sigaltstack" != "xyes"; then
2340 AC_MSG_RESULT(disabled)
2341 elif test "x$cross_compiling" = "xyes"; then
2342 AC_MSG_RESULT(cross compiling, assuming yes)
2349 #include <pthread.h>
2350 #include <sys/wait.h>
2351 #if defined(__FreeBSD__) || defined(__NetBSD__)
2352 #define SA_STACK SA_ONSTACK
2355 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2360 volatile char*__ptr = NULL;
2362 loop (void *ignored)
2371 struct sigaction sa;
2374 pthread_attr_t attr;
2376 sa.sa_sigaction = sigsegv_signal_handler;
2377 sigemptyset (&sa.sa_mask);
2378 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2379 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2380 perror ("sigaction");
2384 /* x86 darwin deliver segfaults using SIGBUS */
2385 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2386 perror ("sigaction");
2389 sas.ss_sp = malloc (SIGSTKSZ);
2390 sas.ss_size = SIGSTKSZ;
2392 if (sigaltstack (&sas, NULL) == -1) {
2393 perror ("sigaltstack");
2397 pthread_attr_init (&attr);
2398 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2399 printf ("pthread_create\n");
2423 for (i = 0; i < 300; ++i) {
2424 waitpid (son, &status, WNOHANG);
2425 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2430 kill (son, SIGKILL);
2436 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2443 dnl ********************************
2444 dnl *** Checks for semaphore lib ***
2445 dnl ********************************
2446 # 'Real Time' functions on Solaris
2447 # posix4 on Solaris 2.6
2448 # pthread (first!) on Linux
2449 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2451 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2452 AC_CHECK_FUNCS(shm_open)
2454 dnl ********************************
2455 dnl *** Checks for timezone stuff **
2456 dnl ********************************
2457 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2463 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2464 if test $ac_cv_struct_tm_gmtoff = yes; then
2465 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2467 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2472 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2473 if test $ac_cv_var_timezone = yes; then
2474 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2476 AC_ERROR(unable to find a way to determine timezone)
2480 dnl *********************************
2481 dnl *** Checks for math functions ***
2482 dnl *********************************
2483 AC_SEARCH_LIBS(sqrtf, m)
2484 if test "x$has_broken_apple_cpp" != "xyes"; then
2485 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2486 AC_TRY_LINK([#include <math.h>],
2488 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2491 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2492 AC_TRY_LINK([#include <math.h>],
2494 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2497 dnl ****************************************************************
2498 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2499 dnl *** have it in the library (duh)) ***
2500 dnl ****************************************************************
2501 AC_CHECK_FUNCS(poll)
2503 dnl *************************
2504 dnl *** Check for signbit ***
2505 dnl *************************
2506 AC_MSG_CHECKING(for signbit)
2507 AC_TRY_LINK([#include <math.h>], [
2508 int s = signbit(1.0);
2511 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2516 dnl **********************************
2518 dnl **********************************
2519 AC_CHECK_HEADERS(sys/epoll.h)
2521 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2522 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2523 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2528 AC_CHECK_HEADERS(sys/event.h)
2529 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2531 dnl **************************************
2532 dnl * Darwin has a race that prevents us from using reliably:
2533 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2534 dnl * Since kqueue is mostly used for scaling large web servers,
2535 dnl * and very few folks run Mono on large web servers on OSX, falling
2537 dnl **************************************
2538 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2539 if test "x$host_darwin" = "xno"; then
2540 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2544 dnl ******************************
2545 dnl *** Checks for SIOCGIFCONF ***
2546 dnl ******************************
2547 AC_CHECK_HEADERS(sys/ioctl.h)
2548 AC_CHECK_HEADERS(net/if.h, [], [],
2550 #ifdef HAVE_SYS_TYPES_H
2551 # include <sys/types.h>
2553 #ifdef HAVE_SYS_SOCKET_H
2554 # include <sys/socket.h>
2557 AC_MSG_CHECKING(for ifreq)
2560 #include <sys/ioctl.h>
2568 x = (void *) &ifr->ifr_addr;
2571 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2575 dnl **********************************
2576 dnl *** Checks for sin_len ***
2577 dnl **********************************
2578 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2580 #include <netinet/in.h>
2582 struct sockaddr_in saddr;
2583 saddr.sin_len = sizeof (saddr);
2586 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2590 dnl **********************************
2591 dnl *** Checks for sin6_len ***
2592 dnl **********************************
2593 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2595 #include <netinet/in.h>
2597 struct sockaddr_in6 saddr6;
2598 saddr6.sin6_len = sizeof (saddr6);
2601 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2605 dnl **********************************
2606 dnl *** Check for getifaddrs ***
2607 dnl **********************************
2608 AC_MSG_CHECKING(for getifaddrs)
2611 #include <sys/types.h>
2612 #include <sys/socket.h>
2613 #include <ifaddrs.h>
2617 # Yes, we have it...
2619 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2623 dnl **********************************
2624 dnl *** Check for if_nametoindex ***
2625 dnl **********************************
2626 AC_MSG_CHECKING(for if_nametoindex)
2629 #include <sys/types.h>
2630 #include <sys/socket.h>
2633 if_nametoindex(NULL);
2635 # Yes, we have it...
2637 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2641 dnl **********************************
2642 dnl *** Check for access ***
2643 dnl **********************************
2644 AC_MSG_CHECKING(for access)
2650 # Yes, we have it...
2652 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2657 dnl **********************************
2658 dnl *** Checks for proclib ***
2659 dnl **********************************
2660 AC_CHECK_HEADER(sys/errno.h, [AC_DEFINE(HAVE_SYS_ERRNO_H, 1, Define to 1 if you have the <sys/errno.h> header file.)])
2661 dnl **********************************
2662 dnl *** Checks for MonoPosixHelper ***
2663 dnl **********************************
2664 AC_CHECK_HEADERS(checklist.h)
2665 AC_CHECK_HEADERS(pathconf.h)
2666 AC_CHECK_HEADERS(fstab.h)
2667 AC_CHECK_HEADERS(attr/xattr.h)
2668 AC_CHECK_HEADERS(sys/extattr.h)
2669 AC_CHECK_HEADERS(sys/sendfile.h)
2670 AC_CHECK_HEADERS(sys/statvfs.h)
2671 AC_CHECK_HEADERS(sys/statfs.h)
2672 AC_CHECK_HEADERS(sys/vfstab.h)
2673 AC_CHECK_HEADERS(sys/xattr.h)
2674 AC_CHECK_HEADERS(sys/mman.h)
2675 AC_CHECK_HEADERS(sys/param.h)
2676 AC_CHECK_HEADERS(sys/mount.h, [], [],
2678 #ifdef HAVE_SYS_PARAM_H
2679 # include <sys/param.h>
2682 AC_CHECK_HEADERS(sys/mount.h)
2683 AC_CHECK_FUNCS(confstr)
2684 AC_CHECK_FUNCS(seekdir telldir)
2685 AC_CHECK_FUNCS(getdomainname)
2686 AC_CHECK_FUNCS(setdomainname)
2687 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2688 AC_CHECK_FUNCS(setgroups)
2689 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2690 AC_CHECK_FUNCS(getfsstat)
2691 AC_CHECK_FUNCS(lutimes futimes)
2692 AC_CHECK_FUNCS(mremap)
2693 AC_CHECK_FUNCS(remap_file_pages)
2694 AC_CHECK_FUNCS(posix_fadvise)
2695 AC_CHECK_FUNCS(posix_fallocate)
2696 AC_CHECK_FUNCS(posix_madvise)
2697 AC_CHECK_FUNCS(vsnprintf)
2698 AC_CHECK_FUNCS(sendfile)
2699 AC_CHECK_FUNCS(gethostid sethostid)
2700 AC_CHECK_FUNCS(sethostname)
2701 AC_CHECK_FUNCS(statfs)
2702 AC_CHECK_FUNCS(fstatfs)
2703 AC_CHECK_FUNCS(statvfs)
2704 AC_CHECK_FUNCS(fstatvfs)
2705 AC_CHECK_FUNCS(stime)
2706 AC_CHECK_FUNCS(strerror_r)
2707 AC_CHECK_FUNCS(ttyname_r)
2708 AC_CHECK_FUNCS(psignal)
2709 AC_CHECK_FUNCS(getlogin_r)
2710 AC_CHECK_FUNCS(lockf)
2711 AC_CHECK_FUNCS(swab)
2712 AC_CHECK_FUNCS(setusershell endusershell)
2713 AC_CHECK_FUNCS(futimens utimensat)
2714 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2715 AC_CHECK_FUNCS(readv writev preadv pwritev)
2716 AC_CHECK_FUNCS(setpgid)
2717 AC_CHECK_FUNCS(system)
2718 AC_CHECK_FUNCS(fork execv execve)
2719 AC_CHECK_FUNCS(accept4)
2720 AC_CHECK_FUNCS(localtime_r)
2721 AC_CHECK_FUNCS(mkdtemp)
2722 AC_CHECK_SIZEOF(size_t)
2723 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2724 [#include <sys/types.h>
2725 #include <sys/stat.h>
2726 #include <unistd.h>])
2727 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2728 [#include <sys/types.h>
2729 #include <sys/stat.h>
2730 #include <unistd.h>])
2731 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2732 [#include <sys/time.h>])
2733 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2734 [#include <sys/socket.h>])
2735 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2736 [#include <unistd.h>
2737 #include <fcntl.h>])
2738 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2739 [#include <sys/uio.h>])
2740 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2741 [#include <sys/socket.h>])
2742 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2743 [#include <sys/poll.h>])
2744 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2745 [#include <sys/socket.h>])
2746 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2747 [#include <sys/socket.h>])
2748 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2749 [#include <netinet/in.h>])
2750 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2751 [#include <netinet/in.h>])
2752 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2753 [#include <sys/un.h>])
2754 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2755 [#include <sys/types.h>
2756 #include <sys/stat.h>
2757 #include <unistd.h>])
2758 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2759 [#include <time.h>])
2760 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2761 [#include <sys/time.h>
2762 #include <sys/types.h>
2763 #include <utime.h>])
2764 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2765 [#include <sys/time.h>])
2766 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2767 [#include <sys/types.h>
2768 #include <utime.h>])
2770 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2771 [#include <sys/types.h>
2772 #include <dirent.h>])
2774 [struct passwd.pw_gecos],,,
2775 [#include <sys/types.h>
2778 [struct statfs.f_flags],,,
2779 [#include <sys/types.h>
2780 #include <sys/vfs.h>])
2782 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2783 [#include <sys/types.h>
2784 #include <sys/stat.h>
2785 #include <unistd.h>])
2787 dnl Favour xattr through glibc, but use libattr if we have to
2788 AC_CHECK_FUNC(lsetxattr, ,
2789 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2793 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2795 [struct kinfo_proc.kp_proc],,,
2796 [#include <sys/types.h>
2797 #include <sys/param.h>
2798 #include <sys/sysctl.h>
2799 #include <sys/proc.h>
2802 dnl *********************************
2803 dnl *** Checks for Windows compilation ***
2804 dnl *********************************
2805 AC_CHECK_HEADERS(sys/time.h)
2806 AC_CHECK_HEADERS(sys/param.h)
2807 AC_CHECK_HEADERS(dirent.h)
2809 dnl ******************************************
2810 dnl *** Checks for OSX and iOS compilation ***
2811 dnl ******************************************
2812 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2814 dnl *********************************
2815 dnl *** Check for Console 2.0 I/O ***
2816 dnl *********************************
2817 AC_CHECK_HEADERS([curses.h])
2818 AC_CHECK_HEADERS([term.h], [], [],
2823 AC_CHECK_HEADERS([termios.h])
2825 dnl *********************************
2826 dnl *** Checks for random ***
2827 dnl *********************************
2828 if test x$host_darwin = xno; then
2829 AC_CHECK_HEADERS(sys/random.h)
2830 AC_CHECK_FUNCS(getrandom getentropy)
2833 dnl *********************************
2834 dnl *** Checks for Windows compilation ***
2835 dnl *********************************
2836 AC_CHECK_HEADERS(winternl.h)
2838 jdk_headers_found=no
2839 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
2840 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
2841 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
2842 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
2843 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
2844 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
2845 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
2847 dnl *********************************
2848 dnl *** Check for struct ip_mreqn ***
2849 dnl *********************************
2850 AC_MSG_CHECKING(for struct ip_mreqn)
2851 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2852 struct ip_mreqn mreq;
2853 mreq.imr_address.s_addr = 0;
2855 # Yes, we have it...
2857 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
2859 # We'll just have to try and use struct ip_mreq
2861 AC_MSG_CHECKING(for struct ip_mreq)
2862 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2863 struct ip_mreq mreq;
2864 mreq.imr_interface.s_addr = 0;
2866 # Yes, we have it...
2868 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
2870 # No multicast support
2875 dnl **********************************
2876 dnl *** Check for getaddrinfo ***
2877 dnl **********************************
2878 AC_MSG_CHECKING(for getaddrinfo)
2881 #include <winsock2.h>
2882 #include <ws2tcpip.h>
2884 getaddrinfo(NULL,NULL,NULL,NULL);
2886 # Yes, we have it...
2888 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2893 dnl **********************************
2894 dnl *** Check for gethostbyname ***
2895 dnl **********************************
2896 AC_MSG_CHECKING(for gethostbyname)
2899 #include <winsock2.h>
2900 #include <ws2tcpip.h>
2902 gethostbyname(NULL);
2904 # Yes, we have it...
2906 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2911 dnl **********************************
2912 dnl *** Check for getprotobyname ***
2913 dnl **********************************
2914 AC_MSG_CHECKING(for getprotobyname)
2917 #include <winsock2.h>
2918 #include <ws2tcpip.h>
2920 getprotobyname(NULL);
2922 # Yes, we have it...
2924 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2929 dnl **********************************
2930 dnl *** Check for getnameinfo ***
2931 dnl **********************************
2932 AC_MSG_CHECKING(for getnameinfo)
2935 #include <winsock2.h>
2936 #include <ws2tcpip.h>
2938 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2940 # Yes, we have it...
2942 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2947 dnl **********************************
2948 dnl *** Check for inet_ntop ***
2949 dnl **********************************
2950 AC_MSG_CHECKING(for inet_ntop)
2953 #include <winsock2.h>
2954 #include <ws2tcpip.h>
2956 inet_ntop (0, NULL, NULL, 0);
2958 # Yes, we have it...
2960 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2965 dnl **********************************
2966 dnl *** Check for inet_pton ***
2967 dnl **********************************
2968 AC_MSG_CHECKING(for inet_pton)
2971 #include <winsock2.h>
2972 #include <ws2tcpip.h>
2977 inet_pton (0, NULL, NULL);
2979 # Yes, we have it...
2981 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
2986 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
2987 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
2988 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
2989 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
2990 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
2991 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
2992 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
2996 AC_MSG_CHECKING(for socklen_t)
2998 #include <sys/types.h>
2999 #include <sys/socket.h>
3003 ac_cv_c_socklen_t=yes
3004 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3010 AC_MSG_CHECKING(for array element initializer support)
3011 AC_TRY_COMPILE([#include <sys/socket.h>], [
3012 const int array[] = {[1] = 2,};
3014 # Yes, we have it...
3016 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3018 # We'll have to use signals
3022 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3023 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3024 AC_TRY_LINK([#include <math.h>],
3025 [ static void *p = &trunc; ],
3027 AC_DEFINE(HAVE_TRUNC)
3033 if test "x$ac_cv_truncl" != "xyes"; then
3034 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3037 AC_CHECK_FUNCS(execvp)
3039 dnl ****************************
3040 dnl *** Look for /dev/random ***
3041 dnl ****************************
3043 AC_MSG_CHECKING([if usage of random device is requested])
3044 AC_ARG_ENABLE(dev-random,
3045 [ --disable-dev-random disable the use of the random device (enabled by default)],
3046 try_dev_random=$enableval, try_dev_random=yes)
3048 AC_MSG_RESULT($try_dev_random)
3052 dnl IBM i does not have /dev/random, use unblocking only
3055 NAME_DEV_RANDOM="/dev/urandom"
3058 dnl Win32 does not have /dev/random, they have their own method...
3060 *-mingw*|*-*-cygwin*)
3061 ac_cv_have_dev_random=no
3064 dnl Everywhere else, it's /dev/random
3067 NAME_DEV_RANDOM="/dev/random"
3071 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3073 dnl Now check if the device actually exists
3075 if test "x$try_dev_random" = "xyes"; then
3076 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3077 [if test -r "$NAME_DEV_RANDOM" ; then
3078 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3079 if test "x$ac_cv_have_dev_random" = "xyes"; then
3080 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3083 AC_MSG_CHECKING(for random device)
3084 ac_cv_have_dev_random=no
3085 AC_MSG_RESULT(has been disabled)
3088 if test "x$host_win32" = "xyes"; then
3089 AC_DEFINE(HAVE_CRYPT_RNG)
3092 if test "x$ac_cv_have_dev_random" = "xno" \
3093 && test "x$host_win32" = "xno"; then
3096 *** A system-provided entropy source was not found on this system.
3097 *** Because of this, the System.Security.Cryptography random number generator
3098 *** will throw a NotImplemented exception.
3100 *** If you are seeing this message, and you know your system DOES have an
3101 *** entropy collection in place, please report an issue on GitHub and
3102 *** provide information about the system and how to access the random device.
3104 *** Otherwise you can install either egd or prngd and set the environment
3105 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3109 AC_ARG_ENABLE(bcl-opt, [ --disable-bcl-opt BCL is compiled with no optimizations (allows accurate BCL debugging)], test_bcl_opt=$enableval, test_bcl_opt=yes)
3111 AC_MSG_CHECKING([if big-arrays are to be enabled])
3112 AC_ARG_ENABLE(big-arrays, [ --enable-big-arrays Enable the allocation and indexing of arrays greater than Int32.MaxValue], enable_big_arrays=$enableval, enable_big_arrays=no)
3113 if test "x$enable_big_arrays" = "xyes" ; then
3114 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3115 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3117 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3120 AC_MSG_RESULT($enable_big_arrays)
3126 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3128 if test "x$enable_dtrace" = "xyes"; then
3129 if test "x$has_dtrace" = "xno"; then
3130 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3132 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3133 if test "x$DTRACE" = "xno"; then
3134 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3136 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3137 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3143 if test "x$enable_dtrace" = "xyes"; then
3144 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3146 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3149 DTRACEFLAGS="-arch ppc64"
3152 DTRACEFLAGS="-arch x86_64"
3161 DTRACEFLAGS="-arch ppc"
3164 DTRACEFLAGS="-arch i386"
3171 AC_SUBST(DTRACEFLAGS)
3177 AC_CHECK_HEADERS([sys/sdt.h])
3179 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3180 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3182 dnl **************************
3183 dnl *** AOT cross offsets ***
3184 dnl **************************
3186 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3187 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3193 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3194 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3195 AC_ARG_ENABLE(llvm-version-check,[ --enable-llvm-version-check Check that the LLVM matches the version expected by mono], enable_llvm_version_check=$enableval, enable_llvm_version_check=no)
3196 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3198 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3200 if test "x$enable_llvm" = "xdefault"; then
3201 enable_llvm=$enable_llvm_default
3204 if test "x$enable_llvm" = "xyes"; then
3205 if test "x$with_llvm" != "x"; then
3206 LLVM_CONFIG=$with_llvm/bin/llvm-config
3207 if test x$host_win32 = xyes; then
3208 LLVM_CONFIG=$LLVM_CONFIG.exe
3210 if test ! -x $LLVM_CONFIG; then
3211 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3214 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3215 if test "x$LLVM_CONFIG" = "xno"; then
3216 AC_MSG_ERROR([llvm-config not found.])
3220 llvm_codegen="x86codegen"
3223 llvm_codegen="armcodegen"
3226 llvm_codegen="aarch64codegen"
3230 if test "x$host_win32" = "xno"; then
3232 # Should be something like '2.6' or '2.7svn'
3233 llvm_version=`$LLVM_CONFIG --version`
3234 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3235 AC_MSG_CHECKING(LLVM version)
3236 AC_MSG_RESULT($llvm_version $llvm_api_version)
3237 if echo $llvm_version | grep -q 'mono'; then
3238 if test "x$enable_llvm_version_check" = "xyes"; then
3239 if test "$llvm_version" != "$expected_llvm_version"; then
3240 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3244 AC_MSG_ERROR([Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm, with the GIT branch which matches this version of mono, i.e. 'mono-2-10' for Mono 2.10.])
3247 # The output of --cflags seems to include optimizations flags too
3248 if test $llvm_api_version -gt 100; then
3249 # The --cflags argument includes all kinds of warnings -pendantic etc.
3250 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3251 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3253 LLVM_CFLAGS=`$LLVM_CONFIG --cflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3254 LLVM_CXXFLAGS=`$LLVM_CONFIG --cxxflags | sed -e 's/-O2//g' | sed -e 's/-O0//g' | sed -e 's/-fomit-frame-pointer//g' | sed -e 's/-fPIC//g'`
3256 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3257 # from LLVM classes.
3258 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3259 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3260 # This might include empty lines
3261 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3262 llvm_jit_supported=yes
3263 llvm_jit_libs="jit mcjit $llvm_codegen"
3264 if test "x$host" != "x$target"; then
3265 # No need for jit libs
3266 llvm_jit_supported=no
3268 elif test $llvm_api_version -gt 100; then
3269 llvm_jit_libs="orcjit $llvm_codegen"
3271 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3272 if test "x$LLVM_LIBS" = "x"; then
3273 echo "$LLVM_CONFIG --libs failed."
3276 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3277 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3278 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3279 LLVM_LIBS="$LLVM_LIBS -lc++"
3281 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3284 expected_llvm_version="3.4svn-mono-mono/e656cac"
3287 LLVM_CFLAGS="-I$with_llvm/include -DNDEBUG -D__NO_CTYPE_INLINE -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3288 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3289 LLVM_LDFLAGS="-L$with_llvm/lib"
3290 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3291 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3292 -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo \
3293 -lLLVMARMAsmPrinter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler \
3294 -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc \
3295 -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMJIT \
3296 -lLLVMAnalysis -lLLVMTarget \
3297 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3298 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3299 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3300 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3301 -lLLVMSupport -lstdc++"
3302 LLVM_LIBS="$LLVM_LIBS $LLVM_SYSTEM_LIBS"
3304 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3305 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3308 if test "x$llvm_api_version" = "x"; then
3309 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3310 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3312 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3313 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3316 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3318 AC_SUBST(LLVM_CFLAGS)
3319 AC_SUBST(LLVM_CXXFLAGS)
3321 AC_SUBST(LLVM_LDFLAGS)
3322 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3325 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3326 if test "x$enable_loadedllvm" = "xyes"; then
3327 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3329 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3331 if test "x$enable_llvm" = "xyes"; then
3332 enable_llvm_runtime=yes
3334 if test "x$enable_llvm_runtime" = "xyes"; then
3335 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3337 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3340 ACCESS_UNALIGNED="yes"
3344 SQLITE="libsqlite.so.0"
3345 SQLITE3="libsqlite3.so.0"
3347 GDKX11="libgdk-x11-2.0.so.0"
3348 GTKX11="libgtk-x11-2.0.so.0"
3349 XINERAMA="libXinerama.so.1"
3351 sizeof_register="SIZEOF_VOID_P"
3354 boehm_supported=true
3358 if test "x$enable_wasm" = "xyes"; then
3362 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3363 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3375 ACCESS_UNALIGNED="no"
3377 AC_MSG_CHECKING(for mips n32)
3379 #if _MIPS_SIM != _ABIN32
3396 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3401 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3402 # int astruct __attribute__ ((visibility ("hidden")));
3405 # void *p = &astruct;
3407 # gcc -fPIC --shared -o libfoo.so foo.c
3409 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3410 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3411 have_visibility_hidden=no
3414 have_visibility_hidden=no
3423 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3430 openbsd*|freebsd*|kfreebsd-gnu*)
3437 x86_64-*-* | amd64-*-*)
3440 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3441 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3448 BTLS_PLATFORM=x86_64
3449 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3454 BTLS_PLATFORM=x86_64
3455 boehm_supported=false
3457 openbsd*|freebsd*|kfreebsd-gnu*)
3460 BTLS_PLATFORM=x86_64
3467 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3473 ACCESS_UNALIGNED="no"
3480 if test x"$GCC" = xyes; then
3481 # We don't support v8 cpus
3482 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3484 if test x"$AR" = xfalse; then
3485 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3488 *-mingw*|*-*-cygwin*)
3489 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3490 have_visibility_hidden=no
3493 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3494 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3495 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3496 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3498 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3499 CFLAGS="$CFLAGS -mminimal-toc"
3502 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3508 BTLS_PLATFORM=powerpc
3509 dnl on AIX/PASE, shared libraries can be inside archives
3510 dnl if they are, we specify them by lib.a(lib.so)
3511 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3512 LIBC="libc.a(shr_64.o)"
3513 INTL="libintl.a(libintl.so.8)"
3517 BTLS_PLATFORM=powerpc
3526 ACCESS_UNALIGNED="no"
3527 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3533 ACCESS_UNALIGNED="no"
3534 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3539 ACCESS_UNALIGNED="no"
3541 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3544 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3546 arm*-linux*-gnueabi)
3547 BTLS_PLATFORM=armsoft
3554 ACCESS_UNALIGNED="no"
3555 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3558 # https://lkml.org/lkml/2012/7/15/133
3561 boehm_supported=false
3564 BTLS_PLATFORM=aarch64
3565 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3570 ACCESS_UNALIGNED="yes"
3573 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3579 if test "x$host" != "x$target"; then
3580 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3582 enable_support_build=no
3588 ACCESS_UNALIGNED="no"
3589 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3590 # Can't use tls, since it depends on the runtime detection of tls offsets
3591 # in mono-compiler.h
3596 AC_DEFINE(TARGET_WATCHOS, 1, [...])
3600 powerpc64-ps3-linux-gnu)
3602 arch_target=powerpc64
3603 AC_DEFINE(TARGET_PS3, 1, [...])
3604 # It would be better to just use TARGET_POWERPC64, but lots of code already
3606 AC_DEFINE(__mono_ppc64__, 1, [...])
3607 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3609 target_byte_order=G_BIG_ENDIAN
3611 powerpc64-xbox360-linux-gnu)
3613 arch_target=powerpc64
3614 AC_DEFINE(TARGET_XBOX360, 1, [...])
3615 # It would be better to just use TARGET_POWERPC64, but lots of code already
3618 target_byte_order=G_BIG_ENDIAN
3623 AC_DEFINE(TARGET_ARM, 1, [...])
3624 ACCESS_UNALIGNED="no"
3625 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3626 # Can't use tls, since it depends on the runtime detection of tls offsets
3627 # in mono-compiler.h
3631 armv7l-unknown-linux-gnueabi*)
3633 CPPFLAGS="$CPPFLAGS"
3635 armv5-*-linux-androideabi*)
3636 AC_DEFINE(TARGET_ANDROID, 1, [...])
3637 CPPFLAGS="$CPPFLAGS"
3639 *-linux-androideabi*)
3640 AC_DEFINE(TARGET_ANDROID, 1, [...])
3641 CPPFLAGS="$CPPFLAGS"
3648 AC_DEFINE(TARGET_ARM, 1, [...])
3649 ACCESS_UNALIGNED="no"
3650 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3651 # Can't use tls, since it depends on the runtime detection of tls offsets
3652 # in mono-compiler.h
3659 AC_DEFINE(TARGET_X86, 1, [...])
3660 CPPFLAGS="$CPPFLAGS"
3661 # Can't use tls, since it depends on the runtime detection of tls offsets
3662 # in mono-compiler.h
3668 AC_DEFINE(TARGET_ANDROID, 1, [...])
3675 AC_DEFINE(TARGET_AMD64, 1, [...])
3676 CPPFLAGS="$CPPFLAGS"
3677 # Can't use tls, since it depends on the runtime detection of tls offsets
3678 # in mono-compiler.h
3684 AC_DEFINE(TARGET_ANDROID, 1, [...])
3691 AC_DEFINE(TARGET_AMD64, 1, [...])
3692 AC_DEFINE(TARGET_PS4, 1, [...])
3693 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3694 CPPFLAGS="$CPPFLAGS"
3695 # Can't use tls, since it depends on the runtime detection of tls offsets
3696 # in mono-compiler.h
3704 AC_DEFINE(TARGET_ARM64, 1, [...])
3705 CPPFLAGS="$CPPFLAGS"
3706 # Can't use tls, since it depends on the runtime detection of tls offsets
3707 # in mono-compiler.h
3712 AC_DEFINE(TARGET_ANDROID, 1, [...])
3720 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3726 AC_DEFINE(TARGET_X86, 1, [...])
3729 AC_DEFINE(TARGET_AMD64, 1, [...])
3732 AC_DEFINE(TARGET_ARM, 1, [...])
3735 AC_DEFINE(TARGET_ARM64, 1, [...])
3738 AC_DEFINE(TARGET_POWERPC, 1, [...])
3741 AC_DEFINE(TARGET_POWERPC, 1, [...])
3742 AC_DEFINE(TARGET_POWERPC64, 1, [...])
3745 AC_DEFINE(TARGET_S390X, 1, [...])
3748 AC_DEFINE(TARGET_MIPS, 1, [...])
3751 AC_DEFINE(TARGET_SPARC, 1, [...])
3754 AC_DEFINE(TARGET_SPARC64, 1, [...])
3760 AC_DEFINE(HOST_X86, 1, [...])
3763 AC_DEFINE(HOST_AMD64, 1, [...])
3766 AC_DEFINE(HOST_ARM, 1, [...])
3769 AC_DEFINE(HOST_ARM64, 1, [...])
3772 AC_DEFINE(HOST_POWERPC, 1, [...])
3775 AC_DEFINE(HOST_POWERPC, 1, [...])
3776 AC_DEFINE(HOST_POWERPC64, 1, [...])
3779 AC_DEFINE(HOST_S390X, 1, [...])
3782 AC_DEFINE(HOST_MIPS, 1, [...])
3785 AC_DEFINE(HOST_SPARC, 1, [...])
3788 AC_DEFINE(HOST_SPARC64, 1, [...])
3800 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3801 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
3803 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3805 if test "x$enable_vtune" = "xyes"; then
3806 if test "x$with_vtune" = "x"; then
3807 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3809 VTUNE_PATH=$with_vtune
3811 VTUNE_INCLUDE=$VTUNE_PATH/include
3814 VTUNE_LIB=$VTUNE_PATH/lib32
3817 VTUNE_LIB=$VTUNE_PATH/lib64
3820 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3823 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3824 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3826 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3827 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3830 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3831 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3833 AC_SUBST(VTUNE_LIBS)
3834 AC_SUBST(VTUNE_CFLAGS)
3836 dnl Use GCC atomic ops if they work on the target.
3837 if test x$GCC = "xyes"; then
3839 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3840 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3845 if test "x$target_mach" = "xyes"; then
3847 if test "x$TARGET_SYS" = "xWATCHOS"; then
3848 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3849 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3850 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3852 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3853 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3854 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3855 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3858 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3859 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3860 #error fail this for ios
3863 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3864 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3865 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3868 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3869 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3870 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3875 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3878 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3880 if test "x$sizeof_register" = "x4"; then
3881 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3882 elif test "x$sizeof_register" = "x8"; then
3883 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3885 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3888 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3890 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3891 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3892 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3893 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3895 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3898 if test "x$have_visibility_hidden" = "xyes"; then
3899 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3902 if test "x$have_deprecated" = "xyes"; then
3903 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3907 dnl Simple Generational checks (sgen)
3910 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3911 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3912 if test x$buildsgen = xyes; then
3913 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3914 SGEN_DEFINES="-DHAVE_SGEN_GC"
3917 if test x$with_sgen_default_concurrent != xno; then
3918 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3919 conc_gc_msg=" (concurrent by default)"
3922 if test "x$gc_msg" = "x"; then
3923 gc_msg="sgen$conc_gc_msg"
3925 gc_msg="sgen$conc_gc_msg and $gc_msg"
3928 AC_SUBST(SGEN_DEFINES)
3929 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3931 jit_status="Building and using the JIT"
3939 INTL="libintl.dylib"
3940 SQLITE="libsqlite.0.dylib"
3941 SQLITE3="libsqlite3.0.dylib"
3943 GDKX11="libgdk-x11-2.0.dylib"
3944 GTKX11="libgtk-x11-2.0.dylib"
3949 SQLITE="libsqlite.so"
3950 SQLITE3="libsqlite3.so"
3960 SQLITE="libsqlite.so"
3961 SQLITE3="libsqlite3.so"
3966 SQLITE="libsqlite.so"
3967 SQLITE3="libsqlite3.so"
3971 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
3972 AC_MSG_CHECKING(for the soname of libX11.so)
3973 for i in $x_libraries $dlsearch_path; do
3975 if test -f $i/libX11.so.$r; then
3982 if test "x$X11" = "xlibX11.so"; then
3983 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
3991 ######################################
3993 ######################################
3997 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
3998 if test x$GCC = xyes; then
3999 GNUC_UNUSED='__attribute__((__unused__))'
4000 GNUC_NORETURN='__attribute__((__noreturn__))'
4002 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4005 AC_SUBST(GNUC_PRETTY)
4006 AC_SUBST(GNUC_UNUSED)
4007 AC_SUBST(GNUC_NORETURN)
4008 AC_SUBST(BREAKPOINT)
4010 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4013 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4029 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4034 arm*-darwin*|aarch64*-*)
4035 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4038 ORDER=G_LITTLE_ENDIAN
4041 LDFLAGS="$LDFLAGS -ltextencoding"
4044 CFLAGS="$CFLAGS -pthread"
4045 LDFLAGS="$LDFLAGS -pthread"
4056 # Defined for all targets/platforms using classic Windows API support.
4057 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4058 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4060 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4061 AC_CHECK_FUNCS(getrlimit)
4062 AC_CHECK_FUNCS(fork execv execve)
4064 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4066 if test x$with_overridable_allocators = xyes; then
4067 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4068 AC_MSG_NOTICE([Overridable allocator support enabled])
4070 AC_MSG_NOTICE([Overridable allocator support disabled])
4074 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4075 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4076 # removed once support for 10.6 is dropped.
4078 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4080 if test x$target_osx = xyes; then
4081 AC_CHECK_FUNCS(getpwuid_r)
4082 elif test x$target_ios = xno; then
4083 AC_CHECK_FUNCS(strndup getpwuid_r)
4086 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4088 AC_SEARCH_LIBS(sqrtf, m)
4090 # nanosleep may not be part of libc, also search it in other libraries
4091 AC_SEARCH_LIBS(nanosleep, rt)
4093 AC_SEARCH_LIBS(dlopen, dl)
4094 old_ldflags="${LDFLAGS}"
4095 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4096 if test $lt_cv_prog_gnu_ld = yes; then
4097 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4100 *-*-aix*|*-*-os400*)
4103 dnl Try to use export-dynamic anyways
4104 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4108 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4109 if test $found_export_dynamic = no; then
4110 LDFLAGS="${old_ldflags}"
4113 AC_MSG_CHECKING(for varargs macros)
4115 int foo (int i, int j);
4116 #define bar(...) foo (1, __VA_ARGS__)
4120 ],have_iso_varargs=yes,have_iso_varargs=no)
4121 AC_MSG_RESULT($have_iso_varargs)
4122 G_HAVE_ISO_VARARGS=0
4123 if test "x$have_iso_varargs" = "xyes"; then
4124 G_HAVE_ISO_VARARGS=1
4126 AC_SUBST(G_HAVE_ISO_VARARGS)
4128 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h localcharset.h sys/types.h sys/resource.h)
4129 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4130 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4131 AC_SUBST(HAVE_ALLOCA_H)
4133 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_int; then
4134 GPOINTER_TO_INT="((gint) (ptr))"
4135 GPOINTER_TO_UINT="((guint) (ptr))"
4136 GINT_TO_POINTER="((gpointer) (v))"
4137 GUINT_TO_POINTER="((gpointer) (v))"
4140 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long; then
4141 GPOINTER_TO_INT="((gint)(long) (ptr))"
4142 GPOINTER_TO_UINT="((guint)(long) (ptr))"
4143 GINT_TO_POINTER="((gpointer)(glong) (v))"
4144 GUINT_TO_POINTER="((gpointer)(gulong) (v))"
4147 elif test $ac_cv_sizeof_void_p = $ac_cv_sizeof_long_long; then
4148 GPOINTER_TO_INT="((gint)(long long) (ptr))"
4149 GPOINTER_TO_UINT="((guint)(unsigned long long) (ptr))"
4150 GINT_TO_POINTER="((gpointer)(long long) (v))"
4151 GUINT_TO_POINTER="((gpointer)(unsigned long long) (v))"
4153 GSIZE_FORMAT='"I64u"'
4155 AC_MSG_ERROR([unsupported pointer size])
4158 AC_SUBST(GPOINTER_TO_INT)
4159 AC_SUBST(GPOINTER_TO_UINT)
4160 AC_SUBST(GINT_TO_POINTER)
4161 AC_SUBST(GUINT_TO_POINTER)
4163 AC_SUBST(GSIZE_FORMAT)
4164 AC_SUBST(G_GUINT64_FORMAT)
4165 AC_SUBST(G_GINT64_FORMAT)
4166 AC_SUBST(G_GUINT32_FORMAT)
4167 AC_SUBST(G_GINT32_FORMAT)
4170 # END OF EGLIB CHECKS
4173 AC_ARG_WITH([libgdiplus],
4174 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4175 [], [with_libgdiplus=installed])
4177 # default install location
4178 libgdiplus_install_loc=libgdiplus${libsuffix}
4181 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4185 case $with_libgdiplus in
4192 if test x$cross_compiling = xno; then
4193 if test x$host_darwin = xyes; then
4194 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4196 libgdiplus_install_loc=$a
4204 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4207 /*) # absolute path, assume it is an install location
4208 libgdiplus_loc=$with_libgdiplus
4209 libgdiplus_install_loc=$with_libgdiplus
4213 libgdiplus_loc=`pwd`/$with_libgdiplus
4216 AC_SUBST(libgdiplus_loc)
4217 AC_SUBST(libgdiplus_install_loc)
4219 AC_ARG_ENABLE(icall-symbol-map,[ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
4220 if test "x$icall_symbol_map" = "xyes"; then
4221 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4224 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4225 if test "x$icall_export" = "xyes"; then
4226 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4229 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4230 if test "x$icall_tables" = "xno"; then
4231 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4234 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4236 if test "x$with_tls" = "x__thread"; then
4237 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4238 # Pass the information to libgc
4239 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4240 AC_MSG_CHECKING(if the tls_model attribute is supported)
4241 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4244 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4250 if test ${TARGET} = ARM; then
4251 dnl ******************************************
4252 dnl *** Check to see what FPU is available ***
4253 dnl ******************************************
4254 AC_MSG_CHECKING(which FPU to use)
4257 # This is a bit tricky:
4259 # if (__ARM_PCS_VFP) {
4260 # /* mfloat-abi=hard == VFP with hard ABI */
4261 # } elif (!__SOFTFP__) {
4262 # /* mfloat-abi=softfp == VFP with soft ABI */
4264 # /* mfloat-abi=soft == no VFP */
4267 # The exception is iOS (w/ GCC) where none of the above
4268 # are defined (but iOS always uses the 'softfp' ABI).
4270 # No support for FPA.
4275 # iOS GCC always uses the 'softfp' ABI.
4276 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4280 # Are we using the 'hard' ABI?
4281 if test x$fpu = xNONE; then
4282 AC_TRY_COMPILE([], [
4283 #ifndef __ARM_PCS_VFP
4284 #error "Float ABI is not 'hard'"
4293 # No 'hard' ABI. 'soft' or 'softfp'?
4294 if test x$fpu = xNONE; then
4295 AC_TRY_COMPILE([], [
4297 #error "Float ABI is not 'softfp'"
4306 if test x$arm_fpu != x; then
4311 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4314 dnl *********************************************
4315 dnl *** Check which ARM version(s) we can use ***
4316 dnl *********************************************
4317 AC_MSG_CHECKING(which ARM version to use)
4319 AC_TRY_COMPILE([], [
4320 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4321 #error Not on ARM v5.
4329 AC_TRY_COMPILE([], [
4330 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4331 #error Not on ARM v6.
4340 AC_TRY_COMPILE([], [
4341 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4342 #error Not on ARM v7.
4352 AC_MSG_RESULT($arm_ver)
4354 if test x$arm_v5 = xyes; then
4355 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4356 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4359 if test x$arm_v6 = xyes; then
4360 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4361 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4364 if test x$arm_v7 = xyes; then
4365 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4366 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4370 if test ${TARGET} = unknown; then
4371 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4372 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4375 if test "x$platform_android" = "xyes"; then
4376 case "x${TARGET}" in
4381 BTLS_PLATFORM=android-armv5
4385 BTLS_PLATFORM=android-armv6
4389 BTLS_PLATFORM=android-armv7
4398 BTLS_PLATFORM=android-v8a
4402 BTLS_PLATFORM=android-x86
4406 BTLS_PLATFORM=android-x64
4414 if test ${ACCESS_UNALIGNED} = no; then
4415 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4418 if test x$host_darwin = xyes; then
4419 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4421 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4422 [AC_MSG_RESULT([no])],
4424 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4426 RANLIB="$RANLIB -no_warning_for_no_symbols"
4427 AC_MSG_RESULT([yes])
4434 # Pass CPPFLAGS to libgc configure
4435 # We should use a separate variable for this to avoid passing useless and
4436 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4437 # This should be executed late so we pick up the final version of CPPFLAGS
4438 # The problem with this approach, is that during a reconfigure, the main
4439 # configure scripts gets invoked with these arguments, so we use separate
4440 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4441 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4442 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4443 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4445 # Don't pass -finstrument-for-thread-suspension in,
4446 # if these are instrumented it will be very bad news
4447 # (infinite recursion, undefined parking behavior, etc)
4448 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4449 ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
4450 if test "x$support_boehm" = "xyes"; then
4451 AC_CONFIG_SUBDIRS(libgc)
4457 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4458 if test x$with_malloc_mempools = xyes; then
4460 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4465 DISABLE_MCS_DOCS=default
4466 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4467 if test x$with_mcs_docs != xyes; then
4468 DISABLE_MCS_DOCS=yes
4471 if test -n "$INSTALL_4_x_TRUE"; then :
4472 DISABLE_MCS_DOCS=yes
4474 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4475 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4478 AC_ARG_WITH(lazy_gc_thread_creation, [ --with-lazy-gc-thread-creation=yes|no Enable lazy runtime thread creation, embedding host must do it explicitly (defaults to no)],[
4479 if test x$with_lazy_gc_thread_creation != xno ; then
4480 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4482 ], [with_lazy_gc_thread_creation=no])
4484 AC_ARG_WITH(cooperative_gc, [ --with-cooperative-gc=yes|no Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [with_cooperative_gc=default])
4486 if test x$with_cooperative_gc = xdefault; then
4487 with_cooperative_gc=$with_cooperative_gc_default
4490 if test x$with_cooperative_gc != xno; then
4491 AC_DEFINE(USE_COOP_GC,1,[Enable cooperative stop-the-world garbage collection.])
4494 AM_CONDITIONAL([ENABLE_COOP], [test x$with_cooperative_gc != xno])
4496 AC_ARG_ENABLE(checked_build, [ --enable-checked-build=LIST To enable checked build (expensive asserts), configure with a comma-separated LIST of checked build modules and then include that same list in the environment variable MONO_CHECK_MODE at runtime. Recognized checked build modules: all, gc, metadata, thread, private_types],[
4498 if test x$enable_checked_build != x ; then
4499 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4501 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4502 eval "mono_checked_build_test_enable_$feature='yes'"
4505 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4506 eval "mono_checked_build_test_enable_gc='yes'"
4507 eval "mono_checked_build_test_enable_metadata='yes'"
4508 eval "mono_checked_build_test_enable_thread='yes'"
4509 eval "mono_checked_build_test_enable_private_types='yes'"
4512 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4513 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4516 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4517 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4520 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4521 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4524 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4525 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4529 AC_CHECK_HEADER([malloc.h],
4530 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
4531 [Define to 1 if you have /usr/include/malloc.h.])],,)
4533 if test x"$GCC" = xyes; then
4534 # Implicit function declarations are not 64 bit safe
4535 # Do this late, since this causes lots of configure tests to fail
4536 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4537 # jay has a lot of implicit declarations
4538 JAY_CFLAGS="-Wno-implicit-function-declaration"
4541 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4542 # instead of libmono-static.a
4543 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4544 LIBMONO_LA=libmini-static.la
4546 if test x$buildsgen = xyes; then
4547 LIBMONO_LA=libmonosgen-$API_VER.la
4549 LIBMONO_LA=libmonoboehm-$API_VER.la
4552 AC_SUBST(LIBMONO_LA)
4558 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4559 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
4560 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
4562 if test "x$enable_btls" = "xno"; then
4566 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
4569 if test "x$enable_btls" = "xyes"; then
4570 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4571 if test "x$CMAKE" = "xno"; then
4572 AC_MSG_ERROR("cmake not found")
4575 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4582 case "$BTLS_PLATFORM" in
4588 btls_cflags="$btls_cflags -arch i386"
4599 btls_cflags="-DOPENSSL_NO_ASM=1"
4611 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
4612 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
4616 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4619 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4622 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4625 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4628 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4631 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4634 AC_MSG_ERROR(Invalid BTLS platform)
4637 if test "x$platform_android" = "xyes"; then
4639 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4640 if test "x$with_btls_android_ndk" != "x"; then
4641 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4643 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4647 if test "x$btls_arch" != "x"; then
4648 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4651 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4653 AC_SUBST(BTLS_CFLAGS)
4654 AC_SUBST(BTLS_PLATFORM)
4655 AC_SUBST(BTLS_CMAKE_ARGS)
4657 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4662 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4664 if test x$DISABLE_MCS_DOCS = xyes; then
4671 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
4672 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4673 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4675 libmono_ldflags="$libmono_ldflags $LIBS"
4677 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4678 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4679 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4680 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4681 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4682 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4683 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4684 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4685 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4686 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4687 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4688 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4689 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4690 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4691 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4692 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4693 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4694 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4696 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4706 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4707 AC_SUBST(arch_target)
4712 #This must always be defined when building the runtime
4713 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4715 mono_build_root=`pwd`
4716 AC_SUBST(mono_build_root)
4718 mono_runtime=mono/mini/mono
4719 AC_SUBST(mono_runtime)
4721 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.7.0/tools/csc.exe
4723 if test $csc_compiler = mcs; then
4724 CSC=$mcs_topdir/class/lib/build/mcs.exe
4729 mono_cfg_root=$mono_build_root/runtime
4730 if test x$host_win32 = xyes; then
4731 if test "x$cross_compiling" = "xno"; then
4732 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4733 CSC=`cygpath -m -a $CSC`
4734 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4736 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4739 mono_cfg_dir=$mono_cfg_root/etc
4741 AC_SUBST(mono_cfg_dir)
4745 AC_CONFIG_FILES([po/mcs/Makefile.in])
4747 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4748 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4750 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4753 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4755 *) reldir=$depth/$srcdir ;;
4757 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4758 cd runtime/etc/mono/1.0
4759 rm -f machine.config
4760 $LN_S $reldir/data/net_1_1/machine.config machine.config
4764 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4767 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4769 *) reldir=$depth/$srcdir ;;
4771 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4772 cd runtime/etc/mono/2.0
4773 rm -f machine.config
4774 $LN_S $reldir/data/net_2_0/machine.config machine.config
4778 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4781 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4783 *) reldir=$depth/$srcdir ;;
4785 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4786 cd runtime/etc/mono/2.0
4788 $LN_S $reldir/data/net_2_0/web.config web.config
4792 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4795 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4797 *) reldir=$depth/$srcdir ;;
4799 $ac_aux_dir/install-sh -d runtime/etc/mono/
4800 cd runtime/etc/mono/
4802 $LN_S $reldir/data/browscap.ini browscap.ini
4806 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4807 [ depth=../../../../..
4809 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4811 *) reldir=$depth/$srcdir ;;
4813 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4814 cd runtime/etc/mono/2.0/Browsers
4815 rm -f Compat.browser
4816 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4820 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4821 [ depth=../../../../..
4823 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4825 *) reldir=$depth/$srcdir ;;
4827 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4828 cd runtime/etc/mono/4.0/Browsers
4829 rm -f Compat.browser
4830 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4834 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4835 [ depth=../../../../..
4837 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4839 *) reldir=$depth/$srcdir ;;
4841 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4842 cd runtime/etc/mono/4.5/Browsers
4843 rm -f Compat.browser
4844 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4848 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4851 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4853 *) reldir=$depth/$srcdir ;;
4855 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4856 cd runtime/etc/mono/4.0
4857 rm -f machine.config
4858 $LN_S $reldir/data/net_4_0/machine.config machine.config
4862 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4865 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4867 *) reldir=$depth/$srcdir ;;
4869 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4870 cd runtime/etc/mono/4.0
4872 $LN_S $reldir/data/net_4_0/web.config web.config
4876 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
4879 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4881 *) reldir=$depth/$srcdir ;;
4883 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4884 cd runtime/etc/mono/4.5
4885 rm -f machine.config
4886 $LN_S $reldir/data/net_4_5/machine.config machine.config
4890 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
4893 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4895 *) reldir=$depth/$srcdir ;;
4897 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
4898 cd runtime/etc/mono/4.5
4900 $LN_S $reldir/data/net_4_5/web.config web.config
4904 AC_CONFIG_COMMANDS([quiet-libtool], [sed -e 's/echo "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool; sed -e 's/$ECHO "copying selected/# "copying selected/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
4905 AC_CONFIG_COMMANDS([nolock-libtool], [sed -e 's/lock_old_archive_extraction=yes/lock_old_archive_extraction=no/g' < libtool > libtool.tmp && mv libtool.tmp libtool && chmod a+x libtool])
4910 acceptance-tests/Makefile
4912 scripts/mono-find-provides
4913 scripts/mono-find-requires
4917 mono/utils/jemalloc/Makefile
4918 mono/metadata/Makefile
4922 mono/arch/x86/Makefile
4923 mono/arch/amd64/Makefile
4924 mono/arch/ppc/Makefile
4925 mono/arch/sparc/Makefile
4926 mono/arch/s390x/Makefile
4927 mono/arch/arm/Makefile
4928 mono/arch/arm64/Makefile
4929 mono/arch/mips/Makefile
4932 mono/tests/tests-config
4933 mono/tests/gc-descriptors/Makefile
4934 mono/tests/testing_gac/Makefile
4935 mono/unit-tests/Makefile
4936 mono/benchmark/Makefile
4938 mono/profiler/Makefile
4940 mono/eglib/eglib-config.h
4942 ikvm-native/Makefile
4947 data/net_2_0/Makefile
4948 data/net_4_0/Makefile
4949 data/net_4_5/Makefile
4950 data/net_2_0/Browsers/Makefile
4951 data/net_4_0/Browsers/Makefile
4952 data/net_4_5/Browsers/Makefile
4959 data/mono-options.pc
4960 data/mono-lineeditor.pc
4966 data/system.web.extensions_1.0.pc
4967 data/system.web.extensions.design_1.0.pc
4968 data/system.web.mvc.pc
4969 data/system.web.mvc2.pc
4970 data/system.web.mvc3.pc
4971 data/aspnetwebstack.pc
4977 tools/locale-builder/Makefile
4979 tools/monograph/Makefile
4980 tools/pedump/Makefile
4986 # Update all submodules recursively to ensure everything is checked out
4987 $srcdir/scripts/update_submodules.sh
4989 if test x$host_win32 = xyes; then
4990 # Get rid of 'cyg' prefixes in library names
4991 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4992 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
4993 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
4994 # executable doesn't work...
4995 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
4998 if test x$host_darwin = xyes; then
4999 # This doesn't seem to be required and it slows down parallel builds
5000 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5005 NONE) prefix=$ac_default_prefix ;;
5007 case $exec_prefix in
5008 NONE) exec_prefix='${prefix}' ;;
5012 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
5013 # any existing config.make. This allows people to share the same source tree
5014 # with different build directories, one native and one cross
5016 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5018 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5020 echo "prefix=$prefix" > $mcs_topdir/build/config.make
5021 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5022 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5023 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5024 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5025 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5026 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5027 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5028 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5031 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5032 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5035 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5038 [myver=$($AWK 'BEGIN {
5039 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5040 if(length(vsplit [1]) > 4) {
5041 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5043 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5046 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5047 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5049 if test x$host_darwin = xyes; then
5050 echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
5051 elif test x$host_win32 = xyes; then
5052 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5054 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5057 if test x$host_darwin = xyes; then
5058 echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
5059 elif test x$host_win32 = xyes; then
5060 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5062 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5065 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5066 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5069 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5070 enable_system_aot=yes
5073 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5074 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5077 if test x$DISABLE_MCS_DOCS = xyes; then
5078 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5081 if test x$has_extension_module != xno; then
5082 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5085 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5087 if test "x$test_bcl_opt" = "xyes"; then
5088 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5091 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5093 if test $csc_compiler = mcs; then
5094 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5097 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5098 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5099 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5100 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5103 if test "x$AOT_MODE" != "x" ; then
5104 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5107 if test "x$enable_btls" = "xyes"; then
5108 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5115 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5117 btls_platform_string=
5118 if test x$enable_btls = xyes; then
5119 if test x$btls_android = xyes; then
5120 btls_platform_string=" (android:$BTLS_PLATFORM)"
5122 btls_platform_string=" ($BTLS_PLATFORM)"
5128 C# Compiler: $csc_compiler
5135 SIGALTSTACK: $with_sigaltstack
5137 BigArrays: $enable_big_arrays
5138 DTrace: $enable_dtrace
5139 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5140 Spectre: $spectre_mitigation_status
5143 .NET 4.x: $with_profile4_x
5144 Xamarin.Android: $with_monodroid
5145 Xamarin.iOS: $with_monotouch
5146 Xamarin.WatchOS: $with_monotouch_watch
5147 Xamarin.TVOS: $with_monotouch_tv
5148 Xamarin.Mac: $with_xammac
5149 Windows AOT: $with_winaot
5151 Unreal: $with_unreal
5152 WebAssembly: $with_wasm
5153 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5154 JNI support: $jdk_headers_found
5155 libgdiplus: $libgdiplus_msg
5157 BTLS: $enable_btls$btls_platform_string
5158 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5161 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5162 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)