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'
838 AC_SUBST(GLIB_CFLAGS)
840 # Enable support for fast thread-local storage
841 # Some systems have broken support, so we allow to disable it.
842 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
844 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
845 # This does not work on some platforms (bug #55253)
846 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
848 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
849 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
850 # Same as --with-shared_mono=no
851 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
853 if test "x$enable_static" = "xno"; then
857 if test "x$enable_shared" = "xno"; then
861 if test "x$enable_libraries" = "xno"; then
865 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
867 if test "x$host_win32" = "xyes"; then
868 # Boehm GC requires the runtime to be in its own dll
872 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
873 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
874 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
875 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
877 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
878 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
879 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
881 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
882 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
886 # Pass it to libgc as well
887 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
894 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
896 if test x$enable_small_config = xyes; then
897 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
898 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
901 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)
903 DISABLED_FEATURES=none
906 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
907 AC_MSG_CHECKING([CSharp compiler to use])
908 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
909 if test x$withval = xmcs; then
911 elif test x$withval = xroslyn; then
913 elif test x$withval = xdefault; then
916 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
918 ],[csc_compiler=default])
920 if test $csc_compiler = default; then
921 if test $endian = big; then
923 elif test $endian = little; then
925 powerpc*) csc_compiler=mcs ;;
926 *) csc_compiler=roslyn ;;
932 AC_MSG_RESULT($csc_compiler)
934 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
935 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
936 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])
939 if test x$target_win32 = xyes; then
941 with_jemalloc_assert=no
942 with_jemalloc_always=no
945 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
946 if test "x$with_jemalloc_assert" = "xyes"; then
947 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
948 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
949 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
952 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
953 if test "x$with_jemalloc_always" = "xyes"; then
955 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
956 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
957 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
960 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
961 if test "x$with_jemalloc" = "xyes"; then
962 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
963 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
964 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
966 if test "x$target_mach" = "xyes"; then
967 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
970 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
971 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
973 AC_SUBST(JEMALLOC_CFLAGS)
974 AC_SUBST(JEMALLOC_CPPFLAGS)
975 AC_SUBST(JEMALLOC_LDFLAGS)
976 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
981 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
982 # MERP - The MS telemetry profile. Not for general use.
983 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
985 # Structured crashes are not merp crashes. Structured crashes are json dumps made by mono during crashes. Merp upload is going to use the dumping code is a very specific way, and is enabled at runtime with an icall.
987 #--with-crash_privacy=yes --with-structured_crashes=no means we don't wanna dump in non-merp-enabled builds, and we want to not send symbol strings. This is going to be the default pair of settings for VS4Mac.
988 #--with-crash_privacy=yes --with-structured_crashes=yes means you want to see crashes on your console, and you want to not see unmanaged symbol names. This is an option for proprietary apps that have manual bugs filed.
989 #--with-crash_privacy=no --with-structured_crashes=no means you want to see no crash dumps on failure and you don't care about privacy. This is how you'd set a "don't want it, don't care" configuration.
990 #--with-crash_privacy=no --with-structured_crashes=yes means you want full crashes and you want to see them in the terminal, not on telemetry. This is going to be how we build for CI.
992 AC_ARG_WITH(crash-privacy, [ --with-crash_privacy=yes,no If you want your crashes to not include names of symbols present in the binary. ], [], [with_crash_privacy=no])
993 AC_ARG_WITH(structured-crashes, [ --with-structured_crashes=yes,no If you want your unmanaged crashes to result in a small crash dump file. ], [], [with_structured_crashes=yes])
995 if test "x$with_crash_privacy" = "xno"; then
996 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
999 if test "x$with_structured_crashes" = "xno"; then
1000 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1004 # Set the build profiles and options before things which use them
1007 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])
1008 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1009 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1010 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])
1011 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])
1012 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1013 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1014 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])
1015 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])
1016 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1017 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1018 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1019 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1022 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1023 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])
1024 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])
1025 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])
1028 dnl Spectre compiler mitigation flag checks
1030 if test "x$with_spectre_mitigation" = "xyes"; then
1031 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1033 SPECTRE_INDIRECT_BRANCH_KIND=
1034 case "x$with_spectre_indirect_branch_choice" in
1035 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1036 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1037 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1038 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1039 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1042 SPECTRE_FUNCTION_RETURN_KIND=""
1043 case "x$with_spectre_function_return_choice" in
1044 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1045 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1046 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1047 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1048 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1051 AX_CHECK_COMPILE_FLAG(
1052 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1053 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1056 AX_CHECK_COMPILE_FLAG(
1057 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1058 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1061 if test "x$SPECTRE_CFLAGS" != "x" ; then
1062 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1063 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1064 spectre_mitigation_status="mitigation enabled"
1067 spectre_mitigation_status="no mitigation"
1071 dnl Profile defaults
1073 TEST_PROFILE=default
1074 enable_llvm_default=no
1076 with_profile4_x_default=no
1077 with_monodroid_default=no
1078 with_monotouch_default=no
1079 with_monotouch_watch_default=no
1080 with_monotouch_tv_default=no
1081 with_xammac_default=no
1082 with_testing_aot_hybrid_default=no
1083 with_testing_aot_full_default=no
1084 with_winaot_default=no
1085 with_orbis_default=no
1086 with_unreal_default=no
1087 with_wasm_default=no
1089 with_bitcode_default=no
1090 enable_cooperative_suspend_default=no
1092 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000
1094 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1096 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1097 DISABLE_MCS_DOCS_default=yes
1098 elif test x$with_runtime_preset = xnet_4_x; then
1099 with_profile4_x_default=yes
1100 elif test x$with_runtime_preset = xall; then
1101 with_profile4_x_default=yes
1102 with_monodroid_default=yes
1103 with_monotouch_default=yes
1104 with_monotouch_watch_default=yes
1105 with_monotouch_tv_default=yes
1106 with_xammac_default=yes
1107 with_winaot_default=yes
1108 with_orbis_default=yes
1109 with_unreal_default=yes
1110 with_wasm_default=yes
1111 with_testing_aot_hybrid_default=yes
1112 with_testing_aot_full_default=yes
1113 elif test x$with_runtime_preset = xbitcode; then
1114 DISABLE_MCS_DOCS_default=yes
1115 with_testing_aot_full_default=yes
1116 with_bitcode_default=yes
1117 enable_cooperative_suspend_default=yes
1118 TEST_PROFILE=testing_aot_full
1119 enable_llvm_default=yes
1121 mono_feature_disable_com='yes'
1122 mono_feature_disable_remoting='yes'
1123 mono_feature_disable_reflection_emit_save='yes'
1124 mono_feature_disable_reflection_emit='yes'
1125 mono_feature_disable_appdomains='yes'
1127 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1128 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1130 elif test x$with_runtime_preset = xfullaot; then
1131 DISABLE_MCS_DOCS_default=yes
1132 with_testing_aot_full_default=yes
1133 TEST_PROFILE=testing_aot_full
1135 mono_feature_disable_com='yes'
1136 mono_feature_disable_remoting='yes'
1137 mono_feature_disable_reflection_emit_save='yes'
1138 mono_feature_disable_reflection_emit='yes'
1139 mono_feature_disable_appdomains='yes'
1141 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1142 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1144 elif test x$with_runtime_preset = xfullaot_llvm; then
1145 DISABLE_MCS_DOCS_default=yes
1146 with_testing_aot_full_default=yes
1147 TEST_PROFILE=testing_aot_full
1149 mono_feature_disable_com='yes'
1150 mono_feature_disable_remoting='yes'
1151 mono_feature_disable_reflection_emit_save='yes'
1152 mono_feature_disable_reflection_emit='yes'
1153 mono_feature_disable_appdomains='yes'
1155 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1156 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1158 elif test x$with_runtime_preset = xhybridaot; then
1159 DISABLE_MCS_DOCS_default=yes
1160 with_testing_aot_hybrid_default=yes
1161 TEST_PROFILE=testing_aot_hybrid
1163 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1164 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1165 elif test x$with_runtime_preset = xhybridaot_llvm; then
1166 DISABLE_MCS_DOCS_default=yes
1167 with_testing_aot_hybrid_default=yes
1168 TEST_PROFILE=testing_aot_hybrid
1170 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1171 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1172 elif test x$with_runtime_preset = xaot; then
1173 with_profile4_x_default=yes
1175 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1178 DISABLE_MCS_DOCS_default=yes
1179 elif test x$with_runtime_preset = xaot_llvm; then
1180 with_profile4_x_default=yes
1182 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1185 DISABLE_MCS_DOCS_default=yes
1186 elif test x$with_runtime_preset = xwinaot; then
1187 DISABLE_MCS_DOCS_default=yes
1188 with_winaot_default=yes
1191 mono_feature_disable_com='yes'
1192 mono_feature_disable_remoting='yes'
1193 mono_feature_disable_reflection_emit_save='yes'
1194 mono_feature_disable_reflection_emit='yes'
1195 mono_feature_disable_appdomains='yes'
1197 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1198 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1200 elif test x$with_runtime_preset = xorbis; then
1201 DISABLE_MCS_DOCS_default=yes
1202 with_orbis_default=yes
1205 mono_feature_disable_com='yes'
1206 mono_feature_disable_remoting='yes'
1207 mono_feature_disable_reflection_emit_save='yes'
1208 mono_feature_disable_reflection_emit='yes'
1209 mono_feature_disable_appdomains='yes'
1211 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1212 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1214 elif test x$with_runtime_preset = xunreal; then
1215 DISABLE_MCS_DOCS_default=yes
1216 with_unreal_default=yes
1219 mono_feature_disable_com='yes'
1220 mono_feature_disable_remoting='yes'
1221 mono_feature_disable_appdomains='no'
1223 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1224 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1225 elif test x$with_runtime_preset = xwasm; then
1226 DISABLE_MCS_DOCS_default=yes
1227 with_wasm_default=yes
1230 mono_feature_disable_com='yes'
1231 mono_feature_disable_remoting='yes'
1232 mono_feature_disable_reflection_emit_save='yes'
1233 mono_feature_disable_reflection_emit='yes'
1234 mono_feature_disable_appdomains='yes'
1236 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1237 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1239 with_profile4_x_default=yes
1242 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1243 AC_SUBST(AOT_BUILD_FLAGS)
1244 AC_SUBST(AOT_RUN_FLAGS)
1245 # For llvmonlycheck + fullaotcheck
1246 AC_SUBST(INVARIANT_AOT_OPTIONS)
1249 AC_SUBST(TEST_PROFILE)
1251 if test "x$with_profile4_x" = "xdefault"; then
1252 with_profile4_x=$with_profile4_x_default
1254 if test "x$with_monodroid" = "xdefault"; then
1255 with_monodroid=$with_monodroid_default
1257 if test "x$with_monotouch" = "xdefault"; then
1258 with_monotouch=$with_monotouch_default
1260 if test "x$with_monotouch_watch" = "xdefault"; then
1261 with_monotouch_watch=$with_monotouch_watch_default
1263 if test "x$with_monotouch_tv" = "xdefault"; then
1264 with_monotouch_tv=$with_monotouch_tv_default
1266 if test "x$with_bitcode" = "xdefault"; then
1267 with_bitcode=$with_bitcode_default
1269 if test "x$with_xammac" = "xdefault"; then
1270 with_xammac=$with_xammac_default
1272 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1273 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1275 if test "x$with_testing_aot_full" = "xdefault"; then
1276 with_testing_aot_full=$with_testing_aot_full_default
1278 if test "x$with_winaot" = "xdefault"; then
1279 with_winaot=$with_winaot_default
1281 if test "x$with_orbis" = "xdefault"; then
1282 with_orbis=$with_orbis_default
1284 if test "x$with_unreal" = "xdefault"; then
1285 with_unreal=$with_unreal_default
1287 if test "x$with_wasm" = "xdefault"; then
1288 with_wasm=$with_wasm_default
1292 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1293 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1294 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1295 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1296 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1297 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1298 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1299 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1300 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1301 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1302 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1303 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1304 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1305 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"])
1306 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1308 default_profile=net_4_x
1309 if test -z "$INSTALL_MONODROID_TRUE"; then :
1310 default_profile=monodroid
1312 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1313 default_profile=monotouch
1315 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1316 default_profile=xammac
1318 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1319 default_profile=testing_aot_hybrid
1321 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1322 default_profile=testing_aot_full
1324 if test -z "$INSTALL_WINAOT_TRUE"; then :
1325 default_profile=winaot
1327 if test -z "$INSTALL_ORBIS_TRUE"; then :
1328 default_profile=orbis
1330 if test -z "$INSTALL_UNREAL_TRUE"; then :
1331 default_profile=unreal
1333 if test -z "$INSTALL_WASM_TRUE"; then :
1334 default_profile=wasm
1336 if test -z "$INSTALL_4_x_TRUE"; then :
1337 default_profile=net_4_x
1339 DEFAULT_PROFILE=$default_profile
1340 AC_SUBST(DEFAULT_PROFILE)
1343 # End build profile configuration
1346 if test x$USE_NLS = xprofile_default; then
1348 AC_MSG_CHECKING([NLS used])
1350 # We make the default value for USE_NLS
1351 # "no" on OSX because it isn't available on most
1352 # default OSX installs. The most common configurations will
1353 # all disable it, so this saves us typing.
1354 if test x$host_darwin = xyes; then
1361 AC_MSG_RESULT([$USE_NLS])
1364 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1365 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1366 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1367 security, lldb, mdb, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1369 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1370 eval "mono_feature_disable_$feature='yes'"
1372 DISABLED_FEATURES=$enable_minimal
1373 disabled="Disabled: $enable_minimal"
1376 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1378 if test "x$mono_feature_disable_aot" = "xyes"; then
1379 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1380 enable_system_aot=no
1381 AC_MSG_NOTICE([Disabled AOT compiler])
1384 if test "x$mono_feature_disable_profiler" = "xyes"; then
1385 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1386 AC_MSG_NOTICE([Disabled support for the profiler])
1388 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1390 if test "x$mono_feature_disable_decimal" = "xyes"; then
1391 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1392 AC_MSG_NOTICE([Disabled support for decimal])
1395 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1396 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1397 AC_MSG_NOTICE([Disabled support for P/Invoke])
1400 if test "x$mono_feature_disable_debug" = "xyes"; then
1401 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1402 AC_MSG_NOTICE([Disabled support for runtime debugging])
1405 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1406 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1407 mono_feature_disable_reflection_emit_save=yes
1408 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1411 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1412 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1413 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1416 if test "x$mono_feature_disable_large_code" = "xyes"; then
1417 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1418 AC_MSG_NOTICE([Disabled support for large assemblies])
1421 if test "x$mono_feature_disable_logging" = "xyes"; then
1422 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1423 AC_MSG_NOTICE([Disabled support for logging])
1426 if test "x$mono_feature_disable_com" = "xyes"; then
1427 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1428 AC_MSG_NOTICE([Disabled COM support])
1431 if test "x$mono_feature_disable_ssa" = "xyes"; then
1432 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1433 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1436 if test "x$mono_feature_disable_generics" = "xyes"; then
1437 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1438 AC_MSG_NOTICE([Disabled Generics Support])
1441 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1442 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1443 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1446 if test "x$mono_feature_disable_portability" = "xyes"; then
1447 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1448 AC_MSG_NOTICE([Disabled IO Portability layer])
1451 if test "x$mono_feature_disable_attach" = "xyes"; then
1452 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1453 AC_MSG_NOTICE([Disabled agent attach])
1456 if test "x$mono_feature_disable_verifier" = "xyes"; then
1457 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1458 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1461 if test "x$mono_feature_disable_jit" = "xyes"; then
1462 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1463 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1466 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1468 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1469 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1470 AC_MSG_NOTICE([Disabled the interpreter])
1473 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1475 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1476 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1479 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1481 if test "x$mono_feature_disable_simd" = "xyes"; then
1482 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1483 AC_MSG_NOTICE([Disabled SIMD support])
1486 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1487 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1488 AC_MSG_NOTICE([Disabled Soft Debugger.])
1491 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1493 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1494 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1495 AC_MSG_NOTICE([Disabled Performance Counters.])
1497 if test "x$mono_feature_disable_normalization" = "xyes"; then
1498 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1499 AC_MSG_NOTICE([Disabled String normalization support.])
1502 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1503 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1504 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1505 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1508 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1509 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1510 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1513 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1514 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1515 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1518 if test "x$mono_feature_disable_remoting" = "xyes"; then
1519 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1520 AC_MSG_NOTICE([Disabled remoting])
1523 if test "x$mono_feature_disable_security" = "xyes"; then
1524 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1525 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1528 if test "x$mono_feature_disable_lldb" = "xyes"; then
1529 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1530 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1533 if test "x$mono_feature_disable_mdb" = "xyes"; then
1534 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1535 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1538 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1539 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1540 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1544 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1545 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1546 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1549 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1550 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1551 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1554 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1555 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1556 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1559 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1560 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1562 has_extension_module=no
1563 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1565 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1566 if test x$extension = xdefault ; then
1567 has_extension_module=yes;
1570 if test x$enable_extension_module = xyes; then
1571 has_extension_module=yes;
1575 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1577 if test x$has_extension_module != xno ; then
1578 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1579 AC_MSG_NOTICE([Enabling mono extension module.])
1583 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1585 AC_MSG_CHECKING(for visibility __attribute__)
1588 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1589 int main () { doit (); return 0; }
1592 have_visibility_hidden=yes
1595 have_visibility_hidden=no
1600 dnl Boehm GC configuration
1603 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1605 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1606 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1608 if test "x$support_boehm" = "xyes"; then
1610 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1611 if test x$enable_parallel_mark = xyes; then
1612 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1622 if test "x$support_boehm" = "xyes"; then
1626 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1627 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1628 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1630 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1632 if test x$target_win32 = xyes; then
1633 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1634 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1637 gc_msg="Included Boehm GC with typed GC"
1638 if test x$enable_parallel_mark = xyes; then
1639 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1640 gc_msg="$gc_msg and parallel mark"
1642 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1647 AC_MSG_WARN("External Boehm is no longer supported")
1651 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1655 AC_MSG_WARN("Compiling mono without GC.")
1656 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1657 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1661 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1665 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])
1666 if test "x$large_heap" = "xyes"; then
1667 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1670 AC_SUBST(LIBGC_CPPFLAGS)
1671 AC_SUBST(LIBGC_LIBS)
1672 AC_SUBST(LIBGC_STATIC_LIBS)
1674 AC_SUBST(BOEHM_DEFINES)
1677 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1680 dnl End of Boehm GC Configuration
1683 dnl *************************************
1684 dnl *** Checks for zero length arrays ***
1685 dnl *************************************
1686 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1694 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1697 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1700 dnl ***********************************
1701 dnl *** Checks for signals
1702 dnl ***********************************
1703 AC_CHECK_HEADERS(signal.h)
1704 AC_CHECK_FUNCS(sigaction)
1705 AC_CHECK_FUNCS(kill)
1706 AC_CHECK_FUNCS(signal)
1708 # signal() is declared inline in Android headers
1709 # so we need to workaround it by overriding the check.
1710 if test x$platform_android = xyes; then
1711 AC_DEFINE(HAVE_SIGNAL,1)
1714 if test x$host_win32 = xno; then
1715 dnl *************************************
1716 dnl *** Checks for time capabilities ***
1717 dnl *************************************
1719 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1720 AC_TRY_COMPILE([#include <time.h>], [
1721 const int foo = CLOCK_MONOTONIC;
1724 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1729 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1730 AC_TRY_COMPILE([#include <time.h>], [
1731 const int foo = CLOCK_MONOTONIC_COARSE;
1734 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1739 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1740 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1741 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1743 dnl hires monotonic clock support
1744 AC_SEARCH_LIBS(clock_gettime, rt)
1745 AC_CHECK_FUNCS(clock_nanosleep)
1747 dnl dynamic loader support
1748 AC_CHECK_FUNC(dlopen, DL_LIB="",
1749 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1751 if test x$dl_support = xno; then
1752 AC_MSG_WARN([No dynamic loading support available])
1754 LIBS="$LIBS $DL_LIB"
1755 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1756 dnl from glib's configure.ac
1757 AC_CACHE_CHECK([for preceeding underscore in symbols],
1759 AC_TRY_RUN([#include <dlfcn.h>
1760 int mono_underscore_test (void) { return 42; }
1762 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1763 handle = dlopen ((void*)0, 0);
1765 f1 = dlsym (handle, "mono_underscore_test");
1766 f2 = dlsym (handle, "_mono_underscore_test");
1767 } return (!f2 || f1);
1769 [mono_cv_uscore=yes],
1770 [mono_cv_uscore=no],
1773 if test "x$mono_cv_uscore" = "xyes"; then
1774 MONO_DL_NEED_USCORE=1
1776 MONO_DL_NEED_USCORE=0
1778 AC_SUBST(MONO_DL_NEED_USCORE)
1779 AC_CHECK_FUNC(dlerror)
1782 dnl ******************************************************************
1783 dnl *** Checks for the IKVM JNI interface library ***
1784 dnl ******************************************************************
1785 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])
1788 if test x$with_ikvm_native = xyes; then
1789 ikvm_native_dir=ikvm-native
1790 jdk_headers_found="IKVM Native"
1793 AC_SUBST(ikvm_native_dir)
1795 AC_CHECK_HEADERS(execinfo.h)
1797 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1799 AC_CHECK_FUNCS(getgrgid_r)
1800 AC_CHECK_FUNCS(getgrnam_r)
1801 AC_CHECK_FUNCS(getresuid)
1802 AC_CHECK_FUNCS(setresuid)
1803 AC_CHECK_FUNCS(kqueue)
1804 AC_CHECK_FUNCS(backtrace_symbols)
1805 AC_CHECK_FUNCS(mkstemp)
1806 AC_CHECK_FUNCS(mmap)
1807 AC_CHECK_FUNCS(madvise)
1808 AC_CHECK_FUNCS(getrusage)
1809 AC_CHECK_FUNCS(getpriority)
1810 AC_CHECK_FUNCS(setpriority)
1811 AC_CHECK_FUNCS(dl_iterate_phdr)
1812 AC_CHECK_FUNCS(dladdr)
1813 AC_CHECK_FUNCS(sysconf)
1814 AC_CHECK_FUNCS(getrlimit)
1815 AC_CHECK_FUNCS(prctl)
1817 AC_CHECK_FUNCS(sched_getaffinity)
1818 AC_CHECK_FUNCS(sched_setaffinity)
1819 AC_CHECK_FUNCS(sched_getcpu)
1821 if test x$platform_android != xyes; then
1822 AC_CHECK_FUNCS(getpwnam_r)
1823 AC_CHECK_FUNCS(getpwuid_r)
1826 AC_FUNC_STRERROR_R()
1828 dnl ****************************************************************
1829 dnl *** Check for sched_setaffinity from glibc versions before ***
1830 dnl *** 2.3.4. The older versions of the function only take 2 ***
1831 dnl *** parameters, not 3. ***
1833 dnl *** Because the interface change was not made in a minor ***
1834 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
1835 dnl *** won't always indicate the interface sched_affinity has. ***
1836 dnl ****************************************************************
1837 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
1838 AC_TRY_COMPILE([#include <sched.h>], [
1840 sched_setaffinity(0, &mask);
1842 # Yes, we have it...
1844 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
1846 # We have the new, three-parameter version
1849 AC_TRY_COMPILE([#include <sched.h>], [
1850 CPU_COUNT((void *) 0);
1853 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
1855 # We have the new, three-parameter version
1859 dnl ******************************************************************
1860 dnl *** Check for large file support ***
1861 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
1862 dnl ******************************************************************
1864 # Check that off_t can represent 2**63 - 1 correctly, working around
1865 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
1866 # CPPFLAGS and sets $large_offt to yes if the test succeeds
1868 AC_DEFUN([LARGE_FILES], [
1869 large_CPPFLAGS=$CPPFLAGS
1870 CPPFLAGS="$CPPFLAGS $1"
1872 #include <sys/types.h>
1875 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
1876 #define COMPILE_TIME_ASSERT(pred) \
1877 switch(0){case 0:case pred:;}
1878 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
1881 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
1882 large_CPPFLAGS="$large_CPPFLAGS $1"
1887 CPPFLAGS=$large_CPPFLAGS
1890 AC_MSG_CHECKING(if off_t is 64 bits wide)
1892 if test $large_offt = no; then
1893 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
1894 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
1896 if test $large_offt = no; then
1897 AC_MSG_WARN([No 64 bit file size support available])
1900 dnl *****************************
1901 dnl *** Checks for libsocket ***
1902 dnl *****************************
1903 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
1907 dnl *****************************
1908 dnl *** Checks for libinotify ***
1909 dnl *****************************
1910 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
1913 dnl *******************************
1914 dnl *** Checks for MSG_NOSIGNAL ***
1915 dnl *******************************
1916 AC_MSG_CHECKING(for MSG_NOSIGNAL)
1917 AC_TRY_COMPILE([#include <sys/socket.h>], [
1918 int f = MSG_NOSIGNAL;
1920 # Yes, we have it...
1922 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
1924 # We'll have to use signals
1928 dnl *****************************
1929 dnl *** Checks for IPPROTO_IP ***
1930 dnl *****************************
1931 AC_MSG_CHECKING(for IPPROTO_IP)
1932 AC_TRY_COMPILE([#include <netinet/in.h>], [
1933 int level = IPPROTO_IP;
1935 # Yes, we have it...
1937 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
1939 # We'll have to use getprotobyname
1943 dnl *******************************
1944 dnl *** Checks for IPPROTO_IPV6 ***
1945 dnl *******************************
1946 AC_MSG_CHECKING(for IPPROTO_IPV6)
1947 AC_TRY_COMPILE([#include <netinet/in.h>], [
1948 int level = IPPROTO_IPV6;
1950 # Yes, we have it...
1952 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
1954 # We'll have to use getprotobyname
1958 dnl ******************************
1959 dnl *** Checks for IPPROTO_TCP ***
1960 dnl ******************************
1961 AC_MSG_CHECKING(for IPPROTO_TCP)
1962 AC_TRY_COMPILE([#include <netinet/in.h>], [
1963 int level = IPPROTO_TCP;
1965 # Yes, we have it...
1967 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
1969 # We'll have to use getprotobyname
1973 dnl *****************************
1974 dnl *** Checks for SOL_IP ***
1975 dnl *****************************
1976 AC_MSG_CHECKING(for SOL_IP)
1977 AC_TRY_COMPILE([#include <netdb.h>], [
1980 # Yes, we have it...
1982 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
1984 # We'll have to use getprotobyname
1988 dnl *****************************
1989 dnl *** Checks for SOL_IPV6 ***
1990 dnl *****************************
1991 AC_MSG_CHECKING(for SOL_IPV6)
1992 AC_TRY_COMPILE([#include <netdb.h>], [
1993 int level = SOL_IPV6;
1995 # Yes, we have it...
1997 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
1999 # We'll have to use getprotobyname
2003 dnl *****************************
2004 dnl *** Checks for SOL_TCP ***
2005 dnl *****************************
2006 AC_MSG_CHECKING(for SOL_TCP)
2007 AC_TRY_COMPILE([#include <netdb.h>], [
2008 int level = SOL_TCP;
2010 # Yes, we have it...
2012 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2014 # We'll have to use getprotobyname
2018 dnl *****************************
2019 dnl *** Checks for IP_PKTINFO ***
2020 dnl *****************************
2021 AC_MSG_CHECKING(for IP_PKTINFO)
2022 AC_TRY_COMPILE([#include <linux/in.h>], [
2023 int level = IP_PKTINFO;
2025 # Yes, we have it...
2027 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2032 dnl *****************************
2033 dnl *** Checks for IPV6_PKTINFO ***
2034 dnl *****************************
2035 AC_MSG_CHECKING(for IPV6_PKTINFO)
2036 AC_TRY_COMPILE([#include <netdb.h>], [
2037 int level = IPV6_PKTINFO;
2039 # Yes, we have it...
2041 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2046 dnl **********************************
2047 dnl *** Checks for IP_DONTFRAG ***
2048 dnl **********************************
2049 AC_MSG_CHECKING(for IP_DONTFRAG)
2050 AC_TRY_COMPILE([#include <netinet/in.h>], [
2051 int level = IP_DONTFRAG;
2053 # Yes, we have it...
2055 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2060 dnl **********************************
2061 dnl *** Checks for IP_DONTFRAGMENT ***
2062 dnl **********************************
2063 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2064 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2065 int level = IP_DONTFRAGMENT;
2067 # Yes, we have it...
2069 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2074 dnl **********************************
2075 dnl *** Checks for IP_MTU_DISCOVER ***
2076 dnl **********************************
2077 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2078 AC_TRY_COMPILE([#include <linux/in.h>], [
2079 int level = IP_MTU_DISCOVER;
2081 # Yes, we have it...
2083 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2088 dnl **********************************
2089 dnl *** Checks for IP_PMTUDISC_DO ***
2090 dnl **********************************
2091 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2092 AC_TRY_COMPILE([#include <linux/in.h>], [
2093 int level = IP_PMTUDISC_DO;
2095 # Yes, we have it...
2097 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2102 dnl *********************************
2103 dnl *** Check for struct ip_mreqn ***
2104 dnl *********************************
2105 AC_MSG_CHECKING(for struct ip_mreqn)
2106 AC_TRY_COMPILE([#include <netinet/in.h>], [
2107 struct ip_mreqn mreq;
2108 mreq.imr_address.s_addr = 0;
2110 # Yes, we have it...
2112 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2114 # We'll just have to try and use struct ip_mreq
2116 AC_MSG_CHECKING(for struct ip_mreq)
2117 AC_TRY_COMPILE([#include <netinet/in.h>], [
2118 struct ip_mreq mreq;
2119 mreq.imr_interface.s_addr = 0;
2121 # Yes, we have it...
2123 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2125 # No multicast support
2130 dnl **********************************
2131 dnl *** Check for getaddrinfo ***
2132 dnl **********************************
2133 AC_MSG_CHECKING(for getaddrinfo)
2138 getaddrinfo(NULL,NULL,NULL,NULL);
2140 # Yes, we have it...
2142 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2147 dnl **********************************
2148 dnl *** Check for gethostbyname2_r ***
2149 dnl **********************************
2150 AC_MSG_CHECKING(for gethostbyname2_r)
2156 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2158 # Yes, we have it...
2160 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2165 dnl **********************************
2166 dnl *** Check for gethostbyname2 ***
2167 dnl **********************************
2168 AC_MSG_CHECKING(for gethostbyname2)
2173 gethostbyname2(NULL,0);
2175 # Yes, we have it...
2177 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2182 dnl **********************************
2183 dnl *** Check for gethostbyname ***
2184 dnl **********************************
2185 AC_MSG_CHECKING(for gethostbyname)
2190 gethostbyname(NULL);
2192 # Yes, we have it...
2194 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2199 dnl **********************************
2200 dnl *** Check for getprotobyname ***
2201 dnl **********************************
2202 AC_MSG_CHECKING(for getprotobyname)
2207 getprotobyname(NULL);
2209 # Yes, we have it...
2211 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2216 dnl **********************************
2217 dnl *** Check for getnameinfo ***
2218 dnl **********************************
2219 AC_MSG_CHECKING(for getnameinfo)
2224 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2226 # Yes, we have it...
2228 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2234 dnl **********************************
2235 dnl *** Check for inet_ntop ***
2236 dnl **********************************
2237 AC_MSG_CHECKING(for inet_ntop)
2240 #include <arpa/inet.h>
2242 inet_ntop (0, NULL, NULL, 0);
2244 # Yes, we have it...
2246 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2251 dnl *****************************
2252 dnl *** Checks for libnsl ***
2253 dnl *****************************
2254 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2256 AC_CHECK_FUNCS(inet_pton inet_aton)
2258 dnl *****************************
2259 dnl *** Checks for libxnet ***
2260 dnl *****************************
2263 AC_MSG_CHECKING(for Solaris XPG4 support)
2264 if test -f /usr/lib/libxnet.so; then
2265 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2266 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2267 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2274 if test "$GCC" = "yes"; then
2275 CFLAGS="$CFLAGS -Wno-char-subscripts"
2280 dnl *****************************
2281 dnl *** Checks for libpthread ***
2282 dnl *****************************
2283 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2284 # and libpthread does not exist
2288 dnl Haiku has pthread in libroot (libc equiv)
2289 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2292 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2295 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2298 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2301 AC_CHECK_HEADERS(pthread.h)
2302 AC_CHECK_HEADERS(pthread_np.h)
2303 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2304 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_setname_np pthread_cond_timedwait_relative_np)
2305 AC_CHECK_FUNCS(pthread_kill)
2306 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2307 AC_TRY_COMPILE([ #include <pthread.h>], [
2308 pthread_mutexattr_t attr;
2309 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2314 AC_ERROR(Posix system lacks support for recursive mutexes)
2316 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2317 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2318 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2320 dnl **********************************
2321 dnl *** Check for mincore ***
2322 dnl **********************************
2323 AC_MSG_CHECKING(for mincore)
2326 #include <sys/types.h>
2327 #include <sys/mman.h>
2329 mincore(NULL, 0, NULL);
2331 # Yes, we have it...
2333 AC_DEFINE(HAVE_MINCORE, 1, [Have mincore])
2338 dnl ***********************************
2339 dnl *** Checks for working __thread ***
2340 dnl ***********************************
2341 AC_MSG_CHECKING(for working __thread)
2342 if test "x$with_tls" != "x__thread"; then
2343 AC_MSG_RESULT(disabled)
2344 elif test "x$cross_compiling" = "xyes"; then
2345 AC_MSG_RESULT(cross compiling, assuming yes)
2348 #if defined(__APPLE__) && defined(__clang__)
2349 #error "__thread does not currently work with clang on Mac OS X"
2352 #include <pthread.h>
2354 static int res1, res2;
2356 void thread_main (void *arg)
2371 pthread_create (&t1, NULL, thread_main, 1);
2372 pthread_create (&t2, NULL, thread_main, 2);
2374 pthread_join (t1, NULL);
2375 pthread_join (t2, NULL);
2377 return !(res1 + res2 == 2);
2387 dnl **************************************
2388 dnl *** Checks for working sigaltstack ***
2389 dnl **************************************
2390 AC_MSG_CHECKING(for working sigaltstack)
2391 if test "x$with_sigaltstack" != "xyes"; then
2392 AC_MSG_RESULT(disabled)
2393 elif test "x$cross_compiling" = "xyes"; then
2394 AC_MSG_RESULT(cross compiling, assuming yes)
2401 #include <pthread.h>
2402 #include <sys/wait.h>
2403 #if defined(__FreeBSD__) || defined(__NetBSD__)
2404 #define SA_STACK SA_ONSTACK
2407 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2412 volatile char*__ptr = NULL;
2414 loop (void *ignored)
2423 struct sigaction sa;
2426 pthread_attr_t attr;
2428 sa.sa_sigaction = sigsegv_signal_handler;
2429 sigemptyset (&sa.sa_mask);
2430 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2431 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2432 perror ("sigaction");
2436 /* x86 darwin deliver segfaults using SIGBUS */
2437 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2438 perror ("sigaction");
2441 sas.ss_sp = malloc (SIGSTKSZ);
2442 sas.ss_size = SIGSTKSZ;
2444 if (sigaltstack (&sas, NULL) == -1) {
2445 perror ("sigaltstack");
2449 pthread_attr_init (&attr);
2450 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2451 printf ("pthread_create\n");
2475 for (i = 0; i < 300; ++i) {
2476 waitpid (son, &status, WNOHANG);
2477 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2482 kill (son, SIGKILL);
2488 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2495 dnl ********************************
2496 dnl *** Checks for semaphore lib ***
2497 dnl ********************************
2498 # 'Real Time' functions on Solaris
2499 # posix4 on Solaris 2.6
2500 # pthread (first!) on Linux
2501 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2503 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2504 AC_CHECK_FUNCS(shm_open)
2506 dnl ********************************
2507 dnl *** Checks for timezone stuff **
2508 dnl ********************************
2509 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2515 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2516 if test $ac_cv_struct_tm_gmtoff = yes; then
2517 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2519 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2524 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2525 if test $ac_cv_var_timezone = yes; then
2526 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2528 AC_ERROR(unable to find a way to determine timezone)
2532 dnl *********************************
2533 dnl *** Checks for math functions ***
2534 dnl *********************************
2535 AC_SEARCH_LIBS(sqrtf, m)
2536 if test "x$has_broken_apple_cpp" != "xyes"; then
2537 AC_CHECK_FUNCS(finite, , AC_MSG_CHECKING(for finite in math.h)
2538 AC_TRY_LINK([#include <math.h>],
2540 AC_DEFINE(HAVE_FINITE, 1, [Have finite in -lm]) AC_MSG_RESULT(yes),
2543 AC_CHECK_FUNCS(isfinite, , AC_MSG_CHECKING(for isfinite in math.h)
2544 AC_TRY_LINK([#include <math.h>],
2546 AC_DEFINE(HAVE_ISFINITE, 1, [Have isfinite]) AC_MSG_RESULT(yes),
2549 dnl ****************************************************************
2550 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2551 dnl *** have it in the library (duh)) ***
2552 dnl ****************************************************************
2553 AC_CHECK_FUNCS(poll)
2555 dnl *************************
2556 dnl *** Check for signbit ***
2557 dnl *************************
2558 AC_MSG_CHECKING(for signbit)
2559 AC_TRY_LINK([#include <math.h>], [
2560 int s = signbit(1.0);
2563 AC_DEFINE(HAVE_SIGNBIT, 1, [Have signbit])
2568 dnl **********************************
2570 dnl **********************************
2571 AC_CHECK_HEADERS(sys/epoll.h)
2573 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2574 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2575 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2580 AC_CHECK_HEADERS(sys/event.h)
2581 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2583 dnl **************************************
2584 dnl * Darwin has a race that prevents us from using reliably:
2585 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2586 dnl * Since kqueue is mostly used for scaling large web servers,
2587 dnl * and very few folks run Mono on large web servers on OSX, falling
2589 dnl **************************************
2590 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2591 if test "x$host_darwin" = "xno"; then
2592 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2596 dnl ******************************
2597 dnl *** Checks for SIOCGIFCONF ***
2598 dnl ******************************
2599 AC_CHECK_HEADERS(sys/ioctl.h)
2600 AC_CHECK_HEADERS(net/if.h, [], [],
2602 #ifdef HAVE_SYS_TYPES_H
2603 # include <sys/types.h>
2605 #ifdef HAVE_SYS_SOCKET_H
2606 # include <sys/socket.h>
2609 AC_MSG_CHECKING(for ifreq)
2612 #include <sys/ioctl.h>
2620 x = (void *) &ifr->ifr_addr;
2623 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2627 dnl **********************************
2628 dnl *** Checks for sin_len ***
2629 dnl **********************************
2630 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2632 #include <netinet/in.h>
2634 struct sockaddr_in saddr;
2635 saddr.sin_len = sizeof (saddr);
2638 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2642 dnl **********************************
2643 dnl *** Checks for sin6_len ***
2644 dnl **********************************
2645 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2647 #include <netinet/in.h>
2649 struct sockaddr_in6 saddr6;
2650 saddr6.sin6_len = sizeof (saddr6);
2653 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2657 dnl **********************************
2658 dnl *** Check for getifaddrs ***
2659 dnl **********************************
2660 AC_MSG_CHECKING(for getifaddrs)
2663 #include <sys/types.h>
2664 #include <sys/socket.h>
2665 #include <ifaddrs.h>
2669 # Yes, we have it...
2671 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2675 dnl **********************************
2676 dnl *** Check for if_nametoindex ***
2677 dnl **********************************
2678 AC_MSG_CHECKING(for if_nametoindex)
2681 #include <sys/types.h>
2682 #include <sys/socket.h>
2685 if_nametoindex(NULL);
2687 # Yes, we have it...
2689 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2693 dnl **********************************
2694 dnl *** Check for access ***
2695 dnl **********************************
2696 AC_MSG_CHECKING(for access)
2702 # Yes, we have it...
2704 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2709 dnl **********************************
2710 dnl *** Checks for proclib ***
2711 dnl **********************************
2712 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.)])
2713 dnl **********************************
2714 dnl *** Checks for MonoPosixHelper ***
2715 dnl **********************************
2716 AC_CHECK_HEADERS(checklist.h)
2717 AC_CHECK_HEADERS(pathconf.h)
2718 AC_CHECK_HEADERS(fstab.h)
2719 AC_CHECK_HEADERS(attr/xattr.h)
2720 AC_CHECK_HEADERS(sys/extattr.h)
2721 AC_CHECK_HEADERS(sys/sendfile.h)
2722 AC_CHECK_HEADERS(sys/statvfs.h)
2723 AC_CHECK_HEADERS(sys/statfs.h)
2724 AC_CHECK_HEADERS(sys/vfstab.h)
2725 AC_CHECK_HEADERS(sys/xattr.h)
2726 AC_CHECK_HEADERS(sys/mman.h)
2727 AC_CHECK_HEADERS(sys/param.h)
2728 AC_CHECK_HEADERS(sys/mount.h, [], [],
2730 #ifdef HAVE_SYS_PARAM_H
2731 # include <sys/param.h>
2734 AC_CHECK_HEADERS(sys/mount.h)
2735 AC_CHECK_FUNCS(confstr)
2736 AC_CHECK_FUNCS(seekdir telldir)
2737 AC_CHECK_FUNCS(getdomainname)
2738 AC_CHECK_FUNCS(setdomainname)
2739 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2740 AC_CHECK_FUNCS(setgroups)
2741 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2742 AC_CHECK_FUNCS(getfsstat)
2743 AC_CHECK_FUNCS(lutimes futimes)
2744 AC_CHECK_FUNCS(mremap)
2745 AC_CHECK_FUNCS(remap_file_pages)
2746 AC_CHECK_FUNCS(posix_fadvise)
2747 AC_CHECK_FUNCS(posix_fallocate)
2748 AC_CHECK_FUNCS(posix_madvise)
2749 AC_CHECK_FUNCS(vsnprintf)
2750 AC_CHECK_FUNCS(sendfile)
2751 AC_CHECK_FUNCS(gethostid sethostid)
2752 AC_CHECK_FUNCS(sethostname)
2753 AC_CHECK_FUNCS(statfs)
2754 AC_CHECK_FUNCS(fstatfs)
2755 AC_CHECK_FUNCS(statvfs)
2756 AC_CHECK_FUNCS(fstatvfs)
2757 AC_CHECK_FUNCS(stime)
2758 AC_CHECK_FUNCS(strerror_r)
2759 AC_CHECK_FUNCS(ttyname_r)
2760 AC_CHECK_FUNCS(psignal)
2761 AC_CHECK_FUNCS(getlogin_r)
2762 AC_CHECK_FUNCS(lockf)
2763 AC_CHECK_FUNCS(swab)
2764 AC_CHECK_FUNCS(setusershell endusershell)
2765 AC_CHECK_FUNCS(futimens utimensat)
2766 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2767 AC_CHECK_FUNCS(readv writev preadv pwritev)
2768 AC_CHECK_FUNCS(setpgid)
2769 AC_CHECK_FUNCS(system)
2770 AC_CHECK_FUNCS(fork execv execve)
2771 AC_CHECK_FUNCS(accept4)
2772 AC_CHECK_FUNCS(localtime_r)
2773 AC_CHECK_FUNCS(mkdtemp)
2774 AC_CHECK_SIZEOF(size_t)
2775 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2776 [#include <sys/types.h>
2777 #include <sys/stat.h>
2778 #include <unistd.h>])
2779 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2780 [#include <sys/types.h>
2781 #include <sys/stat.h>
2782 #include <unistd.h>])
2783 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2784 [#include <sys/time.h>])
2785 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2786 [#include <sys/socket.h>])
2787 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2788 [#include <unistd.h>
2789 #include <fcntl.h>])
2790 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2791 [#include <sys/uio.h>])
2792 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2793 [#include <sys/socket.h>])
2794 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2795 [#include <sys/poll.h>])
2796 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2797 [#include <sys/socket.h>])
2798 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2799 [#include <sys/socket.h>])
2800 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2801 [#include <netinet/in.h>])
2802 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2803 [#include <netinet/in.h>])
2804 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2805 [#include <sys/un.h>])
2806 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2807 [#include <sys/types.h>
2808 #include <sys/stat.h>
2809 #include <unistd.h>])
2810 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2811 [#include <time.h>])
2812 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2813 [#include <sys/time.h>
2814 #include <sys/types.h>
2815 #include <utime.h>])
2816 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2817 [#include <sys/time.h>])
2818 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2819 [#include <sys/types.h>
2820 #include <utime.h>])
2822 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2823 [#include <sys/types.h>
2824 #include <dirent.h>])
2826 [struct passwd.pw_gecos],,,
2827 [#include <sys/types.h>
2830 [struct statfs.f_flags],,,
2831 [#include <sys/types.h>
2832 #include <sys/vfs.h>])
2834 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
2835 [#include <sys/types.h>
2836 #include <sys/stat.h>
2837 #include <unistd.h>])
2839 dnl Favour xattr through glibc, but use libattr if we have to
2840 AC_CHECK_FUNC(lsetxattr, ,
2841 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
2845 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
2847 [struct kinfo_proc.kp_proc],,,
2848 [#include <sys/types.h>
2849 #include <sys/param.h>
2850 #include <sys/sysctl.h>
2851 #include <sys/proc.h>
2854 dnl *********************************
2855 dnl *** Checks for Windows compilation ***
2856 dnl *********************************
2857 AC_CHECK_HEADERS(sys/time.h)
2858 AC_CHECK_HEADERS(sys/param.h)
2859 AC_CHECK_HEADERS(dirent.h)
2861 dnl ******************************************
2862 dnl *** Checks for OSX and iOS compilation ***
2863 dnl ******************************************
2864 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
2866 dnl *********************************
2867 dnl *** Check for Console 2.0 I/O ***
2868 dnl *********************************
2869 AC_CHECK_HEADERS([curses.h])
2870 AC_CHECK_HEADERS([term.h], [], [],
2875 AC_CHECK_HEADERS([termios.h])
2877 dnl *********************************
2878 dnl *** Checks for random ***
2879 dnl *********************************
2880 if test x$host_darwin = xno; then
2881 AC_CHECK_HEADERS(sys/random.h)
2882 AC_CHECK_FUNCS(getrandom getentropy)
2885 dnl *********************************
2886 dnl *** Checks for Windows compilation ***
2887 dnl *********************************
2888 AC_CHECK_HEADERS(winternl.h)
2890 jdk_headers_found=no
2891 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
2892 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
2893 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
2894 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
2895 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
2896 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
2897 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
2899 dnl *********************************
2900 dnl *** Check for struct ip_mreqn ***
2901 dnl *********************************
2902 AC_MSG_CHECKING(for struct ip_mreqn)
2903 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2904 struct ip_mreqn mreq;
2905 mreq.imr_address.s_addr = 0;
2907 # Yes, we have it...
2909 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
2911 # We'll just have to try and use struct ip_mreq
2913 AC_MSG_CHECKING(for struct ip_mreq)
2914 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
2915 struct ip_mreq mreq;
2916 mreq.imr_interface.s_addr = 0;
2918 # Yes, we have it...
2920 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
2922 # No multicast support
2927 dnl **********************************
2928 dnl *** Check for getaddrinfo ***
2929 dnl **********************************
2930 AC_MSG_CHECKING(for getaddrinfo)
2933 #include <winsock2.h>
2934 #include <ws2tcpip.h>
2936 getaddrinfo(NULL,NULL,NULL,NULL);
2938 # Yes, we have it...
2940 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2945 dnl **********************************
2946 dnl *** Check for gethostbyname ***
2947 dnl **********************************
2948 AC_MSG_CHECKING(for gethostbyname)
2951 #include <winsock2.h>
2952 #include <ws2tcpip.h>
2954 gethostbyname(NULL);
2956 # Yes, we have it...
2958 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2963 dnl **********************************
2964 dnl *** Check for getprotobyname ***
2965 dnl **********************************
2966 AC_MSG_CHECKING(for getprotobyname)
2969 #include <winsock2.h>
2970 #include <ws2tcpip.h>
2972 getprotobyname(NULL);
2974 # Yes, we have it...
2976 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2981 dnl **********************************
2982 dnl *** Check for getnameinfo ***
2983 dnl **********************************
2984 AC_MSG_CHECKING(for getnameinfo)
2987 #include <winsock2.h>
2988 #include <ws2tcpip.h>
2990 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2992 # Yes, we have it...
2994 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2999 dnl **********************************
3000 dnl *** Check for inet_ntop ***
3001 dnl **********************************
3002 AC_MSG_CHECKING(for inet_ntop)
3005 #include <winsock2.h>
3006 #include <ws2tcpip.h>
3008 inet_ntop (0, NULL, NULL, 0);
3010 # Yes, we have it...
3012 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3017 dnl **********************************
3018 dnl *** Check for inet_pton ***
3019 dnl **********************************
3020 AC_MSG_CHECKING(for inet_pton)
3023 #include <winsock2.h>
3024 #include <ws2tcpip.h>
3029 inet_pton (0, NULL, NULL);
3031 # Yes, we have it...
3033 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3038 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3039 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3040 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3041 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3042 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3043 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3044 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3048 AC_MSG_CHECKING(for socklen_t)
3050 #include <sys/types.h>
3051 #include <sys/socket.h>
3055 ac_cv_c_socklen_t=yes
3056 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3062 AC_MSG_CHECKING(for array element initializer support)
3063 AC_TRY_COMPILE([#include <sys/socket.h>], [
3064 const int array[] = {[1] = 2,};
3066 # Yes, we have it...
3068 AC_DEFINE(HAVE_ARRAY_ELEM_INIT,1,[Supports C99 array initialization])
3070 # We'll have to use signals
3074 AC_CHECK_FUNCS(trunc, , AC_MSG_CHECKING(for trunc in math.h)
3075 # Simply calling trunc (0.0) is no good since gcc will optimize the call away
3076 AC_TRY_LINK([#include <math.h>],
3077 [ static void *p = &trunc; ],
3079 AC_DEFINE(HAVE_TRUNC)
3085 if test "x$ac_cv_truncl" != "xyes"; then
3086 AC_CHECK_LIB(sunmath, aintl, [ AC_DEFINE(HAVE_AINTL, 1, [Has the 'aintl' function]) LIBS="$LIBS -lsunmath"])
3089 AC_CHECK_FUNCS(execvp)
3091 dnl ****************************
3092 dnl *** Look for /dev/random ***
3093 dnl ****************************
3095 AC_MSG_CHECKING([if usage of random device is requested])
3096 AC_ARG_ENABLE(dev-random,
3097 [ --disable-dev-random disable the use of the random device (enabled by default)],
3098 try_dev_random=$enableval, try_dev_random=yes)
3100 AC_MSG_RESULT($try_dev_random)
3104 dnl IBM i does not have /dev/random, use unblocking only
3107 NAME_DEV_RANDOM="/dev/urandom"
3110 dnl Win32 does not have /dev/random, they have their own method...
3112 *-mingw*|*-*-cygwin*)
3113 ac_cv_have_dev_random=no
3116 dnl Everywhere else, it's /dev/random
3119 NAME_DEV_RANDOM="/dev/random"
3123 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3125 dnl Now check if the device actually exists
3127 if test "x$try_dev_random" = "xyes"; then
3128 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3129 [if test -r "$NAME_DEV_RANDOM" ; then
3130 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3131 if test "x$ac_cv_have_dev_random" = "xyes"; then
3132 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3135 AC_MSG_CHECKING(for random device)
3136 ac_cv_have_dev_random=no
3137 AC_MSG_RESULT(has been disabled)
3140 if test "x$host_win32" = "xyes"; then
3141 AC_DEFINE(HAVE_CRYPT_RNG)
3144 if test "x$ac_cv_have_dev_random" = "xno" \
3145 && test "x$host_win32" = "xno"; then
3148 *** A system-provided entropy source was not found on this system.
3149 *** Because of this, the System.Security.Cryptography random number generator
3150 *** will throw a NotImplemented exception.
3152 *** If you are seeing this message, and you know your system DOES have an
3153 *** entropy collection in place, please report an issue on GitHub and
3154 *** provide information about the system and how to access the random device.
3156 *** Otherwise you can install either egd or prngd and set the environment
3157 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3161 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)
3163 AC_MSG_CHECKING([if big-arrays are to be enabled])
3164 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)
3165 if test "x$enable_big_arrays" = "xyes" ; then
3166 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3167 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3169 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3172 AC_MSG_RESULT($enable_big_arrays)
3178 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3180 if test "x$enable_dtrace" = "xyes"; then
3181 if test "x$has_dtrace" = "xno"; then
3182 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3184 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3185 if test "x$DTRACE" = "xno"; then
3186 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3188 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3189 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3195 if test "x$enable_dtrace" = "xyes"; then
3196 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3198 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3201 DTRACEFLAGS="-arch ppc64"
3204 DTRACEFLAGS="-arch x86_64"
3213 DTRACEFLAGS="-arch ppc"
3216 DTRACEFLAGS="-arch i386"
3223 AC_SUBST(DTRACEFLAGS)
3229 AC_CHECK_HEADERS([sys/sdt.h])
3231 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3232 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3234 dnl **************************
3235 dnl *** AOT cross offsets ***
3236 dnl **************************
3238 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3239 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3245 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3246 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3247 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)
3248 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3250 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3252 if test "x$enable_llvm" = "xdefault"; then
3253 enable_llvm=$enable_llvm_default
3256 if test "x$enable_llvm" = "xyes"; then
3257 if test "x$with_llvm" != "x"; then
3258 LLVM_CONFIG=$with_llvm/bin/llvm-config
3259 if test x$host_win32 = xyes; then
3260 LLVM_CONFIG=$LLVM_CONFIG.exe
3262 if test ! -x $LLVM_CONFIG; then
3263 AC_MSG_ERROR([LLVM executable $LLVM_CONFIG not found.])
3266 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no)
3267 if test "x$LLVM_CONFIG" = "xno"; then
3268 AC_MSG_ERROR([llvm-config not found.])
3272 llvm_codegen="x86codegen"
3273 LLVM_ARCH_LIBS="-lLLVMX86Disassembler -lLLVMX86CodeGen -lLLVMX86AsmParser -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils"
3276 llvm_codegen="armcodegen"
3277 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3280 llvm_codegen="aarch64codegen"
3281 LLVM_ARCH_LIBS="-lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter"
3284 llvm_codegen="powerpccodegen"
3285 LLVM_ARCH_LIBS="-lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter"
3289 if test "x$host_win32" = "xno"; then
3291 # Should be something like '2.6' or '2.7svn'
3292 llvm_version=`$LLVM_CONFIG --version`
3293 llvm_api_version=`$LLVM_CONFIG --mono-api-version 2>/dev/null`
3294 AC_MSG_CHECKING(LLVM version)
3295 AC_MSG_RESULT($llvm_version $llvm_api_version)
3296 if echo $llvm_version | grep -q 'mono'; then
3297 if test "x$enable_llvm_version_check" = "xyes"; then
3298 if test "$llvm_version" != "$expected_llvm_version"; then
3299 AC_MSG_ERROR([Expected llvm version $expected_llvm_version, but llvm-config --version returned $llvm_version"])
3303 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.])
3306 # The output of --cflags seems to include optimizations flags too
3307 if test $llvm_api_version -gt 100; then
3308 # The --cflags argument includes all kinds of warnings -pendantic etc.
3309 LLVM_CFLAGS="-I$with_llvm/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3310 LLVM_CXXFLAGS="-I$with_llvm/include -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
3312 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'`
3313 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'`
3315 # LLVM is compiled with -fno-rtti, so we need this too, since our classes inherit
3316 # from LLVM classes.
3317 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -fno-rtti -fexceptions"
3318 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
3319 # This might include empty lines
3320 LLVM_SYSTEM_LIBS=`$LLVM_CONFIG --system-libs 2>/dev/null | grep -- -`
3321 llvm_jit_supported=yes
3322 llvm_jit_libs="jit mcjit $llvm_codegen"
3323 if test "x$host" != "x$target"; then
3324 # No need for jit libs
3325 llvm_jit_supported=no
3327 elif test $llvm_api_version -gt 100; then
3328 llvm_jit_libs="orcjit $llvm_codegen"
3330 LLVM_LIBS=`$LLVM_CONFIG --libs analysis core bitwriter $llvm_jit_libs`
3331 if test "x$LLVM_LIBS" = "x"; then
3332 echo "$LLVM_CONFIG --libs failed."
3335 LLVM_LIBS="$LLVM_LIBS $LLVM_LDFLAGS $LLVM_SYSTEM_LIBS"
3336 # The c++ standard library used by llvm doesn't show up in $LLVM_SYSTEM_LIBS so add it manually
3337 if echo $LLVM_CXXFLAGS | grep -q -- '-stdlib=libc++'; then
3338 LLVM_LIBS="$LLVM_LIBS -lc++"
3340 LLVM_LIBS="$LLVM_LIBS -lstdc++"
3343 expected_llvm_version="3.4svn-mono-mono/e656cac"
3346 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"
3347 LLVM_CXXFLAGS="$LLVM_CFLAGS -std=gnu++11 -fvisibility-inlines-hidden -fno-rtti -Woverloaded-virtual -Wcast-qual"
3348 LLVM_LDFLAGS="-L$with_llvm/lib"
3349 LLVM_SYSTEM_LIBS="-lshell32 -lpsapi -limagehlp -ldbghelp -lm"
3350 LLVM_LIBS="-lLLVMLTO -lLLVMObjCARCOpts -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter \
3351 -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMSelectionDAG -lLLVMAsmPrinter \
3352 -lLLVMMCDisassembler -lLLVMJIT -lLLVMAnalysis -lLLVMTarget \
3353 -lLLVMIRReader -lLLVMAsmParser -lLLVMLineEditor -lLLVMMCAnalysis -lLLVMInstrumentation \
3354 -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
3355 -lLLVMipa -lLLVMAnalysis -lLLVMProfileData -lLLVMMCJIT -lLLVMTarget -lLLVMRuntimeDyld \
3356 -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMExecutionEngine -lLLVMMC -lLLVMCore \
3357 -lLLVMSupport -lstdc++"
3358 LLVM_LIBS="$LLVM_LIBS $LLVM_ARCH_LIBS $LLVM_SYSTEM_LIBS"
3360 llvm_config_path=$with_llvm/include/llvm/Config/llvm-config.h
3361 llvm_api_version=`awk '/MONO_API_VERSION/ { print $3 }' $llvm_config_path`
3364 if test "x$llvm_api_version" = "x"; then
3365 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=0"
3366 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=0"
3368 LLVM_CFLAGS="$LLVM_CFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3369 LLVM_CXXFLAGS="$LLVM_CXXFLAGS -DLLVM_API_VERSION=$llvm_api_version"
3372 AC_DEFINE_UNQUOTED(LLVM_VERSION, "$llvm_version", [Full version of LLVM libraries])
3374 AC_SUBST(LLVM_CFLAGS)
3375 AC_SUBST(LLVM_CXXFLAGS)
3377 AC_SUBST(LLVM_LDFLAGS)
3378 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3381 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes])
3382 if test "x$enable_loadedllvm" = "xyes"; then
3383 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3385 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes])
3387 if test "x$enable_llvm" = "xyes"; then
3388 enable_llvm_runtime=yes
3390 if test "x$enable_llvm_runtime" = "xyes"; then
3391 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3393 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes])
3396 ACCESS_UNALIGNED="yes"
3400 SQLITE="libsqlite.so.0"
3401 SQLITE3="libsqlite3.so.0"
3403 GDKX11="libgdk-x11-2.0.so.0"
3404 GTKX11="libgtk-x11-2.0.so.0"
3405 XINERAMA="libXinerama.so.1"
3407 sizeof_register="SIZEOF_VOID_P"
3410 boehm_supported=true
3414 if test "x$enable_wasm" = "xyes"; then
3418 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
3419 AC_DEFINE(HOST_WASM, 1, [Host wasm])
3431 ACCESS_UNALIGNED="no"
3433 AC_MSG_CHECKING(for mips n32)
3435 #if _MIPS_SIM != _ABIN32
3452 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3457 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
3458 # int astruct __attribute__ ((visibility ("hidden")));
3461 # void *p = &astruct;
3463 # gcc -fPIC --shared -o libfoo.so foo.c
3465 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
3466 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
3467 have_visibility_hidden=no
3470 have_visibility_hidden=no
3479 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3486 openbsd*|freebsd*|kfreebsd-gnu*)
3493 x86_64-*-* | amd64-*-*)
3496 if test "x$ac_cv_sizeof_void_p" = "x4"; then
3497 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3504 BTLS_PLATFORM=x86_64
3505 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3510 BTLS_PLATFORM=x86_64
3511 boehm_supported=false
3513 openbsd*|freebsd*|kfreebsd-gnu*)
3516 BTLS_PLATFORM=x86_64
3523 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3529 ACCESS_UNALIGNED="no"
3536 if test x"$GCC" = xyes; then
3537 # We don't support v8 cpus
3538 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
3540 if test x"$AR" = xfalse; then
3541 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
3544 *-mingw*|*-*-cygwin*)
3545 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
3546 have_visibility_hidden=no
3549 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
3550 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
3551 powerpc-*-freebsd* | powerpc-*-aix* | powerpc-*-os400* )
3552 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3554 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
3555 if ! (echo $CC | grep -q -- 'clang'); then
3556 CFLAGS="$CFLAGS -mminimal-toc"
3560 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
3566 BTLS_PLATFORM=powerpc
3567 dnl on AIX/PASE, shared libraries can be inside archives
3568 dnl if they are, we specify them by lib.a(lib.so)
3569 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
3570 LIBC="libc.a(shr_64.o)"
3571 INTL="libintl.a(libintl.so.8)"
3575 BTLS_PLATFORM=powerpc
3584 ACCESS_UNALIGNED="no"
3585 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3591 ACCESS_UNALIGNED="no"
3592 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3597 ACCESS_UNALIGNED="no"
3599 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3602 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3604 arm*-linux*-gnueabi)
3605 BTLS_PLATFORM=armsoft
3612 ACCESS_UNALIGNED="no"
3613 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3616 # https://lkml.org/lkml/2012/7/15/133
3619 boehm_supported=false
3622 BTLS_PLATFORM=aarch64
3623 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
3628 ACCESS_UNALIGNED="yes"
3631 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
3637 if test "x$host" != "x$target"; then
3638 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
3640 enable_support_build=no
3646 ACCESS_UNALIGNED="no"
3647 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3648 # Can't use tls, since it depends on the runtime detection of tls offsets
3649 # in mono-compiler.h
3654 AC_DEFINE(TARGET_WATCHOS, 1, [...])
3658 powerpc64-ps3-linux-gnu)
3660 arch_target=powerpc64
3661 AC_DEFINE(TARGET_PS3, 1, [...])
3662 # It would be better to just use TARGET_POWERPC64, but lots of code already
3664 AC_DEFINE(__mono_ppc64__, 1, [...])
3665 AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
3667 target_byte_order=G_BIG_ENDIAN
3669 powerpc64-xbox360-linux-gnu)
3671 arch_target=powerpc64
3672 AC_DEFINE(TARGET_XBOX360, 1, [...])
3673 # It would be better to just use TARGET_POWERPC64, but lots of code already
3676 target_byte_order=G_BIG_ENDIAN
3681 AC_DEFINE(TARGET_ARM, 1, [...])
3682 ACCESS_UNALIGNED="no"
3683 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3684 # Can't use tls, since it depends on the runtime detection of tls offsets
3685 # in mono-compiler.h
3689 armv7l-unknown-linux-gnueabi*)
3691 CPPFLAGS="$CPPFLAGS"
3693 armv5-*-linux-androideabi*)
3694 AC_DEFINE(TARGET_ANDROID, 1, [...])
3695 CPPFLAGS="$CPPFLAGS"
3697 *-linux-androideabi*)
3698 AC_DEFINE(TARGET_ANDROID, 1, [...])
3699 CPPFLAGS="$CPPFLAGS"
3706 AC_DEFINE(TARGET_ARM, 1, [...])
3707 ACCESS_UNALIGNED="no"
3708 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
3709 # Can't use tls, since it depends on the runtime detection of tls offsets
3710 # in mono-compiler.h
3717 AC_DEFINE(TARGET_X86, 1, [...])
3718 CPPFLAGS="$CPPFLAGS"
3719 # Can't use tls, since it depends on the runtime detection of tls offsets
3720 # in mono-compiler.h
3726 AC_DEFINE(TARGET_ANDROID, 1, [...])
3733 AC_DEFINE(TARGET_AMD64, 1, [...])
3734 CPPFLAGS="$CPPFLAGS"
3735 # Can't use tls, since it depends on the runtime detection of tls offsets
3736 # in mono-compiler.h
3742 AC_DEFINE(TARGET_ANDROID, 1, [...])
3749 AC_DEFINE(TARGET_AMD64, 1, [...])
3750 AC_DEFINE(TARGET_PS4, 1, [...])
3751 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
3752 CPPFLAGS="$CPPFLAGS"
3753 # Can't use tls, since it depends on the runtime detection of tls offsets
3754 # in mono-compiler.h
3762 AC_DEFINE(TARGET_ARM64, 1, [...])
3763 CPPFLAGS="$CPPFLAGS"
3764 # Can't use tls, since it depends on the runtime detection of tls offsets
3765 # in mono-compiler.h
3770 AC_DEFINE(TARGET_ANDROID, 1, [...])
3778 AC_MSG_ERROR([Cross compiling is not supported for target $target])
3784 AC_DEFINE(TARGET_X86, 1, [...])
3787 AC_DEFINE(TARGET_AMD64, 1, [...])
3790 AC_DEFINE(TARGET_ARM, 1, [...])
3793 AC_DEFINE(TARGET_ARM64, 1, [...])
3796 AC_DEFINE(TARGET_POWERPC, 1, [...])
3799 AC_DEFINE(TARGET_POWERPC, 1, [...])
3800 AC_DEFINE(TARGET_POWERPC64, 1, [...])
3803 AC_DEFINE(TARGET_S390X, 1, [...])
3806 AC_DEFINE(TARGET_MIPS, 1, [...])
3809 AC_DEFINE(TARGET_SPARC, 1, [...])
3812 AC_DEFINE(TARGET_SPARC64, 1, [...])
3818 AC_DEFINE(HOST_X86, 1, [...])
3821 AC_DEFINE(HOST_AMD64, 1, [...])
3824 AC_DEFINE(HOST_ARM, 1, [...])
3827 AC_DEFINE(HOST_ARM64, 1, [...])
3830 AC_DEFINE(HOST_POWERPC, 1, [...])
3833 AC_DEFINE(HOST_POWERPC, 1, [...])
3834 AC_DEFINE(HOST_POWERPC64, 1, [...])
3837 AC_DEFINE(HOST_S390X, 1, [...])
3840 AC_DEFINE(HOST_MIPS, 1, [...])
3843 AC_DEFINE(HOST_SPARC, 1, [...])
3846 AC_DEFINE(HOST_SPARC64, 1, [...])
3858 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
3859 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
3861 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
3863 if test "x$enable_vtune" = "xyes"; then
3864 if test "x$with_vtune" = "x"; then
3865 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
3867 VTUNE_PATH=$with_vtune
3869 VTUNE_INCLUDE=$VTUNE_PATH/include
3872 VTUNE_LIB=$VTUNE_PATH/lib32
3875 VTUNE_LIB=$VTUNE_PATH/lib64
3878 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
3881 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
3882 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
3884 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
3885 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
3888 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
3889 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
3891 AC_SUBST(VTUNE_LIBS)
3892 AC_SUBST(VTUNE_CFLAGS)
3894 dnl Use GCC atomic ops if they work on the target.
3895 if test x$GCC = "xyes"; then
3897 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64)
3898 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
3903 if test "x$target_mach" = "xyes"; then
3905 if test "x$TARGET_SYS" = "xWATCHOS"; then
3906 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
3907 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3908 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
3910 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
3911 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3912 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3913 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3916 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
3917 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
3918 #error fail this for ios
3921 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
3922 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
3923 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
3926 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
3927 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
3928 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
3933 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
3936 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
3938 if test "x$sizeof_register" = "x4"; then
3939 AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
3940 elif test "x$sizeof_register" = "x8"; then
3941 AC_DEFINE(SIZEOF_REGISTER,8,[size of machine integer registers])
3943 AC_DEFINE(SIZEOF_REGISTER,SIZEOF_VOID_P,[size of machine integer registers])
3946 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
3948 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
3949 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
3950 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
3951 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
3953 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
3956 if test "x$have_visibility_hidden" = "xyes"; then
3957 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
3960 if test "x$have_deprecated" = "xyes"; then
3961 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
3965 dnl Simple Generational checks (sgen)
3968 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
3969 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
3970 if test x$buildsgen = xyes; then
3971 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
3972 SGEN_DEFINES="-DHAVE_SGEN_GC"
3975 if test x$with_sgen_default_concurrent != xno; then
3976 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
3977 conc_gc_msg=" (concurrent by default)"
3980 if test "x$gc_msg" = "x"; then
3981 gc_msg="sgen$conc_gc_msg"
3983 gc_msg="sgen$conc_gc_msg and $gc_msg"
3986 AC_SUBST(SGEN_DEFINES)
3987 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
3989 jit_status="Building and using the JIT"
3997 INTL="libintl.dylib"
3998 SQLITE="libsqlite.0.dylib"
3999 SQLITE3="libsqlite3.0.dylib"
4001 GDKX11="libgdk-x11-2.0.dylib"
4002 GTKX11="libgtk-x11-2.0.dylib"
4007 SQLITE="libsqlite.so"
4008 SQLITE3="libsqlite3.so"
4018 SQLITE="libsqlite.so"
4019 SQLITE3="libsqlite3.so"
4024 SQLITE="libsqlite.so"
4025 SQLITE3="libsqlite3.so"
4029 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4030 AC_MSG_CHECKING(for the soname of libX11.so)
4031 for i in $x_libraries $dlsearch_path; do
4033 if test -f $i/libX11.so.$r; then
4040 if test "x$X11" = "xlibX11.so"; then
4041 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4049 ######################################
4051 ######################################
4055 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4056 if test x$GCC = xyes; then
4057 GNUC_UNUSED='__attribute__((__unused__))'
4058 GNUC_NORETURN='__attribute__((__noreturn__))'
4060 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4063 AC_SUBST(GNUC_PRETTY)
4064 AC_SUBST(GNUC_UNUSED)
4065 AC_SUBST(GNUC_NORETURN)
4066 AC_SUBST(BREAKPOINT)
4068 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4071 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4087 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4092 arm*-darwin*|aarch64*-*)
4093 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4096 ORDER=G_LITTLE_ENDIAN
4099 LDFLAGS="$LDFLAGS -ltextencoding"
4102 CFLAGS="$CFLAGS -pthread"
4103 LDFLAGS="$LDFLAGS -pthread"
4114 # Defined for all targets/platforms using classic Windows API support.
4115 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4116 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4118 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf strerror_r)
4119 AC_CHECK_FUNCS(getrlimit)
4120 AC_CHECK_FUNCS(fork execv execve)
4122 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4124 if test x$with_overridable_allocators = xyes; then
4125 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4126 AC_MSG_NOTICE([Overridable allocator support enabled])
4128 AC_MSG_NOTICE([Overridable allocator support disabled])
4132 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4133 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4134 # removed once support for 10.6 is dropped.
4136 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4138 if test x$target_osx = xyes; then
4139 AC_CHECK_FUNCS(getpwuid_r)
4140 elif test x$target_ios = xno; then
4141 AC_CHECK_FUNCS(strndup getpwuid_r)
4144 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4146 AC_SEARCH_LIBS(sqrtf, m)
4148 # nanosleep may not be part of libc, also search it in other libraries
4149 AC_SEARCH_LIBS(nanosleep, rt)
4151 AC_SEARCH_LIBS(dlopen, dl)
4152 old_ldflags="${LDFLAGS}"
4153 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4154 if test $lt_cv_prog_gnu_ld = yes; then
4155 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4158 *-*-aix*|*-*-os400*)
4161 dnl Try to use export-dynamic anyways
4162 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4166 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4167 if test $found_export_dynamic = no; then
4168 LDFLAGS="${old_ldflags}"
4171 AC_MSG_CHECKING(for varargs macros)
4173 int foo (int i, int j);
4174 #define bar(...) foo (1, __VA_ARGS__)
4178 ],have_iso_varargs=yes,have_iso_varargs=no)
4179 AC_MSG_RESULT($have_iso_varargs)
4180 G_HAVE_ISO_VARARGS=0
4181 if test "x$have_iso_varargs" = "xyes"; then
4182 G_HAVE_ISO_VARARGS=1
4184 AC_SUBST(G_HAVE_ISO_VARARGS)
4186 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)
4187 AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+=" -liconv -lcharset"])])
4188 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4189 AC_SUBST(HAVE_ALLOCA_H)
4191 # Get the exact type of size_t, not just its size.
4192 # This is so we can find an exact printf format among u, lu, llu, I64u.
4193 # To avoid warnings about slight mismatches.
4194 # C99 runtime "zu" dependency is being avoided here.
4196 # We have to compile as C++ because C is too lenient
4197 # and lets the wrong thing compile, with warnings.
4199 # Note: "zu" or ifdef <something> have the advantage
4200 # of producing installable "biarch" headers. i.e. one Mac header
4201 # for Mac/x86 and Mac/amd64.
4205 # Check long before int because it is the overwhelming Unix answer,
4206 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4208 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4210 AC_MSG_CHECKING(if size_t is unsigned long)
4211 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4213 unsigned long *a = (size_t*)0;
4216 AC_SUBST(GSIZE_FORMAT, '"%lu"')
4219 AC_MSG_CHECKING(if size_t is unsigned int)
4220 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4222 unsigned *a = (size_t*)0;
4225 AC_SUBST(GSIZE_FORMAT, '"%u"')
4227 # At this point the majority of systems have their answer,
4228 # and we descend into non-standard or new-standard territory.
4230 # Check __int64 first because I64 on some systems predates ll, enabling
4231 # new compiler/old runtime interop, and the types always have the same size.
4233 AC_MSG_CHECKING(if size_t is unsigned __int64)
4234 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4236 unsigned __int64 *a = (size_t*)0;
4239 AC_SUBST(GSIZE_FORMAT, '"%I64u"')
4242 AC_MSG_CHECKING(if size_t is unsigned long long)
4243 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4245 unsigned long long *a = (size_t*)0;
4248 AC_SUBST(GSIZE_FORMAT, '"%llu"')
4251 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4259 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4260 # This provides for an exact match with functions that
4261 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4262 # uintptr_t is not necessarily the same.
4264 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4265 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4267 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4277 AC_SUBST(GSIZE_FORMAT)
4280 # END OF EGLIB CHECKS
4283 AC_ARG_WITH([libgdiplus],
4284 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4285 [], [with_libgdiplus=installed])
4287 # default install location
4288 libgdiplus_install_loc=libgdiplus${libsuffix}
4291 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4295 case $with_libgdiplus in
4302 if test x$cross_compiling = xno; then
4303 if test x$host_darwin = xyes; then
4304 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4306 libgdiplus_install_loc=$a
4314 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4317 /*) # absolute path, assume it is an install location
4318 libgdiplus_loc=$with_libgdiplus
4319 libgdiplus_install_loc=$with_libgdiplus
4323 libgdiplus_loc=`pwd`/$with_libgdiplus
4326 AC_SUBST(libgdiplus_loc)
4327 AC_SUBST(libgdiplus_install_loc)
4329 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)
4330 if test "x$icall_symbol_map" = "xyes"; then
4331 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4334 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4335 if test "x$icall_export" = "xyes"; then
4336 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4339 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4340 if test "x$icall_tables" = "xno"; then
4341 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4344 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4346 if test "x$with_tls" = "x__thread"; then
4347 AC_DEFINE(HAVE_KW_THREAD, 1, [Have __thread keyword])
4348 # Pass the information to libgc
4349 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4350 AC_MSG_CHECKING(if the tls_model attribute is supported)
4351 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4354 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4360 if test ${TARGET} = ARM; then
4361 dnl ******************************************
4362 dnl *** Check to see what FPU is available ***
4363 dnl ******************************************
4364 AC_MSG_CHECKING(which FPU to use)
4367 # This is a bit tricky:
4369 # if (__ARM_PCS_VFP) {
4370 # /* mfloat-abi=hard == VFP with hard ABI */
4371 # } elif (!__SOFTFP__) {
4372 # /* mfloat-abi=softfp == VFP with soft ABI */
4374 # /* mfloat-abi=soft == no VFP */
4377 # The exception is iOS (w/ GCC) where none of the above
4378 # are defined (but iOS always uses the 'softfp' ABI).
4380 # No support for FPA.
4385 # iOS GCC always uses the 'softfp' ABI.
4386 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4390 # Are we using the 'hard' ABI?
4391 if test x$fpu = xNONE; then
4392 AC_TRY_COMPILE([], [
4393 #ifndef __ARM_PCS_VFP
4394 #error "Float ABI is not 'hard'"
4403 # No 'hard' ABI. 'soft' or 'softfp'?
4404 if test x$fpu = xNONE; then
4405 AC_TRY_COMPILE([], [
4407 #error "Float ABI is not 'softfp'"
4416 if test x$arm_fpu != x; then
4421 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
4424 dnl *********************************************
4425 dnl *** Check which ARM version(s) we can use ***
4426 dnl *********************************************
4427 AC_MSG_CHECKING(which ARM version to use)
4429 AC_TRY_COMPILE([], [
4430 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
4431 #error Not on ARM v5.
4439 AC_TRY_COMPILE([], [
4440 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
4441 #error Not on ARM v6.
4450 AC_TRY_COMPILE([], [
4451 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
4452 #error Not on ARM v7.
4462 AC_MSG_RESULT($arm_ver)
4464 if test x$arm_v5 = xyes; then
4465 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
4466 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
4469 if test x$arm_v6 = xyes; then
4470 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
4471 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
4474 if test x$arm_v7 = xyes; then
4475 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
4476 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
4480 if test ${TARGET} = unknown; then
4481 CPPFLAGS="$CPPFLAGS -DNO_PORT"
4482 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
4485 if test "x$platform_android" = "xyes"; then
4486 case "x${TARGET}" in
4491 BTLS_PLATFORM=android-armv5
4495 BTLS_PLATFORM=android-armv6
4499 BTLS_PLATFORM=android-armv7
4508 BTLS_PLATFORM=android-v8a
4512 BTLS_PLATFORM=android-x86
4516 BTLS_PLATFORM=android-x64
4524 if test ${ACCESS_UNALIGNED} = no; then
4525 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
4528 if test x$host_darwin = xyes; then
4529 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
4531 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
4532 [AC_MSG_RESULT([no])],
4534 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
4536 RANLIB="$RANLIB -no_warning_for_no_symbols"
4537 AC_MSG_RESULT([yes])
4544 # Pass CPPFLAGS to libgc configure
4545 # We should use a separate variable for this to avoid passing useless and
4546 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
4547 # This should be executed late so we pick up the final version of CPPFLAGS
4548 # The problem with this approach, is that during a reconfigure, the main
4549 # configure scripts gets invoked with these arguments, so we use separate
4550 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
4551 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
4552 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
4553 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
4555 # Don't pass -finstrument-for-thread-suspension in,
4556 # if these are instrumented it will be very bad news
4557 # (infinite recursion, undefined parking behavior, etc)
4558 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
4559 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\""
4560 if test "x$support_boehm" = "xyes"; then
4561 AC_CONFIG_SUBDIRS(libgc)
4567 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
4568 if test x$with_malloc_mempools = xyes; then
4570 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
4575 DISABLE_MCS_DOCS=default
4576 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
4577 if test x$with_mcs_docs != xyes; then
4578 DISABLE_MCS_DOCS=yes
4581 if test -n "$INSTALL_4_x_TRUE"; then :
4582 DISABLE_MCS_DOCS=yes
4584 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
4585 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
4588 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)],[
4589 if test x$with_lazy_gc_thread_creation != xno ; then
4590 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
4592 ], [with_lazy_gc_thread_creation=no])
4594 AC_ARG_WITH(cooperative_gc, [ --with-cooperative-gc=yes|no Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [AC_MSG_WARN([--with-cooperative-gc is deprecated, use --enable-cooperative-suspend instead])], [with_cooperative_gc=default])
4595 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
4597 if test x$enable_cooperative_suspend = xdefault -a test x$with_cooperative_gc != xdefault; then
4598 enable_cooperative_suspend=$with_cooperative_gc
4601 if test x$enable_cooperative_suspend = xdefault; then
4602 enable_cooperative_suspend=$enable_cooperative_suspend_default
4605 if test x$enable_cooperative_suspend != xno; then
4606 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
4609 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
4611 AC_ARG_ENABLE(hybrid_suspend, [ --enable-hybrid-suspend Enable hybrid stop-the-world garbage collection (sgen only) - cooperative suspend for threads running managed and runtime code, and preemptive suspend for threads running native and P/Invoke code (defaults to no)], [], [enable_hybrid_suspend=no])
4613 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
4614 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
4617 if test x$enable_hybrid_suspend != xno ; then
4618 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
4621 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
4623 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],[
4625 if test x$enable_checked_build != x ; then
4626 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
4628 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
4629 eval "mono_checked_build_test_enable_$feature='yes'"
4632 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
4633 eval "mono_checked_build_test_enable_gc='yes'"
4634 eval "mono_checked_build_test_enable_metadata='yes'"
4635 eval "mono_checked_build_test_enable_thread='yes'"
4636 eval "mono_checked_build_test_enable_private_types='yes'"
4639 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
4640 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
4643 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
4644 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
4647 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
4648 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
4651 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
4652 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
4656 AC_CHECK_HEADER([malloc.h],
4657 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
4658 [Define to 1 if you have /usr/include/malloc.h.])],,)
4660 if test x"$GCC" = xyes; then
4661 # Implicit function declarations are not 64 bit safe
4662 # Do this late, since this causes lots of configure tests to fail
4663 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4664 # jay has a lot of implicit declarations
4665 JAY_CFLAGS="-Wno-implicit-function-declaration"
4668 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
4669 # instead of libmono-static.a
4670 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
4671 LIBMONO_LA=libmini-static.la
4673 if test x$buildsgen = xyes; then
4674 LIBMONO_LA=libmonosgen-$API_VER.la
4676 LIBMONO_LA=libmonoboehm-$API_VER.la
4679 AC_SUBST(LIBMONO_LA)
4685 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
4686 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
4687 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
4689 if test "x$enable_btls" = "xno"; then
4693 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
4696 if test "x$enable_btls" = "xyes"; then
4697 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
4698 if test "x$CMAKE" = "xno"; then
4699 AC_MSG_ERROR("cmake not found")
4702 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
4709 case "$BTLS_PLATFORM" in
4715 btls_cflags="$btls_cflags -arch i386"
4723 btls_cflags="-DOPENSSL_NO_ASM=1"
4727 btls_cflags="-DOPENSSL_NO_ASM=1"
4731 btls_cflags="-march=armv8-a+crypto"
4740 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
4741 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
4745 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4748 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=14"
4751 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=14"
4754 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=21"
4757 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=14"
4760 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=21"
4763 AC_MSG_ERROR(Invalid BTLS platform)
4766 if test "x$platform_android" = "xyes"; then
4768 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
4769 if test "x$with_btls_android_ndk" != "x"; then
4770 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
4772 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
4776 if test "x$btls_arch" != "x"; then
4777 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
4780 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
4782 AC_SUBST(BTLS_CFLAGS)
4783 AC_SUBST(BTLS_PLATFORM)
4784 AC_SUBST(BTLS_CMAKE_ARGS)
4786 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
4791 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
4793 if test x$DISABLE_MCS_DOCS = xyes; then
4800 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
4801 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
4802 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
4804 libmono_ldflags="$libmono_ldflags $LIBS"
4806 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
4807 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
4808 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
4809 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
4810 AM_CONDITIONAL(X86, test x$TARGET = xX86)
4811 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
4812 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
4813 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
4814 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
4815 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
4816 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
4817 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
4818 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
4819 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
4820 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
4821 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
4822 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
4823 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
4825 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
4835 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
4836 AC_SUBST(arch_target)
4841 #This must always be defined when building the runtime
4842 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
4844 mono_build_root=`pwd`
4845 AC_SUBST(mono_build_root)
4847 mono_runtime=mono/mini/mono
4848 AC_SUBST(mono_runtime)
4850 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.7.0/tools/csc.exe
4852 if test $csc_compiler = mcs; then
4853 CSC=$mcs_topdir/class/lib/build/mcs.exe
4858 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
4860 mono_cfg_root=$mono_build_root/runtime
4861 if test x$host_win32 = xyes; then
4862 if test "x$cross_compiling" = "xno"; then
4863 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
4864 CSC=`cygpath -m -a $CSC`
4865 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
4867 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
4870 mono_cfg_dir=$mono_cfg_root/etc
4872 AC_SUBST(mono_cfg_dir)
4876 AC_CONFIG_FILES([po/mcs/Makefile.in])
4878 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
4879 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
4881 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
4884 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4886 *) reldir=$depth/$srcdir ;;
4888 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
4889 cd runtime/etc/mono/1.0
4890 rm -f machine.config
4891 $LN_S $reldir/data/net_1_1/machine.config machine.config
4895 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
4898 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4900 *) reldir=$depth/$srcdir ;;
4902 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4903 cd runtime/etc/mono/2.0
4904 rm -f machine.config
4905 $LN_S $reldir/data/net_2_0/machine.config machine.config
4909 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
4912 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4914 *) reldir=$depth/$srcdir ;;
4916 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
4917 cd runtime/etc/mono/2.0
4919 $LN_S $reldir/data/net_2_0/web.config web.config
4923 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
4926 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4928 *) reldir=$depth/$srcdir ;;
4930 $ac_aux_dir/install-sh -d runtime/etc/mono/
4931 cd runtime/etc/mono/
4933 $LN_S $reldir/data/browscap.ini browscap.ini
4937 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
4938 [ depth=../../../../..
4940 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4942 *) reldir=$depth/$srcdir ;;
4944 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
4945 cd runtime/etc/mono/2.0/Browsers
4946 rm -f Compat.browser
4947 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4951 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
4952 [ depth=../../../../..
4954 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4956 *) reldir=$depth/$srcdir ;;
4958 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
4959 cd runtime/etc/mono/4.0/Browsers
4960 rm -f Compat.browser
4961 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4965 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
4966 [ depth=../../../../..
4968 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4970 *) reldir=$depth/$srcdir ;;
4972 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
4973 cd runtime/etc/mono/4.5/Browsers
4974 rm -f Compat.browser
4975 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
4979 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
4982 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4984 *) reldir=$depth/$srcdir ;;
4986 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
4987 cd runtime/etc/mono/4.0
4988 rm -f machine.config
4989 $LN_S $reldir/data/net_4_0/machine.config machine.config
4993 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
4996 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
4998 *) reldir=$depth/$srcdir ;;
5000 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5001 cd runtime/etc/mono/4.0
5003 $LN_S $reldir/data/net_4_0/web.config web.config
5007 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5010 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5012 *) reldir=$depth/$srcdir ;;
5014 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5015 cd runtime/etc/mono/4.5
5016 rm -f machine.config
5017 $LN_S $reldir/data/net_4_5/machine.config machine.config
5021 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5024 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5026 *) reldir=$depth/$srcdir ;;
5028 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5029 cd runtime/etc/mono/4.5
5031 $LN_S $reldir/data/net_4_5/web.config web.config
5035 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])
5036 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])
5041 acceptance-tests/Makefile
5043 scripts/mono-find-provides
5044 scripts/mono-find-requires
5049 mono/utils/jemalloc/Makefile
5050 mono/metadata/Makefile
5054 mono/arch/x86/Makefile
5055 mono/arch/amd64/Makefile
5056 mono/arch/ppc/Makefile
5057 mono/arch/sparc/Makefile
5058 mono/arch/s390x/Makefile
5059 mono/arch/arm/Makefile
5060 mono/arch/arm64/Makefile
5061 mono/arch/mips/Makefile
5064 mono/tests/tests-config
5065 mono/tests/gc-descriptors/Makefile
5066 mono/tests/testing_gac/Makefile
5067 mono/unit-tests/Makefile
5068 mono/benchmark/Makefile
5070 mono/profiler/Makefile
5072 mono/eglib/eglib-config.h
5074 ikvm-native/Makefile
5079 data/net_2_0/Makefile
5080 data/net_4_0/Makefile
5081 data/net_4_5/Makefile
5082 data/net_2_0/Browsers/Makefile
5083 data/net_4_0/Browsers/Makefile
5084 data/net_4_5/Browsers/Makefile
5091 data/mono-options.pc
5092 data/mono-lineeditor.pc
5098 data/system.web.extensions_1.0.pc
5099 data/system.web.extensions.design_1.0.pc
5100 data/system.web.mvc.pc
5101 data/system.web.mvc2.pc
5102 data/system.web.mvc3.pc
5103 data/aspnetwebstack.pc
5109 tools/locale-builder/Makefile
5111 tools/monograph/Makefile
5112 tools/pedump/Makefile
5118 # Update all submodules recursively to ensure everything is checked out
5119 $srcdir/scripts/update_submodules.sh
5121 if test x$host_win32 = xyes; then
5122 # Get rid of 'cyg' prefixes in library names
5123 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5124 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
5125 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
5126 # executable doesn't work...
5127 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
5130 if test x$host_darwin = xyes; then
5131 # This doesn't seem to be required and it slows down parallel builds
5132 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
5137 NONE) prefix=$ac_default_prefix ;;
5139 case $exec_prefix in
5140 NONE) exec_prefix='${prefix}' ;;
5144 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
5145 # any existing config.make. This allows people to share the same source tree
5146 # with different build directories, one native and one cross
5148 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
5150 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
5152 echo "prefix=$prefix" > $mcs_topdir/build/config.make
5153 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
5154 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
5155 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
5156 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
5157 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
5158 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
5159 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
5160 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
5163 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
5164 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
5167 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
5170 [myver=$($AWK 'BEGIN {
5171 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
5172 if(length(vsplit [1]) > 4) {
5173 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
5175 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
5178 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
5179 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
5181 if test x$host_darwin = xyes; then
5182 echo "BUILD_PLATFORM = darwin" >> $mcs_topdir/build/config.make
5183 echo "HOST_PLATFORM ?= darwin" >> $mcs_topdir/build/config.make
5184 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
5185 elif test x$host_win32 = xyes; then
5186 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
5187 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
5188 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
5190 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
5191 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5192 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
5195 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
5196 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
5199 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
5200 enable_system_aot=yes
5203 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
5204 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
5207 if test x$DISABLE_MCS_DOCS = xyes; then
5208 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
5211 if test x$has_extension_module != xno; then
5212 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
5215 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
5217 if test "x$test_bcl_opt" = "xyes"; then
5218 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
5221 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
5223 if test $csc_compiler = mcs; then
5224 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
5227 if test "x$AOT_BUILD_FLAGS" != "x" ; then
5228 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
5229 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
5230 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
5233 if test "x$AOT_MODE" != "x" ; then
5234 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
5237 if test "x$enable_btls" = "xyes"; then
5238 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
5245 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
5247 btls_platform_string=
5248 if test x$enable_btls = xyes; then
5249 if test x$btls_android = xyes; then
5250 btls_platform_string=" (android:$BTLS_PLATFORM)"
5252 btls_platform_string=" ($BTLS_PLATFORM)"
5258 C# Compiler: $csc_compiler
5265 SIGALTSTACK: $with_sigaltstack
5267 BigArrays: $enable_big_arrays
5268 DTrace: $enable_dtrace
5269 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm)
5270 Spectre: $spectre_mitigation_status
5273 .NET 4.x: $with_profile4_x
5274 Xamarin.Android: $with_monodroid
5275 Xamarin.iOS: $with_monotouch
5276 Xamarin.WatchOS: $with_monotouch_watch
5277 Xamarin.TVOS: $with_monotouch_tv
5278 Xamarin.Mac: $with_xammac
5279 Windows AOT: $with_winaot
5281 Unreal: $with_unreal
5282 WebAssembly: $with_wasm
5283 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
5284 JNI support: $jdk_headers_found
5285 libgdiplus: $libgdiplus_msg
5287 BTLS: $enable_btls$btls_platform_string
5288 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
5291 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
5292 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)