1 # Process this file with autoconf to produce a configure script.
4 AC_INIT(mono, [5.23.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])
23 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test]))
24 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test-bundle]))
31 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
33 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
34 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
35 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
38 # This is the version of the corlib-runtime interface. When
39 # making changes to this interface (by changing the layout
40 # of classes the runtime knows about, changing icall signature or
41 # semantics etc), change this variable.
43 # This must be unique relative to corlib interface/semantics.
45 # Generate it with uuidgen. For example:
46 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
48 # There is no ordering of corlib versions, no old or new,
49 # the runtime expects an exact match.
51 MONO_CORLIB_VERSION=e686c1dd-3c2a-4dc9-b12e-ff0d524d6e6b
54 # Put a quoted #define in config.h.
55 # Substitute @MONO_CORLIB_VERSION@ unquoted.
57 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
58 AC_SUBST(MONO_CORLIB_VERSION)
62 echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
66 # In case of cygwin, override LN_S, irrespective of what it determines.
67 # The build uses cygwin, but the actual runtime doesn't.
69 *cygwin* ) LN_S='cp -p';;
77 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
78 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
79 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
80 CFLAGS_FOR_LIBGC=$CFLAGS
81 CPPFLAGS_FOR_BTLS=$CPPFLAGS
82 CFLAGS_FOR_BTLS=$CFLAGS
84 # libgc uses some deprecated APIs
85 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
88 # These are the flags that need to be stored in the mono.pc file for
89 # compiling code that will embed Mono
93 AC_SUBST(libmono_cflags)
94 AC_SUBST(libmono_ldflags)
96 # Variable to have relocatable .pc files (lib, or lib64)
97 # realpath isn't always available, and requires that all but the tip of the provided
98 # path exists. Fall back to the old behaviour, but realpath allows depth >1
99 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
100 # too deep for the old method to work
101 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
102 AC_SUBST(reloc_libdir)
104 # Set to yes if Unix sockets cannot be created in an anonymous namespace
107 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
108 extra_runtime_ldflags=""
110 # Thread configuration inspired by sleepycat's db
111 AC_MSG_CHECKING([host platform characteristics])
129 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
130 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
132 libgc_threads=pthreads
135 *-mingw*|*-*-cygwin*)
136 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
137 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
140 if test "x$cross_compiling" = "xno"; then
141 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
145 if test "x$host" = "x$target"; then
151 # Windows 7 or later is required
152 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
153 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
154 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
155 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
156 libmono_cflags="-mms-bitfields -mwindows"
157 libmono_ldflags="-mms-bitfields -mwindows"
162 with_sgen_default_concurrent=yes
164 # This forces libgc to use the DllMain based thread registration code on win32
165 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
168 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
169 libmono_cflags="-D_REENTRANT"
170 LDFLAGS="$LDFLAGS -pthread"
171 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
172 libmono_ldflags="-pthread"
175 libgc_threads=pthreads
178 with_sgen_default_concurrent=yes
181 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
182 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
183 libmono_ldflags="-lpthread -pthread"
185 libgc_threads=pthreads
189 with_sgen_default_concurrent=yes
193 LDFLAGS="$LDFLAGS -lutil"
194 if test "x$PTHREAD_CFLAGS" = "x"; then
195 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
198 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
199 libmono_cflags="$PTHREAD_CFLAGS"
201 if test "x$PTHREAD_LIBS" = "x"; then
202 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
203 libmono_ldflags="-pthread"
205 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
206 libmono_ldflags="$PTHREAD_LIBS"
208 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
210 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
212 libgc_threads=pthreads
225 with_sgen_default_concurrent=yes
228 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
229 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
230 if test "x$disable_munmap" != "xyes"; then
231 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
233 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
234 LDFLAGS="$LDFLAGS -pthread"
236 AC_DEFINE(PTHREAD_POINTER_ID)
238 libgc_threads=pthreads
242 with_sgen_default_concurrent=yes
246 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
247 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
249 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
250 if test "x$disable_munmap" != "xyes"; then
251 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
253 libmono_cflags="-D_REENTRANT"
255 libgc_threads=pthreads
262 # Android doesn't support boehm, as it's missing <link.h>
266 # isinf(3) requires -lm
267 LDFLAGS="$LDFLAGS -lm"
269 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
270 # PAGE_SIZE; breaks mono/io-layer/collection.c
271 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
272 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
273 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
275 # to bypass the underscore linker check, can't work when cross-compiling
281 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
282 if test "x$disable_munmap" != "xyes"; then
283 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
285 libmono_cflags="-D_REENTRANT"
287 libgc_threads=pthreads
289 if test "x$cross_compiling" != "xno"; then
290 # to bypass the underscore linker check, not
291 # available during cross-compilation
305 # https://bugzilla.novell.com/show_bug.cgi?id=504411
313 with_sgen_default_concurrent=yes
316 echo "nacl no longer supported."
320 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
321 # +ESdbgasm only valid on bundled cc on RISC
322 # silently ignored for ia64
323 if test $GCC != "yes"; then
324 CFLAGS="$CFLAGS +ESdbgasm"
325 # Arrange for run-time dereferencing of null
326 # pointers to produce a SIGSEGV signal.
327 LDFLAGS="$LDFLAGS -z"
329 CFLAGS="$CFLAGS +ESdbgasm"
330 LDFLAGS="$LDFLAGS -z"
331 libmono_cflags="-D_REENTRANT"
332 libmono_ldflags="-lpthread"
333 libgc_threads=pthreads
338 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
340 libmono_cflags="-D_REENTRANT"
341 libgc_threads=pthreads
344 enable_solaris_tar_check=yes
347 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
350 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
351 libmono_cflags="-D_THREAD_SAFE"
353 AC_DEFINE(PTHREAD_POINTER_ID)
354 AC_DEFINE(USE_MACH_SEMA, 1, [...])
356 libgc_threads=pthreads
358 if test "x$cross_compiling" = "xyes"; then
359 has_broken_apple_cpp=yes
361 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
362 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
363 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
365 dnl Snow Leopard and newer config.guess reports as this
367 BROKEN_DARWIN_FLAGS="-arch i386"
368 BROKEN_DARWIN_CPPFLAGS=""
369 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
370 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
371 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
372 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
373 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
374 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
375 with_sgen_default_concurrent=yes
378 with_sgen_default_concurrent=yes
390 dnl BSD_SOURCE is for getifaddrs
391 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
392 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
394 LIBS="$LIBS -lnetwork -ltextencoding"
396 AC_DEFINE(PTHREAD_POINTER_ID)
397 dnl Haiku does not support static TLS with __thread
399 libgc_threads=pthreads
404 dnl Set up a 64-bit build
405 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
407 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
408 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
409 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
410 dnl specifiy 64-bit mode for tools.
411 AR="/usr/bin/ar -X64"
412 NM="/usr/bin/nm -X64"
413 dnl SGen is the future (changes to Boehm support code would be
414 dnl required if you wish to re-enable Boehm)
419 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
421 dnl use pthread TLS, __thread has issues with the compiler flags we use
423 dnl ppc Linux is the same? test further
427 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
434 if test x$need_link_unlink = xyes; then
435 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
438 if test x$host_win32 = xyes; then
439 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
442 if test x$target_win32 = xyes; then
443 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
446 if test x$host_darwin = xyes; then
447 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
450 # Defined for all targets/platforms using classic Windows API support.
451 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
452 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
454 AC_SUBST(extra_runtime_ldflags)
455 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
456 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
457 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
458 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
459 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
460 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
461 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
462 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
463 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
465 if test -z "$HOST_DARWIN_TRUE"; then :
466 PLATFORM_AOT_SUFFIX=.dylib
469 if test -z "$HOST_LINUX_TRUE"; then :
470 PLATFORM_AOT_SUFFIX=.so
473 if test -z "$HOST_WIN32_TRUE"; then :
474 PLATFORM_AOT_SUFFIX=.dll
477 AC_SUBST(PLATFORM_AOT_SUFFIX)
479 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
481 AC_CHECK_TOOL(CC, gcc, gcc)
483 AC_CHECK_TOOL(CXX, g++, g++)
489 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
491 # Set ASFLAGS if not already set.
492 : ${CCASFLAGS='$(CFLAGS)'}
496 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
497 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
498 if test "x$CXX" = "xg++"; then
499 if test "x$GXX" != "xyes"; then
500 # automake/libtool is so broken, it requires g++ even if the c++ sources
501 # are inside automake conditionals
502 AC_MSG_ERROR([You need to install g++])
506 dnl may require a specific autoconf version
507 dnl AC_PROG_CC_FOR_BUILD
508 dnl CC_FOR_BUILD not automatically detected
510 CFLAGS_FOR_BUILD=$CFLAGS
512 if test "x$cross_compiling" = "xyes"; then
517 AC_SUBST(CC_FOR_BUILD)
518 AC_SUBST(CFLAGS_FOR_BUILD)
520 AC_SUBST(BUILD_EXEEXT)
522 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
523 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
528 # This causes monodis to not link correctly
529 #AC_DISABLE_FAST_INSTALL
531 #lookup makedev() header
535 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
538 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
539 AC_SUBST(export_ldflags)
541 # Test whenever ld supports -version-script
545 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 copyfile.h)
546 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)
547 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
548 [], [], [#include <stddef.h>
549 #include <sys/socket.h>
550 #include <linux/socket.h>])
552 AC_CHECK_HEADERS(sys/user.h, [], [],
554 #ifdef HAVE_SYS_PARAM_H
555 # include <sys/param.h>
559 AC_CHECK_HEADERS(linux/serial.h)
561 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
562 if test x$have_zlib = xyes; then
563 AC_TRY_COMPILE([#include <zlib.h>], [
564 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
566 #error No good zlib found
569 AC_MSG_RESULT(Using system zlib)
570 zlib_msg="system zlib"
571 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
573 AC_MSG_RESULT(Using embedded zlib)
575 zlib_msg="bundled zlib"
579 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
580 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
582 # for mono/metadata/debug-symfile.c
583 AC_CHECK_HEADERS(elf.h)
586 AC_CHECK_HEADERS(poll.h)
587 AC_CHECK_HEADERS(sys/poll.h)
588 AC_CHECK_HEADERS(sys/wait.h)
589 AC_CHECK_HEADERS(grp.h)
590 AC_CHECK_HEADERS(syslog.h)
591 AC_CHECK_FUNCS(vsyslog)
594 AC_CHECK_HEADERS(wchar.h)
596 # for Linux statfs support
597 AC_CHECK_HEADERS(linux/magic.h)
599 # For Android NDK unified headers
600 if test x$platform_android = xyes; then
601 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
602 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
603 AC_CHECK_HEADERS(android/ndk-version.h)
605 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
606 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
607 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
608 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
609 # doesn't contain the required definitions (NDK 14)
610 if test x$have_android_signal_inlines = xyes; then
611 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
613 AC_LANG_PROGRAM([#include <signal.h>
614 #include <android/legacy_signal_inlines.h>],[
616 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
620 android_sigrtminmax_work=yes
623 android_sigrtminmax_work=no
627 if test x$android_sigrtminmax_work = xno; then
628 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
632 # Attempt to detect whether we're using Android NDK unified headers
633 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
634 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
636 android_unified_headers=no
637 if test x$have_android_api_level = xyes; then
638 if test x$have_android_versioning = xyes; then
639 AC_MSG_CHECKING([whether using Android NDK unified headers])
641 # Both macros are defined only in the NDK unified headers
644 #include <android/api-level.h>
645 #include <android/versioning.h>
647 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
649 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
653 android_unified_headers=yes
656 android_unified_headers=no
662 if test x$android_unified_headers = xyes; then
663 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
667 # not 64 bit clean in cross-compile
668 AC_CHECK_SIZEOF(void *)
669 AC_CHECK_SIZEOF(long)
672 AC_CHECK_SIZEOF(long long)
674 AC_CACHE_CHECK([for clang],
687 AC_ARG_ENABLE(visibility-hidden,
688 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
689 disable_visibility_hidden=yes, disable_visibility_hidden=no)
692 if test x"$GCC" = xyes; then
693 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
694 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
696 # We require C99 with some GNU extensions, e.g. `linux` macro
697 CFLAGS="$CFLAGS -std=gnu99"
699 # The runtime code does not respect ANSI C strict aliasing rules
700 CFLAGS="$CFLAGS -fno-strict-aliasing"
702 # We rely on signed overflow to behave
703 CFLAGS="$CFLAGS -fwrapv"
705 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
706 if test x"$disable_visibility_hidden" = xno; then
707 # Don't export any symbols by default
708 SHARED_CFLAGS="-fvisibility=hidden"
709 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
713 # Check for the normal version, since gcc ignores unknown -Wno options
714 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
715 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
719 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
725 if test "x$mono_cv_clang" = "xyes"; then
726 # https://bugzilla.samba.org/show_bug.cgi?id=8118
727 WARN="$WARN -Qunused-arguments"
728 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
729 # We rely on zero length arrays in structs
730 WARN="$WARN -Wno-zero-length-array"
733 # The Sun Forte compiler complains about inline functions that access static variables
734 # so disable all inlining.
737 CFLAGS="$CFLAGS -Dinline="
741 CFLAGS="$WARN $CFLAGS -g"
742 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
743 CPPFLAGS="$WARN $CPPFLAGS -g"
745 # Where's the 'mcs' source tree?
746 if test -d $srcdir/mcs; then
752 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
753 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
754 mcsdir=$with_mcs_path
758 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
760 AC_ARG_WITH(core, [ --with-core=only controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
761 if test x$with_core = xonly; then
762 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
763 mono_feature_disable_remoting='yes'
764 mono_feature_disable_reflection_emit_save='yes'
765 mono_feature_disable_appdomains='yes'
767 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
770 # A sanity check to catch cases where the package was unpacked
771 # with an ancient tar program (Solaris)
773 AC_ARG_ENABLE(solaris-tar-check,
774 [ --disable-solaris-tar-check disable solaris tar check],
775 do_solaris_tar_check=no, do_solaris_tar_check=yes)
777 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
778 AC_MSG_CHECKING(integrity of package)
779 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
783 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"
784 AC_MSG_ERROR([$errorm])
788 if test "x$with_mcs_path" != "x"; then
789 mcs_topdir=$(cd "$mcsdir" && pwd)
790 mcs_topdir_from_srcdir=$mcs_topdir
792 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
793 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
796 # Convert mcs_topdir* paths to Windows syntax.
797 if test x$cross_compiling$host_win32 = xnoyes; then
798 mcs_topdir=$(cygpath -m $mcs_topdir)
799 case $mcs_topdir_from_srcdir in
801 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
806 AC_SUBST([mcs_topdir])
807 AC_SUBST([mcs_topdir_from_srcdir])
809 # gettext: prepare the translation directories.
810 # we do not configure the full gettext, as we consume it dynamically from C#
813 if test "x$USE_NLS" = "xyes"; then
814 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
816 if test "x$HAVE_MSGFMT" = "xno"; then
817 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
821 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
824 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
825 if test x$with_crosspkgdir = "x"; then
826 if test -s $PKG_CONFIG_PATH; then
827 pkg_config_path=$PKG_CONFIG_PATH
830 pkg_config_path=$with_crosspkgdir
831 PKG_CONFIG_PATH=$pkg_config_path
832 export PKG_CONFIG_PATH
836 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
837 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
838 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
840 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
841 if test x$werror_flag = xyes; then
842 WERROR_CFLAGS="-Werror"
844 AC_SUBST([WERROR_CFLAGS])
845 AC_SUBST([SHARED_CFLAGS])
847 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
849 AC_SUBST(GLIB_CFLAGS)
851 # Enable support for fast thread-local storage
852 # Some systems have broken support, so we allow to disable it.
853 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
855 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
856 # This does not work on some platforms (bug #55253)
857 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
859 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
860 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
861 # Same as --with-shared_mono=no
862 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
864 if test "x$enable_static" = "xno"; then
868 if test "x$enable_shared" = "xno"; then
872 if test "x$enable_libraries" = "xno"; then
876 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
878 if test "x$host_win32" = "xyes"; then
879 # Boehm GC requires the runtime to be in its own dll
883 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
884 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
885 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
886 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
888 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
889 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
890 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
892 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
893 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
897 # Pass it to libgc as well
898 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
905 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
907 if test x$enable_small_config = xyes; then
908 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
909 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
912 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)
914 DISABLED_FEATURES=none
917 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
918 AC_MSG_CHECKING([CSharp compiler to use])
919 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
920 if test x$withval = xmcs; then
922 elif test x$withval = xroslyn; then
924 elif test x$withval = xdefault; then
927 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
929 ],[csc_compiler=default])
931 if test $csc_compiler = default; then
932 if test $endian = big; then
934 elif test $endian = little; then
936 powerpc*) csc_compiler=mcs ;;
937 *) csc_compiler=roslyn ;;
943 AC_MSG_RESULT($csc_compiler)
945 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
946 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
947 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])
950 if test x$target_win32 = xyes; then
952 with_jemalloc_assert=no
953 with_jemalloc_always=no
956 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
957 if test "x$with_jemalloc_assert" = "xyes"; then
958 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
959 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
960 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
963 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
964 if test "x$with_jemalloc_always" = "xyes"; then
966 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
967 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
968 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
971 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
972 if test "x$with_jemalloc" = "xyes"; then
973 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
974 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
975 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
977 if test "x$target_mach" = "xyes"; then
978 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
981 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
982 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
984 AC_SUBST(JEMALLOC_CFLAGS)
985 AC_SUBST(JEMALLOC_CPPFLAGS)
986 AC_SUBST(JEMALLOC_LDFLAGS)
987 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
991 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
992 # MERP - The MS telemetry profile. Not for general use.
993 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
995 # 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.
997 #--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.
998 #--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.
999 #--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.
1000 #--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.
1002 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=yes])
1003 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])
1004 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1006 if test "x$with_crash_privacy" = "xyes"; then
1007 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1010 if test "x$with_structured_crashes" = "xno"; then
1011 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1015 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1020 if test "x$crash_reporting" != "xyes"; then
1021 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1022 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1025 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1026 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1028 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1029 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1031 if test x$enable_monodroid = xyes; then
1032 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1035 if test x$enable_monotouch = xyes; then
1036 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1039 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1041 # mono/corefx/native has a lot of invalid C++98 in its headers
1042 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1043 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1044 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1045 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1047 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1048 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1049 # and add it whenever we're running clang on Darwin.
1050 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1051 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1054 AC_SUBST(CXXFLAGS_COMMON)
1056 if test "x$enable_cxx" = "xyes"; then
1058 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1060 # -std=gnu99 -xc++ is not allowed and errors.
1061 CXX_REMOVE_CFLAGS=-std=gnu99
1062 # These give warnings and should be removed. They are C-only.
1063 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1064 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1065 # Likewise with CentOS 6 gcc 4.4.
1066 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1068 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1069 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1070 # generates a warning every time we run gcc which is very unsightly.
1071 # The warning is for e.g. sprintf(foo, "") which can just be
1072 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1073 # and completely legal and valid.
1074 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1075 # Alternatively, just run $CXX -xc++ -c /dev/null.
1077 ORIG_CXXFLAGS=$CXXFLAGS
1078 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1079 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1080 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1082 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1083 CXXFLAGS=$ORIG_CXXFLAGS
1086 AC_SUBST(CXX_ADD_CFLAGS)
1087 AC_SUBST(CXX_REMOVE_CFLAGS)
1090 # Set the build profiles and options before things which use them
1093 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])
1094 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1095 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1096 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])
1097 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])
1098 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1099 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1100 AC_ARG_WITH(testing_aot_full_interp, [ --with-testing_aot_full_interp=yes,no If you want to build the testing_aot_full_interp assemblies (defaults to no)], [], [with_testing_aot_full_interp=default])
1101 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])
1102 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])
1103 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1104 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1105 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1106 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1109 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,bitcode,unreal,fullaotinterp,fullaotinterp_llvm Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1110 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])
1111 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])
1112 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])
1115 dnl Spectre compiler mitigation flag checks
1117 if test "x$with_spectre_mitigation" = "xyes"; then
1118 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1120 SPECTRE_INDIRECT_BRANCH_KIND=
1121 case "x$with_spectre_indirect_branch_choice" in
1122 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1123 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1124 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1125 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1126 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1129 SPECTRE_FUNCTION_RETURN_KIND=""
1130 case "x$with_spectre_function_return_choice" in
1131 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1132 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1133 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1134 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1135 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1138 AX_CHECK_COMPILE_FLAG(
1139 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1140 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1143 AX_CHECK_COMPILE_FLAG(
1144 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1145 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1148 if test "x$SPECTRE_CFLAGS" != "x" ; then
1149 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1150 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1151 spectre_mitigation_status="mitigation enabled"
1154 spectre_mitigation_status="no mitigation"
1158 dnl Profile defaults
1160 TEST_PROFILE=default
1161 enable_llvm_default=no
1163 with_profile4_x_default=no
1164 with_monodroid_default=no
1165 with_monotouch_default=no
1166 with_monotouch_watch_default=no
1167 with_monotouch_tv_default=no
1168 with_xammac_default=no
1169 with_testing_aot_full_interp_default=no
1170 with_testing_aot_hybrid_default=no
1171 with_testing_aot_full_default=no
1172 with_winaot_default=no
1173 with_orbis_default=no
1174 with_unreal_default=no
1175 with_wasm_default=no
1177 with_bitcode_default=no
1178 enable_cooperative_suspend_default=no
1179 enable_hybrid_suspend_default=no
1181 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1183 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1185 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1186 DISABLE_MCS_DOCS_default=yes
1187 elif test x$with_runtime_preset = xnet_4_x; then
1188 with_profile4_x_default=yes
1189 TEST_PROFILE=net_4_x
1190 elif test x$with_runtime_preset = xall; then
1191 with_profile4_x_default=yes
1192 with_monodroid_default=yes
1193 with_monotouch_default=yes
1194 with_monotouch_watch_default=yes
1195 with_monotouch_tv_default=yes
1196 with_xammac_default=yes
1197 with_winaot_default=yes
1198 with_orbis_default=yes
1199 with_unreal_default=yes
1200 with_wasm_default=yes
1201 with_testing_aot_full_interp_default=yes
1202 with_testing_aot_hybrid_default=yes
1203 with_testing_aot_full_default=yes
1204 TEST_PROFILE=net_4_x
1205 elif test x$with_runtime_preset = xbitcode; then
1206 DISABLE_MCS_DOCS_default=yes
1207 with_testing_aot_full_default=yes
1208 with_bitcode_default=yes
1209 enable_cooperative_suspend_default=yes
1210 TEST_PROFILE=testing_aot_full
1211 enable_llvm_default=yes
1213 mono_feature_disable_com='yes'
1214 mono_feature_disable_remoting='yes'
1215 mono_feature_disable_reflection_emit_save='yes'
1216 mono_feature_disable_reflection_emit='yes'
1217 mono_feature_disable_appdomains='yes'
1219 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,$INVARIANT_AOT_OPTIONS"
1220 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1222 elif test x$with_runtime_preset = xfullaot; then
1223 DISABLE_MCS_DOCS_default=yes
1224 with_testing_aot_full_default=yes
1225 TEST_PROFILE=testing_aot_full
1227 mono_feature_disable_com='yes'
1228 mono_feature_disable_remoting='yes'
1229 mono_feature_disable_reflection_emit_save='yes'
1230 mono_feature_disable_reflection_emit='yes'
1231 mono_feature_disable_appdomains='yes'
1233 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1234 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1236 elif test x$with_runtime_preset = xfullaot_llvm; then
1237 DISABLE_MCS_DOCS_default=yes
1238 with_testing_aot_full_default=yes
1239 TEST_PROFILE=testing_aot_full
1241 mono_feature_disable_com='yes'
1242 mono_feature_disable_remoting='yes'
1243 mono_feature_disable_reflection_emit_save='yes'
1244 mono_feature_disable_reflection_emit='yes'
1245 mono_feature_disable_appdomains='yes'
1247 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1248 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1250 elif test x$with_runtime_preset = xhybridaot; then
1251 DISABLE_MCS_DOCS_default=yes
1252 with_testing_aot_hybrid_default=yes
1253 TEST_PROFILE=testing_aot_hybrid
1255 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1256 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1257 elif test x$with_runtime_preset = xhybridaot_llvm; then
1258 DISABLE_MCS_DOCS_default=yes
1259 with_testing_aot_hybrid_default=yes
1260 TEST_PROFILE=testing_aot_hybrid
1262 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1263 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1264 elif test x$with_runtime_preset = xfullaotinterp; then
1265 with_testing_aot_full_interp_default=yes
1266 TEST_PROFILE=testing_aot_full_interp
1268 # mscorlib.dll aot compilation crashes
1269 mono_feature_disable_com='yes'
1271 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1272 AOT_RUN_FLAGS="--full-aot-interp"
1273 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1274 with_testing_aot_full_interp_default=yes
1275 TEST_PROFILE=testing_aot_full_interp_llvm
1277 # mscorlib.dll aot compilation crashes
1278 mono_feature_disable_com='yes'
1280 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1281 AOT_RUN_FLAGS="--full-aot-interp"
1282 elif test x$with_runtime_preset = xaot; then
1283 with_profile4_x_default=yes
1285 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1288 DISABLE_MCS_DOCS_default=yes
1289 elif test x$with_runtime_preset = xaot_llvm; then
1290 with_profile4_x_default=yes
1292 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1295 DISABLE_MCS_DOCS_default=yes
1296 elif test x$with_runtime_preset = xwinaot; then
1297 DISABLE_MCS_DOCS_default=yes
1298 with_winaot_default=yes
1301 mono_feature_disable_com='yes'
1302 mono_feature_disable_remoting='yes'
1303 mono_feature_disable_reflection_emit_save='yes'
1304 mono_feature_disable_reflection_emit='yes'
1305 mono_feature_disable_appdomains='yes'
1307 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1308 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1310 elif test x$with_runtime_preset = xorbis; then
1311 DISABLE_MCS_DOCS_default=yes
1312 with_orbis_default=yes
1315 mono_feature_disable_com='yes'
1316 mono_feature_disable_remoting='yes'
1317 mono_feature_disable_reflection_emit_save='yes'
1318 mono_feature_disable_reflection_emit='yes'
1319 mono_feature_disable_appdomains='yes'
1321 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1322 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1324 elif test x$with_runtime_preset = xunreal; then
1325 DISABLE_MCS_DOCS_default=yes
1326 with_unreal_default=yes
1329 mono_feature_disable_com='yes'
1330 mono_feature_disable_remoting='yes'
1331 mono_feature_disable_appdomains='no'
1333 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1334 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1335 elif test x$with_runtime_preset = xwasm; then
1336 DISABLE_MCS_DOCS_default=yes
1337 with_wasm_default=yes
1340 mono_feature_disable_com='yes'
1341 mono_feature_disable_remoting='yes'
1342 mono_feature_disable_reflection_emit_save='yes'
1343 mono_feature_disable_reflection_emit='yes'
1344 mono_feature_disable_appdomains='yes'
1346 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1347 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1349 TEST_PROFILE=net_4_x
1350 with_profile4_x_default=yes
1353 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1354 AC_SUBST(AOT_BUILD_FLAGS)
1355 AC_SUBST(AOT_RUN_FLAGS)
1356 # For llvmonlycheck + fullaotcheck
1357 AC_SUBST(INVARIANT_AOT_OPTIONS)
1360 AC_SUBST(TEST_PROFILE)
1362 if test "x$with_profile4_x" = "xdefault"; then
1363 with_profile4_x=$with_profile4_x_default
1365 if test "x$with_monodroid" = "xdefault"; then
1366 with_monodroid=$with_monodroid_default
1368 if test "x$with_monotouch" = "xdefault"; then
1369 with_monotouch=$with_monotouch_default
1371 if test "x$with_monotouch_watch" = "xdefault"; then
1372 with_monotouch_watch=$with_monotouch_watch_default
1374 if test "x$with_monotouch_tv" = "xdefault"; then
1375 with_monotouch_tv=$with_monotouch_tv_default
1377 if test "x$with_bitcode" = "xdefault"; then
1378 with_bitcode=$with_bitcode_default
1380 if test "x$with_xammac" = "xdefault"; then
1381 with_xammac=$with_xammac_default
1383 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1384 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1386 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1387 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1389 if test "x$with_testing_aot_full" = "xdefault"; then
1390 with_testing_aot_full=$with_testing_aot_full_default
1392 if test "x$with_winaot" = "xdefault"; then
1393 with_winaot=$with_winaot_default
1395 if test "x$with_orbis" = "xdefault"; then
1396 with_orbis=$with_orbis_default
1398 if test "x$with_unreal" = "xdefault"; then
1399 with_unreal=$with_unreal_default
1401 if test "x$with_wasm" = "xdefault"; then
1402 with_wasm=$with_wasm_default
1406 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1407 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1408 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1409 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1410 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1411 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1412 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1413 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1414 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1415 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1416 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1417 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1418 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1419 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1420 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1421 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"])
1422 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1423 AM_CONDITIONAL(AOT_FULL_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"])
1424 AM_CONDITIONAL(AOT_FULL_INTERP_LLVM_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp_llvm"])
1425 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1427 default_profile=net_4_x
1428 if test -z "$INSTALL_MONODROID_TRUE"; then :
1429 default_profile=monodroid
1431 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1432 default_profile=monotouch
1434 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1435 default_profile=xammac
1437 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1438 default_profile=testing_aot_full_interp
1440 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1441 default_profile=testing_aot_hybrid
1443 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1444 default_profile=testing_aot_full
1446 if test -z "$INSTALL_WINAOT_TRUE"; then :
1447 default_profile=winaot
1449 if test -z "$INSTALL_ORBIS_TRUE"; then :
1450 default_profile=orbis
1452 if test -z "$INSTALL_UNREAL_TRUE"; then :
1453 default_profile=unreal
1455 if test -z "$INSTALL_WASM_TRUE"; then :
1456 default_profile=wasm
1458 if test -z "$INSTALL_4_x_TRUE"; then :
1459 default_profile=net_4_x
1461 DEFAULT_PROFILE=$default_profile
1462 AC_SUBST(DEFAULT_PROFILE)
1465 # End build profile configuration
1468 if test x$USE_NLS = xprofile_default; then
1470 AC_MSG_CHECKING([NLS used])
1472 # We make the default value for USE_NLS
1473 # "no" on OSX because it isn't available on most
1474 # default OSX installs. The most common configurations will
1475 # all disable it, so this saves us typing.
1476 if test x$host_darwin = xyes; then
1483 AC_MSG_RESULT([$USE_NLS])
1486 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1487 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1488 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1489 security, lldb, mdb, assert_messages, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers.],
1491 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1492 eval "mono_feature_disable_$feature='yes'"
1494 DISABLED_FEATURES=$enable_minimal
1495 disabled="Disabled: $enable_minimal"
1498 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1500 if test "x$mono_feature_disable_aot" = "xyes"; then
1501 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1502 enable_system_aot=no
1503 AC_MSG_NOTICE([Disabled AOT compiler])
1506 if test "x$mono_feature_disable_profiler" = "xyes"; then
1507 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1508 AC_MSG_NOTICE([Disabled support for the profiler])
1510 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1512 if test "x$mono_feature_disable_decimal" = "xyes"; then
1513 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1514 AC_MSG_NOTICE([Disabled support for decimal])
1517 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1518 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1519 AC_MSG_NOTICE([Disabled support for P/Invoke])
1522 if test "x$mono_feature_disable_debug" = "xyes"; then
1523 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1524 AC_MSG_NOTICE([Disabled support for runtime debugging])
1527 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1528 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1529 mono_feature_disable_reflection_emit_save=yes
1530 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1533 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1534 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1535 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1538 if test "x$mono_feature_disable_large_code" = "xyes"; then
1539 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1540 AC_MSG_NOTICE([Disabled support for large assemblies])
1543 if test "x$mono_feature_disable_logging" = "xyes"; then
1544 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1545 AC_MSG_NOTICE([Disabled support for logging])
1548 if test "x$mono_feature_disable_com" = "xyes"; then
1549 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1550 AC_MSG_NOTICE([Disabled COM support])
1553 if test "x$mono_feature_disable_ssa" = "xyes"; then
1554 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1555 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1558 if test "x$mono_feature_disable_generics" = "xyes"; then
1559 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1560 AC_MSG_NOTICE([Disabled Generics Support])
1563 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1564 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1565 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1568 if test "x$mono_feature_disable_portability" = "xyes"; then
1569 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1570 AC_MSG_NOTICE([Disabled IO Portability layer])
1573 if test "x$mono_feature_disable_attach" = "xyes"; then
1574 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1575 AC_MSG_NOTICE([Disabled agent attach])
1578 if test "x$mono_feature_disable_verifier" = "xyes"; then
1579 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1580 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1583 if test "x$mono_feature_disable_jit" = "xyes"; then
1584 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1585 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1588 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1590 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1591 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1592 AC_MSG_NOTICE([Disabled the interpreter])
1595 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1597 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1598 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1601 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1603 if test "x$mono_feature_disable_simd" = "xyes"; then
1604 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1605 AC_MSG_NOTICE([Disabled SIMD support])
1608 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1609 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1610 AC_MSG_NOTICE([Disabled Soft Debugger.])
1613 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1615 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1616 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1617 AC_MSG_NOTICE([Disabled Performance Counters.])
1619 if test "x$mono_feature_disable_normalization" = "xyes"; then
1620 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1621 AC_MSG_NOTICE([Disabled String normalization support.])
1624 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1625 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1626 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1627 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1630 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1631 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1632 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1635 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1636 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1637 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1640 if test "x$mono_feature_disable_remoting" = "xyes"; then
1641 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1642 AC_MSG_NOTICE([Disabled remoting])
1645 if test "x$mono_feature_disable_security" = "xyes"; then
1646 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1647 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1650 if test "x$mono_feature_disable_lldb" = "xyes"; then
1651 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1652 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1655 if test "x$mono_feature_disable_mdb" = "xyes"; then
1656 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1657 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1660 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1661 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1662 AC_MSG_NOTICE([Disabled assertion messages.])
1665 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1666 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1667 AC_MSG_NOTICE([Disabled runtime cleanup.])
1670 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1671 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1672 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1676 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1677 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1678 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1681 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1682 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1683 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1686 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1687 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1688 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1691 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1692 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1694 has_extension_module=no
1695 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1697 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1698 if test x$extension = xdefault ; then
1699 has_extension_module=yes;
1702 if test x$enable_extension_module = xyes; then
1703 has_extension_module=yes;
1707 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1709 if test x$has_extension_module != xno ; then
1710 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1711 AC_MSG_NOTICE([Enabling mono extension module.])
1715 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1717 AC_MSG_CHECKING(for visibility __attribute__)
1720 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1721 int main () { doit (); return 0; }
1724 have_visibility_hidden=yes
1727 have_visibility_hidden=no
1732 dnl Boehm GC configuration
1735 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1737 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1738 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1740 if test "x$support_boehm" = "xyes"; then
1742 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1743 if test x$enable_parallel_mark = xyes; then
1744 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1754 if test "x$support_boehm" = "xyes"; then
1758 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1759 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1760 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1762 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1764 if test x$target_win32 = xyes; then
1765 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1766 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1769 gc_msg="Included Boehm GC with typed GC"
1770 if test x$enable_parallel_mark = xyes; then
1771 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1772 gc_msg="$gc_msg and parallel mark"
1774 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1779 AC_MSG_WARN("External Boehm is no longer supported")
1783 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1787 AC_MSG_WARN("Compiling mono without GC.")
1788 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1789 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1793 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1797 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])
1798 if test "x$large_heap" = "xyes"; then
1799 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1802 AC_SUBST(LIBGC_CPPFLAGS)
1803 AC_SUBST(LIBGC_LIBS)
1804 AC_SUBST(LIBGC_STATIC_LIBS)
1806 AC_SUBST(BOEHM_DEFINES)
1809 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1812 dnl End of Boehm GC Configuration
1815 dnl *************************************
1816 dnl *** Checks for zero length arrays ***
1817 dnl *************************************
1818 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1826 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1829 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1832 dnl ***********************************
1833 dnl *** Checks for signals
1834 dnl ***********************************
1835 AC_CHECK_HEADERS(signal.h)
1836 AC_CHECK_FUNCS(sigaction)
1837 AC_CHECK_FUNCS(kill)
1838 AC_CHECK_FUNCS(signal)
1840 # signal() is declared inline in Android headers
1841 # so we need to workaround it by overriding the check.
1842 if test x$platform_android = xyes; then
1843 AC_DEFINE(HAVE_SIGNAL,1)
1846 dnl ***********************************
1847 dnl *** Checks for availability of GSS dependencies (krb5, gss.framework, etc)
1848 dnl ***********************************
1850 AC_MSG_CHECKING(for GSS/GSS.h)
1852 #include <GSS/GSS.h>
1856 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
1857 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1863 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
1865 #include <gssapi/gssapi_ext.h>
1874 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
1876 #include <gssapi/gssapi_ext.h>
1877 #include <gssapi/gssapi_krb5.h>
1878 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
1882 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
1887 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
1889 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1890 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1892 if test x$host_win32 = xno; then
1893 dnl *************************************
1894 dnl *** Checks for time capabilities ***
1895 dnl *************************************
1897 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1898 AC_TRY_COMPILE([#include <time.h>], [
1899 const int foo = CLOCK_MONOTONIC;
1902 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1907 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1908 AC_TRY_COMPILE([#include <time.h>], [
1909 const int foo = CLOCK_MONOTONIC_COARSE;
1912 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1917 AC_MSG_CHECKING(for CLOCK_REALTIME)
1918 AC_TRY_COMPILE([#include <time.h>], [
1919 const int foo = CLOCK_REALTIME;
1922 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1927 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1928 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1929 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1930 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1931 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1932 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1934 dnl hires monotonic clock support
1935 AC_SEARCH_LIBS(clock_gettime, rt)
1936 AC_CHECK_FUNCS(clock_nanosleep)
1938 dnl dynamic loader support
1939 AC_CHECK_FUNC(dlopen, DL_LIB="",
1940 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1942 if test x$dl_support = xno; then
1943 AC_MSG_WARN([No dynamic loading support available])
1945 LIBS="$LIBS $DL_LIB"
1946 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1947 dnl from glib's configure.ac
1948 AC_CACHE_CHECK([for preceeding underscore in symbols],
1950 AC_TRY_RUN([#include <dlfcn.h>
1951 int mono_underscore_test (void) { return 42; }
1953 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1954 handle = dlopen ((void*)0, 0);
1956 f1 = dlsym (handle, "mono_underscore_test");
1957 f2 = dlsym (handle, "_mono_underscore_test");
1958 } return (!f2 || f1);
1960 [mono_cv_uscore=yes],
1961 [mono_cv_uscore=no],
1964 if test "x$mono_cv_uscore" = "xyes"; then
1965 MONO_DL_NEED_USCORE=1
1967 MONO_DL_NEED_USCORE=0
1969 AC_SUBST(MONO_DL_NEED_USCORE)
1970 AC_CHECK_FUNC(dlerror)
1973 dnl ******************************************************************
1974 dnl *** Checks for the IKVM JNI interface library ***
1975 dnl ******************************************************************
1976 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])
1979 if test x$with_ikvm_native = xyes; then
1980 ikvm_native_dir=ikvm-native
1981 jdk_headers_found="IKVM Native"
1984 AC_SUBST(ikvm_native_dir)
1986 AC_CHECK_HEADERS(execinfo.h)
1988 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
1990 AC_CHECK_FUNCS(getgrgid_r)
1991 AC_CHECK_FUNCS(getgrnam_r)
1992 AC_CHECK_FUNCS(getresuid)
1993 AC_CHECK_FUNCS(setresuid)
1994 AC_CHECK_FUNCS(kqueue)
1995 AC_CHECK_FUNCS(backtrace_symbols)
1996 AC_CHECK_FUNCS(mkstemp)
1997 AC_CHECK_FUNCS(mmap)
1998 AC_CHECK_FUNCS(madvise)
1999 AC_CHECK_FUNCS(getrusage)
2000 AC_CHECK_FUNCS(getpriority)
2001 AC_CHECK_FUNCS(setpriority)
2002 AC_CHECK_FUNCS(dl_iterate_phdr)
2003 AC_CHECK_FUNCS(dladdr)
2004 AC_CHECK_FUNCS(sysconf)
2005 AC_CHECK_FUNCS(getrlimit)
2006 AC_CHECK_FUNCS(prctl)
2007 AC_CHECK_FUNCS(arc4random)
2008 AC_CHECK_FUNCS(nl_langinfo)
2010 AC_CHECK_FUNCS(sched_getaffinity)
2011 AC_CHECK_FUNCS(sched_setaffinity)
2012 AC_CHECK_FUNCS(sched_getcpu)
2014 if test x$platform_android != xyes; then
2015 AC_CHECK_FUNCS(getpwnam_r)
2016 AC_CHECK_FUNCS(getpwuid_r)
2019 AC_FUNC_STRERROR_R()
2021 dnl ****************************************************************
2022 dnl *** Check for sched_setaffinity from glibc versions before ***
2023 dnl *** 2.3.4. The older versions of the function only take 2 ***
2024 dnl *** parameters, not 3. ***
2026 dnl *** Because the interface change was not made in a minor ***
2027 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2028 dnl *** won't always indicate the interface sched_affinity has. ***
2029 dnl ****************************************************************
2030 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2031 AC_TRY_COMPILE([#include <sched.h>], [
2033 sched_setaffinity(0, &mask);
2035 # Yes, we have it...
2037 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2039 # We have the new, three-parameter version
2042 AC_TRY_COMPILE([#include <sched.h>], [
2043 CPU_COUNT((void *) 0);
2046 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2048 # We have the new, three-parameter version
2052 dnl ******************************************************************
2053 dnl *** Check for large file support ***
2054 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2055 dnl ******************************************************************
2057 # Check that off_t can represent 2**63 - 1 correctly, working around
2058 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2059 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2061 AC_DEFUN([LARGE_FILES], [
2062 large_CPPFLAGS=$CPPFLAGS
2063 CPPFLAGS="$CPPFLAGS $1"
2065 #include <sys/types.h>
2068 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2069 #define COMPILE_TIME_ASSERT(pred) \
2070 switch(0){case 0:case pred:;}
2071 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2074 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2075 large_CPPFLAGS="$large_CPPFLAGS $1"
2080 CPPFLAGS=$large_CPPFLAGS
2083 AC_MSG_CHECKING(if off_t is 64 bits wide)
2085 if test $large_offt = no; then
2086 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2087 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2089 if test $large_offt = no; then
2090 AC_MSG_WARN([No 64 bit file size support available])
2093 dnl *****************************
2094 dnl *** Checks for libsocket ***
2095 dnl *****************************
2096 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2100 dnl *****************************
2101 dnl *** Checks for libinotify ***
2102 dnl *****************************
2103 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2106 dnl *******************************
2107 dnl *** Checks for MSG_NOSIGNAL ***
2108 dnl *******************************
2109 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2110 AC_TRY_COMPILE([#include <sys/socket.h>], [
2111 int f = MSG_NOSIGNAL;
2113 # Yes, we have it...
2115 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2117 # We'll have to use signals
2121 dnl *****************************
2122 dnl *** Checks for IPPROTO_IP ***
2123 dnl *****************************
2124 AC_MSG_CHECKING(for IPPROTO_IP)
2125 AC_TRY_COMPILE([#include <netinet/in.h>], [
2126 int level = IPPROTO_IP;
2128 # Yes, we have it...
2130 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2132 # We'll have to use getprotobyname
2136 dnl *******************************
2137 dnl *** Checks for IPPROTO_IPV6 ***
2138 dnl *******************************
2139 AC_MSG_CHECKING(for IPPROTO_IPV6)
2140 AC_TRY_COMPILE([#include <netinet/in.h>], [
2141 int level = IPPROTO_IPV6;
2143 # Yes, we have it...
2145 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2147 # We'll have to use getprotobyname
2151 dnl ******************************
2152 dnl *** Checks for IPPROTO_TCP ***
2153 dnl ******************************
2154 AC_MSG_CHECKING(for IPPROTO_TCP)
2155 AC_TRY_COMPILE([#include <netinet/in.h>], [
2156 int level = IPPROTO_TCP;
2158 # Yes, we have it...
2160 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2162 # We'll have to use getprotobyname
2166 dnl *****************************
2167 dnl *** Checks for SOL_IP ***
2168 dnl *****************************
2169 AC_MSG_CHECKING(for SOL_IP)
2170 AC_TRY_COMPILE([#include <netdb.h>], [
2173 # Yes, we have it...
2175 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2177 # We'll have to use getprotobyname
2181 dnl *****************************
2182 dnl *** Checks for SOL_IPV6 ***
2183 dnl *****************************
2184 AC_MSG_CHECKING(for SOL_IPV6)
2185 AC_TRY_COMPILE([#include <netdb.h>], [
2186 int level = SOL_IPV6;
2188 # Yes, we have it...
2190 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2192 # We'll have to use getprotobyname
2196 dnl *****************************
2197 dnl *** Checks for SOL_TCP ***
2198 dnl *****************************
2199 AC_MSG_CHECKING(for SOL_TCP)
2200 AC_TRY_COMPILE([#include <netdb.h>], [
2201 int level = SOL_TCP;
2203 # Yes, we have it...
2205 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2207 # We'll have to use getprotobyname
2211 dnl *****************************
2212 dnl *** Checks for IP_PKTINFO ***
2213 dnl *****************************
2214 AC_MSG_CHECKING(for IP_PKTINFO)
2215 AC_TRY_COMPILE([#include <linux/in.h>], [
2216 int level = IP_PKTINFO;
2218 # Yes, we have it...
2220 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2225 dnl *****************************
2226 dnl *** Checks for IPV6_PKTINFO ***
2227 dnl *****************************
2228 AC_MSG_CHECKING(for IPV6_PKTINFO)
2229 AC_TRY_COMPILE([#include <netdb.h>], [
2230 int level = IPV6_PKTINFO;
2232 # Yes, we have it...
2234 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2239 dnl **********************************
2240 dnl *** Checks for IP_DONTFRAG ***
2241 dnl **********************************
2242 AC_MSG_CHECKING(for IP_DONTFRAG)
2243 AC_TRY_COMPILE([#include <netinet/in.h>], [
2244 int level = IP_DONTFRAG;
2246 # Yes, we have it...
2248 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2253 dnl **********************************
2254 dnl *** Checks for IP_DONTFRAGMENT ***
2255 dnl **********************************
2256 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2257 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2258 int level = IP_DONTFRAGMENT;
2260 # Yes, we have it...
2262 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2267 dnl **********************************
2268 dnl *** Checks for IP_MTU_DISCOVER ***
2269 dnl **********************************
2270 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2271 AC_TRY_COMPILE([#include <linux/in.h>], [
2272 int level = IP_MTU_DISCOVER;
2274 # Yes, we have it...
2276 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2281 dnl **********************************
2282 dnl *** Checks for IP_PMTUDISC_DO ***
2283 dnl **********************************
2284 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2285 AC_TRY_COMPILE([#include <linux/in.h>], [
2286 int level = IP_PMTUDISC_DO;
2288 # Yes, we have it...
2290 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2295 dnl *********************************
2296 dnl *** Check for struct ip_mreqn ***
2297 dnl *********************************
2298 AC_MSG_CHECKING(for struct ip_mreqn)
2299 AC_TRY_COMPILE([#include <netinet/in.h>], [
2300 struct ip_mreqn mreq;
2301 mreq.imr_address.s_addr = 0;
2303 # Yes, we have it...
2305 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2307 # We'll just have to try and use struct ip_mreq
2309 AC_MSG_CHECKING(for struct ip_mreq)
2310 AC_TRY_COMPILE([#include <netinet/in.h>], [
2311 struct ip_mreq mreq;
2312 mreq.imr_interface.s_addr = 0;
2314 # Yes, we have it...
2316 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2318 # No multicast support
2323 dnl **********************************
2324 dnl *** Check for getaddrinfo ***
2325 dnl **********************************
2326 AC_MSG_CHECKING(for getaddrinfo)
2331 getaddrinfo(NULL,NULL,NULL,NULL);
2333 # Yes, we have it...
2335 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2340 dnl **********************************
2341 dnl *** Check for gethostbyname2_r ***
2342 dnl **********************************
2343 AC_MSG_CHECKING(for gethostbyname2_r)
2349 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2351 # Yes, we have it...
2353 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2358 dnl **********************************
2359 dnl *** Check for gethostbyname2 ***
2360 dnl **********************************
2361 AC_MSG_CHECKING(for gethostbyname2)
2366 gethostbyname2(NULL,0);
2368 # Yes, we have it...
2370 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2375 dnl **********************************
2376 dnl *** Check for gethostbyname ***
2377 dnl **********************************
2378 AC_MSG_CHECKING(for gethostbyname)
2383 gethostbyname(NULL);
2385 # Yes, we have it...
2387 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2392 dnl **********************************
2393 dnl *** Check for getprotobyname ***
2394 dnl **********************************
2395 AC_MSG_CHECKING(for getprotobyname)
2400 getprotobyname(NULL);
2402 # Yes, we have it...
2404 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2409 dnl **********************************
2410 dnl *** Check for getprotobyname_r ***
2411 dnl **********************************
2412 AC_MSG_CHECKING(for getprotobyname_r)
2417 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2419 # Yes, we have it...
2421 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2426 dnl **********************************
2427 dnl *** Check for getnameinfo ***
2428 dnl **********************************
2429 AC_MSG_CHECKING(for getnameinfo)
2434 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2436 # Yes, we have it...
2438 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2444 dnl **********************************
2445 dnl *** Check for inet_ntop ***
2446 dnl **********************************
2447 AC_MSG_CHECKING(for inet_ntop)
2450 #include <arpa/inet.h>
2452 inet_ntop (0, NULL, NULL, 0);
2454 # Yes, we have it...
2456 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2461 dnl *****************************
2462 dnl *** Checks for libnsl ***
2463 dnl *****************************
2464 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2466 AC_CHECK_FUNCS(inet_pton inet_aton)
2468 dnl *****************************
2469 dnl *** Checks for libxnet ***
2470 dnl *****************************
2473 AC_MSG_CHECKING(for Solaris XPG4 support)
2474 if test -f /usr/lib/libxnet.so; then
2475 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2476 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2477 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2484 if test "$GCC" = "yes"; then
2485 CFLAGS="$CFLAGS -Wno-char-subscripts"
2490 dnl *****************************
2491 dnl *** Checks for libpthread ***
2492 dnl *****************************
2493 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2494 # and libpthread does not exist
2498 dnl Haiku has pthread in libroot (libc equiv)
2499 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2502 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2505 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2508 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2511 AC_CHECK_HEADERS(pthread.h)
2512 AC_CHECK_HEADERS(pthread_np.h)
2513 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2514 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2515 AC_CHECK_FUNCS(pthread_kill)
2516 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2517 AC_TRY_COMPILE([ #include <pthread.h>], [
2518 pthread_mutexattr_t attr;
2519 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2524 AC_ERROR(Posix system lacks support for recursive mutexes)
2526 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2527 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2528 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2529 AC_CHECK_FUNCS(mincore mlock munlock)
2531 dnl ***********************************
2532 dnl *** Checks for working __thread ***
2533 dnl ***********************************
2534 AC_MSG_CHECKING(for working __thread)
2535 if test "x$with_tls" != "x__thread"; then
2536 AC_MSG_RESULT(disabled)
2537 elif test "x$cross_compiling" = "xyes"; then
2538 AC_MSG_RESULT(cross compiling, assuming yes)
2541 #if defined(__APPLE__) && defined(__clang__)
2542 #error "__thread does not currently work with clang on Mac OS X"
2545 #include <pthread.h>
2547 static int res1, res2;
2549 void thread_main (void *arg)
2564 pthread_create (&t1, NULL, thread_main, 1);
2565 pthread_create (&t2, NULL, thread_main, 2);
2567 pthread_join (t1, NULL);
2568 pthread_join (t2, NULL);
2570 return !(res1 + res2 == 2);
2580 dnl **************************************
2581 dnl *** Checks for working sigaltstack ***
2582 dnl **************************************
2583 AC_MSG_CHECKING(for working sigaltstack)
2584 if test "x$with_sigaltstack" != "xyes"; then
2585 AC_MSG_RESULT(disabled)
2586 elif test "x$cross_compiling" = "xyes"; then
2587 AC_MSG_RESULT(cross compiling, assuming yes)
2594 #include <pthread.h>
2595 #include <sys/wait.h>
2596 #if defined(__FreeBSD__) || defined(__NetBSD__)
2597 #define SA_STACK SA_ONSTACK
2600 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2605 volatile char*__ptr = NULL;
2607 loop (void *ignored)
2616 struct sigaction sa;
2619 pthread_attr_t attr;
2621 sa.sa_sigaction = sigsegv_signal_handler;
2622 sigemptyset (&sa.sa_mask);
2623 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2624 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2625 perror ("sigaction");
2629 /* x86 darwin deliver segfaults using SIGBUS */
2630 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2631 perror ("sigaction");
2634 sas.ss_sp = malloc (SIGSTKSZ);
2635 sas.ss_size = SIGSTKSZ;
2637 if (sigaltstack (&sas, NULL) == -1) {
2638 perror ("sigaltstack");
2642 pthread_attr_init (&attr);
2643 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2644 printf ("pthread_create\n");
2668 for (i = 0; i < 300; ++i) {
2669 waitpid (son, &status, WNOHANG);
2670 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2675 kill (son, SIGKILL);
2681 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2688 dnl ********************************
2689 dnl *** Checks for semaphore lib ***
2690 dnl ********************************
2691 # 'Real Time' functions on Solaris
2692 # posix4 on Solaris 2.6
2693 # pthread (first!) on Linux
2694 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2696 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2697 AC_CHECK_FUNCS(shm_open)
2699 dnl ********************************
2700 dnl *** Checks for timezone stuff **
2701 dnl ********************************
2702 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2708 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2709 if test $ac_cv_struct_tm_gmtoff = yes; then
2710 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2712 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2717 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2718 if test $ac_cv_var_timezone = yes; then
2719 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2721 AC_ERROR(unable to find a way to determine timezone)
2725 dnl *********************************
2726 dnl *** Checks for math functions ***
2727 dnl *********************************
2728 AC_SEARCH_LIBS(sqrtf, m)
2730 dnl ****************************************************************
2731 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2732 dnl *** have it in the library (duh)) ***
2733 dnl ****************************************************************
2734 AC_CHECK_FUNCS(poll)
2736 dnl **********************************
2738 dnl **********************************
2739 AC_CHECK_HEADERS(sys/epoll.h)
2741 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2742 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2743 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2748 AC_CHECK_HEADERS(sys/event.h)
2749 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2751 dnl **************************************
2752 dnl * Darwin has a race that prevents us from using reliably:
2753 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2754 dnl * Since kqueue is mostly used for scaling large web servers,
2755 dnl * and very few folks run Mono on large web servers on OSX, falling
2757 dnl **************************************
2758 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2759 if test "x$host_darwin" = "xno"; then
2760 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2764 dnl ******************************
2765 dnl *** Checks for SIOCGIFCONF ***
2766 dnl ******************************
2767 AC_CHECK_HEADERS(sys/ioctl.h)
2768 AC_CHECK_HEADERS(net/if.h, [], [],
2770 #ifdef HAVE_SYS_TYPES_H
2771 # include <sys/types.h>
2773 #ifdef HAVE_SYS_SOCKET_H
2774 # include <sys/socket.h>
2777 AC_MSG_CHECKING(for ifreq)
2780 #include <sys/ioctl.h>
2788 x = (void *) &ifr->ifr_addr;
2791 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2795 dnl **********************************
2796 dnl *** Checks for sin_len ***
2797 dnl **********************************
2798 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2800 #include <netinet/in.h>
2802 struct sockaddr_in saddr;
2803 saddr.sin_len = sizeof (saddr);
2806 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2810 dnl **********************************
2811 dnl *** Checks for sin6_len ***
2812 dnl **********************************
2813 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2815 #include <netinet/in.h>
2817 struct sockaddr_in6 saddr6;
2818 saddr6.sin6_len = sizeof (saddr6);
2821 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2825 dnl **********************************
2826 dnl *** Check for getifaddrs ***
2827 dnl **********************************
2828 AC_MSG_CHECKING(for getifaddrs)
2831 #include <sys/types.h>
2832 #include <sys/socket.h>
2833 #include <ifaddrs.h>
2837 # Yes, we have it...
2839 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2843 dnl **********************************
2844 dnl *** Check for if_nametoindex ***
2845 dnl **********************************
2846 AC_MSG_CHECKING(for if_nametoindex)
2849 #include <sys/types.h>
2850 #include <sys/socket.h>
2853 if_nametoindex(NULL);
2855 # Yes, we have it...
2857 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2861 dnl **********************************
2862 dnl *** Check for access ***
2863 dnl **********************************
2864 AC_MSG_CHECKING(for access)
2870 # Yes, we have it...
2872 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2877 dnl **********************************
2878 dnl *** Checks for proclib ***
2879 dnl **********************************
2880 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.)])
2881 dnl **********************************
2882 dnl *** Checks for MonoPosixHelper ***
2883 dnl **********************************
2884 AC_CHECK_HEADERS(checklist.h)
2885 AC_CHECK_HEADERS(pathconf.h)
2886 AC_CHECK_HEADERS(fstab.h)
2887 AC_CHECK_HEADERS(attr/xattr.h)
2888 AC_CHECK_HEADERS(sys/extattr.h)
2889 AC_CHECK_HEADERS(sys/sendfile.h)
2890 AC_CHECK_HEADERS(sys/statvfs.h)
2891 AC_CHECK_HEADERS(sys/statfs.h)
2892 AC_CHECK_HEADERS(sys/vfstab.h)
2893 AC_CHECK_HEADERS(sys/xattr.h)
2894 AC_CHECK_HEADERS(sys/mman.h)
2895 AC_CHECK_HEADERS(sys/param.h)
2896 AC_CHECK_HEADERS(sys/mount.h, [], [],
2898 #ifdef HAVE_SYS_PARAM_H
2899 # include <sys/param.h>
2902 AC_CHECK_HEADERS(sys/mount.h)
2903 AC_CHECK_FUNCS(confstr)
2904 AC_CHECK_FUNCS(seekdir telldir)
2905 AC_CHECK_FUNCS(getdomainname)
2906 AC_CHECK_FUNCS(setdomainname)
2907 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2908 AC_CHECK_FUNCS(setgroups)
2909 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2910 AC_CHECK_FUNCS(getfsstat)
2911 AC_CHECK_FUNCS(lutimes futimes)
2912 AC_CHECK_FUNCS(mremap)
2913 AC_CHECK_FUNCS(remap_file_pages)
2914 AC_CHECK_FUNCS(posix_fadvise)
2915 AC_CHECK_FUNCS(posix_fallocate)
2916 AC_CHECK_FUNCS(posix_madvise)
2917 AC_CHECK_FUNCS(vsnprintf)
2918 AC_CHECK_FUNCS(sendfile)
2919 AC_CHECK_FUNCS(gethostid sethostid)
2920 AC_CHECK_FUNCS(sethostname)
2921 AC_CHECK_FUNCS(statfs)
2922 AC_CHECK_FUNCS(fstatfs)
2923 AC_CHECK_FUNCS(statvfs)
2924 AC_CHECK_FUNCS(fstatvfs)
2925 AC_CHECK_FUNCS(stime)
2926 AC_CHECK_FUNCS(ttyname_r)
2927 AC_CHECK_FUNCS(psignal)
2928 AC_CHECK_FUNCS(getlogin_r)
2929 AC_CHECK_FUNCS(lockf)
2930 AC_CHECK_FUNCS(swab)
2931 AC_CHECK_FUNCS(setusershell endusershell)
2932 AC_CHECK_FUNCS(futimens utimensat)
2933 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2934 AC_CHECK_FUNCS(readv writev preadv pwritev)
2935 AC_CHECK_FUNCS(setpgid)
2936 AC_CHECK_FUNCS(system)
2937 AC_CHECK_FUNCS(fork execv execve)
2938 AC_CHECK_FUNCS(waitpid)
2939 AC_CHECK_FUNCS(accept4)
2940 AC_CHECK_FUNCS(localtime_r)
2941 AC_CHECK_FUNCS(mkdtemp)
2942 AC_CHECK_SIZEOF(size_t)
2943 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2944 [#include <sys/types.h>
2945 #include <sys/stat.h>
2946 #include <unistd.h>])
2947 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2948 [#include <sys/types.h>
2949 #include <sys/stat.h>
2950 #include <unistd.h>])
2951 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2952 [#include <sys/time.h>])
2953 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2954 [#include <sys/socket.h>])
2955 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2956 [#include <unistd.h>
2957 #include <fcntl.h>])
2958 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2959 [#include <sys/uio.h>])
2960 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2961 [#include <sys/socket.h>])
2962 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2963 [#include <sys/poll.h>])
2964 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2965 [#include <sys/socket.h>])
2966 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2967 [#include <sys/socket.h>])
2968 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2969 [#include <netinet/in.h>])
2970 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
2971 [#include <netinet/in.h>])
2972 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
2973 [#include <sys/un.h>])
2974 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
2975 [#include <sys/types.h>
2976 #include <sys/stat.h>
2977 #include <unistd.h>])
2978 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
2979 [#include <time.h>])
2980 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
2981 [#include <sys/time.h>
2982 #include <sys/types.h>
2983 #include <utime.h>])
2984 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
2985 [#include <sys/time.h>])
2986 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
2987 [#include <sys/types.h>
2988 #include <utime.h>])
2990 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
2991 [#include <sys/types.h>
2992 #include <dirent.h>])
2994 [struct passwd.pw_gecos],,,
2995 [#include <sys/types.h>
2998 [struct statfs.f_flags],,,
2999 [#include <sys/types.h>
3000 #include <sys/vfs.h>])
3002 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3003 [#include <sys/types.h>
3004 #include <sys/stat.h>
3005 #include <unistd.h>])
3007 dnl Favour xattr through glibc, but use libattr if we have to
3008 AC_CHECK_FUNC(lsetxattr, ,
3009 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3013 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3015 [struct kinfo_proc.kp_proc],,,
3016 [#include <sys/types.h>
3017 #include <sys/param.h>
3018 #include <sys/sysctl.h>
3019 #include <sys/proc.h>
3022 dnl *********************************
3023 dnl *** Checks for Windows compilation ***
3024 dnl *********************************
3025 AC_CHECK_HEADERS(sys/time.h)
3026 AC_CHECK_HEADERS(sys/param.h)
3027 AC_CHECK_HEADERS(dirent.h)
3029 dnl ******************************************
3030 dnl *** Checks for OSX and iOS compilation ***
3031 dnl ******************************************
3032 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3034 dnl *********************************
3035 dnl *** Check for Console 2.0 I/O ***
3036 dnl *********************************
3037 AC_CHECK_HEADERS([curses.h])
3038 AC_CHECK_HEADERS([term.h], [], [],
3043 AC_CHECK_HEADERS([termios.h])
3045 dnl *********************************
3046 dnl *** Checks for random ***
3047 dnl *********************************
3048 if test x$host_darwin = xno; then
3049 AC_CHECK_HEADERS(sys/random.h)
3050 AC_CHECK_FUNCS(getrandom getentropy)
3053 dnl *********************************
3054 dnl *** Checks for Mono.Native ***
3055 dnl *********************************
3057 AC_MSG_CHECKING(for linux/in.h)
3059 #include <sys/socket.h>
3060 #include <linux/in.h>
3064 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3069 AC_CHECK_HEADERS([linux/if_packet.h])
3071 AC_MSG_CHECKING(for struct in_pktinfo)
3073 #ifdef HAVE_LINUX_IN_H
3074 #include <sys/socket.h>
3075 #include <linux/in.h>
3077 #include <netinet/in.h>
3080 struct in_pktinfo pktinfo;
3083 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3088 AC_MSG_CHECKING(for struct ip_mreqn)
3091 #include <sys/socket.h>
3092 #include <linux/in.h>
3094 #include <netinet/in.h>
3097 struct ip_mreqn mreqn;
3100 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3105 if test x$host_darwin = xno; then
3106 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3109 if test x$mono_native_platform_ios = xno; then
3110 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3111 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3112 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3115 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3116 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3117 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3118 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3119 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3120 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3121 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3122 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3123 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_FADVISE, 1, [posix_fadvise])])
3124 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3125 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3126 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3127 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3128 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3129 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3130 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3131 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3132 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3133 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3135 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3136 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3138 AC_CHECK_MEMBER(struct stat.st_birthtimespec, [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtime])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3139 AC_CHECK_MEMBER(struct stat.st_atimespec, [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3140 AC_CHECK_MEMBER(struct stat.st_atim, [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3141 AC_CHECK_MEMBER(struct stat.st_atimensec, [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3142 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3143 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3144 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3146 AC_MSG_CHECKING(for struct statfs)
3148 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3149 #include <sys/mount.h>
3151 #include <sys/statfs.h>
3157 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3162 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3163 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3166 AC_MSG_CHECKING(for readdir_r)
3171 struct dirent* entry;
3172 struct dirent* result;
3173 readdir_r(dir, entry, &result);
3176 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3181 AC_MSG_CHECKING(for kevent with void *data)
3183 #include <sys/types.h>
3184 #include <sys/event.h>
3186 struct kevent event;
3188 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3191 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3196 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3197 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3199 AC_MSG_CHECKING(for sendfile with 4 arguments)
3201 #include <sys/sendfile.h>
3203 int result = sendfile(0, 0, 0, 0);
3206 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3211 AC_MSG_CHECKING(for sendfile with 6 arguments)
3214 #include <sys/types.h>
3215 #include <sys/socket.h>
3216 #include <sys/uio.h>
3218 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3221 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3226 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3227 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3228 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3229 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3231 ORIG_CFLAGS="$CFLAGS"
3232 CFLAGS="-Werror -Wsign-conversion"
3234 AC_MSG_CHECKING(for getnameinfo with signed flags)
3236 #include <sys/types.h>
3239 const struct sockaddr *addr;
3246 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3249 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3254 CFLAGS="$ORIG_CFLAGS"
3256 if test "x$host_linux" = "xyes"; then
3257 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3259 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3262 ORIG_CFLAGS="$CFLAGS"
3263 CFLAGS="-Werror -Wsign-conversion"
3265 AC_MSG_CHECKING(for bind with unsigned addrlen)
3267 #include <sys/socket.h>
3270 struct sockaddr* addr;
3272 bind(fd, addr, addrLen);
3275 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3280 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3282 #include <netinet/in.h>
3283 #include <netinet/tcp.h>
3285 struct ipv6_mreq opt;
3286 unsigned int index = 0;
3287 opt.ipv6mr_interface = index;
3290 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3295 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3297 #include <sys/inotify.h>
3301 int result = inotify_rm_watch(fd, wd);
3304 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3309 CFLAGS="$ORIG_CFLAGS"
3311 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3312 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3314 elif test "x$cross_compiling" = "xyes"; then
3315 AC_MSG_RESULT(cross compiling, assuming yes)
3316 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3319 #include <sys/mman.h>
3325 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3329 shm_unlink("/mono_configure_shm_open");
3331 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3332 // on at least the current version of Mac OS X
3334 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3341 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3347 AC_MSG_CHECKING(for getpriority with int who)
3349 #include <sys/resource.h>
3353 int result = getpriority(which, who);
3356 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3361 AC_MSG_CHECKING(for kevent with int parameters)
3363 #include <sys/types.h>
3364 #include <sys/event.h>
3367 const struct kevent* chagelist;
3369 struct kevent* eventlist;
3371 const struct timespec* timeout;
3372 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3375 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3380 ORIG_CFLAGS="$CFLAGS"
3381 CFLAGS="-Werror -Wimplicit-function-declaration"
3383 AC_MSG_CHECKING(for mkstemps)
3391 int result = mkstemps(template, suffixlen);
3394 AC_DEFINE(HAVE_MKSTEMPS, 1, [mkstemps])
3400 CFLAGS="$ORIG_CFLAGS"
3402 if test "x$have_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3403 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3406 AC_MSG_CHECKING(for tcp/var.h)
3408 #include <sys/types.h>
3409 #include <sys/socketvar.h>
3410 #include <netinet/ip.h>
3411 #include <netinet/tcp.h>
3412 #include <netinet/tcp_var.h>
3416 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3421 AC_CHECK_HEADERS([sys/cdefs.h])
3423 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3425 #ifdef HAVE_SYS_CDEFS_H
3426 #include <sys/cdefs.h>
3428 #include <netinet/tcp.h>
3430 int result = TCP_ESTABLISHED;
3433 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3438 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3440 AC_MSG_CHECKING(for struct rt_msghdr)
3442 #include <sys/types.h>
3443 #include <net/route.h>
3448 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3453 AC_CHECK_HEADERS([sys/sysctl.h])
3454 AC_CHECK_HEADERS([linux/rtnetlink.h])
3456 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3457 AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])])
3458 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3460 ORIG_CFLAGS="$CFLAGS"
3461 CFLAGS="-Werror -Weverything"
3463 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3467 size_t namelen = 20;
3469 int result = getdomainname(name, namelen);
3472 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3477 CFLAGS="$ORIG_CFLAGS"
3479 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3480 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3481 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3483 if test "x$ac_cv_func_inotify_init" = "xyes" -a "x$ac_cv_func_inotify_add_watch" = "xyes" -a "x$ac_cv_func_inotify_rm_watch" = "xyes"; then
3484 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3485 elif test "x$host_linux" = "xyes"; then
3486 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3489 AC_CHECK_HEADERS([crt_externs.h])
3491 AC_MSG_CHECKING(for _NSGetEnviron)
3493 #include <crt_externs.h>
3495 char **result = *(_NSGetEnviron());
3498 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3503 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3506 dnl *********************************
3507 dnl *** Checks for Windows compilation ***
3508 dnl *********************************
3509 AC_CHECK_HEADERS(winternl.h)
3511 jdk_headers_found=no
3512 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3513 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3514 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3515 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3516 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3517 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3518 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3520 dnl *********************************
3521 dnl *** Check for struct ip_mreqn ***
3522 dnl *********************************
3523 AC_MSG_CHECKING(for struct ip_mreqn)
3524 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3525 struct ip_mreqn mreq;
3526 mreq.imr_address.s_addr = 0;
3528 # Yes, we have it...
3530 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3532 # We'll just have to try and use struct ip_mreq
3534 AC_MSG_CHECKING(for struct ip_mreq)
3535 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3536 struct ip_mreq mreq;
3537 mreq.imr_interface.s_addr = 0;
3539 # Yes, we have it...
3541 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3543 # No multicast support
3548 dnl **********************************
3549 dnl *** Check for getaddrinfo ***
3550 dnl **********************************
3551 AC_MSG_CHECKING(for getaddrinfo)
3554 #include <winsock2.h>
3555 #include <ws2tcpip.h>
3557 getaddrinfo(NULL,NULL,NULL,NULL);
3559 # Yes, we have it...
3561 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3566 dnl **********************************
3567 dnl *** Check for gethostbyname ***
3568 dnl **********************************
3569 AC_MSG_CHECKING(for gethostbyname)
3572 #include <winsock2.h>
3573 #include <ws2tcpip.h>
3575 gethostbyname(NULL);
3577 # Yes, we have it...
3579 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3584 dnl **********************************
3585 dnl *** Check for getprotobyname ***
3586 dnl **********************************
3587 AC_MSG_CHECKING(for getprotobyname)
3590 #include <winsock2.h>
3591 #include <ws2tcpip.h>
3593 getprotobyname(NULL);
3595 # Yes, we have it...
3597 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3602 dnl **********************************
3603 dnl *** Check for getnameinfo ***
3604 dnl **********************************
3605 AC_MSG_CHECKING(for getnameinfo)
3608 #include <winsock2.h>
3609 #include <ws2tcpip.h>
3611 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3613 # Yes, we have it...
3615 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3620 dnl **********************************
3621 dnl *** Check for inet_ntop ***
3622 dnl **********************************
3623 AC_MSG_CHECKING(for inet_ntop)
3626 #include <winsock2.h>
3627 #include <ws2tcpip.h>
3629 inet_ntop (0, NULL, NULL, 0);
3631 # Yes, we have it...
3633 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3638 dnl **********************************
3639 dnl *** Check for inet_pton ***
3640 dnl **********************************
3641 AC_MSG_CHECKING(for inet_pton)
3644 #include <winsock2.h>
3645 #include <ws2tcpip.h>
3650 inet_pton (0, NULL, NULL);
3652 # Yes, we have it...
3654 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3659 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3660 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3661 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3662 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3663 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3664 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3665 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3669 AC_MSG_CHECKING(for socklen_t)
3671 #include <sys/types.h>
3672 #include <sys/socket.h>
3676 ac_cv_c_socklen_t=yes
3677 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3683 AC_CHECK_FUNCS(execvp)
3685 dnl ****************************
3686 dnl *** Look for /dev/random ***
3687 dnl ****************************
3689 AC_MSG_CHECKING([if usage of random device is requested])
3690 AC_ARG_ENABLE(dev-random,
3691 [ --disable-dev-random disable the use of the random device (enabled by default)],
3692 try_dev_random=$enableval, try_dev_random=yes)
3694 AC_MSG_RESULT($try_dev_random)
3698 dnl IBM i does not have /dev/random, use unblocking only
3701 NAME_DEV_RANDOM="/dev/urandom"
3704 dnl Win32 does not have /dev/random, they have their own method...
3706 *-mingw*|*-*-cygwin*)
3707 ac_cv_have_dev_random=no
3710 dnl Everywhere else, it's /dev/random
3713 NAME_DEV_RANDOM="/dev/random"
3717 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3719 dnl Now check if the device actually exists
3721 if test "x$try_dev_random" = "xyes"; then
3722 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3723 [if test -r "$NAME_DEV_RANDOM" ; then
3724 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3725 if test "x$ac_cv_have_dev_random" = "xyes"; then
3726 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3729 AC_MSG_CHECKING(for random device)
3730 ac_cv_have_dev_random=no
3731 AC_MSG_RESULT(has been disabled)
3734 if test "x$host_win32" = "xyes"; then
3735 AC_DEFINE(HAVE_CRYPT_RNG)
3738 if test "x$ac_cv_have_dev_random" = "xno" \
3739 && test "x$host_win32" = "xno"; then
3742 *** A system-provided entropy source was not found on this system.
3743 *** Because of this, the System.Security.Cryptography random number generator
3744 *** will throw a NotImplemented exception.
3746 *** If you are seeing this message, and you know your system DOES have an
3747 *** entropy collection in place, please report an issue on GitHub and
3748 *** provide information about the system and how to access the random device.
3750 *** Otherwise you can install either egd or prngd and set the environment
3751 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3755 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)
3757 AC_MSG_CHECKING([if big-arrays are to be enabled])
3758 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)
3759 if test "x$enable_big_arrays" = "xyes" ; then
3760 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3761 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3763 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3766 AC_MSG_RESULT($enable_big_arrays)
3772 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3774 if test "x$enable_dtrace" = "xyes"; then
3775 if test "x$has_dtrace" = "xno"; then
3776 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3778 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3779 if test "x$DTRACE" = "xno"; then
3780 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3782 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3783 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3789 if test "x$enable_dtrace" = "xyes"; then
3790 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3792 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3795 DTRACEFLAGS="-arch ppc64"
3798 DTRACEFLAGS="-arch x86_64"
3807 DTRACEFLAGS="-arch ppc"
3810 DTRACEFLAGS="-arch i386"
3817 AC_SUBST(DTRACEFLAGS)
3823 AC_CHECK_HEADERS([sys/sdt.h])
3825 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3826 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3828 dnl **************************
3829 dnl *** AOT cross offsets ***
3830 dnl **************************
3832 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3833 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3839 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3840 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3841 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)
3842 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3843 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3845 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3847 if test "x$enable_llvm" = "xdefault"; then
3848 enable_llvm=$enable_llvm_default
3851 enable_llvm_msvc_only="no"
3852 if test "x$enable_llvm" = "xyes"; then
3853 if test "x$host_win32" = "xyes"; then
3854 if test "x$cross_compiling" = "xno"; then
3857 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
3858 enable_llvm_msvc_only="yes"
3861 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
3865 if test "x$enable_loadedllvm" = "xyes"; then
3866 AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
3867 enable_loadedllvm=no
3873 if test "x$enable_llvm" = "xyes"; then
3874 if test "x$with_llvm" != "x"; then
3875 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3876 if test x$host_win32 = xyes; then
3877 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3879 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3880 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3883 if test x$host_win32 = xyes; then
3884 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3886 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3888 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3893 LLVM_CODEGEN_LIBS="x86codegen"
3896 LLVM_CODEGEN_LIBS="armcodegen"
3899 LLVM_CODEGEN_LIBS="aarch64codegen"
3902 LLVM_CODEGEN_LIBS="powerpccodegen"
3905 if test "x$host" != "x$target"; then
3906 # No need for jit libs
3910 AC_SUBST(LLVM_CODEGEN_LIBS)
3911 AC_SUBST(EXTERNAL_LLVM_CONFIG)
3913 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
3914 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
3915 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
3917 if test "x$enable_llvm_msvc_only" != "xyes"; then
3918 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
3920 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
3924 # AC_DEFINE necessary for correct restore behavior on Linux
3925 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3926 if test "x$internal_llvm" != "xno"; then
3927 if test "x$enable_llvm_msvc_only" != "xyes"; then
3928 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
3930 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
3934 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
3935 if test "x$enable_llvm_asserts" != "xno"; then
3936 if test "x$enable_llvm_msvc_only" != "xyes"; then
3937 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
3939 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
3943 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
3945 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
3946 if test "x$enable_loadedllvm" = "xyes"; then
3947 if test "x$enable_llvm_msvc_only" != "xyes"; then
3948 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
3952 if test "x$enable_llvm" = "xyes"; then
3953 enable_llvm_runtime=yes
3956 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
3957 if test "x$enable_llvm_runtime" = "xyes"; then
3958 if test "x$enable_llvm_msvc_only" != "xyes"; then
3959 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
3961 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
3966 ACCESS_UNALIGNED="yes"
3970 SQLITE="libsqlite.so.0"
3971 SQLITE3="libsqlite3.so.0"
3973 GDKX11="libgdk-x11-2.0.so.0"
3974 GTKX11="libgtk-x11-2.0.so.0"
3975 XINERAMA="libXinerama.so.1"
3977 sizeof_register="SIZEOF_VOID_P"
3980 boehm_supported=true
3989 ACCESS_UNALIGNED="no"
3997 ACCESS_UNALIGNED="no"
3999 AC_MSG_CHECKING(for mips n32)
4001 #if _MIPS_SIM != _ABIN32
4018 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4023 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4024 # int astruct __attribute__ ((visibility ("hidden")));
4027 # void *p = &astruct;
4029 # gcc -fPIC --shared -o libfoo.so foo.c
4031 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4032 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4033 have_visibility_hidden=no
4036 have_visibility_hidden=no
4047 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4054 openbsd*|freebsd*|kfreebsd-gnu*)
4061 x86_64-*-* | amd64-*-*)
4064 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4065 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4072 BTLS_PLATFORM=x86_64
4073 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4078 BTLS_PLATFORM=x86_64
4079 boehm_supported=false
4081 openbsd*|freebsd*|kfreebsd-gnu*)
4084 BTLS_PLATFORM=x86_64
4088 BTLS_PLATFORM=x86_64
4093 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4099 ACCESS_UNALIGNED="no"
4106 if test x"$GCC" = xyes; then
4107 # We don't support v8 cpus
4108 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4110 if test x"$AR" = xfalse; then
4111 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4114 *-mingw*|*-*-cygwin*)
4115 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4116 have_visibility_hidden=no
4120 # Old Boehm fails to compile for x86_64-mingw.
4121 # It is trivial to fix, but just silently drop it.
4122 boehm_supported=false
4126 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4127 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4128 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4129 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4131 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4132 if ! (echo $CC | grep -q -- 'clang'); then
4133 CFLAGS="$CFLAGS -mminimal-toc"
4137 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4143 BTLS_PLATFORM=powerpc
4144 dnl on AIX/PASE, shared libraries can be inside archives
4145 dnl if they are, we specify them by lib.a(lib.so)
4146 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4147 LIBC="libc.a(shr_64.o)"
4148 INTL="libintl.a(libintl.so.8)"
4152 BTLS_PLATFORM=powerpc
4161 ACCESS_UNALIGNED="no"
4162 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4168 ACCESS_UNALIGNED="no"
4169 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4174 ACCESS_UNALIGNED="no"
4176 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4179 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4181 arm*-linux*-gnueabi)
4182 BTLS_PLATFORM=armsoft
4189 ACCESS_UNALIGNED="no"
4190 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4192 aarch64-*darwin*ilp32)
4195 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4197 # assuming no other target other than watchOS is using aarch64*darwin triple
4201 # https://lkml.org/lkml/2012/7/15/133
4204 boehm_supported=false
4207 BTLS_PLATFORM=aarch64
4208 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4213 ACCESS_UNALIGNED="yes"
4216 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4223 BTLS_PLATFORM=riscv32
4225 boehm_supported=false
4232 BTLS_PLATFORM=riscv64
4234 boehm_supported=false
4240 if test "x$host" != "x$target"; then
4241 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4243 enable_support_build=no
4245 # Can't use tls, since it depends on the runtime detection of tls offsets
4246 # in mono-compiler.h
4253 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4257 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4261 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4265 powerpc64-ps3-linux-gnu)
4267 arch_target=powerpc64
4268 AC_DEFINE(TARGET_PS3, 1, [...])
4269 # It would be better to just use TARGET_POWERPC64, but lots of code already
4271 AC_DEFINE(__mono_ppc64__, 1, [...])
4272 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4274 target_byte_order=G_BIG_ENDIAN
4276 powerpc64-xbox360-linux-gnu)
4278 arch_target=powerpc64
4279 AC_DEFINE(TARGET_XBOX360, 1, [...])
4280 # It would be better to just use TARGET_POWERPC64, but lots of code already
4283 target_byte_order=G_BIG_ENDIAN
4287 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4291 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4304 AC_DEFINE(TARGET_PS4, 1, [...])
4305 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4306 CPPFLAGS="$CPPFLAGS"
4317 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4318 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4325 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4326 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4332 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4340 AC_DEFINE(TARGET_ANDROID, 1, [...])
4347 AC_DEFINE(TARGET_WASM, 1, [...])
4351 AC_DEFINE(TARGET_X86, 1, [...])
4355 AC_DEFINE(TARGET_AMD64, 1, [...])
4359 AC_DEFINE(TARGET_ARM, 1, [...])
4361 ACCESS_UNALIGNED="no"
4364 AC_DEFINE(TARGET_ARM64, 1, [...])
4368 AC_DEFINE(TARGET_POWERPC, 1, [...])
4371 AC_DEFINE(TARGET_POWERPC, 1, [...])
4372 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4375 AC_DEFINE(TARGET_S390X, 1, [...])
4378 AC_DEFINE(TARGET_MIPS, 1, [...])
4381 AC_DEFINE(TARGET_SPARC, 1, [...])
4384 AC_DEFINE(TARGET_SPARC64, 1, [...])
4387 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4388 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4391 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4392 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4397 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4398 target_sizeof_void_p=4
4401 target_sizeof_void_p=8
4404 AC_MSG_ERROR([unknown target])
4410 AC_DEFINE(HOST_WASM, 1, [...])
4413 AC_DEFINE(HOST_X86, 1, [...])
4416 AC_DEFINE(HOST_AMD64, 1, [...])
4419 AC_DEFINE(HOST_ARM, 1, [...])
4422 AC_DEFINE(HOST_ARM64, 1, [...])
4425 AC_DEFINE(HOST_POWERPC, 1, [...])
4428 AC_DEFINE(HOST_POWERPC, 1, [...])
4429 AC_DEFINE(HOST_POWERPC64, 1, [...])
4432 AC_DEFINE(HOST_S390X, 1, [...])
4435 AC_DEFINE(HOST_MIPS, 1, [...])
4438 AC_DEFINE(HOST_SPARC, 1, [...])
4441 AC_DEFINE(HOST_SPARC64, 1, [...])
4444 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4445 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4448 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4449 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4453 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4455 X86 | AMD64 | ARM | ARM64)
4456 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4460 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4461 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4467 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4468 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4470 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4472 if test "x$enable_vtune" = "xyes"; then
4473 if test "x$with_vtune" = "x"; then
4474 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4476 VTUNE_PATH=$with_vtune
4478 VTUNE_INCLUDE=$VTUNE_PATH/include
4481 VTUNE_LIB=$VTUNE_PATH/lib32
4484 VTUNE_LIB=$VTUNE_PATH/lib64
4487 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4490 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4491 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4493 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4494 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4497 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4498 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4500 AC_SUBST(VTUNE_LIBS)
4501 AC_SUBST(VTUNE_CFLAGS)
4503 dnl Use GCC atomic ops if they work on the target.
4504 if test x$GCC = "xyes"; then
4506 X86 | AMD64 | ARM | ARM64 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4507 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4512 if test "x$target_mach" = "xyes"; then
4514 if test "x$TARGET_SYS" = "xWATCHOS"; then
4515 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4516 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4517 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4519 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64"; then
4520 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4521 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4522 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4526 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4527 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4528 #error fail this for ios
4531 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4532 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4533 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4536 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4537 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4538 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4543 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4546 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4548 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4550 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4551 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4552 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4553 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4555 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4558 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4560 if test "x$sizeof_register" = "x4"; then
4561 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4562 elif test "x$sizeof_register" = "x8"; then
4563 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4565 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4568 if test "x$have_visibility_hidden" = "xyes"; then
4569 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4572 if test "x$have_deprecated" = "xyes"; then
4573 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4577 dnl Simple Generational checks (sgen)
4580 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4581 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4582 if test x$buildsgen = xyes; then
4583 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4584 SGEN_DEFINES="-DHAVE_SGEN_GC"
4587 if test x$with_sgen_default_concurrent != xno; then
4588 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4589 conc_gc_msg=" (concurrent by default)"
4592 if test "x$gc_msg" = "x"; then
4593 gc_msg="sgen$conc_gc_msg"
4595 gc_msg="sgen$conc_gc_msg and $gc_msg"
4598 AC_SUBST(SGEN_DEFINES)
4599 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4601 jit_status="Building and using the JIT"
4609 INTL="libintl.dylib"
4610 SQLITE="libsqlite.0.dylib"
4611 SQLITE3="libsqlite3.0.dylib"
4613 GDKX11="libgdk-x11-2.0.dylib"
4614 GTKX11="libgtk-x11-2.0.dylib"
4619 SQLITE="libsqlite.so"
4620 SQLITE3="libsqlite3.so"
4630 SQLITE="libsqlite.so"
4631 SQLITE3="libsqlite3.so"
4636 SQLITE="libsqlite.so"
4637 SQLITE3="libsqlite3.so"
4641 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4642 AC_MSG_CHECKING(for the soname of libX11.so)
4643 for i in $x_libraries $dlsearch_path; do
4645 if test -f $i/libX11.so.$r; then
4652 if test "x$X11" = "xlibX11.so"; then
4653 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4661 ######################################
4663 ######################################
4667 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4668 if test x$GCC = xyes; then
4669 GNUC_UNUSED='__attribute__((__unused__))'
4670 GNUC_NORETURN='__attribute__((__noreturn__))'
4672 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4675 AC_SUBST(GNUC_PRETTY)
4676 AC_SUBST(GNUC_UNUSED)
4677 AC_SUBST(GNUC_NORETURN)
4678 AC_SUBST(BREAKPOINT)
4680 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4683 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4699 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4704 arm*-darwin*|aarch64*-*|riscv*)
4705 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4708 ORDER=G_LITTLE_ENDIAN
4711 LDFLAGS="$LDFLAGS -ltextencoding"
4714 CFLAGS="$CFLAGS -pthread"
4715 LDFLAGS="$LDFLAGS -pthread"
4726 # Defined for all targets/platforms using classic Windows API support.
4727 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4728 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4730 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4731 AC_CHECK_FUNCS(getrlimit)
4732 AC_CHECK_FUNCS(fork execv execve)
4733 AC_CHECK_FUNCS(waitpid)
4735 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4737 if test x$with_overridable_allocators = xyes; then
4738 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4739 AC_MSG_NOTICE([Overridable allocator support enabled])
4741 AC_MSG_NOTICE([Overridable allocator support disabled])
4745 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4746 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4747 # removed once support for 10.6 is dropped.
4749 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4751 if test x$target_osx = xyes; then
4752 AC_CHECK_FUNCS(getpwuid_r)
4753 elif test x$target_ios = xno; then
4754 AC_CHECK_FUNCS(strndup getpwuid_r)
4757 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
4759 AC_SEARCH_LIBS(sqrtf, m)
4761 # nanosleep may not be part of libc, also search it in other libraries
4762 AC_SEARCH_LIBS(nanosleep, rt)
4764 AC_SEARCH_LIBS(dlopen, dl)
4765 old_ldflags="${LDFLAGS}"
4766 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4767 if test $lt_cv_prog_gnu_ld = yes; then
4768 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4771 *-*-aix*|*-*-os400*)
4774 dnl Try to use export-dynamic anyways
4775 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4779 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4780 if test $found_export_dynamic = no; then
4781 LDFLAGS="${old_ldflags}"
4784 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4785 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4786 AC_CHECK_LIB(iconv, iconv_open)
4787 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4788 AC_SUBST(HAVE_ALLOCA_H)
4790 # Get the exact type of size_t, not just its size.
4791 # This is so we can find an exact printf format among u, lu, llu, I64u.
4792 # To avoid warnings about slight mismatches.
4793 # C99 runtime "zu" dependency is being avoided here.
4795 # We have to compile as C++ because C is too lenient
4796 # and lets the wrong thing compile, with warnings.
4798 # Note: "zu" or ifdef <something> have the advantage
4799 # of producing installable "biarch" headers. i.e. one Mac header
4800 # for Mac/x86 and Mac/amd64.
4804 # Check long before int because it is the overwhelming Unix answer,
4805 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4807 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4809 AC_MSG_CHECKING(if size_t is unsigned long)
4810 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4812 unsigned long *a = (size_t*)0;
4815 AC_SUBST(GSIZE_FORMAT, '"lu"')
4818 AC_MSG_CHECKING(if size_t is unsigned int)
4819 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4821 unsigned *a = (size_t*)0;
4824 AC_SUBST(GSIZE_FORMAT, '"u"')
4826 # At this point the majority of systems have their answer,
4827 # and we descend into non-standard or new-standard territory.
4829 # Check __int64 first because I64 on some systems predates ll, enabling
4830 # new compiler/old runtime interop, and the types always have the same size.
4832 AC_MSG_CHECKING(if size_t is unsigned __int64)
4833 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4835 unsigned __int64 *a = (size_t*)0;
4838 AC_SUBST(GSIZE_FORMAT, '"I64u"')
4841 AC_MSG_CHECKING(if size_t is unsigned long long)
4842 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4844 unsigned long long *a = (size_t*)0;
4847 AC_SUBST(GSIZE_FORMAT, '"llu"')
4850 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4858 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4859 # This provides for an exact match with functions that
4860 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4861 # uintptr_t is not necessarily the same.
4863 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4864 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4866 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4876 AC_SUBST(GSIZE_FORMAT)
4879 # END OF EGLIB CHECKS
4882 AC_ARG_WITH([libgdiplus],
4883 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4884 [], [with_libgdiplus=installed])
4886 # default install location
4887 libgdiplus_install_loc=libgdiplus${libsuffix}
4890 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4894 case $with_libgdiplus in
4901 if test x$cross_compiling = xno; then
4902 if test x$host_darwin = xyes; then
4903 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4905 libgdiplus_install_loc=$a
4913 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
4916 /*) # absolute path, assume it is an install location
4917 libgdiplus_loc=$with_libgdiplus
4918 libgdiplus_install_loc=$with_libgdiplus
4922 libgdiplus_loc=`pwd`/$with_libgdiplus
4925 AC_SUBST(libgdiplus_loc)
4926 AC_SUBST(libgdiplus_install_loc)
4928 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)
4929 if test "x$icall_symbol_map" = "xyes"; then
4930 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
4933 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
4934 if test "x$icall_export" = "xyes"; then
4935 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
4938 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
4939 if test "x$icall_tables" = "xno"; then
4940 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
4943 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
4945 if test "x$with_tls" = "x__thread"; then
4946 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
4947 # Pass the information to libgc
4948 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
4949 AC_MSG_CHECKING(if the tls_model attribute is supported)
4950 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
4953 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
4959 if test ${TARGET} = ARM; then
4960 dnl ******************************************
4961 dnl *** Check to see what FPU is available ***
4962 dnl ******************************************
4963 AC_MSG_CHECKING(which FPU to use)
4966 # This is a bit tricky:
4968 # if (__ARM_PCS_VFP) {
4969 # /* mfloat-abi=hard == VFP with hard ABI */
4970 # } elif (!__SOFTFP__) {
4971 # /* mfloat-abi=softfp == VFP with soft ABI */
4973 # /* mfloat-abi=soft == no VFP */
4976 # The exception is iOS (w/ GCC) where none of the above
4977 # are defined (but iOS always uses the 'softfp' ABI).
4979 # No support for FPA.
4984 # iOS GCC always uses the 'softfp' ABI.
4985 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
4989 # Are we using the 'hard' ABI?
4990 if test x$fpu = xNONE; then
4991 AC_TRY_COMPILE([], [
4992 #ifndef __ARM_PCS_VFP
4993 #error "Float ABI is not 'hard'"
5002 # No 'hard' ABI. 'soft' or 'softfp'?
5003 if test x$fpu = xNONE; then
5004 AC_TRY_COMPILE([], [
5006 #error "Float ABI is not 'softfp'"
5015 if test x$arm_fpu != x; then
5020 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5023 dnl *********************************************
5024 dnl *** Check which ARM version(s) we can use ***
5025 dnl *********************************************
5026 AC_MSG_CHECKING(which ARM version to use)
5028 AC_TRY_COMPILE([], [
5029 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5030 #error Not on ARM v5.
5038 AC_TRY_COMPILE([], [
5039 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5040 #error Not on ARM v6.
5049 AC_TRY_COMPILE([], [
5050 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5051 #error Not on ARM v7.
5061 AC_MSG_RESULT($arm_ver)
5063 if test x$arm_v5 = xyes; then
5064 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5065 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5068 if test x$arm_v6 = xyes; then
5069 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5070 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5073 if test x$arm_v7 = xyes; then
5074 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5075 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5079 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5080 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5082 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5084 if test x$fpabi = xauto; then
5085 AC_TRY_COMPILE([], [
5086 #ifdef __riscv_float_abi_double
5096 if test x$fpabi = xauto; then
5097 AC_TRY_COMPILE([], [
5098 #ifdef __riscv_float_abi_single
5108 if test x$fpabi = xauto; then
5109 AC_TRY_COMPILE([], [
5110 #ifdef __riscv_float_abi_soft
5122 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5123 AC_MSG_RESULT([double-precision])
5126 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5127 AC_MSG_ERROR([single-precision, not supported])
5130 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5131 AC_MSG_RESULT([soft float])
5134 AC_MSG_ERROR([unknown])
5137 AC_MSG_ERROR([invalid option: $fpabi])
5142 if test ${TARGET} = unknown; then
5143 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5144 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5147 if test "x$platform_android" = "xyes"; then
5148 case "x${TARGET}" in
5153 BTLS_PLATFORM=android-armv5
5157 BTLS_PLATFORM=android-armv6
5161 BTLS_PLATFORM=android-armv7
5170 BTLS_PLATFORM=android-v8a
5174 BTLS_PLATFORM=android-x86
5178 BTLS_PLATFORM=android-x64
5186 if test ${ACCESS_UNALIGNED} = no; then
5187 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5190 if test x$host_darwin = xyes; then
5191 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5193 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5194 [AC_MSG_RESULT([no])],
5196 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5198 RANLIB="$RANLIB -no_warning_for_no_symbols"
5199 AC_MSG_RESULT([yes])
5206 # Pass CPPFLAGS to libgc configure
5207 # We should use a separate variable for this to avoid passing useless and
5208 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5209 # This should be executed late so we pick up the final version of CPPFLAGS
5210 # The problem with this approach, is that during a reconfigure, the main
5211 # configure scripts gets invoked with these arguments, so we use separate
5212 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5213 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5214 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5215 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5217 # Don't pass -finstrument-for-thread-suspension in,
5218 # if these are instrumented it will be very bad news
5219 # (infinite recursion, undefined parking behavior, etc)
5220 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5221 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\""
5222 if test "x$support_boehm" = "xyes"; then
5223 AC_CONFIG_SUBDIRS(libgc)
5229 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5230 if test x$with_malloc_mempools = xyes; then
5232 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5237 DISABLE_MCS_DOCS=default
5238 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5239 if test x$with_mcs_docs != xyes; then
5240 DISABLE_MCS_DOCS=yes
5243 if test -n "$INSTALL_4_x_TRUE"; then :
5244 DISABLE_MCS_DOCS=yes
5246 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5247 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5250 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)],[
5251 if test x$with_lazy_gc_thread_creation != xno ; then
5252 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5254 ], [with_lazy_gc_thread_creation=no])
5256 dnl *****************************
5257 dnl *** Thread suspend policy ***
5258 dnl *****************************
5260 dnl Set a default hybrid or cooperative suspend on some platforms
5262 dnl Coop default is set by the bitcode preset.
5264 dnl If coop isn't on by default, maybe hybrid should be?
5265 if test x$enable_cooperative_suspend_default != xyes; then
5268 dnl Some host/target confusion, there's no host_osx (and
5269 dnl host_darwin would be true on iOS not just macOS).
5270 if test x$target_osx = xyes; then
5271 enable_hybrid_suspend_default=yes
5272 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5273 enable_hybrid_suspend_default=yes
5279 dnl Now check if there were flags overriding the defaults
5281 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])
5282 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5284 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5285 enable_cooperative_suspend=$with_cooperative_gc
5288 if test x$enable_cooperative_suspend = xdefault; then
5289 enable_cooperative_suspend=$enable_cooperative_suspend_default
5292 if test x$enable_cooperative_suspend != xno; then
5293 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5296 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5298 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=default])
5300 if test x$enable_hybrid_suspend = xdefault; then
5301 enable_hybrid_suspend=$enable_hybrid_suspend_default
5304 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5305 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5308 if test x$enable_hybrid_suspend != xno ; then
5309 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5312 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5314 dnl End of thread suspend policy
5316 dnl ***************************
5317 dnl *** feature experiments ***
5318 dnl ***************************
5320 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5321 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null],[
5323 if test x$enable_experiment != x ; then
5324 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5326 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5327 eval "mono_experiment_test_enable_$feature='yes'"
5330 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5331 eval "mono_experiment_test_enable_null='yes'"
5335 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5336 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5340 dnl **********************
5341 dnl *** checked builds ***
5342 dnl **********************
5344 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],[
5346 if test x$enable_checked_build != x ; then
5347 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5349 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5350 eval "mono_checked_build_test_enable_$feature='yes'"
5353 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5354 eval "mono_checked_build_test_enable_gc='yes'"
5355 eval "mono_checked_build_test_enable_metadata='yes'"
5356 eval "mono_checked_build_test_enable_thread='yes'"
5357 eval "mono_checked_build_test_enable_private_types='yes'"
5360 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5361 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5364 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5365 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5368 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5369 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5372 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5373 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5377 dnl End of checked builds
5379 AC_CHECK_HEADER([malloc.h],
5380 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5381 [Define to 1 if you have /usr/include/malloc.h.])],,)
5383 if test x"$GCC" = xyes; then
5384 # Implicit function declarations are not 64 bit safe
5385 # Do this late, since this causes lots of configure tests to fail
5386 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
5387 # jay has a lot of implicit declarations
5388 JAY_CFLAGS="-Wno-implicit-function-declaration"
5391 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5392 # instead of libmono-static.a
5393 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5394 LIBMONO_LA=libmini-static.la
5396 if test x$buildsgen = xyes; then
5397 LIBMONO_LA=libmonosgen-$API_VER.la
5399 LIBMONO_LA=libmonoboehm-$API_VER.la
5402 AC_SUBST(LIBMONO_LA)
5408 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5409 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5410 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5411 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5412 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5413 AC_ARG_WITH(btls_android_ndk_asm_workaround, [ --with-btls-android-ndk-asm-workaround Work around a problem with NDK r18+ clang compiler when compiling some AES assembly for ARM])
5415 if test "x$with_btls_android_api" = "x" ; then
5416 case "$BTLS_PLATFORM" in
5418 with_btls_android_api=16" ;;
5420 with_btls_android_api=16" ;;
5422 with_btls_android_api=16 ;;
5424 with_btls_android_api=21 ;;
5426 with_btls_android_api=16 ;;
5428 with_btls_android_api=21 ;;
5432 if test "x$enable_btls" = "xno"; then
5436 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5439 if test "x$enable_btls" = "xyes"; then
5440 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5441 if test "x$CMAKE" = "xno"; then
5442 AC_MSG_ERROR("cmake not found")
5445 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5452 if test "x$host_win32" = "xyes"; then
5453 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5456 case "$BTLS_PLATFORM" in
5462 btls_cflags="$btls_cflags -arch i386"
5465 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5466 if test "x$HAVE_YASM" != "xyes"; then
5467 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5476 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5477 if test "x$HAVE_YASM" != "xyes"; then
5478 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5485 btls_cflags="-DOPENSSL_NO_ASM=1"
5489 btls_cflags="-DOPENSSL_NO_ASM=1"
5493 btls_cflags="-march=armv8-a+crypto"
5502 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5503 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5507 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5510 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5513 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5516 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5519 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5522 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5531 AC_MSG_ERROR(Invalid BTLS platform)
5534 if test "x$platform_android" = "xyes"; then
5535 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5536 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5539 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5540 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5544 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5545 if test "x$with_btls_android_ndk" != "x"; then
5546 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5548 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5552 if test "x$btls_arch" != "x"; then
5553 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5556 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5558 AC_SUBST(BTLS_CFLAGS)
5559 AC_SUBST(BTLS_PLATFORM)
5560 AC_SUBST(BTLS_CMAKE_ARGS)
5562 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5567 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5569 if test x$DISABLE_MCS_DOCS = xyes; then
5576 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5577 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5578 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5580 libmono_ldflags="$libmono_ldflags $LIBS"
5582 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5583 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5584 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5585 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5586 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5587 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5588 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5589 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5590 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5591 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5592 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64)
5593 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5594 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5595 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5596 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5597 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5598 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5599 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5600 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5601 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5602 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5603 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5604 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5605 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5607 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5617 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5618 AC_SUBST(arch_target)
5623 #This must always be defined when building the runtime
5624 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5626 mono_build_root=`pwd`
5627 AC_SUBST(mono_build_root)
5629 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5630 if test x$host_win32 = xno; then
5631 if test x$enable_msvc = xyes; then
5632 echo "Error, --enable-msvc only supported for Windows builds."
5636 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5638 if test "x$enable_msvc" = "xyes"; then
5639 if test "x$support_boehm" = "xyes"; then
5640 echo "Error, Boehm GC is not supported when using --enable-msvc."
5643 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5644 if test "x$host_cpu" = "xi686"; then
5645 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5646 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5647 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5649 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5650 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5651 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5653 AC_SUBST(mono_msvc_build_dir)
5654 AC_SUBST(mono_msvc_build_lib_dir)
5655 AC_SUBST(mono_msvc_build_bin_dir)
5657 mono_runtime=mono/mini/mono
5660 AC_SUBST(mono_runtime)
5662 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5664 if test $csc_compiler = mcs; then
5665 CSC=$mcs_topdir/class/lib/build/mcs.exe
5670 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5672 mono_cfg_root=$mono_build_root/runtime
5673 if test x$host_win32 = xyes; then
5674 if test "x$cross_compiling" = "xno"; then
5675 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5676 CSC=`cygpath -m -a $CSC`
5677 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5679 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5682 mono_cfg_dir=$mono_cfg_root/etc
5685 if test "x$platform_android" = "xyes"; then
5689 AC_SUBST(mono_cfg_dir)
5693 AC_CONFIG_FILES([po/mcs/Makefile.in])
5695 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5696 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5697 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5699 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5702 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5704 *) reldir=$depth/$srcdir ;;
5706 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5707 cd runtime/etc/mono/1.0
5708 rm -f machine.config
5709 $LN_S $reldir/data/net_1_1/machine.config machine.config
5713 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5716 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5718 *) reldir=$depth/$srcdir ;;
5720 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5721 cd runtime/etc/mono/2.0
5722 rm -f machine.config
5723 $LN_S $reldir/data/net_2_0/machine.config machine.config
5727 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5730 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5732 *) reldir=$depth/$srcdir ;;
5734 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5735 cd runtime/etc/mono/2.0
5737 $LN_S $reldir/data/net_2_0/web.config web.config
5741 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5744 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5746 *) reldir=$depth/$srcdir ;;
5748 $ac_aux_dir/install-sh -d runtime/etc/mono/
5749 cd runtime/etc/mono/
5751 $LN_S $reldir/data/browscap.ini browscap.ini
5755 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5756 [ depth=../../../../..
5758 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5760 *) reldir=$depth/$srcdir ;;
5762 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5763 cd runtime/etc/mono/2.0/Browsers
5764 rm -f Compat.browser
5765 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5769 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5770 [ depth=../../../../..
5772 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5774 *) reldir=$depth/$srcdir ;;
5776 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5777 cd runtime/etc/mono/4.0/Browsers
5778 rm -f Compat.browser
5779 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5783 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5784 [ depth=../../../../..
5786 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5788 *) reldir=$depth/$srcdir ;;
5790 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5791 cd runtime/etc/mono/4.5/Browsers
5792 rm -f Compat.browser
5793 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5797 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5800 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5802 *) reldir=$depth/$srcdir ;;
5804 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5805 cd runtime/etc/mono/4.0
5806 rm -f machine.config
5807 $LN_S $reldir/data/net_4_0/machine.config machine.config
5811 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5814 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5816 *) reldir=$depth/$srcdir ;;
5818 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5819 cd runtime/etc/mono/4.0
5821 $LN_S $reldir/data/net_4_0/web.config web.config
5825 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5828 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5830 *) reldir=$depth/$srcdir ;;
5832 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5833 cd runtime/etc/mono/4.5
5834 rm -f machine.config
5835 $LN_S $reldir/data/net_4_5/machine.config machine.config
5839 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5842 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5844 *) reldir=$depth/$srcdir ;;
5846 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5847 cd runtime/etc/mono/4.5
5849 $LN_S $reldir/data/net_4_5/web.config web.config
5853 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])
5854 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])
5855 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5857 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
5858 if test x"$GCC" = xyes && "x$with_jemalloc" != "xyes"; then
5860 # incompatible-pointer-types requires gcc circa 5.x
5863 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
5864 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
5868 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
5876 # Mono.Native Support
5877 # -------------------
5878 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
5879 # It is built as a stand-alone shared library and not bundled with the runtime because we
5880 # may need to build two different versions of it.
5882 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
5883 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
5885 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
5886 # implementation accordingly. We build a single `libmono_native` shared library.
5888 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
5890 # During the mobile build, we are called with `CC` containing an explicit minium version flag,
5891 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
5892 # depending on platform.
5894 # We build two versions of the shared library:
5895 # - `libmono_native_compat` is built with whichever minimum version is passed to us via `CC`.
5896 # - `libmono_native_unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
5898 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
5899 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
5900 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/System/Mono/MonoNativePlatform.cs).
5902 # This can be called by automated tests both to ensure that the library has been correctly installed and also
5903 # to verify that it's the correct version of it.
5906 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
5907 if test x$target_osx = xyes; then
5908 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
5909 grep_find_mac_version_pattern="-mmacosx-version-min=$sed_version_pattern"
5910 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_mac_version_pattern`
5911 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_mac_version_pattern`
5912 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_mac_version_pattern`
5913 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern`
5914 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern`
5915 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern`
5916 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern`
5919 MONO_NATIVE_PLATFORM=macos
5920 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
5921 AC_MSG_CHECKING([Mono.Native support])
5922 AC_MSG_RESULT(macos)
5924 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
5925 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
5927 if test x$mono_native_compat = xyes; then
5928 mono_native_compat=yes
5929 mono_native_text="Mac OSX (compat+unified)"
5930 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
5931 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
5932 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -mmacosx-version-min=10.12"
5933 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -mmacosx-version-min=10.12"
5935 mono_native_compat=no
5936 mono_native_text="Mac OSX"
5938 elif test x$mono_native_platform_ios = xyes; then
5939 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
5941 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
5942 if test x$mono_native_ios_sim = xyes; then
5943 mono_native_ios_target=ios-simulator
5944 mono_native_text="iOS Simulator"
5945 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5947 mono_native_ios_target=iphoneos
5948 mono_native_text="iOS Device"
5949 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5951 mono_native_unified_version="10.0"
5952 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
5954 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
5955 if test x$mono_native_ios_sim = xyes; then
5956 mono_native_ios_target=tvos-simulator
5957 mono_native_text="AppleTV Simulator"
5958 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5960 mono_native_ios_target=tvos
5961 mono_native_text="AppleTV Device"
5962 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5964 mono_native_unified_version="10.0"
5965 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
5967 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
5968 if test x$mono_native_ios_sim = xyes; then
5969 mono_native_ios_target=watchos-simulator
5970 mono_native_text="Apple Watch Simulator"
5971 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
5973 mono_native_ios_target=watchos
5974 mono_native_text="Apple Watch Device"
5975 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
5977 mono_native_unified_version="5.0"
5978 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
5980 AC_MSG_ERROR([Unknown iOS Target])
5985 AC_MSG_CHECKING([Mono.Native support])
5986 AC_MSG_RESULT([$mono_native_ios_target])
5988 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
5990 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
5991 grep_find_ios_version_pattern="-m$mono_native_ios_target-version-min=$sed_version_pattern"
5993 mono_native_compat_version=`echo $CC | grep -o -e $grep_find_ios_version_pattern`
5995 if test x$with_bitcode = xyes; then
5996 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
5997 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
5999 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6002 if test x$enable_gss = xyes; then
6003 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6006 MONO_NATIVE_CC=`echo $CC | sed -e $sed_remove_ios_version_pattern`
6007 MONO_NATIVE_CXX=`echo $CXX | sed -e $sed_remove_ios_version_pattern`
6008 MONO_NATIVE_CPPFLAGS=`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern`
6009 MONO_NATIVE_CXXFLAGS=`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern`
6010 MONO_NATIVE_CFLAGS=`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern`
6011 MONO_NATIVE_LDFLAGS=`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern`
6013 if test x$mono_native_compat = xyes; then
6014 mono_native_text="$mono_native_text (compat+unified)"
6015 MONO_NATIVE_COMPAT_CFLAGS="$CFLAGS $mono_native_compat_version"
6016 MONO_NATIVE_COMPAT_LDFLAGS="$LDFLAGS $mono_native_compat_version"
6017 MONO_NATIVE_UNIFIED_CFLAGS="$MONO_NATIVE_CFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6018 MONO_NATIVE_UNIFIED_LDFLAGS="$MONO_NATIVE_LDFLAGS -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6022 MONO_NATIVE_PLATFORM=ios
6023 elif test x$host_linux = xyes; then
6024 mono_native_text="Linux"
6026 MONO_NATIVE_CXX=$CXX
6027 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6028 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6029 MONO_NATIVE_CFLAGS=$CFLAGS
6030 MONO_NATIVE_LDFLAGS=$LDFLAGS
6033 mono_native_compat=no
6034 MONO_NATIVE_PLATFORM=linux
6035 AC_MSG_CHECKING([Mono.Native support])
6036 AC_MSG_RESULT(linux)
6038 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6039 elif test x$target_wasm = xyes; then
6040 mono_native_text="wasm"
6042 MONO_NATIVE_CXX=$CXX
6043 # The system.native code uses _WASM_ to check for wasm
6044 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6045 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6046 MONO_NATIVE_CFLAGS=$CFLAGS
6047 MONO_NATIVE_LDFLAGS=$LDFLAGS
6050 mono_native_compat=no
6051 MONO_NATIVE_PLATFORM=linux
6052 AC_MSG_CHECKING([Mono.Native support])
6055 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6056 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6057 mono_native_text="AIX"
6059 MONO_NATIVE_CXX=$CXX
6060 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6061 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6062 MONO_NATIVE_CFLAGS=$CFLAGS
6063 MONO_NATIVE_LDFLAGS=$LDFLAGS
6066 mono_native_compat=no
6067 MONO_NATIVE_PLATFORM=aix
6068 AC_MSG_CHECKING([Mono.Native support])
6071 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6072 elif test x$platform_android = xyes; then
6073 mono_native_text="Android"
6075 MONO_NATIVE_CXX=$CXX
6076 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6077 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6078 MONO_NATIVE_CFLAGS=$CFLAGS
6079 MONO_NATIVE_LDFLAGS=$LDFLAGS
6082 mono_native_compat=no
6083 MONO_NATIVE_PLATFORM=android
6084 AC_MSG_CHECKING([Mono.Native support])
6085 AC_MSG_RESULT(Android)
6087 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6090 mono_native_text="no"
6091 AC_MSG_CHECKING([Mono.Native support])
6095 if test x$mono_native_compat = xyes; then
6096 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6098 MONO_NATIVE_LIBRARY_NAME=libmono-native
6101 AC_SUBST(MONO_NATIVE_PLATFORM)
6102 AC_SUBST(MONO_NATIVE_CC)
6103 AC_SUBST(MONO_NATIVE_CXX)
6104 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6105 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6106 AC_SUBST(MONO_NATIVE_CFLAGS)
6107 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6108 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6109 AC_SUBST(MONO_NATIVE_LDFLAGS)
6110 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6111 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6112 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6113 AC_SUBST(MONO_NATIVE_LIBADD)
6115 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6116 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6117 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6118 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6119 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6120 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6121 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6123 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6124 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6125 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6126 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6127 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6129 # Update all submodules recursively to ensure everything is checked out
6130 (cd $srcdir && scripts/update_submodules.sh)
6135 acceptance-tests/Makefile
6137 scripts/mono-find-provides
6138 scripts/mono-find-requires
6142 mono/native/Makefile
6144 mono/utils/jemalloc/Makefile
6145 mono/metadata/Makefile
6149 mono/arch/x86/Makefile
6150 mono/arch/amd64/Makefile
6151 mono/arch/ppc/Makefile
6152 mono/arch/sparc/Makefile
6153 mono/arch/s390x/Makefile
6154 mono/arch/arm/Makefile
6155 mono/arch/arm64/Makefile
6156 mono/arch/mips/Makefile
6157 mono/arch/riscv/Makefile
6159 mono/native/platform-type.c
6160 mono/native/platform-type-compat.c
6161 mono/native/platform-type-unified.c
6163 mono/tests/assembly-load-reference/Makefile
6164 mono/tests/tests-config
6165 mono/tests/gc-descriptors/Makefile
6166 mono/tests/testing_gac/Makefile
6167 mono/tests/llvmonly-mixed/Makefile
6168 mono/unit-tests/Makefile
6169 mono/benchmark/Makefile
6171 mono/profiler/Makefile
6173 mono/eglib/eglib-config.h
6174 mono/eglib/test/Makefile
6176 ikvm-native/Makefile
6181 data/net_2_0/Makefile
6182 data/net_4_0/Makefile
6183 data/net_4_5/Makefile
6184 data/net_2_0/Browsers/Makefile
6185 data/net_4_0/Browsers/Makefile
6186 data/net_4_5/Browsers/Makefile
6193 data/mono-options.pc
6194 data/mono-lineeditor.pc
6200 data/system.web.extensions_1.0.pc
6201 data/system.web.extensions.design_1.0.pc
6202 data/system.web.mvc.pc
6203 data/system.web.mvc2.pc
6204 data/system.web.mvc3.pc
6205 data/aspnetwebstack.pc
6211 tools/locale-builder/Makefile
6213 tools/monograph/Makefile
6214 tools/pedump/Makefile
6220 if test x$host_win32 = xyes; then
6221 # Get rid of 'cyg' prefixes in library names
6222 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6223 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6224 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6225 # executable doesn't work...
6226 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6229 if test x$host_darwin = xyes; then
6230 # This doesn't seem to be required and it slows down parallel builds
6231 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6236 NONE) prefix=$ac_default_prefix ;;
6238 case $exec_prefix in
6239 NONE) exec_prefix='${prefix}' ;;
6243 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6244 # any existing config.make. This allows people to share the same source tree
6245 # with different build directories, one native and one cross
6247 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6249 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6251 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6252 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6253 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6254 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6255 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6256 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6257 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6258 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6259 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6262 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6263 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6266 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6269 [myver=$($AWK 'BEGIN {
6270 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6271 if(length(vsplit [1]) > 4) {
6272 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6274 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6277 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6278 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6280 if test x$host_darwin = xyes; then
6281 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6282 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6283 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6284 elif test x$host_win32 = xyes; then
6285 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6286 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6287 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6288 elif test x$host_linux = xyes; then
6289 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6290 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6291 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6293 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6294 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6295 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6298 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6299 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6302 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6303 enable_system_aot=yes
6306 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6307 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6310 if test x$DISABLE_MCS_DOCS = xyes; then
6311 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6314 if test x$has_extension_module != xno; then
6315 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6318 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6320 if test "x$test_bcl_opt" = "xyes"; then
6321 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6324 echo "CSC_LOCATION = $CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6326 if test $csc_compiler = mcs; then
6327 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6330 if test "x$AOT_BUILD_FLAGS" != "x" ; then
6331 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6332 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6333 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6336 if test "x$AOT_MODE" != "x" ; then
6337 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6340 if test "x$enable_btls" = "xyes"; then
6341 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6344 if test "x$mono_native" = "xyes"; then
6345 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6347 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6350 if test x$mono_native_compat = xyes; then
6351 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6353 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6356 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6357 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6363 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6365 btls_platform_string=
6366 if test x$enable_btls = xyes; then
6367 if test x$btls_android = xyes; then
6368 btls_platform_string=" (android:$BTLS_PLATFORM)"
6370 btls_platform_string=" ($BTLS_PLATFORM)"
6375 if test x$buildsgen = xyes; then
6376 if test x$enable_cooperative_suspend != xno; then
6377 thread_suspend_msg="Suspend: Cooperative"
6378 elif test x$enable_hybrid_suspend != xno; then
6379 thread_suspend_msg="Suspend: Hybrid"
6381 thread_suspend_msg="Suspend: Preemptive"
6387 C# Compiler: $csc_compiler
6395 SIGALTSTACK: $with_sigaltstack
6397 BigArrays: $enable_big_arrays
6398 DTrace: $enable_dtrace
6399 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6400 Spectre: $spectre_mitigation_status
6401 Mono.Native: $mono_native_text
6404 .NET 4.x: $with_profile4_x
6405 Xamarin.Android: $with_monodroid
6406 Xamarin.iOS: $with_monotouch
6407 Xamarin.WatchOS: $with_monotouch_watch
6408 Xamarin.TVOS: $with_monotouch_tv
6409 Xamarin.Mac: $with_xammac
6410 Windows AOT: $with_winaot
6412 Unreal: $with_unreal
6413 WebAssembly: $with_wasm
6414 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6415 JNI support: $jdk_headers_found
6416 libgdiplus: $libgdiplus_msg
6418 BTLS: $enable_btls$btls_platform_string
6419 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
6420 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6421 .NET Core: $with_core
6424 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6425 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)