1 # Process this file with autoconf to produce a configure script.
4 # This line is parsed by tools besides autoconf, such as msvc/mono.winconfig.targets.
5 # It should remain in the format they expect.
8 [https://github.com/mono/mono/issues/new])
10 AC_CONFIG_SRCDIR([README.md])
11 AC_CONFIG_MACRO_DIR([m4])
15 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
16 # The extra brackets are to foil regex-based scans.
17 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
19 AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar no-dist-gzip foreign subdir-objects]
20 m4_esyscmd([case `automake --version | head -n 1` in # parallel-tests is default in automake 1.13+, we need to explicitly enable it
21 *1.11*|*1.12*) echo parallel-tests;; # for 1.11 and 1.12 but not below as those versions don't recognize the flag
22 esac])) # TODO: remove this hack once we require automake 1.11+
24 AC_CONFIG_HEADERS([config.h])
26 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test]))
27 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test-bundle]))
34 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
36 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
37 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
38 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
41 # This is the version of the corlib-runtime interface. When
42 # making changes to this interface (by changing the layout
43 # of classes the runtime knows about, changing icall signature or
44 # semantics etc), change this variable.
46 # This must be unique relative to corlib interface and semantics.
48 # If you change corlib such that a runtime change is required, or
49 # vice versa, change this string. Examples include removing icalls,
50 # adding icalls, changing icall signatures, and changing type layouts
51 # that both sides know.
53 # It is an arbitrary string and should be parsed as such.
54 # A guid works and is encouraged.
56 # Generate it with uuidgen. For example:
57 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
59 # This line is parsed by tools besides autoconf, such as msvc/mono.winconfig.targets.
60 # It should remain in the format they expect.
62 MONO_CORLIB_VERSION=92351299-EECB-4E61-A590-39382BA4F7A0
65 # Put a quoted #define in config.h.
66 # Substitute @MONO_CORLIB_VERSION@ unquoted.
68 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
69 AC_SUBST(MONO_CORLIB_VERSION)
73 echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
77 # In case of cygwin, override LN_S, irrespective of what it determines.
78 # The build uses cygwin, but the actual runtime doesn't.
80 *cygwin* ) LN_S='cp -p';;
88 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
89 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
90 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
91 CFLAGS_FOR_LIBGC=$CFLAGS
92 CPPFLAGS_FOR_BTLS=$CPPFLAGS
93 CFLAGS_FOR_BTLS=$CFLAGS
95 # libgc uses some deprecated APIs
96 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
99 # These are the flags that need to be stored in the mono.pc file for
100 # compiling code that will embed Mono
104 AC_SUBST(libmono_cflags)
105 AC_SUBST(libmono_ldflags)
107 # Variable to have relocatable .pc files (lib, or lib64)
108 # realpath isn't always available, and requires that all but the tip of the provided
109 # path exists. Fall back to the old behaviour, but realpath allows depth >1
110 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
111 # too deep for the old method to work
112 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
113 AC_SUBST(reloc_libdir)
115 # Set to yes if Unix sockets cannot be created in an anonymous namespace
118 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
119 extra_runtime_ldflags=""
121 # Thread configuration inspired by sleepycat's db
122 AC_MSG_CHECKING([host platform characteristics])
140 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
141 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
143 libgc_threads=pthreads
146 *-mingw*|*-*-cygwin*)
147 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
148 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
151 if test "x$cross_compiling" = "xno"; then
152 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
156 if test "x$host" = "x$target"; then
162 # Boehm not supported on 64-bit Windows.
164 x86_64-*-* | amd64-*-*)
171 # Windows 7 or later is required
172 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
173 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
174 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
175 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
176 libmono_cflags="-mms-bitfields -mwindows"
177 libmono_ldflags="-mms-bitfields -mwindows"
182 with_sgen_default_concurrent=yes
185 # This forces libgc to use the DllMain based thread registration code on win32
186 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
189 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
190 libmono_cflags="-D_REENTRANT"
191 LDFLAGS="$LDFLAGS -pthread"
192 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
193 libmono_ldflags="-pthread"
196 libgc_threads=pthreads
199 with_sgen_default_concurrent=yes
202 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
203 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
204 libmono_ldflags="-lpthread -pthread"
206 libgc_threads=pthreads
210 with_sgen_default_concurrent=yes
214 LDFLAGS="$LDFLAGS -lutil"
215 if test "x$PTHREAD_CFLAGS" = "x"; then
216 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
219 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
220 libmono_cflags="$PTHREAD_CFLAGS"
222 if test "x$PTHREAD_LIBS" = "x"; then
223 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
224 libmono_ldflags="-pthread"
226 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
227 libmono_ldflags="$PTHREAD_LIBS"
229 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
231 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
233 libgc_threads=pthreads
246 with_sgen_default_concurrent=yes
249 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
250 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
251 if test "x$disable_munmap" != "xyes"; then
252 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
254 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
255 LDFLAGS="$LDFLAGS -pthread"
257 AC_DEFINE(PTHREAD_POINTER_ID)
259 libgc_threads=pthreads
263 with_sgen_default_concurrent=yes
267 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
268 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
270 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
271 if test "x$disable_munmap" != "xyes"; then
272 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
274 libmono_cflags="-D_REENTRANT"
276 libgc_threads=pthreads
283 # Android doesn't support boehm, as it's missing <link.h>
287 # isinf(3) requires -lm
288 LDFLAGS="$LDFLAGS -lm"
290 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
291 # PAGE_SIZE; breaks mono/io-layer/collection.c
292 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
293 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
294 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
296 # to bypass the underscore linker check, can't work when cross-compiling
302 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
303 if test "x$disable_munmap" != "xyes"; then
304 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
306 libmono_cflags="-D_REENTRANT"
308 libgc_threads=pthreads
310 if test "x$cross_compiling" != "xno"; then
311 # to bypass the underscore linker check, not
312 # available during cross-compilation
337 # deal with this in the FPU detection section, since
338 # we cannot determine FPU from triplet and don't want
339 # to duplicate the logic
347 # https://bugzilla.novell.com/show_bug.cgi?id=504411
355 with_sgen_default_concurrent=yes
358 echo "nacl no longer supported."
362 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
363 # +ESdbgasm only valid on bundled cc on RISC
364 # silently ignored for ia64
365 if test $GCC != "yes"; then
366 CFLAGS="$CFLAGS +ESdbgasm"
367 # Arrange for run-time dereferencing of null
368 # pointers to produce a SIGSEGV signal.
369 LDFLAGS="$LDFLAGS -z"
371 CFLAGS="$CFLAGS +ESdbgasm"
372 LDFLAGS="$LDFLAGS -z"
373 libmono_cflags="-D_REENTRANT"
374 libmono_ldflags="-lpthread"
375 libgc_threads=pthreads
380 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
382 libmono_cflags="-D_REENTRANT"
383 libgc_threads=pthreads
386 enable_solaris_tar_check=yes
389 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
392 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
393 libmono_cflags="-D_THREAD_SAFE"
395 AC_DEFINE(PTHREAD_POINTER_ID)
396 AC_DEFINE(USE_MACH_SEMA, 1, [...])
398 libgc_threads=pthreads
400 if test "x$cross_compiling" = "xyes"; then
401 has_broken_apple_cpp=yes
403 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
404 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
405 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
407 dnl Snow Leopard and newer config.guess reports as this
409 BROKEN_DARWIN_FLAGS="-arch i386"
410 BROKEN_DARWIN_CPPFLAGS=""
411 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
412 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
413 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
414 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
415 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
416 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
417 with_sgen_default_concurrent=yes
421 with_sgen_default_concurrent=yes
434 dnl BSD_SOURCE is for getifaddrs
435 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
436 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
438 LIBS="$LIBS -lnetwork -ltextencoding"
440 AC_DEFINE(PTHREAD_POINTER_ID)
441 dnl Haiku does not support static TLS with __thread
443 libgc_threads=pthreads
448 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
449 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
460 dnl Set up a 64-bit build
461 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
463 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
464 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
465 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
466 dnl specifiy 64-bit mode for tools.
467 AR="/usr/bin/ar -X64"
468 NM="/usr/bin/nm -X64"
469 dnl SGen is the future (changes to Boehm support code would be
470 dnl required if you wish to re-enable Boehm)
475 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
477 dnl use pthread TLS, __thread has issues with the compiler flags we use
479 dnl ppc Linux is the same? test further
484 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
491 if test x$need_link_unlink = xyes; then
492 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
495 if test x$host_win32 = xyes; then
496 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
499 if test x$target_win32 = xyes; then
500 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
503 if test x$host_darwin = xyes; then
504 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
507 # Defined for all targets/platforms using classic Windows API support.
508 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
509 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
511 AC_SUBST(extra_runtime_ldflags)
512 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
513 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
514 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
515 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
516 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
517 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
518 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
519 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
520 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
522 if test -z "$HOST_DARWIN_TRUE"; then :
523 PLATFORM_AOT_SUFFIX=.dylib
526 if test -z "$HOST_LINUX_TRUE"; then :
527 PLATFORM_AOT_SUFFIX=.so
530 if test -z "$HOST_WIN32_TRUE"; then :
531 PLATFORM_AOT_SUFFIX=.dll
534 AC_SUBST(PLATFORM_AOT_SUFFIX)
536 if test -z "$HOST_WASM_TRUE"; then :
537 AC_DEFINE(HAVE_UTIME)
538 AC_DEFINE(HAVE_UTIMES)
541 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
543 AC_CHECK_TOOL(CC, gcc, gcc)
545 AC_CHECK_TOOL(CXX, g++, g++)
551 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
553 # Set ASFLAGS if not already set.
554 : ${CCASFLAGS='$(CFLAGS)'}
558 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
559 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
560 if test "x$CXX" = "xg++"; then
561 if test "x$GXX" != "xyes"; then
562 # automake/libtool is so broken, it requires g++ even if the c++ sources
563 # are inside automake conditionals
564 AC_MSG_ERROR([You need to install g++])
568 dnl may require a specific autoconf version
569 dnl AC_PROG_CC_FOR_BUILD
570 dnl CC_FOR_BUILD not automatically detected
572 CFLAGS_FOR_BUILD=$CFLAGS
574 if test "x$cross_compiling" = "xyes"; then
579 AC_SUBST(CC_FOR_BUILD)
580 AC_SUBST(CFLAGS_FOR_BUILD)
582 AC_SUBST(BUILD_EXEEXT)
584 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
585 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
590 # This causes monodis to not link correctly
591 #AC_DISABLE_FAST_INSTALL
593 #lookup makedev() header
597 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
600 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
601 AC_SUBST(export_ldflags)
603 # Test whenever ld supports -version-script
607 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)
608 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)
609 AC_CHECK_HEADER(unistd.h, [HAVE_UNISTD_H=1], [HAVE_UNISTD_H=0])
610 AC_SUBST(HAVE_UNISTD_H)
611 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
612 [], [], [#include <stddef.h>
613 #include <sys/socket.h>
614 #include <linux/socket.h>])
616 AC_CHECK_HEADERS(sys/user.h, [], [],
618 #ifdef HAVE_SYS_PARAM_H
619 # include <sys/param.h>
623 AC_CHECK_HEADERS(linux/serial.h)
625 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
626 if test x$have_zlib = xyes; then
627 AC_TRY_COMPILE([#include <zlib.h>], [
628 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
630 #error No good zlib found
633 AC_MSG_RESULT(Using system zlib)
634 zlib_msg="system zlib"
635 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
637 AC_MSG_RESULT(Using embedded zlib)
639 zlib_msg="bundled zlib"
643 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
644 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
646 # for mono/metadata/debug-symfile.c
647 AC_CHECK_HEADERS(elf.h)
650 AC_CHECK_HEADERS(poll.h)
651 AC_CHECK_HEADERS(sys/poll.h)
652 AC_CHECK_HEADERS(sys/wait.h)
653 AC_CHECK_HEADERS(grp.h)
654 AC_CHECK_HEADERS(syslog.h)
655 AC_CHECK_FUNCS(vsyslog)
658 AC_CHECK_HEADERS(wchar.h)
660 # for Linux statfs support
661 AC_CHECK_HEADERS(linux/magic.h)
663 # For Android NDK unified headers
664 if test x$platform_android = xyes; then
665 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
666 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
667 AC_CHECK_HEADERS(android/ndk-version.h)
669 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
670 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
671 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
672 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
673 # doesn't contain the required definitions (NDK 14)
674 if test x$have_android_signal_inlines = xyes; then
675 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
677 AC_LANG_PROGRAM([#include <signal.h>
678 #include <android/legacy_signal_inlines.h>],[
680 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
684 android_sigrtminmax_work=yes
687 android_sigrtminmax_work=no
691 if test x$android_sigrtminmax_work = xno; then
692 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
696 # Attempt to detect whether we're using Android NDK unified headers
697 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
698 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
700 android_unified_headers=no
701 if test x$have_android_api_level = xyes; then
702 if test x$have_android_versioning = xyes; then
703 AC_MSG_CHECKING([whether using Android NDK unified headers])
705 # Both macros are defined only in the NDK unified headers
708 #include <android/api-level.h>
709 #include <android/versioning.h>
711 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
713 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
717 android_unified_headers=yes
720 android_unified_headers=no
726 if test x$android_unified_headers = xyes; then
727 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
731 # not 64 bit clean in cross-compile
732 AC_CHECK_SIZEOF(void *)
733 AC_CHECK_SIZEOF(long)
736 AC_CHECK_SIZEOF(long long)
738 AC_CACHE_CHECK([for clang],
751 AC_ARG_ENABLE(visibility-hidden,
752 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
753 disable_visibility_hidden=yes, disable_visibility_hidden=no)
756 if test x"$GCC" = xyes; then
757 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
758 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
760 # We require C99 with some GNU extensions, e.g. `linux` macro
761 CFLAGS="$CFLAGS -std=gnu99"
763 # The runtime code does not respect ANSI C strict aliasing rules
764 CFLAGS="$CFLAGS -fno-strict-aliasing"
766 # We rely on signed overflow to behave
767 CFLAGS="$CFLAGS -fwrapv"
769 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
770 if test x"$disable_visibility_hidden" = xno; then
771 # Don't export any symbols by default
772 SHARED_CFLAGS="-fvisibility=hidden"
773 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
777 # Check for the normal version, since gcc ignores unknown -Wno options
778 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
779 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
783 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
789 if test "x$mono_cv_clang" = "xyes"; then
790 # https://bugzilla.samba.org/show_bug.cgi?id=8118
791 WARN="$WARN -Qunused-arguments"
792 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
793 # We rely on zero length arrays in structs
794 WARN="$WARN -Wno-zero-length-array"
797 # The Sun Forte compiler complains about inline functions that access static variables
798 # so disable all inlining.
801 CFLAGS="$CFLAGS -Dinline="
805 CFLAGS="$WARN $CFLAGS -g"
806 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
807 CPPFLAGS="$WARN $CPPFLAGS -g"
809 # Where's the 'mcs' source tree?
810 if test -d $srcdir/mcs; then
816 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
817 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
818 mcsdir=$with_mcs_path
822 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
824 AC_ARG_WITH(core, [ --with-core=only controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
825 if test x$with_core = xonly; then
826 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
827 with_runtime_preset=netcore
829 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
832 # A sanity check to catch cases where the package was unpacked
833 # with an ancient tar program (Solaris)
835 AC_ARG_ENABLE(solaris-tar-check,
836 [ --disable-solaris-tar-check disable solaris tar check],
837 do_solaris_tar_check=no, do_solaris_tar_check=yes)
839 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
840 AC_MSG_CHECKING(integrity of package)
841 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
845 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"
846 AC_MSG_ERROR([$errorm])
850 if test "x$with_mcs_path" != "x"; then
851 mcs_topdir=$(cd "$mcsdir" && pwd)
852 mcs_topdir_from_srcdir=$mcs_topdir
854 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
855 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
858 # Convert mcs_topdir* paths to Windows syntax.
859 if test x$cross_compiling$host_win32 = xnoyes; then
860 mcs_topdir=$(cygpath -m $mcs_topdir)
861 case $mcs_topdir_from_srcdir in
863 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
868 AC_SUBST([mcs_topdir])
869 AC_SUBST([mcs_topdir_from_srcdir])
871 # gettext: prepare the translation directories.
872 # we do not configure the full gettext, as we consume it dynamically from C#
875 if test "x$USE_NLS" = "xyes"; then
876 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
878 if test "x$HAVE_MSGFMT" = "xno"; then
879 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
883 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
886 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
887 if test x$with_crosspkgdir = "x"; then
888 if test -s $PKG_CONFIG_PATH; then
889 pkg_config_path=$PKG_CONFIG_PATH
892 pkg_config_path=$with_crosspkgdir
893 PKG_CONFIG_PATH=$pkg_config_path
894 export PKG_CONFIG_PATH
898 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
899 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
900 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
902 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
903 if test x$werror_flag = xyes; then
904 WERROR_CFLAGS="-Werror"
906 AC_SUBST([WERROR_CFLAGS])
907 AC_SUBST([SHARED_CFLAGS])
909 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
911 AC_SUBST(GLIB_CFLAGS)
913 # Enable support for fast thread-local storage
914 # Some systems have broken support, so we allow to disable it.
915 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
917 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
918 # This does not work on some platforms (bug #55253)
919 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
921 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
922 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
923 # Same as --with-shared_mono=no
924 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
926 if test "x$enable_static" = "xno"; then
930 if test "x$enable_shared" = "xno"; then
934 if test "x$enable_libraries" = "xno"; then
938 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
940 if test "x$host_win32" = "xyes"; then
941 # Boehm GC requires the runtime to be in its own dll
945 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
946 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
947 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
948 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
950 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
951 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
952 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
954 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
955 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
959 # Pass it to libgc as well
960 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
967 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
969 if test x$enable_small_config = xyes; then
970 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
971 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
974 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)
976 DISABLED_FEATURES=none
979 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
980 AC_MSG_CHECKING([CSharp compiler to use])
981 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
982 if test x$withval = xmcs; then
984 elif test x$withval = xroslyn; then
986 elif test x$withval = xdefault; then
989 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
991 ],[csc_compiler=default])
993 if test $csc_compiler = default; then
994 if test $endian = big; then
996 elif test $endian = little; then
998 powerpc*) csc_compiler=mcs ;;
999 *) csc_compiler=roslyn ;;
1005 AC_MSG_RESULT($csc_compiler)
1007 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
1008 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
1009 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])
1012 if test x$target_win32 = xyes; then
1014 with_jemalloc_assert=no
1015 with_jemalloc_always=no
1018 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
1019 if test "x$with_jemalloc_assert" = "xyes"; then
1020 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
1021 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
1022 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
1025 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
1026 if test "x$with_jemalloc_always" = "xyes"; then
1028 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
1029 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
1030 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
1033 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
1034 if test "x$with_jemalloc" = "xyes"; then
1035 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
1036 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
1037 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
1039 if test "x$target_mach" = "xyes"; then
1040 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
1043 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
1044 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
1046 AC_SUBST(JEMALLOC_CFLAGS)
1047 AC_SUBST(JEMALLOC_CPPFLAGS)
1048 AC_SUBST(JEMALLOC_LDFLAGS)
1049 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1053 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1054 # MERP - The MS telemetry profile. Not for general use.
1055 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1057 # 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.
1059 #--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.
1060 #--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.
1061 #--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.
1062 #--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.
1064 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])
1065 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])
1066 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1068 if test "x$with_crash_privacy" = "xyes"; then
1069 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1072 if test "x$with_structured_crashes" = "xno"; then
1073 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1077 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1082 if test "x$crash_reporting" != "xyes"; then
1083 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1084 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1087 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1088 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1090 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1091 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1093 if test x$enable_monodroid = xyes; then
1094 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1097 if test x$enable_monotouch = xyes; then
1098 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1101 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1103 # mono/corefx/native has a lot of invalid C++98 in its headers
1104 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1105 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1106 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1107 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1109 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1110 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1111 # and add it whenever we're running clang on Darwin.
1112 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1113 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1116 AC_SUBST(CXXFLAGS_COMMON)
1118 if test "x$enable_cxx" = "xyes"; then
1120 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1122 # -std=gnu99 -xc++ is not allowed and errors.
1123 CXX_REMOVE_CFLAGS=-std=gnu99
1124 # These give warnings and should be removed. They are C-only.
1125 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1126 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1127 # Likewise with CentOS 6 gcc 4.4.
1128 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1130 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1131 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1132 # generates a warning every time we run gcc which is very unsightly.
1133 # The warning is for e.g. sprintf(foo, "") which can just be
1134 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1135 # and completely legal and valid.
1136 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1137 # Alternatively, just run $CXX -xc++ -c /dev/null.
1139 ORIG_CXXFLAGS=$CXXFLAGS
1140 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1141 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1142 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1144 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1145 CXXFLAGS=$ORIG_CXXFLAGS
1148 AC_SUBST(CXX_ADD_CFLAGS)
1149 AC_SUBST(CXX_REMOVE_CFLAGS)
1152 # Set the build profiles and options before things which use them
1155 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])
1156 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1157 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1158 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])
1159 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])
1160 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1161 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1162 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])
1163 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])
1164 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])
1165 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1166 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1167 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1168 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1171 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,winaot,winaot_llvm,bitcode,bitcodeinterp,unreal,fullaotinterp,fullaotinterp_llvm Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1172 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])
1173 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])
1174 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])
1177 dnl Spectre compiler mitigation flag checks
1179 if test "x$with_spectre_mitigation" = "xyes"; then
1180 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1182 SPECTRE_INDIRECT_BRANCH_KIND=
1183 case "x$with_spectre_indirect_branch_choice" in
1184 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1185 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1186 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1187 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1188 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1191 SPECTRE_FUNCTION_RETURN_KIND=""
1192 case "x$with_spectre_function_return_choice" in
1193 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1194 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1195 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1196 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1197 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1200 AX_CHECK_COMPILE_FLAG(
1201 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1202 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1205 AX_CHECK_COMPILE_FLAG(
1206 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1207 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1210 if test "x$SPECTRE_CFLAGS" != "x" ; then
1211 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1212 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1213 spectre_mitigation_status="mitigation enabled"
1216 spectre_mitigation_status="no mitigation"
1220 dnl Profile defaults
1222 TEST_PROFILE=default
1223 enable_llvm_default=no
1225 with_profile4_x_default=no
1226 with_monodroid_default=no
1227 with_monotouch_default=no
1228 with_monotouch_watch_default=no
1229 with_monotouch_tv_default=no
1230 with_xammac_default=no
1231 with_testing_aot_full_interp_default=no
1232 with_testing_aot_hybrid_default=no
1233 with_testing_aot_full_default=no
1234 with_winaot_default=no
1235 with_orbis_default=no
1236 with_unreal_default=no
1237 with_wasm_default=no
1239 with_bitcode_default=no
1240 enable_cooperative_suspend_default=no
1241 enable_hybrid_suspend_default=no
1243 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1245 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1247 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1248 DISABLE_MCS_DOCS_default=yes
1249 elif test x$with_runtime_preset = xnetcore; then
1250 DISABLE_MCS_DOCS_default=yes
1252 mono_feature_disable_remoting='yes'
1253 mono_feature_disable_reflection_emit_save='yes'
1254 mono_feature_disable_appdomains='yes'
1255 mono_feature_disable_cleanup='yes'
1256 mono_feature_disable_assembly_remapping='yes'
1257 disable_mono_native=yes
1259 elif test x$with_runtime_preset = xnet_4_x; then
1260 with_profile4_x_default=yes
1261 TEST_PROFILE=net_4_x
1262 elif test x$with_runtime_preset = xall; then
1263 with_profile4_x_default=yes
1264 with_monodroid_default=yes
1265 with_monotouch_default=yes
1266 with_monotouch_watch_default=yes
1267 with_monotouch_tv_default=yes
1268 with_xammac_default=yes
1269 with_winaot_default=yes
1270 with_orbis_default=yes
1271 with_unreal_default=yes
1272 with_wasm_default=yes
1273 with_testing_aot_full_interp_default=yes
1274 with_testing_aot_hybrid_default=yes
1275 with_testing_aot_full_default=yes
1276 TEST_PROFILE=net_4_x
1277 elif test x$with_runtime_preset = xbitcode; then
1278 DISABLE_MCS_DOCS_default=yes
1279 with_testing_aot_full_default=yes
1280 with_bitcode_default=yes
1281 enable_cooperative_suspend_default=yes
1282 # FIXME: use TEST_PROFILE=testing_aot_full
1283 TEST_PROFILE=testing_aot_bitcode
1284 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1285 enable_llvm_default=yes
1287 mono_feature_disable_com='yes'
1288 mono_feature_disable_remoting='yes'
1289 mono_feature_disable_reflection_emit_save='yes'
1290 mono_feature_disable_reflection_emit='yes'
1291 mono_feature_disable_appdomains='yes'
1293 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1294 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1295 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1297 elif test x$with_runtime_preset = xbitcodeinterp; then
1298 with_testing_aot_full_interp_default=yes
1299 with_bitcode_default=yes
1300 enable_cooperative_suspend_default=yes
1301 # FIXME: use TEST_PROFILE=testing_aot_full_interp
1302 TEST_PROFILE=testing_aot_bitcode_interp
1303 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1304 enable_llvm_default=yes
1306 # mscorlib.dll aot compilation crashes
1307 mono_feature_disable_com='yes'
1309 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1310 AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1311 AOT_RUN_FLAGS="--llvmonly-interp"
1312 elif test x$with_runtime_preset = xfullaot; then
1313 DISABLE_MCS_DOCS_default=yes
1314 with_testing_aot_full_default=yes
1315 TEST_PROFILE=testing_aot_full
1317 mono_feature_disable_com='yes'
1318 mono_feature_disable_remoting='yes'
1319 mono_feature_disable_reflection_emit_save='yes'
1320 mono_feature_disable_reflection_emit='yes'
1321 mono_feature_disable_appdomains='yes'
1323 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1324 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1326 elif test x$with_runtime_preset = xfullaot_llvm; then
1327 DISABLE_MCS_DOCS_default=yes
1328 with_testing_aot_full_default=yes
1329 TEST_PROFILE=testing_aot_full
1331 mono_feature_disable_com='yes'
1332 mono_feature_disable_remoting='yes'
1333 mono_feature_disable_reflection_emit_save='yes'
1334 mono_feature_disable_reflection_emit='yes'
1335 mono_feature_disable_appdomains='yes'
1337 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1338 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1340 elif test x$with_runtime_preset = xhybridaot; then
1341 DISABLE_MCS_DOCS_default=yes
1342 with_testing_aot_hybrid_default=yes
1343 TEST_PROFILE=testing_aot_hybrid
1345 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1346 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1347 elif test x$with_runtime_preset = xhybridaot_llvm; then
1348 DISABLE_MCS_DOCS_default=yes
1349 with_testing_aot_hybrid_default=yes
1350 TEST_PROFILE=testing_aot_hybrid
1352 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1353 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1354 elif test x$with_runtime_preset = xfullaotinterp; then
1355 with_testing_aot_full_interp_default=yes
1356 TEST_PROFILE=testing_aot_full_interp
1358 # mscorlib.dll aot compilation crashes
1359 mono_feature_disable_com='yes'
1361 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1362 AOT_RUN_FLAGS="--full-aot-interp"
1363 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1364 with_testing_aot_full_interp_default=yes
1365 TEST_PROFILE=testing_aot_full_interp
1367 # mscorlib.dll aot compilation crashes
1368 mono_feature_disable_com='yes'
1370 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1371 AOT_RUN_FLAGS="--full-aot-interp"
1372 elif test x$with_runtime_preset = xaot; then
1373 with_profile4_x_default=yes
1375 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1378 DISABLE_MCS_DOCS_default=yes
1379 elif test x$with_runtime_preset = xaot_llvm; then
1380 with_profile4_x_default=yes
1382 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1385 DISABLE_MCS_DOCS_default=yes
1386 elif test x$with_runtime_preset = xwinaot; then
1387 DISABLE_MCS_DOCS_default=yes
1388 with_winaot_default=yes
1391 mono_feature_disable_com='yes'
1392 mono_feature_disable_remoting='yes'
1393 mono_feature_disable_reflection_emit_save='yes'
1394 mono_feature_disable_reflection_emit='yes'
1395 mono_feature_disable_appdomains='yes'
1397 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1398 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1400 elif test x$with_runtime_preset = xwinaot_llvm; then
1401 DISABLE_MCS_DOCS_default=yes
1402 with_winaot_default=yes
1405 mono_feature_disable_com='yes'
1406 mono_feature_disable_remoting='yes'
1407 mono_feature_disable_reflection_emit_save='yes'
1408 mono_feature_disable_reflection_emit='yes'
1409 mono_feature_disable_appdomains='yes'
1411 INVARIANT_AOT_OPTIONS="llcopts=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1412 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1413 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1415 elif test x$with_runtime_preset = xorbis; then
1416 DISABLE_MCS_DOCS_default=yes
1417 with_orbis_default=yes
1420 mono_feature_disable_com='yes'
1421 mono_feature_disable_remoting='yes'
1422 mono_feature_disable_reflection_emit_save='yes'
1423 mono_feature_disable_reflection_emit='yes'
1424 mono_feature_disable_appdomains='yes'
1426 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1427 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1429 elif test x$with_runtime_preset = xunreal; then
1430 DISABLE_MCS_DOCS_default=yes
1431 with_unreal_default=yes
1434 mono_feature_disable_com='yes'
1435 mono_feature_disable_remoting='yes'
1436 mono_feature_disable_appdomains='no'
1438 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1439 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1440 elif test x$with_runtime_preset = xwasm; then
1441 DISABLE_MCS_DOCS_default=yes
1442 with_wasm_default=yes
1445 mono_feature_disable_com='yes'
1446 mono_feature_disable_remoting='yes'
1447 mono_feature_disable_reflection_emit_save='yes'
1448 mono_feature_disable_reflection_emit='yes'
1449 mono_feature_disable_appdomains='yes'
1451 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1452 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1454 TEST_PROFILE=net_4_x
1455 with_profile4_x_default=yes
1458 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1459 AC_SUBST(AOT_BUILD_FLAGS)
1460 AC_SUBST(AOT_RUN_FLAGS)
1461 # For llvmonlycheck + fullaotcheck
1462 AC_SUBST(INVARIANT_AOT_OPTIONS)
1465 AC_SUBST(TEST_PROFILE)
1467 if test "x$with_profile4_x" = "xdefault"; then
1468 with_profile4_x=$with_profile4_x_default
1470 if test "x$with_monodroid" = "xdefault"; then
1471 with_monodroid=$with_monodroid_default
1473 if test "x$with_monotouch" = "xdefault"; then
1474 with_monotouch=$with_monotouch_default
1476 if test "x$with_monotouch_watch" = "xdefault"; then
1477 with_monotouch_watch=$with_monotouch_watch_default
1479 if test "x$with_monotouch_tv" = "xdefault"; then
1480 with_monotouch_tv=$with_monotouch_tv_default
1482 if test "x$with_bitcode" = "xdefault"; then
1483 with_bitcode=$with_bitcode_default
1485 if test "x$with_xammac" = "xdefault"; then
1486 with_xammac=$with_xammac_default
1488 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1489 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1491 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1492 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1494 if test "x$with_testing_aot_full" = "xdefault"; then
1495 with_testing_aot_full=$with_testing_aot_full_default
1497 if test "x$with_winaot" = "xdefault"; then
1498 with_winaot=$with_winaot_default
1500 if test "x$with_orbis" = "xdefault"; then
1501 with_orbis=$with_orbis_default
1503 if test "x$with_unreal" = "xdefault"; then
1504 with_unreal=$with_unreal_default
1506 if test "x$with_wasm" = "xdefault"; then
1507 with_wasm=$with_wasm_default
1511 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1512 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1513 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1514 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1515 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1516 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1517 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1518 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1519 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1520 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1521 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1522 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1523 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1524 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1525 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1527 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1528 AM_CONDITIONAL(FULL_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full"] || [test "x$TEST_PROFILE" = "xtesting_aot_bitcode"] || [test "x$TEST_PROFILE" = "xwinaot"] || [test "x$TEST_PROFILE" = "xorbis"] || [test "x$TEST_PROFILE" = "xwasm"])
1529 AM_CONDITIONAL(FULL_AOT_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"] || [test "x$TEST_PROFILE" = "xtesting_aot_bitcode_interp"])
1530 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1532 default_profile=net_4_x
1533 if test -z "$INSTALL_MONODROID_TRUE"; then :
1534 default_profile=monodroid
1536 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1537 default_profile=monotouch
1539 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1540 default_profile=xammac
1542 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1543 default_profile=testing_aot_full_interp
1545 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1546 default_profile=testing_aot_hybrid
1548 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1549 default_profile=testing_aot_full
1551 if test -z "$INSTALL_WINAOT_TRUE"; then :
1552 default_profile=winaot
1554 if test -z "$INSTALL_ORBIS_TRUE"; then :
1555 default_profile=orbis
1557 if test -z "$INSTALL_UNREAL_TRUE"; then :
1558 default_profile=unreal
1560 if test -z "$INSTALL_WASM_TRUE"; then :
1561 default_profile=wasm
1563 if test -z "$INSTALL_4_x_TRUE"; then :
1564 default_profile=net_4_x
1566 DEFAULT_PROFILE=$default_profile
1567 AC_SUBST(DEFAULT_PROFILE)
1570 # End build profile configuration
1573 if test x$USE_NLS = xprofile_default; then
1575 AC_MSG_CHECKING([NLS used])
1577 # We make the default value for USE_NLS
1578 # "no" on OSX because it isn't available on most
1579 # default OSX installs. The most common configurations will
1580 # all disable it, so this saves us typing.
1581 if test x$host_darwin = xyes; then
1588 AC_MSG_RESULT([$USE_NLS])
1591 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1592 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1593 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1594 security, lldb, mdb, assert_messages, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers, sockets.],
1596 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1597 eval "mono_feature_disable_$feature='yes'"
1599 DISABLED_FEATURES=$enable_minimal
1600 disabled="Disabled: $enable_minimal"
1603 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1605 if test "x$mono_feature_disable_aot" = "xyes"; then
1606 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1607 enable_system_aot=no
1608 AC_MSG_NOTICE([Disabled AOT compiler])
1611 if test "x$mono_feature_disable_profiler" = "xyes"; then
1612 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1613 AC_MSG_NOTICE([Disabled support for the profiler])
1615 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1617 if test "x$mono_feature_disable_decimal" = "xyes"; then
1618 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1619 AC_MSG_NOTICE([Disabled support for decimal])
1622 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1623 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1624 AC_MSG_NOTICE([Disabled support for P/Invoke])
1627 if test "x$mono_feature_disable_debug" = "xyes"; then
1628 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1629 AC_MSG_NOTICE([Disabled support for runtime debugging])
1632 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1633 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1634 mono_feature_disable_reflection_emit_save=yes
1635 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1638 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1639 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1640 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1643 if test "x$mono_feature_disable_large_code" = "xyes"; then
1644 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1645 AC_MSG_NOTICE([Disabled support for large assemblies])
1648 if test "x$mono_feature_disable_logging" = "xyes"; then
1649 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1650 AC_MSG_NOTICE([Disabled support for logging])
1653 if test "x$mono_feature_disable_com" = "xyes"; then
1654 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1655 AC_MSG_NOTICE([Disabled COM support])
1658 if test "x$mono_feature_disable_ssa" = "xyes"; then
1659 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1660 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1663 if test "x$mono_feature_disable_generics" = "xyes"; then
1664 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1665 AC_MSG_NOTICE([Disabled Generics Support])
1668 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1669 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1670 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1673 if test "x$mono_feature_disable_portability" = "xyes"; then
1674 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1675 AC_MSG_NOTICE([Disabled IO Portability layer])
1678 if test "x$mono_feature_disable_attach" = "xyes"; then
1679 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1680 AC_MSG_NOTICE([Disabled agent attach])
1683 if test "x$mono_feature_disable_verifier" = "xyes"; then
1684 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1685 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1688 if test "x$mono_feature_disable_jit" = "xyes"; then
1689 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1690 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1693 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1695 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1696 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1697 AC_MSG_NOTICE([Disabled the interpreter])
1700 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1702 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1703 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1706 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1708 if test "x$mono_feature_disable_simd" = "xyes"; then
1709 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1710 AC_MSG_NOTICE([Disabled SIMD support])
1713 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1714 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1715 AC_MSG_NOTICE([Disabled Soft Debugger.])
1718 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1720 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1721 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1722 AC_MSG_NOTICE([Disabled Performance Counters.])
1724 if test "x$mono_feature_disable_normalization" = "xyes"; then
1725 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1726 AC_MSG_NOTICE([Disabled String normalization support.])
1729 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1730 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1731 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1732 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1735 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1736 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1737 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1740 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1741 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1742 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1745 if test "x$mono_feature_disable_remoting" = "xyes"; then
1746 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1747 AC_MSG_NOTICE([Disabled remoting])
1750 if test "x$mono_feature_disable_security" = "xyes"; then
1751 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1752 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1755 if test "x$mono_feature_disable_lldb" = "xyes"; then
1756 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1757 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1760 if test "x$mono_feature_disable_mdb" = "xyes"; then
1761 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1762 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1765 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1766 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1767 AC_MSG_NOTICE([Disabled assertion messages.])
1770 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1771 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1772 AC_MSG_NOTICE([Disabled runtime cleanup.])
1775 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1776 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1777 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1781 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1782 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1783 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1786 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1787 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1788 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1791 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1792 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1793 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1796 if test "x$mono_feature_disable_sockets" = "xyes"; then
1797 AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
1798 AC_MSG_NOTICE([Disabled sockets])
1801 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1802 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1804 has_extension_module=no
1805 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1807 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1808 if test x$extension = xdefault ; then
1809 has_extension_module=yes;
1812 if test x$enable_extension_module = xyes; then
1813 has_extension_module=yes;
1817 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1819 if test x$has_extension_module != xno ; then
1820 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1821 AC_MSG_NOTICE([Enabling mono extension module.])
1825 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1827 AC_MSG_CHECKING(for visibility __attribute__)
1830 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1831 int main () { doit (); return 0; }
1834 have_visibility_hidden=yes
1837 have_visibility_hidden=no
1842 dnl Boehm GC configuration
1845 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1847 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1848 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1850 if test "x$support_boehm" = "xyes"; then
1852 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1853 if test x$enable_parallel_mark = xyes; then
1854 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1864 if test "x$support_boehm" = "xyes"; then
1868 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1869 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1870 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1872 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1874 if test x$target_win32 = xyes; then
1875 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1876 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1879 gc_msg="Included Boehm GC with typed GC"
1880 if test x$enable_parallel_mark = xyes; then
1881 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1882 gc_msg="$gc_msg and parallel mark"
1884 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1889 AC_MSG_WARN("External Boehm is no longer supported")
1893 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1897 AC_MSG_WARN("Compiling mono without GC.")
1898 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1899 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1903 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1907 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])
1908 if test "x$large_heap" = "xyes"; then
1909 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1912 AC_SUBST(LIBGC_CPPFLAGS)
1913 AC_SUBST(LIBGC_LIBS)
1914 AC_SUBST(LIBGC_STATIC_LIBS)
1916 AC_SUBST(BOEHM_DEFINES)
1919 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1922 dnl End of Boehm GC Configuration
1925 dnl *************************************
1926 dnl *** Checks for zero length arrays ***
1927 dnl *************************************
1928 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1936 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1939 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1942 dnl ***********************************
1943 dnl *** Checks for signals
1944 dnl ***********************************
1945 AC_CHECK_HEADERS(signal.h)
1946 AC_CHECK_FUNCS(sigaction)
1947 AC_CHECK_FUNCS(kill)
1948 AC_CHECK_FUNCS(signal)
1950 # signal() is declared inline in Android headers
1951 # so we need to workaround it by overriding the check.
1952 if test x$platform_android = xyes; then
1953 AC_DEFINE(HAVE_SIGNAL,1)
1956 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1957 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1959 if test x$host_win32 = xno; then
1960 dnl *************************************
1961 dnl *** Checks for time capabilities ***
1962 dnl *************************************
1964 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1965 AC_TRY_COMPILE([#include <time.h>], [
1966 const int foo = CLOCK_MONOTONIC;
1969 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1974 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1975 AC_TRY_COMPILE([#include <time.h>], [
1976 const int foo = CLOCK_MONOTONIC_COARSE;
1979 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1984 AC_MSG_CHECKING(for CLOCK_REALTIME)
1985 AC_TRY_COMPILE([#include <time.h>], [
1986 const int foo = CLOCK_REALTIME;
1989 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1994 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1995 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1996 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1997 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1998 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1999 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
2001 dnl hires monotonic clock support
2002 AC_SEARCH_LIBS(clock_gettime, rt)
2003 AC_CHECK_FUNCS(clock_nanosleep)
2005 dnl dynamic loader support
2006 AC_CHECK_FUNC(dlopen, DL_LIB="",
2007 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
2009 if test x$dl_support = xno; then
2010 AC_MSG_WARN([No dynamic loading support available])
2012 LIBS="$LIBS $DL_LIB"
2013 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
2014 dnl from glib's configure.ac
2015 AC_CACHE_CHECK([for preceeding underscore in symbols],
2017 AC_TRY_RUN([#include <dlfcn.h>
2018 int mono_underscore_test (void) { return 42; }
2020 void *f1 = (void*)0, *f2 = (void*)0, *handle;
2021 handle = dlopen ((void*)0, 0);
2023 f1 = dlsym (handle, "mono_underscore_test");
2024 f2 = dlsym (handle, "_mono_underscore_test");
2025 } return (!f2 || f1);
2027 [mono_cv_uscore=yes],
2028 [mono_cv_uscore=no],
2031 if test "x$mono_cv_uscore" = "xyes"; then
2032 MONO_DL_NEED_USCORE=1
2034 MONO_DL_NEED_USCORE=0
2036 AC_SUBST(MONO_DL_NEED_USCORE)
2037 AC_CHECK_FUNC(dlerror)
2040 dnl ******************************************************************
2041 dnl *** Checks for the IKVM JNI interface library ***
2042 dnl ******************************************************************
2043 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])
2046 if test x$with_ikvm_native = xyes; then
2047 ikvm_native_dir=ikvm-native
2048 jdk_headers_found="IKVM Native"
2051 AC_SUBST(ikvm_native_dir)
2053 AC_CHECK_HEADERS(execinfo.h)
2055 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2057 AC_CHECK_FUNCS(getgrgid_r)
2058 AC_CHECK_FUNCS(getgrnam_r)
2059 AC_CHECK_FUNCS(getresuid)
2060 AC_CHECK_FUNCS(setresuid)
2061 AC_CHECK_FUNCS(kqueue)
2062 AC_CHECK_FUNCS(backtrace_symbols)
2063 AC_CHECK_FUNCS(mkstemp)
2064 AC_CHECK_FUNCS(mmap)
2065 AC_CHECK_FUNCS(madvise)
2066 AC_CHECK_FUNCS(getrusage)
2067 AC_CHECK_FUNCS(getpriority)
2068 AC_CHECK_FUNCS(setpriority)
2069 AC_CHECK_FUNCS(dl_iterate_phdr)
2070 AC_CHECK_FUNCS(dladdr)
2071 AC_CHECK_FUNCS(sysconf)
2072 AC_CHECK_FUNCS(getrlimit)
2073 AC_CHECK_FUNCS(prctl)
2074 AC_CHECK_FUNCS(arc4random)
2075 AC_CHECK_FUNCS(nl_langinfo)
2077 AC_CHECK_FUNCS(sched_getaffinity)
2078 AC_CHECK_FUNCS(sched_setaffinity)
2079 AC_CHECK_FUNCS(sched_getcpu)
2081 if test x$platform_android != xyes; then
2082 AC_CHECK_FUNCS(getpwnam_r)
2083 AC_CHECK_FUNCS(getpwuid_r)
2086 AC_CHECK_FUNCS(readlink)
2087 AC_CHECK_FUNCS(chmod)
2088 AC_CHECK_FUNCS(lstat)
2089 AC_CHECK_FUNCS(getdtablesize)
2091 AC_CHECK_FUNCS(ftruncate)
2092 AC_CHECK_FUNCS(msync)
2094 AC_CHECK_FUNCS(gethostname getpeername)
2095 AC_CHECK_FUNCS(utime utimes)
2097 AC_CHECK_FUNCS(openlog closelog)
2098 AC_CHECK_FUNCS(atexit)
2100 AC_FUNC_STRERROR_R()
2102 dnl ****************************************************************
2103 dnl *** Check for sched_setaffinity from glibc versions before ***
2104 dnl *** 2.3.4. The older versions of the function only take 2 ***
2105 dnl *** parameters, not 3. ***
2107 dnl *** Because the interface change was not made in a minor ***
2108 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2109 dnl *** won't always indicate the interface sched_affinity has. ***
2110 dnl ****************************************************************
2111 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2112 AC_TRY_COMPILE([#include <sched.h>], [
2114 sched_setaffinity(0, &mask);
2116 # Yes, we have it...
2118 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2120 # We have the new, three-parameter version
2123 AC_TRY_COMPILE([#include <sched.h>], [
2124 CPU_COUNT((void *) 0);
2127 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2129 # We have the new, three-parameter version
2133 dnl ******************************************************************
2134 dnl *** Check for large file support ***
2135 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2136 dnl ******************************************************************
2138 # Check that off_t can represent 2**63 - 1 correctly, working around
2139 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2140 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2142 AC_DEFUN([LARGE_FILES], [
2143 large_CPPFLAGS=$CPPFLAGS
2144 CPPFLAGS="$CPPFLAGS $1"
2146 #include <sys/types.h>
2149 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2150 #define COMPILE_TIME_ASSERT(pred) \
2151 switch(0){case 0:case pred:;}
2152 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2155 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2156 large_CPPFLAGS="$large_CPPFLAGS $1"
2161 CPPFLAGS=$large_CPPFLAGS
2164 AC_MSG_CHECKING(if off_t is 64 bits wide)
2166 if test $large_offt = no; then
2167 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2168 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2170 if test $large_offt = no; then
2171 AC_MSG_WARN([No 64 bit file size support available])
2174 dnl *****************************
2175 dnl *** Checks for libsocket ***
2176 dnl *****************************
2177 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2181 dnl *****************************
2182 dnl *** Checks for libinotify ***
2183 dnl *****************************
2184 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2187 dnl *******************************
2188 dnl *** Checks for MSG_NOSIGNAL ***
2189 dnl *******************************
2190 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2191 AC_TRY_COMPILE([#include <sys/socket.h>], [
2192 int f = MSG_NOSIGNAL;
2194 # Yes, we have it...
2196 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2198 # We'll have to use signals
2202 dnl *****************************
2203 dnl *** Checks for IPPROTO_IP ***
2204 dnl *****************************
2205 AC_MSG_CHECKING(for IPPROTO_IP)
2206 AC_TRY_COMPILE([#include <netinet/in.h>], [
2207 int level = IPPROTO_IP;
2209 # Yes, we have it...
2211 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2213 # We'll have to use getprotobyname
2217 dnl *******************************
2218 dnl *** Checks for IPPROTO_IPV6 ***
2219 dnl *******************************
2220 AC_MSG_CHECKING(for IPPROTO_IPV6)
2221 AC_TRY_COMPILE([#include <netinet/in.h>], [
2222 int level = IPPROTO_IPV6;
2224 # Yes, we have it...
2226 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2228 # We'll have to use getprotobyname
2232 dnl ******************************
2233 dnl *** Checks for IPPROTO_TCP ***
2234 dnl ******************************
2235 AC_MSG_CHECKING(for IPPROTO_TCP)
2236 AC_TRY_COMPILE([#include <netinet/in.h>], [
2237 int level = IPPROTO_TCP;
2239 # Yes, we have it...
2241 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2243 # We'll have to use getprotobyname
2247 dnl *****************************
2248 dnl *** Checks for SOL_IP ***
2249 dnl *****************************
2250 AC_MSG_CHECKING(for SOL_IP)
2251 AC_TRY_COMPILE([#include <netdb.h>], [
2254 # Yes, we have it...
2256 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2258 # We'll have to use getprotobyname
2262 dnl *****************************
2263 dnl *** Checks for SOL_IPV6 ***
2264 dnl *****************************
2265 AC_MSG_CHECKING(for SOL_IPV6)
2266 AC_TRY_COMPILE([#include <netdb.h>], [
2267 int level = SOL_IPV6;
2269 # Yes, we have it...
2271 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2273 # We'll have to use getprotobyname
2277 dnl *****************************
2278 dnl *** Checks for SOL_TCP ***
2279 dnl *****************************
2280 AC_MSG_CHECKING(for SOL_TCP)
2281 AC_TRY_COMPILE([#include <netdb.h>], [
2282 int level = SOL_TCP;
2284 # Yes, we have it...
2286 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2288 # We'll have to use getprotobyname
2292 dnl *****************************
2293 dnl *** Checks for IP_PKTINFO ***
2294 dnl *****************************
2295 AC_MSG_CHECKING(for IP_PKTINFO)
2296 AC_TRY_COMPILE([#include <linux/in.h>], [
2297 int level = IP_PKTINFO;
2299 # Yes, we have it...
2301 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2306 dnl *****************************
2307 dnl *** Checks for IPV6_PKTINFO ***
2308 dnl *****************************
2309 AC_MSG_CHECKING(for IPV6_PKTINFO)
2310 AC_TRY_COMPILE([#include <netdb.h>], [
2311 int level = IPV6_PKTINFO;
2313 # Yes, we have it...
2315 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2320 dnl **********************************
2321 dnl *** Checks for IP_DONTFRAG ***
2322 dnl **********************************
2323 AC_MSG_CHECKING(for IP_DONTFRAG)
2324 AC_TRY_COMPILE([#include <netinet/in.h>], [
2325 int level = IP_DONTFRAG;
2327 # Yes, we have it...
2329 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2334 dnl **********************************
2335 dnl *** Checks for IP_DONTFRAGMENT ***
2336 dnl **********************************
2337 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2338 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2339 int level = IP_DONTFRAGMENT;
2341 # Yes, we have it...
2343 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2348 dnl **********************************
2349 dnl *** Checks for IP_MTU_DISCOVER ***
2350 dnl **********************************
2351 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2352 AC_TRY_COMPILE([#include <linux/in.h>], [
2353 int level = IP_MTU_DISCOVER;
2355 # Yes, we have it...
2357 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2362 dnl **********************************
2363 dnl *** Checks for IP_PMTUDISC_DO ***
2364 dnl **********************************
2365 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2366 AC_TRY_COMPILE([#include <linux/in.h>], [
2367 int level = IP_PMTUDISC_DO;
2369 # Yes, we have it...
2371 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2376 dnl *********************************
2377 dnl *** Check for struct ip_mreqn ***
2378 dnl *********************************
2379 AC_MSG_CHECKING(for struct ip_mreqn)
2380 AC_TRY_COMPILE([#include <netinet/in.h>], [
2381 struct ip_mreqn mreq;
2382 mreq.imr_address.s_addr = 0;
2384 # Yes, we have it...
2386 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2388 # We'll just have to try and use struct ip_mreq
2390 AC_MSG_CHECKING(for struct ip_mreq)
2391 AC_TRY_COMPILE([#include <netinet/in.h>], [
2392 struct ip_mreq mreq;
2393 mreq.imr_interface.s_addr = 0;
2395 # Yes, we have it...
2397 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2399 # No multicast support
2404 dnl **********************************
2405 dnl *** Check for getaddrinfo ***
2406 dnl **********************************
2407 AC_MSG_CHECKING(for getaddrinfo)
2412 getaddrinfo(NULL,NULL,NULL,NULL);
2414 # Yes, we have it...
2416 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2421 dnl **********************************
2422 dnl *** Check for gethostbyname2_r ***
2423 dnl **********************************
2424 AC_MSG_CHECKING(for gethostbyname2_r)
2430 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2432 # Yes, we have it...
2434 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2439 dnl **********************************
2440 dnl *** Check for gethostbyname2 ***
2441 dnl **********************************
2442 AC_MSG_CHECKING(for gethostbyname2)
2447 gethostbyname2(NULL,0);
2449 # Yes, we have it...
2451 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2456 dnl **********************************
2457 dnl *** Check for gethostbyname ***
2458 dnl **********************************
2459 AC_MSG_CHECKING(for gethostbyname)
2464 gethostbyname(NULL);
2466 # Yes, we have it...
2468 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2473 dnl **********************************
2474 dnl *** Check for getprotobyname ***
2475 dnl **********************************
2476 AC_MSG_CHECKING(for getprotobyname)
2481 getprotobyname(NULL);
2483 # Yes, we have it...
2485 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2490 dnl **********************************
2491 dnl *** Check for getprotobyname_r ***
2492 dnl **********************************
2493 AC_MSG_CHECKING(for getprotobyname_r)
2498 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2500 # Yes, we have it...
2502 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2507 dnl **********************************
2508 dnl *** Check for getnameinfo ***
2509 dnl **********************************
2510 AC_MSG_CHECKING(for getnameinfo)
2515 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2517 # Yes, we have it...
2519 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2525 dnl **********************************
2526 dnl *** Check for inet_ntop ***
2527 dnl **********************************
2528 AC_MSG_CHECKING(for inet_ntop)
2531 #include <arpa/inet.h>
2533 inet_ntop (0, NULL, NULL, 0);
2535 # Yes, we have it...
2537 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2542 dnl *****************************
2543 dnl *** Checks for libnsl ***
2544 dnl *****************************
2545 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2547 AC_CHECK_FUNCS(inet_pton inet_aton)
2549 dnl *****************************
2550 dnl *** Checks for libxnet ***
2551 dnl *****************************
2554 AC_MSG_CHECKING(for Solaris XPG4 support)
2555 if test -f /usr/lib/libxnet.so; then
2556 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2557 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2558 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2565 if test "$GCC" = "yes"; then
2566 CFLAGS="$CFLAGS -Wno-char-subscripts"
2571 dnl *****************************
2572 dnl *** Checks for libpthread ***
2573 dnl *****************************
2574 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2575 # and libpthread does not exist
2579 dnl Haiku has pthread in libroot (libc equiv)
2580 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2583 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2586 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2589 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2592 AC_CHECK_HEADERS(pthread.h)
2593 AC_CHECK_HEADERS(pthread_np.h)
2594 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2595 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2596 AC_CHECK_FUNCS(pthread_kill)
2597 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2598 AC_TRY_COMPILE([ #include <pthread.h>], [
2599 pthread_mutexattr_t attr;
2600 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2605 AC_ERROR(Posix system lacks support for recursive mutexes)
2607 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2608 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2609 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2610 AC_CHECK_FUNCS(mincore mlock munlock)
2612 dnl ***********************************
2613 dnl *** Checks for working __thread ***
2614 dnl ***********************************
2615 AC_MSG_CHECKING(for working __thread)
2616 if test "x$with_tls" != "x__thread"; then
2617 AC_MSG_RESULT(disabled)
2618 elif test "x$cross_compiling" = "xyes"; then
2619 AC_MSG_RESULT(cross compiling, assuming yes)
2622 #if defined(__APPLE__) && defined(__clang__)
2623 #error "__thread does not currently work with clang on Mac OS X"
2627 #include <pthread.h>
2629 static int res1, res2;
2631 void thread_main (void *arg)
2646 pthread_create (&t1, NULL, thread_main, 1);
2647 pthread_create (&t2, NULL, thread_main, 2);
2649 pthread_join (t1, NULL);
2650 pthread_join (t2, NULL);
2652 return !(res1 + res2 == 2);
2662 dnl **************************************
2663 dnl *** Checks for working sigaltstack ***
2664 dnl **************************************
2665 AC_MSG_CHECKING(for working sigaltstack)
2666 if test "x$with_sigaltstack" != "xyes"; then
2667 AC_MSG_RESULT(disabled)
2668 elif test "x$cross_compiling" = "xyes"; then
2669 AC_MSG_RESULT(cross compiling, assuming no)
2677 #include <pthread.h>
2678 #include <sys/wait.h>
2679 #if defined(__FreeBSD__) || defined(__NetBSD__)
2680 #define SA_STACK SA_ONSTACK
2683 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2688 volatile char*__ptr = NULL;
2690 loop (void *ignored)
2699 struct sigaction sa;
2702 pthread_attr_t attr;
2704 sa.sa_sigaction = sigsegv_signal_handler;
2705 sigemptyset (&sa.sa_mask);
2706 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2707 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2708 perror ("sigaction");
2712 /* x86 darwin deliver segfaults using SIGBUS */
2713 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2714 perror ("sigaction");
2717 sas.ss_sp = malloc (SIGSTKSZ);
2718 sas.ss_size = SIGSTKSZ;
2720 if (sigaltstack (&sas, NULL) == -1) {
2721 perror ("sigaltstack");
2725 pthread_attr_init (&attr);
2726 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2727 printf ("pthread_create\n");
2751 for (i = 0; i < 300; ++i) {
2752 waitpid (son, &status, WNOHANG);
2753 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2758 kill (son, SIGKILL);
2764 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2771 dnl ********************************
2772 dnl *** Checks for semaphore lib ***
2773 dnl ********************************
2774 # 'Real Time' functions on Solaris
2775 # posix4 on Solaris 2.6
2776 # pthread (first!) on Linux
2777 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2779 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2780 AC_CHECK_FUNCS(shm_open)
2782 dnl ********************************
2783 dnl *** Checks for timezone stuff **
2784 dnl ********************************
2785 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2791 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2792 if test $ac_cv_struct_tm_gmtoff = yes; then
2793 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2795 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2800 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2801 if test $ac_cv_var_timezone = yes; then
2802 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2804 AC_ERROR(unable to find a way to determine timezone)
2808 dnl *********************************
2809 dnl *** Checks for math functions ***
2810 dnl *********************************
2811 AC_SEARCH_LIBS(sqrtf, m)
2813 dnl ****************************************************************
2814 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2815 dnl *** have it in the library (duh)) ***
2816 dnl ****************************************************************
2817 AC_CHECK_FUNCS(poll)
2819 dnl **********************************
2821 dnl **********************************
2822 AC_CHECK_HEADERS(sys/epoll.h)
2824 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2825 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2826 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2831 AC_CHECK_HEADERS(sys/event.h)
2832 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2834 dnl **************************************
2835 dnl * Darwin has a race that prevents us from using reliably:
2836 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2837 dnl * Since kqueue is mostly used for scaling large web servers,
2838 dnl * and very few folks run Mono on large web servers on OSX, falling
2840 dnl **************************************
2841 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2842 if test "x$host_darwin" = "xno"; then
2843 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2847 dnl ******************************
2848 dnl *** Checks for SIOCGIFCONF ***
2849 dnl ******************************
2850 AC_CHECK_HEADERS(sys/ioctl.h)
2851 AC_CHECK_HEADERS(net/if.h, [], [],
2853 #ifdef HAVE_SYS_TYPES_H
2854 # include <sys/types.h>
2856 #ifdef HAVE_SYS_SOCKET_H
2857 # include <sys/socket.h>
2860 AC_MSG_CHECKING(for ifreq)
2863 #include <sys/ioctl.h>
2871 x = (void *) &ifr->ifr_addr;
2874 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2878 dnl **********************************
2879 dnl *** Checks for sin_len ***
2880 dnl **********************************
2881 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2883 #include <netinet/in.h>
2885 struct sockaddr_in saddr;
2886 saddr.sin_len = sizeof (saddr);
2889 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2893 dnl **********************************
2894 dnl *** Checks for sin6_len ***
2895 dnl **********************************
2896 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2898 #include <netinet/in.h>
2900 struct sockaddr_in6 saddr6;
2901 saddr6.sin6_len = sizeof (saddr6);
2904 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2908 dnl **********************************
2909 dnl *** Check for getifaddrs ***
2910 dnl **********************************
2911 AC_MSG_CHECKING(for getifaddrs)
2914 #include <sys/types.h>
2915 #include <sys/socket.h>
2916 #ifdef HAVE_NET_IF_H
2919 #include <ifaddrs.h>
2923 # Yes, we have it...
2925 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2929 dnl **********************************
2930 dnl *** Check for if_nametoindex ***
2931 dnl **********************************
2932 AC_MSG_CHECKING(for if_nametoindex)
2935 #include <sys/types.h>
2936 #include <sys/socket.h>
2939 if_nametoindex(NULL);
2941 # Yes, we have it...
2943 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2947 dnl **********************************
2948 dnl *** Check for access ***
2949 dnl **********************************
2950 AC_MSG_CHECKING(for access)
2956 # Yes, we have it...
2958 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2963 dnl **********************************
2964 dnl *** Checks for proclib ***
2965 dnl **********************************
2966 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.)])
2967 dnl **********************************
2968 dnl *** Checks for MonoPosixHelper ***
2969 dnl **********************************
2970 AC_CHECK_HEADERS(checklist.h)
2971 AC_CHECK_HEADERS(pathconf.h)
2972 AC_CHECK_HEADERS(fstab.h)
2973 AC_CHECK_HEADERS(attr/xattr.h)
2974 AC_CHECK_HEADERS(sys/extattr.h)
2975 AC_CHECK_HEADERS(sys/sendfile.h)
2976 AC_CHECK_HEADERS(sys/statvfs.h)
2977 AC_CHECK_HEADERS(sys/statfs.h)
2978 AC_CHECK_HEADERS(sys/vfstab.h)
2979 AC_CHECK_HEADERS(sys/xattr.h)
2980 AC_CHECK_HEADERS(sys/mman.h)
2981 AC_CHECK_HEADERS(sys/param.h)
2982 AC_CHECK_HEADERS(sys/mount.h, [], [],
2984 #ifdef HAVE_SYS_PARAM_H
2985 # include <sys/param.h>
2988 AC_CHECK_HEADERS(sys/mount.h)
2989 AC_CHECK_FUNCS(confstr)
2990 AC_CHECK_FUNCS(seekdir telldir)
2991 AC_CHECK_FUNCS(getdomainname)
2992 AC_CHECK_FUNCS(setdomainname)
2993 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2994 AC_CHECK_FUNCS(setgroups)
2995 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2996 AC_CHECK_FUNCS(getfsstat)
2997 AC_CHECK_FUNCS(lutimes futimes)
2998 AC_CHECK_FUNCS(mremap)
2999 AC_CHECK_FUNCS(remap_file_pages)
3000 AC_CHECK_FUNCS(posix_fadvise)
3001 AC_CHECK_FUNCS(posix_fallocate)
3002 AC_CHECK_FUNCS(posix_madvise)
3003 AC_CHECK_FUNCS(vsnprintf)
3004 AC_CHECK_FUNCS(sendfile)
3005 AC_CHECK_FUNCS(gethostid sethostid)
3006 AC_CHECK_FUNCS(sethostname)
3007 AC_CHECK_FUNCS(statfs)
3008 AC_CHECK_FUNCS(fstatfs)
3009 AC_CHECK_FUNCS(statvfs)
3010 AC_CHECK_FUNCS(fstatvfs)
3011 AC_CHECK_FUNCS(stime)
3012 AC_CHECK_FUNCS(ttyname_r)
3013 AC_CHECK_FUNCS(psignal)
3014 AC_CHECK_FUNCS(getlogin_r)
3015 AC_CHECK_FUNCS(lockf)
3016 AC_CHECK_FUNCS(swab)
3017 AC_CHECK_FUNCS(setusershell endusershell)
3018 AC_CHECK_FUNCS(futimens utimensat)
3019 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
3020 AC_CHECK_FUNCS(readv writev preadv pwritev)
3021 AC_CHECK_FUNCS(setpgid)
3022 AC_CHECK_FUNCS(system)
3023 AC_CHECK_FUNCS(fork execv execve)
3024 AC_CHECK_FUNCS(waitpid)
3025 AC_CHECK_FUNCS(accept4)
3026 AC_CHECK_FUNCS(localtime_r)
3027 AC_CHECK_FUNCS(mkdtemp)
3028 AC_CHECK_SIZEOF(size_t)
3029 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
3030 [#include <sys/types.h>
3031 #include <sys/stat.h>
3032 #include <unistd.h>])
3033 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
3034 [#include <sys/types.h>
3035 #include <sys/stat.h>
3036 #include <unistd.h>])
3037 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
3038 [#include <sys/time.h>])
3039 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
3040 [#include <sys/socket.h>])
3041 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
3042 [#include <unistd.h>
3043 #include <fcntl.h>])
3044 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
3045 [#include <sys/uio.h>])
3046 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
3047 [#include <sys/socket.h>])
3048 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
3049 [#include <sys/poll.h>])
3050 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
3051 [#include <sys/socket.h>])
3052 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
3053 [#include <sys/socket.h>])
3054 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3055 [#include <netinet/in.h>])
3056 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3057 [#include <netinet/in.h>])
3058 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3059 [#include <sys/un.h>])
3060 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3061 [#include <sys/types.h>
3062 #include <sys/stat.h>
3063 #include <unistd.h>])
3064 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3065 [#include <time.h>])
3066 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3067 [#include <sys/time.h>
3068 #include <sys/types.h>
3069 #include <utime.h>])
3070 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3071 [#include <sys/time.h>])
3072 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3073 [#include <sys/types.h>
3074 #include <utime.h>])
3076 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
3077 [#include <sys/types.h>
3078 #include <dirent.h>])
3080 [struct passwd.pw_gecos],,,
3081 [#include <sys/types.h>
3084 [struct statfs.f_flags],,,
3085 [#include <sys/types.h>
3086 #include <sys/vfs.h>])
3088 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3089 [#include <sys/types.h>
3090 #include <sys/stat.h>
3091 #include <unistd.h>])
3093 dnl Favour xattr through glibc, but use libattr if we have to
3094 AC_CHECK_FUNC(lsetxattr, ,
3095 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3099 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3101 [struct kinfo_proc.kp_proc],,,
3102 [#include <sys/types.h>
3103 #include <sys/param.h>
3104 #include <sys/sysctl.h>
3105 #include <sys/proc.h>
3108 dnl *********************************
3109 dnl *** Checks for Windows compilation ***
3110 dnl *********************************
3111 AC_CHECK_HEADERS(sys/time.h)
3112 AC_CHECK_HEADERS(sys/param.h)
3113 AC_CHECK_HEADERS(dirent.h)
3115 dnl ******************************************
3116 dnl *** Checks for OSX and iOS compilation ***
3117 dnl ******************************************
3118 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3120 dnl *********************************
3121 dnl *** Check for Console 2.0 I/O ***
3122 dnl *********************************
3123 AC_CHECK_HEADERS([curses.h])
3124 AC_CHECK_HEADERS([term.h], [], [],
3129 AC_CHECK_HEADERS([termios.h])
3131 dnl *********************************
3132 dnl *** Checks for random ***
3133 dnl *********************************
3134 if test x$host_darwin = xno; then
3135 AC_CHECK_HEADERS(sys/random.h)
3136 AC_CHECK_FUNCS(getrandom getentropy)
3139 dnl *********************************
3140 dnl *** Checks for Mono.Native ***
3141 dnl *********************************
3143 # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3144 # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3146 AC_MSG_CHECKING(for linux/in.h)
3148 #include <sys/socket.h>
3149 #include <linux/in.h>
3153 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3158 AC_CHECK_HEADERS([linux/if_packet.h])
3160 AC_MSG_CHECKING(for struct in_pktinfo)
3162 #ifdef HAVE_LINUX_IN_H
3163 #include <sys/socket.h>
3164 #include <linux/in.h>
3166 #include <netinet/in.h>
3169 struct in_pktinfo pktinfo;
3172 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3177 AC_MSG_CHECKING(for struct ip_mreqn)
3180 #include <sys/socket.h>
3181 #include <linux/in.h>
3183 #include <netinet/in.h>
3186 struct ip_mreqn mreqn;
3189 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3194 if test x$host_darwin = xno; then
3195 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3198 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3199 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3201 # AC_CHECK_FUNC(getifaddrs, [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3203 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3204 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3205 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3206 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3208 if test "x$mono_native_platform_ios" = "xno"; then
3209 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3210 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3211 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3214 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3215 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3216 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3217 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3218 AC_CHECK_FUNC(posix_fadvise, [AC_DEFINE(HAVE_POSIX_ADVISE, 1, [posix_fadvise])]) # the define is called HAVE_POSIX_ADVISE in corefx, not a typo
3219 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3220 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3221 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3223 if test "x$platform_android" != "xyes"; then
3224 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3227 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3228 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3229 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3230 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3231 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3232 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3234 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>]])
3235 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>]])
3236 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>]])
3237 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>]])
3238 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3239 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3240 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3242 AC_MSG_CHECKING(for struct statfs)
3244 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3245 #include <sys/mount.h>
3247 #include <sys/statfs.h>
3253 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3258 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3259 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3262 AC_MSG_CHECKING(for readdir_r)
3267 struct dirent* entry;
3268 struct dirent* result;
3269 readdir_r(dir, entry, &result);
3272 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3277 AC_MSG_CHECKING(for kevent with void *data)
3279 #include <sys/types.h>
3280 #include <sys/event.h>
3282 struct kevent event;
3284 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3287 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3292 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3293 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3295 AC_MSG_CHECKING(for sendfile with 4 arguments)
3297 #include <sys/sendfile.h>
3299 #if defined(TARGET_ANDROID)
3300 #if !defined(__ANDROID_API__)
3301 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3302 #elif __ANDROID_API__ < 21
3303 #error sendfile is not supported on this Android API level
3307 int result = sendfile(0, 0, 0, 0);
3310 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3315 ORIG_CFLAGS="$CFLAGS"
3316 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3318 AC_MSG_CHECKING(for sendfile with 6 arguments)
3321 #include <sys/types.h>
3322 #include <sys/socket.h>
3323 #include <sys/uio.h>
3325 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3328 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3333 CFLAGS="$ORIG_CFLAGS"
3335 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3336 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3337 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3338 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3340 ORIG_CFLAGS="$CFLAGS"
3341 CFLAGS="$CFLAGS -Werror=sign-conversion"
3343 AC_MSG_CHECKING(for getnameinfo with signed flags)
3345 #include <sys/types.h>
3348 const struct sockaddr *addr;
3355 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3358 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3363 CFLAGS="$ORIG_CFLAGS"
3365 if test "x$host_linux" = "xyes"; then
3366 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3368 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3371 # HAVE_CLOCK_MONOTONIC check already done above
3372 # HAVE_CLOCK_REALTIME check already done above
3373 # HAVE_MACH_ABSOLUTE_TIME check already done above
3374 # HAVE_MACH_TIMEBASE_INFO check already done above
3375 # HAVE_FUTIMES check already done above
3376 # HAVE_FUTIMENS check already done above
3378 ORIG_CFLAGS="$CFLAGS"
3379 CFLAGS="$CFLAGS -Werror=sign-conversion"
3381 AC_MSG_CHECKING(for bind with unsigned addrlen)
3383 #include <sys/socket.h>
3386 struct sockaddr* addr;
3388 bind(fd, addr, addrLen);
3391 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3396 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3398 #include <netinet/in.h>
3399 #include <netinet/tcp.h>
3401 struct ipv6_mreq opt;
3402 unsigned int index = 0;
3403 opt.ipv6mr_interface = index;
3406 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3411 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3413 #include <sys/inotify.h>
3417 int result = inotify_rm_watch(fd, wd);
3420 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3425 CFLAGS="$ORIG_CFLAGS"
3427 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3428 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3430 elif test "x$cross_compiling" = "xyes"; then
3431 AC_MSG_RESULT(cross compiling, assuming yes)
3432 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3435 #include <sys/mman.h>
3441 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3445 shm_unlink("/mono_configure_shm_open");
3447 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3448 // on at least the current version of Mac OS X
3450 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3457 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3463 AC_MSG_CHECKING(for getpriority with int who)
3465 #include <sys/resource.h>
3469 int result = getpriority(which, who);
3472 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3477 AC_MSG_CHECKING(for kevent with int parameters)
3479 #include <sys/types.h>
3480 #include <sys/event.h>
3483 const struct kevent* chagelist;
3485 struct kevent* eventlist;
3487 const struct timespec* timeout;
3488 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3491 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3496 AC_CHECK_FUNCS(mkstemps)
3497 # AC_CHECK_FUNCS(mkstemp) # already done above
3499 if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3500 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3503 AC_MSG_CHECKING(for tcp/var.h)
3505 #include <sys/types.h>
3506 #include <sys/socketvar.h>
3507 #include <netinet/ip.h>
3508 #include <netinet/tcp.h>
3509 #include <netinet/tcp_var.h>
3513 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3518 AC_CHECK_HEADERS([sys/cdefs.h])
3520 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3522 #ifdef HAVE_SYS_CDEFS_H
3523 #include <sys/cdefs.h>
3525 #include <netinet/tcp.h>
3527 int result = TCP_ESTABLISHED;
3530 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3535 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3537 AC_MSG_CHECKING(for struct rt_msghdr)
3539 #include <sys/types.h>
3540 #include <net/route.h>
3545 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3550 AC_CHECK_HEADERS([sys/sysctl.h])
3551 AC_CHECK_HEADERS([linux/rtnetlink.h])
3553 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3554 #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3555 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3557 ORIG_CFLAGS="$CFLAGS"
3558 CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3560 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3564 size_t namelen = 20;
3566 int result = getdomainname(name, namelen);
3569 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3574 CFLAGS="$ORIG_CFLAGS"
3576 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3577 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3578 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3580 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
3581 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3582 elif test "x$host_linux" = "xyes"; then
3583 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3586 # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3587 # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3588 # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3589 # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3592 AC_MSG_CHECKING(for GSS/GSS.h)
3594 #include <GSS/GSS.h>
3598 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3599 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3605 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3607 #include <gssapi/gssapi_ext.h>
3616 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3618 #include <gssapi/gssapi_ext.h>
3619 #include <gssapi/gssapi_krb5.h>
3620 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3624 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3629 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3631 AC_CHECK_HEADERS([crt_externs.h])
3633 AC_MSG_CHECKING(for _NSGetEnviron)
3635 #include <crt_externs.h>
3637 char **result = *(_NSGetEnviron());
3640 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3645 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3647 # *** End of Mono.Native checks ***
3649 AM_CONDITIONAL(ENABLE_GSS, false)
3651 dnl *********************************
3652 dnl *** Checks for Windows compilation ***
3653 dnl *********************************
3654 AC_CHECK_HEADERS(winternl.h)
3656 jdk_headers_found=no
3657 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3658 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3659 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3660 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3661 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3662 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3663 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3665 dnl *********************************
3666 dnl *** Check for struct ip_mreqn ***
3667 dnl *********************************
3668 AC_MSG_CHECKING(for struct ip_mreqn)
3669 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3670 struct ip_mreqn mreq;
3671 mreq.imr_address.s_addr = 0;
3673 # Yes, we have it...
3675 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3677 # We'll just have to try and use struct ip_mreq
3679 AC_MSG_CHECKING(for struct ip_mreq)
3680 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3681 struct ip_mreq mreq;
3682 mreq.imr_interface.s_addr = 0;
3684 # Yes, we have it...
3686 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3688 # No multicast support
3693 dnl **********************************
3694 dnl *** Check for getaddrinfo ***
3695 dnl **********************************
3696 AC_MSG_CHECKING(for getaddrinfo)
3699 #include <winsock2.h>
3700 #include <ws2tcpip.h>
3702 getaddrinfo(NULL,NULL,NULL,NULL);
3704 # Yes, we have it...
3706 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3711 dnl **********************************
3712 dnl *** Check for gethostbyname ***
3713 dnl **********************************
3714 AC_MSG_CHECKING(for gethostbyname)
3717 #include <winsock2.h>
3718 #include <ws2tcpip.h>
3720 gethostbyname(NULL);
3722 # Yes, we have it...
3724 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3729 dnl **********************************
3730 dnl *** Check for getprotobyname ***
3731 dnl **********************************
3732 AC_MSG_CHECKING(for getprotobyname)
3735 #include <winsock2.h>
3736 #include <ws2tcpip.h>
3738 getprotobyname(NULL);
3740 # Yes, we have it...
3742 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3747 dnl **********************************
3748 dnl *** Check for getnameinfo ***
3749 dnl **********************************
3750 AC_MSG_CHECKING(for getnameinfo)
3753 #include <winsock2.h>
3754 #include <ws2tcpip.h>
3756 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3758 # Yes, we have it...
3760 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3765 dnl **********************************
3766 dnl *** Check for inet_ntop ***
3767 dnl **********************************
3768 AC_MSG_CHECKING(for inet_ntop)
3771 #include <winsock2.h>
3772 #include <ws2tcpip.h>
3774 inet_ntop (0, NULL, NULL, 0);
3776 # Yes, we have it...
3778 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3783 dnl **********************************
3784 dnl *** Check for inet_pton ***
3785 dnl **********************************
3786 AC_MSG_CHECKING(for inet_pton)
3789 #include <winsock2.h>
3790 #include <ws2tcpip.h>
3795 inet_pton (0, NULL, NULL);
3797 # Yes, we have it...
3799 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3804 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3805 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3806 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3807 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3808 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3809 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3810 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3814 AC_MSG_CHECKING(for socklen_t)
3816 #include <sys/types.h>
3817 #include <sys/socket.h>
3821 ac_cv_c_socklen_t=yes
3822 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3828 AC_CHECK_FUNCS(execvp)
3830 dnl ****************************
3831 dnl *** Look for /dev/random ***
3832 dnl ****************************
3834 AC_MSG_CHECKING([if usage of random device is requested])
3835 AC_ARG_ENABLE(dev-random,
3836 [ --disable-dev-random disable the use of the random device (enabled by default)],
3837 try_dev_random=$enableval, try_dev_random=yes)
3839 AC_MSG_RESULT($try_dev_random)
3843 dnl IBM i does not have /dev/random, use unblocking only
3846 NAME_DEV_RANDOM="/dev/urandom"
3849 dnl Win32 does not have /dev/random, they have their own method...
3851 *-mingw*|*-*-cygwin*)
3852 ac_cv_have_dev_random=no
3855 dnl Everywhere else, it's /dev/random
3858 NAME_DEV_RANDOM="/dev/random"
3862 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3864 dnl Now check if the device actually exists
3866 if test "x$try_dev_random" = "xyes"; then
3867 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3868 [if test -r "$NAME_DEV_RANDOM" ; then
3869 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3870 if test "x$ac_cv_have_dev_random" = "xyes"; then
3871 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3874 AC_MSG_CHECKING(for random device)
3875 ac_cv_have_dev_random=no
3876 AC_MSG_RESULT(has been disabled)
3879 if test "x$host_win32" = "xyes"; then
3880 AC_DEFINE(HAVE_CRYPT_RNG)
3883 if test "x$ac_cv_have_dev_random" = "xno" \
3884 && test "x$host_win32" = "xno"; then
3887 *** A system-provided entropy source was not found on this system.
3888 *** Because of this, the System.Security.Cryptography random number generator
3889 *** will throw a NotImplemented exception.
3891 *** If you are seeing this message, and you know your system DOES have an
3892 *** entropy collection in place, please report an issue on GitHub and
3893 *** provide information about the system and how to access the random device.
3895 *** Otherwise you can install either egd or prngd and set the environment
3896 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3900 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)
3902 AC_MSG_CHECKING([if big-arrays are to be enabled])
3903 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)
3904 if test "x$enable_big_arrays" = "xyes" ; then
3905 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3906 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3908 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3911 AC_MSG_RESULT($enable_big_arrays)
3917 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3919 if test "x$enable_dtrace" = "xyes"; then
3920 if test "x$has_dtrace" = "xno"; then
3921 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3923 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3924 if test "x$DTRACE" = "xno"; then
3925 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3927 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3928 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3934 if test "x$enable_dtrace" = "xyes"; then
3935 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3937 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3940 DTRACEFLAGS="-arch ppc64"
3943 DTRACEFLAGS="-arch x86_64"
3952 DTRACEFLAGS="-arch ppc"
3955 DTRACEFLAGS="-arch i386"
3962 AC_SUBST(DTRACEFLAGS)
3968 AC_CHECK_HEADERS([sys/sdt.h])
3970 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3971 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3973 dnl **************************
3974 dnl *** AOT cross offsets ***
3975 dnl **************************
3977 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3978 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3984 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3985 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3986 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)
3987 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3988 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3990 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3992 if test "x$enable_llvm" = "xdefault"; then
3993 enable_llvm=$enable_llvm_default
3996 enable_llvm_msvc_only="no"
3997 if test "x$enable_llvm" = "xyes"; then
3998 if test "x$host_win32" = "xyes"; then
3999 if test "x$cross_compiling" = "xno"; then
4002 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
4003 enable_llvm_msvc_only="yes"
4006 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
4010 if test "x$enable_loadedllvm" = "xyes"; then
4011 AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
4012 enable_loadedllvm=no
4018 if test "x$enable_llvm" = "xyes"; then
4019 if test "x$with_llvm" != "x"; then
4020 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
4021 if test x$host_win32 = xyes; then
4022 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
4024 if test ! -x $EXTERNAL_LLVM_CONFIG; then
4025 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
4028 if test x$host_win32 = xyes; then
4029 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
4031 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
4033 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
4038 LLVM_CODEGEN_LIBS="x86codegen"
4041 LLVM_CODEGEN_LIBS="armcodegen"
4044 LLVM_CODEGEN_LIBS="aarch64codegen"
4047 LLVM_CODEGEN_LIBS="powerpccodegen"
4050 if test "x$host" != "x$target"; then
4051 # No need for jit libs
4055 AC_SUBST(LLVM_CODEGEN_LIBS)
4056 AC_SUBST(EXTERNAL_LLVM_CONFIG)
4058 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
4059 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4060 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4062 if test "x$enable_llvm_msvc_only" != "xyes"; then
4063 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4065 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4069 # AC_DEFINE necessary for correct restore behavior on Linux
4070 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4071 if test "x$internal_llvm" != "xno"; then
4072 if test "x$enable_llvm_msvc_only" != "xyes"; then
4073 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4075 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4079 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4080 if test "x$enable_llvm_asserts" != "xno"; then
4081 if test "x$enable_llvm_msvc_only" != "xyes"; then
4082 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4084 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4088 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4090 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
4091 if test "x$enable_loadedllvm" = "xyes"; then
4092 if test "x$enable_llvm_msvc_only" != "xyes"; then
4093 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
4097 if test "x$enable_llvm" = "xyes"; then
4098 enable_llvm_runtime=yes
4101 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4102 if test "x$enable_llvm_runtime" = "xyes"; then
4103 if test "x$enable_llvm_msvc_only" != "xyes"; then
4104 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4106 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4111 ACCESS_UNALIGNED="yes"
4115 SQLITE="libsqlite.so.0"
4116 SQLITE3="libsqlite3.so.0"
4118 GDKX11="libgdk-x11-2.0.so.0"
4119 GTKX11="libgtk-x11-2.0.so.0"
4120 XINERAMA="libXinerama.so.1"
4122 sizeof_register="SIZEOF_VOID_P"
4125 boehm_supported=true
4134 ACCESS_UNALIGNED="no"
4142 ACCESS_UNALIGNED="no"
4144 AC_MSG_CHECKING(for mips n32)
4146 #if _MIPS_SIM != _ABIN32
4163 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4168 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4169 # int astruct __attribute__ ((visibility ("hidden")));
4172 # void *p = &astruct;
4174 # gcc -fPIC --shared -o libfoo.so foo.c
4176 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4177 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4178 have_visibility_hidden=no
4181 have_visibility_hidden=no
4192 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4199 openbsd*|freebsd*|kfreebsd-gnu*)
4206 x86_64-*-* | amd64-*-*)
4209 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4210 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4217 BTLS_PLATFORM=x86_64
4218 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4223 BTLS_PLATFORM=x86_64
4224 boehm_supported=false
4226 openbsd*|freebsd*|kfreebsd-gnu*)
4229 BTLS_PLATFORM=x86_64
4233 BTLS_PLATFORM=x86_64
4238 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4244 ACCESS_UNALIGNED="no"
4251 if test x"$GCC" = xyes; then
4252 # We don't support v8 cpus
4253 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4255 if test x"$AR" = xfalse; then
4256 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4259 *-mingw*|*-*-cygwin*)
4260 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4261 have_visibility_hidden=no
4265 # Old Boehm fails to compile for x86_64-mingw.
4266 # It is trivial to fix, but just silently drop it.
4267 boehm_supported=false
4271 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4272 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4273 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4274 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4276 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4277 if ! (echo $CC | grep -q -- 'clang'); then
4278 CFLAGS="$CFLAGS -mminimal-toc"
4282 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4288 BTLS_PLATFORM=powerpc
4289 dnl on AIX/PASE, shared libraries can be inside archives
4290 dnl if they are, we specify them by lib.a(lib.so)
4291 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4292 LIBC="libc.a(shr_64.o)"
4293 INTL="libintl.a(libintl.so.8)"
4297 BTLS_PLATFORM=powerpc
4306 ACCESS_UNALIGNED="no"
4307 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4313 ACCESS_UNALIGNED="no"
4314 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4319 ACCESS_UNALIGNED="no"
4321 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4324 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4326 arm*-linux*-gnueabi)
4327 BTLS_PLATFORM=armsoft
4334 ACCESS_UNALIGNED="no"
4335 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4337 aarch64-*darwin*ilp32)
4340 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4342 # assuming no other target other than watchOS is using aarch64*darwin triple
4346 # https://lkml.org/lkml/2012/7/15/133
4349 boehm_supported=false
4352 BTLS_PLATFORM=aarch64
4353 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4358 ACCESS_UNALIGNED="yes"
4361 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4368 BTLS_PLATFORM=riscv32
4370 boehm_supported=false
4377 BTLS_PLATFORM=riscv64
4379 boehm_supported=false
4385 if test "x$host" != "x$target"; then
4386 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4388 enable_support_build=no
4390 # Can't use tls, since it depends on the runtime detection of tls offsets
4391 # in mono-compiler.h
4398 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4402 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4406 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4410 powerpc64-ps3-linux-gnu)
4412 arch_target=powerpc64
4413 AC_DEFINE(TARGET_PS3, 1, [...])
4414 # It would be better to just use TARGET_POWERPC64, but lots of code already
4416 AC_DEFINE(__mono_ppc64__, 1, [...])
4417 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4419 target_byte_order=G_BIG_ENDIAN
4421 powerpc64-xbox360-linux-gnu)
4423 arch_target=powerpc64
4424 AC_DEFINE(TARGET_XBOX360, 1, [...])
4425 # It would be better to just use TARGET_POWERPC64, but lots of code already
4428 target_byte_order=G_BIG_ENDIAN
4432 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4436 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4449 AC_DEFINE(TARGET_PS4, 1, [...])
4450 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4451 CPPFLAGS="$CPPFLAGS"
4454 aarch64*darwin*_ilp32)
4456 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4457 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4464 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4465 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4472 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4473 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4478 x86_64-google-fuchsia)
4481 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
4484 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4492 AC_DEFINE(TARGET_ANDROID, 1, [...])
4499 AC_DEFINE(TARGET_WASM, 1, [...])
4503 AC_DEFINE(TARGET_X86, 1, [...])
4507 AC_DEFINE(TARGET_AMD64, 1, [...])
4511 AC_DEFINE(TARGET_ARM, 1, [...])
4513 ACCESS_UNALIGNED="no"
4516 AC_DEFINE(TARGET_ARM64, 1, [...])
4520 AC_DEFINE(TARGET_POWERPC, 1, [...])
4523 AC_DEFINE(TARGET_POWERPC, 1, [...])
4524 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4527 AC_DEFINE(TARGET_S390X, 1, [...])
4530 AC_DEFINE(TARGET_MIPS, 1, [...])
4533 AC_DEFINE(TARGET_SPARC, 1, [...])
4536 AC_DEFINE(TARGET_SPARC64, 1, [...])
4539 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4540 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4543 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4544 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4549 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4550 target_sizeof_void_p=4
4553 target_sizeof_void_p=8
4556 AC_MSG_ERROR([unknown target])
4562 AC_DEFINE(HOST_WASM, 1, [...])
4565 AC_DEFINE(HOST_X86, 1, [...])
4568 AC_DEFINE(HOST_AMD64, 1, [...])
4571 AC_DEFINE(HOST_ARM, 1, [...])
4574 AC_DEFINE(HOST_ARM64, 1, [...])
4577 AC_DEFINE(HOST_POWERPC, 1, [...])
4580 AC_DEFINE(HOST_POWERPC, 1, [...])
4581 AC_DEFINE(HOST_POWERPC64, 1, [...])
4584 AC_DEFINE(HOST_S390X, 1, [...])
4587 AC_DEFINE(HOST_MIPS, 1, [...])
4590 AC_DEFINE(HOST_SPARC, 1, [...])
4593 AC_DEFINE(HOST_SPARC64, 1, [...])
4596 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4597 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4600 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4601 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4605 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4607 X86 | AMD64 | ARM | ARM64)
4608 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4612 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4613 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4619 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4620 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4622 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4624 if test "x$enable_vtune" = "xyes"; then
4625 if test "x$with_vtune" = "x"; then
4626 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4628 VTUNE_PATH=$with_vtune
4630 VTUNE_INCLUDE=$VTUNE_PATH/include
4633 VTUNE_LIB=$VTUNE_PATH/lib32
4636 VTUNE_LIB=$VTUNE_PATH/lib64
4639 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4642 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4643 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4645 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4646 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4649 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4650 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4652 AC_SUBST(VTUNE_LIBS)
4653 AC_SUBST(VTUNE_CFLAGS)
4655 dnl Use GCC atomic ops if they work on the target.
4656 if test x$GCC = "xyes"; then
4658 X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4659 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4664 if test "x$target_mach" = "xyes"; then
4666 if test "x$TARGET_SYS" = "xWATCHOS"; then
4667 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4668 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4669 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4671 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64" -o "x$TARGET" = "xARM6432"; then
4672 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4673 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4674 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4678 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4679 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4680 #error fail this for ios
4683 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4684 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4685 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4688 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4689 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4690 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4695 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4698 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4700 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4702 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4703 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4704 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4705 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4707 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4710 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4712 if test "x$sizeof_register" = "x4"; then
4713 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4714 elif test "x$sizeof_register" = "x8"; then
4715 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4717 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4720 if test "x$have_visibility_hidden" = "xyes"; then
4721 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4724 if test "x$have_deprecated" = "xyes"; then
4725 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4729 dnl Simple Generational checks (sgen)
4732 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4733 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4734 if test x$buildsgen = xyes; then
4735 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4736 SGEN_DEFINES="-DHAVE_SGEN_GC"
4739 if test x$with_sgen_default_concurrent != xno; then
4740 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4741 conc_gc_msg=" (concurrent by default)"
4744 if test "x$gc_msg" = "x"; then
4745 gc_msg="sgen$conc_gc_msg"
4747 gc_msg="sgen$conc_gc_msg and $gc_msg"
4750 AC_SUBST(SGEN_DEFINES)
4751 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4753 jit_status="Building and using the JIT"
4761 INTL="libintl.dylib"
4762 SQLITE="libsqlite.0.dylib"
4763 SQLITE3="libsqlite3.0.dylib"
4765 GDKX11="libgdk-x11-2.0.dylib"
4766 GTKX11="libgtk-x11-2.0.dylib"
4771 SQLITE="libsqlite.so"
4772 SQLITE3="libsqlite3.so"
4782 SQLITE="libsqlite.so"
4783 SQLITE3="libsqlite3.so"
4788 SQLITE="libsqlite.so"
4789 SQLITE3="libsqlite3.so"
4793 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4794 AC_MSG_CHECKING(for the soname of libX11.so)
4795 for i in $x_libraries $dlsearch_path; do
4797 if test -f $i/libX11.so.$r; then
4804 if test "x$X11" = "xlibX11.so"; then
4805 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4813 ######################################
4815 ######################################
4819 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4820 if test x$GCC = xyes; then
4821 GNUC_UNUSED='__attribute__((__unused__))'
4822 GNUC_NORETURN='__attribute__((__noreturn__))'
4824 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4827 AC_SUBST(GNUC_PRETTY)
4828 AC_SUBST(GNUC_UNUSED)
4829 AC_SUBST(GNUC_NORETURN)
4830 AC_SUBST(BREAKPOINT)
4832 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4835 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4851 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4856 arm*-darwin*|aarch64*-*|riscv*)
4857 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4860 ORDER=G_LITTLE_ENDIAN
4863 LDFLAGS="$LDFLAGS -ltextencoding"
4866 CFLAGS="$CFLAGS -pthread"
4867 LDFLAGS="$LDFLAGS -pthread"
4877 # Defined for all targets/platforms using classic Windows API support.
4878 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4879 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4881 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4882 AC_CHECK_FUNCS(getrlimit)
4883 AC_CHECK_FUNCS(fork execv execve)
4884 AC_CHECK_FUNCS(waitpid)
4886 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4888 if test x$with_overridable_allocators = xyes; then
4889 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4890 AC_MSG_NOTICE([Overridable allocator support enabled])
4892 AC_MSG_NOTICE([Overridable allocator support disabled])
4896 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4897 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4898 # removed once support for 10.6 is dropped.
4900 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4902 if test x$target_osx = xyes; then
4903 AC_CHECK_FUNCS(getpwuid_r)
4904 elif test x$target_ios = xno; then
4905 AC_CHECK_FUNCS(strndup getpwuid_r)
4908 AC_SEARCH_LIBS(sqrtf, m)
4910 # nanosleep may not be part of libc, also search it in other libraries
4911 AC_SEARCH_LIBS(nanosleep, rt)
4913 AC_SEARCH_LIBS(dlopen, dl)
4914 old_ldflags="${LDFLAGS}"
4915 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4916 if test $lt_cv_prog_gnu_ld = yes; then
4917 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4920 *-*-aix*|*-*-os400*)
4923 dnl Try to use export-dynamic anyways
4924 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4928 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4929 if test $found_export_dynamic = no; then
4930 LDFLAGS="${old_ldflags}"
4933 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4934 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4935 AC_CHECK_LIB(iconv, iconv_open)
4936 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4937 AC_SUBST(HAVE_ALLOCA_H)
4939 # Get the exact type of size_t, not just its size.
4940 # This is so we can find an exact printf format among u, lu, llu, I64u.
4941 # To avoid warnings about slight mismatches.
4942 # C99 runtime "zu" dependency is being avoided here.
4944 # We have to compile as C++ because C is too lenient
4945 # and lets the wrong thing compile, with warnings.
4947 # Note: "zu" or ifdef <something> have the advantage
4948 # of producing installable "biarch" headers. i.e. one Mac header
4949 # for Mac/x86 and Mac/amd64.
4953 # Check long before int because it is the overwhelming Unix answer,
4954 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4956 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4958 AC_MSG_CHECKING(if size_t is unsigned long)
4959 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4961 unsigned long *a = (size_t*)0;
4964 AC_SUBST(GSIZE_FORMAT, '"lu"')
4967 AC_MSG_CHECKING(if size_t is unsigned int)
4968 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4970 unsigned *a = (size_t*)0;
4973 AC_SUBST(GSIZE_FORMAT, '"u"')
4975 # At this point the majority of systems have their answer,
4976 # and we descend into non-standard or new-standard territory.
4978 # Check __int64 first because I64 on some systems predates ll, enabling
4979 # new compiler/old runtime interop, and the types always have the same size.
4981 AC_MSG_CHECKING(if size_t is unsigned __int64)
4982 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4984 unsigned __int64 *a = (size_t*)0;
4987 AC_SUBST(GSIZE_FORMAT, '"I64u"')
4990 AC_MSG_CHECKING(if size_t is unsigned long long)
4991 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4993 unsigned long long *a = (size_t*)0;
4996 AC_SUBST(GSIZE_FORMAT, '"llu"')
4999 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
5007 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
5008 # This provides for an exact match with functions that
5009 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
5010 # uintptr_t is not necessarily the same.
5012 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
5013 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
5015 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
5025 AC_SUBST(GSIZE_FORMAT)
5028 # END OF EGLIB CHECKS
5031 AC_ARG_WITH([libgdiplus],
5032 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
5033 [], [with_libgdiplus=installed])
5035 # default install location
5036 libgdiplus_install_loc=libgdiplus${libsuffix}
5039 libgdiplus_install_loc=libgdiplus${libsuffix}.0
5043 case $with_libgdiplus in
5050 if test x$cross_compiling = xno; then
5051 if test x$host_darwin = xyes; then
5052 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
5054 libgdiplus_install_loc=$a
5062 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5065 /*) # absolute path, assume it is an install location
5066 libgdiplus_loc=$with_libgdiplus
5067 libgdiplus_install_loc=$with_libgdiplus
5071 libgdiplus_loc=`pwd`/$with_libgdiplus
5074 AC_SUBST(libgdiplus_loc)
5075 AC_SUBST(libgdiplus_install_loc)
5077 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)
5078 if test "x$icall_symbol_map" = "xyes"; then
5079 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5082 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5083 if test "x$icall_export" = "xyes"; then
5084 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5087 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5088 if test "x$icall_tables" = "xno"; then
5089 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5092 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5094 if test "x$with_tls" = "x__thread"; then
5095 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5096 # Pass the information to libgc
5097 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5098 AC_MSG_CHECKING(if the tls_model attribute is supported)
5099 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5102 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5108 if test ${TARGET} = ARM; then
5109 dnl ******************************************
5110 dnl *** Check to see what FPU is available ***
5111 dnl ******************************************
5112 AC_MSG_CHECKING(which FPU to use)
5115 # This is a bit tricky:
5117 # if (__ARM_PCS_VFP) {
5118 # /* mfloat-abi=hard == VFP with hard ABI */
5119 # } elif (!__SOFTFP__) {
5120 # /* mfloat-abi=softfp == VFP with soft ABI */
5122 # /* mfloat-abi=soft == no VFP */
5125 # The exception is iOS (w/ GCC) where none of the above
5126 # are defined (but iOS always uses the 'softfp' ABI).
5128 # No support for FPA.
5133 # iOS GCC always uses the 'softfp' ABI.
5134 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5138 # Are we using the 'hard' ABI?
5139 if test x$fpu = xNONE; then
5140 AC_TRY_COMPILE([], [
5141 #ifndef __ARM_PCS_VFP
5142 #error "Float ABI is not 'hard'"
5151 # No 'hard' ABI. 'soft' or 'softfp'?
5152 if test x$fpu = xNONE; then
5153 AC_TRY_COMPILE([], [
5155 #error "Float ABI is not 'softfp'"
5164 if test x$arm_fpu != x; then
5169 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5172 dnl *********************************************
5173 dnl *** Check which ARM version(s) we can use ***
5174 dnl *********************************************
5175 AC_MSG_CHECKING(which ARM version to use)
5177 AC_TRY_COMPILE([], [
5178 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5179 #error Not on ARM v5.
5187 AC_TRY_COMPILE([], [
5188 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5189 #error Not on ARM v6.
5198 AC_TRY_COMPILE([], [
5199 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5200 #error Not on ARM v7.
5210 AC_MSG_RESULT($arm_ver)
5212 if test x$arm_v5 = xyes; then
5213 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5214 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5217 if test x$arm_v6 = xyes; then
5218 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5219 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5222 if test x$arm_v7 = xyes; then
5223 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5224 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5227 if test x$host_linux = xyes; then
5229 if test x$fpu = xNONE; then
5237 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5238 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5240 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5242 if test x$fpabi = xauto; then
5243 AC_TRY_COMPILE([], [
5244 #ifdef __riscv_float_abi_double
5254 if test x$fpabi = xauto; then
5255 AC_TRY_COMPILE([], [
5256 #ifdef __riscv_float_abi_single
5266 if test x$fpabi = xauto; then
5267 AC_TRY_COMPILE([], [
5268 #ifdef __riscv_float_abi_soft
5280 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5281 AC_MSG_RESULT([double-precision])
5284 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5285 AC_MSG_ERROR([single-precision, not supported])
5288 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5289 AC_MSG_RESULT([soft float])
5292 AC_MSG_ERROR([unknown])
5295 AC_MSG_ERROR([invalid option: $fpabi])
5300 if test ${TARGET} = unknown; then
5301 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5302 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5305 if test "x$platform_android" = "xyes"; then
5306 case "x${TARGET}" in
5311 BTLS_PLATFORM=android-armv5
5315 BTLS_PLATFORM=android-armv6
5319 BTLS_PLATFORM=android-armv7
5328 BTLS_PLATFORM=android-v8a
5332 BTLS_PLATFORM=android-x86
5336 BTLS_PLATFORM=android-x64
5344 if test ${ACCESS_UNALIGNED} = no; then
5345 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5348 if test x$host_darwin = xyes; then
5349 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5351 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5352 [AC_MSG_RESULT([no])],
5354 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5356 RANLIB="$RANLIB -no_warning_for_no_symbols"
5357 AC_MSG_RESULT([yes])
5364 # Pass CPPFLAGS to libgc configure
5365 # We should use a separate variable for this to avoid passing useless and
5366 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5367 # This should be executed late so we pick up the final version of CPPFLAGS
5368 # The problem with this approach, is that during a reconfigure, the main
5369 # configure scripts gets invoked with these arguments, so we use separate
5370 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5371 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5372 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5373 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5375 # Don't pass -finstrument-for-thread-suspension in,
5376 # if these are instrumented it will be very bad news
5377 # (infinite recursion, undefined parking behavior, etc)
5378 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5379 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\""
5380 if test "x$support_boehm" = "xyes"; then
5381 AC_CONFIG_SUBDIRS(libgc)
5387 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5388 if test x$with_malloc_mempools = xyes; then
5390 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5395 DISABLE_MCS_DOCS=default
5396 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5397 if test x$with_mcs_docs != xyes; then
5398 DISABLE_MCS_DOCS=yes
5401 if test -n "$INSTALL_4_x_TRUE"; then :
5402 DISABLE_MCS_DOCS=yes
5404 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5405 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5408 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)],[
5409 if test x$with_lazy_gc_thread_creation != xno ; then
5410 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5412 ], [with_lazy_gc_thread_creation=no])
5414 dnl *****************************
5415 dnl *** Thread suspend policy ***
5416 dnl *****************************
5418 dnl Set a default hybrid or cooperative suspend on some platforms
5420 dnl Coop default is set by the bitcode preset.
5422 dnl If coop isn't on by default, maybe hybrid should be?
5423 if test x$enable_cooperative_suspend_default != xyes; then
5426 dnl Some host/target confusion, there's no host_osx (and
5427 dnl host_darwin would be true on iOS not just macOS).
5428 if test x$target_osx = xyes; then
5429 enable_hybrid_suspend_default=yes
5430 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5431 enable_hybrid_suspend_default=yes
5437 dnl Now check if there were flags overriding the defaults
5439 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])
5440 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5442 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5443 enable_cooperative_suspend=$with_cooperative_gc
5446 if test x$enable_cooperative_suspend = xdefault; then
5447 enable_cooperative_suspend=$enable_cooperative_suspend_default
5450 if test x$enable_cooperative_suspend != xno; then
5451 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5454 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5456 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])
5458 if test x$enable_hybrid_suspend = xdefault; then
5459 enable_hybrid_suspend=$enable_hybrid_suspend_default
5462 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5463 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5466 if test x$enable_hybrid_suspend != xno ; then
5467 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5470 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5472 dnl End of thread suspend policy
5474 dnl ***************************
5475 dnl *** feature experiments ***
5476 dnl ***************************
5478 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5479 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null],[
5481 if test x$enable_experiment != x ; then
5482 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5484 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5485 eval "mono_experiment_test_enable_$feature='yes'"
5488 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5489 eval "mono_experiment_test_enable_null='yes'"
5493 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5494 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5498 dnl **********************
5499 dnl *** checked builds ***
5500 dnl **********************
5502 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, crash_reporting],[
5504 if test x$enable_checked_build != x ; then
5505 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5507 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5508 eval "mono_checked_build_test_enable_$feature='yes'"
5511 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5512 eval "mono_checked_build_test_enable_gc='yes'"
5513 eval "mono_checked_build_test_enable_metadata='yes'"
5514 eval "mono_checked_build_test_enable_thread='yes'"
5515 eval "mono_checked_build_test_enable_private_types='yes'"
5516 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5519 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5520 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5523 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5524 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5527 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5528 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5531 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5532 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5535 if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5537 with_overridable_allocators=yes
5538 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5540 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5544 dnl End of checked builds
5546 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5548 AC_CHECK_HEADER([malloc.h],
5549 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5550 [Define to 1 if you have /usr/include/malloc.h.])],,)
5552 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5553 # instead of libmono-static.a
5554 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5555 LIBMONO_LA=libmini-static.la
5557 if test x$buildsgen = xyes; then
5558 LIBMONO_LA=libmonosgen-$API_VER.la
5560 LIBMONO_LA=libmonoboehm-$API_VER.la
5563 AC_SUBST(LIBMONO_LA)
5569 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5570 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5571 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5572 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5573 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5574 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])
5576 if test "x$with_btls_android_api" = "x" ; then
5577 case "$BTLS_PLATFORM" in
5579 with_btls_android_api=16" ;;
5581 with_btls_android_api=16" ;;
5583 with_btls_android_api=16 ;;
5585 with_btls_android_api=21 ;;
5587 with_btls_android_api=16 ;;
5589 with_btls_android_api=21 ;;
5593 if test "x$enable_btls" = "xno"; then
5597 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5600 if test "x$enable_btls" = "xyes"; then
5601 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5602 if test "x$CMAKE" = "xno"; then
5603 AC_MSG_ERROR("cmake not found")
5606 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5613 if test "x$host_win32" = "xyes"; then
5614 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5617 case "$BTLS_PLATFORM" in
5623 btls_cflags="$btls_cflags -arch i386"
5626 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5627 if test "x$HAVE_YASM" != "xyes"; then
5628 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5637 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5638 if test "x$HAVE_YASM" != "xyes"; then
5639 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5646 btls_cflags="-DOPENSSL_NO_ASM=1"
5650 btls_cflags="-DOPENSSL_NO_ASM=1"
5654 btls_cflags="-march=armv8-a+crypto"
5663 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5664 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5668 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5671 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5674 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5677 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5680 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5683 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5692 AC_MSG_ERROR(Invalid BTLS platform)
5695 if test "x$platform_android" = "xyes"; then
5696 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5697 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5700 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5701 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5705 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5706 if test "x$with_btls_android_ndk" != "x"; then
5707 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5709 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5713 if test "x$btls_arch" != "x"; then
5714 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5717 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5719 AC_SUBST(BTLS_CFLAGS)
5720 AC_SUBST(BTLS_PLATFORM)
5721 AC_SUBST(BTLS_CMAKE_ARGS)
5723 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5728 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5730 if test x$DISABLE_MCS_DOCS = xyes; then
5737 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5738 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5739 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5741 libmono_ldflags="$libmono_ldflags $LIBS"
5743 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5744 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5745 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5746 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5747 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5748 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5749 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5750 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5751 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5752 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5753 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
5754 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5755 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5756 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5757 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5758 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5759 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5760 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5761 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5762 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5763 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5764 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5765 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5766 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5768 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5778 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5779 AC_SUBST(arch_target)
5781 #This must always be defined when building the runtime
5782 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5784 mono_build_root=`pwd`
5785 AC_SUBST(mono_build_root)
5787 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5788 if test x$host_win32 = xno; then
5789 if test x$enable_msvc = xyes; then
5790 echo "Error, --enable-msvc only supported for Windows builds."
5794 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5796 if test "x$enable_msvc" = "xyes"; then
5797 if test "x$support_boehm" = "xyes"; then
5798 echo "Error, Boehm GC is not supported when using --enable-msvc."
5801 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5802 if test "x$host_cpu" = "xi686"; then
5803 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5804 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5805 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5806 mono_runtime_wrapper=$mono_runtime
5808 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5809 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5810 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5811 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
5813 AC_SUBST(mono_msvc_build_dir)
5814 AC_SUBST(mono_msvc_build_lib_dir)
5815 AC_SUBST(mono_msvc_build_bin_dir)
5817 mono_runtime=mono/mini/mono
5818 mono_runtime_wrapper=$mono_runtime
5821 AC_SUBST(mono_runtime)
5822 AC_SUBST(mono_runtime_wrapper)
5824 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.exe
5825 VBCS_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe
5827 if test $csc_compiler = mcs; then
5828 CSC=$mcs_topdir/class/lib/build/mcs.exe
5833 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5835 mono_cfg_root=$mono_build_root/runtime
5836 if test x$host_win32 = xyes; then
5837 if test "x$cross_compiling" = "xno"; then
5838 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5839 CSC=`cygpath -m -a $CSC`
5840 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5841 VBCS_LOCATION=`cygpath -m -a $VBCS_LOCATION`
5843 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5846 mono_cfg_dir=$mono_cfg_root/etc
5849 if test "x$platform_android" = "xyes"; then
5853 AC_SUBST(mono_cfg_dir)
5857 AC_CONFIG_FILES([po/mcs/Makefile.in])
5859 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5860 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5861 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5863 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5866 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5868 *) reldir=$depth/$srcdir ;;
5870 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5871 cd runtime/etc/mono/1.0
5872 rm -f machine.config
5873 $LN_S $reldir/data/net_1_1/machine.config machine.config
5877 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5880 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5882 *) reldir=$depth/$srcdir ;;
5884 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5885 cd runtime/etc/mono/2.0
5886 rm -f machine.config
5887 $LN_S $reldir/data/net_2_0/machine.config machine.config
5891 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5894 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5896 *) reldir=$depth/$srcdir ;;
5898 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5899 cd runtime/etc/mono/2.0
5901 $LN_S $reldir/data/net_2_0/web.config web.config
5905 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5908 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5910 *) reldir=$depth/$srcdir ;;
5912 $ac_aux_dir/install-sh -d runtime/etc/mono/
5913 cd runtime/etc/mono/
5915 $LN_S $reldir/data/browscap.ini browscap.ini
5919 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5920 [ depth=../../../../..
5922 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5924 *) reldir=$depth/$srcdir ;;
5926 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5927 cd runtime/etc/mono/2.0/Browsers
5928 rm -f Compat.browser
5929 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5933 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5934 [ depth=../../../../..
5936 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5938 *) reldir=$depth/$srcdir ;;
5940 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5941 cd runtime/etc/mono/4.0/Browsers
5942 rm -f Compat.browser
5943 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5947 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5948 [ depth=../../../../..
5950 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5952 *) reldir=$depth/$srcdir ;;
5954 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5955 cd runtime/etc/mono/4.5/Browsers
5956 rm -f Compat.browser
5957 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5961 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5964 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5966 *) reldir=$depth/$srcdir ;;
5968 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5969 cd runtime/etc/mono/4.0
5970 rm -f machine.config
5971 $LN_S $reldir/data/net_4_0/machine.config machine.config
5975 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5978 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5980 *) reldir=$depth/$srcdir ;;
5982 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5983 cd runtime/etc/mono/4.0
5985 $LN_S $reldir/data/net_4_0/web.config web.config
5989 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5992 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5994 *) reldir=$depth/$srcdir ;;
5996 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5997 cd runtime/etc/mono/4.5
5998 rm -f machine.config
5999 $LN_S $reldir/data/net_4_5/machine.config machine.config
6003 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
6006 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6008 *) reldir=$depth/$srcdir ;;
6010 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6011 cd runtime/etc/mono/4.5
6013 $LN_S $reldir/data/net_4_5/web.config web.config
6017 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])
6018 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])
6019 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
6022 # Mono.Native Support
6023 # -------------------
6024 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
6025 # It is built as a stand-alone shared library and not bundled with the runtime because we
6026 # may need to build two different versions of it.
6028 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
6029 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
6031 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
6032 # implementation accordingly. We build a single `libmono-native` shared library.
6034 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
6036 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
6037 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
6038 # depending on platform.
6040 # We build two versions of the shared library:
6041 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
6042 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
6044 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
6045 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
6046 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
6048 # This can be called by automated tests both to ensure that the library has been correctly installed and also
6049 # to verify that it's the correct version of it.
6052 AC_MSG_CHECKING([Mono.Native support])
6053 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
6054 if test x$disable_mono_native = xyes; then
6056 elif test x$target_osx = xyes; then
6058 MONO_NATIVE_CXX=$CXX
6059 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6060 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6061 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6062 MONO_NATIVE_CFLAGS=$CFLAGS
6063 MONO_NATIVE_LDFLAGS=$LDFLAGS
6066 MONO_NATIVE_PLATFORM=macos
6067 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
6069 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
6070 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6072 if test x$mono_native_compat = xyes; then
6073 mono_native_compat=yes
6074 mono_native_text="Mac OSX (compat + unified v10.12)"
6075 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6076 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6077 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6078 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6079 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6081 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6082 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6083 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6084 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6085 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6086 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6088 mono_native_compat=no
6089 mono_native_text="Mac OSX"
6091 elif test x$mono_native_platform_ios = xyes; then
6092 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6094 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6095 if test x$mono_native_ios_sim = xyes; then
6096 mono_native_ios_target=ios-simulator
6097 mono_native_text="iOS Simulator"
6098 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6100 mono_native_ios_target=iphoneos
6101 mono_native_text="iOS Device"
6102 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6104 mono_native_unified_version="10.0"
6105 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6107 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6108 if test x$mono_native_ios_sim = xyes; then
6109 mono_native_ios_target=tvos-simulator
6110 mono_native_text="AppleTV Simulator"
6111 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6113 mono_native_ios_target=tvos
6114 mono_native_text="AppleTV Device"
6115 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6117 mono_native_unified_version="10.0"
6118 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6120 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6121 if test x$mono_native_ios_sim = xyes; then
6122 mono_native_ios_target=watchos-simulator
6123 mono_native_text="Apple Watch Simulator"
6124 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6126 mono_native_ios_target=watchos
6127 mono_native_text="Apple Watch Device"
6128 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6130 mono_native_unified_version="5.0"
6131 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6133 AC_MSG_ERROR([Unknown iOS Target])
6138 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6140 if test x$with_bitcode = xyes; then
6141 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6142 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6144 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6147 if test x$enable_gss = xyes; then
6148 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6152 MONO_NATIVE_CXX=$CXX
6153 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6154 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6155 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6156 MONO_NATIVE_CFLAGS=$CFLAGS
6157 MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6159 if test x$mono_native_compat = xyes; then
6160 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6161 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6162 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6163 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6164 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6165 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6167 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6168 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6169 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6170 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6171 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6172 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS $mono_native_ldflags | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6176 MONO_NATIVE_PLATFORM=ios
6177 elif test x$host_linux = xyes; then
6178 mono_native_text="Linux"
6180 MONO_NATIVE_CXX=$CXX
6181 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6182 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6183 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6184 MONO_NATIVE_CFLAGS=$CFLAGS
6185 MONO_NATIVE_LDFLAGS=$LDFLAGS
6188 mono_native_compat=no
6189 MONO_NATIVE_PLATFORM=linux
6191 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6192 elif test x$target_wasm = xyes; then
6193 mono_native_text="wasm"
6195 MONO_NATIVE_CXX=$CXX
6196 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6197 # The system.native code uses _WASM_ to check for wasm
6198 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6199 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6200 MONO_NATIVE_CFLAGS=$CFLAGS
6201 MONO_NATIVE_LDFLAGS=$LDFLAGS
6204 mono_native_compat=no
6205 MONO_NATIVE_PLATFORM=linux
6207 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6208 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6209 mono_native_text="AIX"
6211 MONO_NATIVE_CXX=$CXX
6212 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6213 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6214 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6215 MONO_NATIVE_CFLAGS=$CFLAGS
6216 dnl flock in AIX exists in libbsd (not the same as freedesktop.org
6217 dnl libbsd) which Mono.Native needs.
6218 dnl Because of the way that the library is built by default, unresolved
6219 dnl references are kept and resolved at runtime. Often, the dependency
6220 dnl chain means libbsd is loaded anyways, but not necessarily. It's
6221 dnl better to explicitly link it, even though it has it shadows libc's
6222 dnl ioctl with its own. (As for the other unresolved imports, those
6223 dnl should be provided by the Mono runtime loaded.)
6224 MONO_NATIVE_LDFLAGS="$LDFLAGS -lbsd"
6227 mono_native_compat=no
6228 MONO_NATIVE_PLATFORM=aix
6230 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6231 elif case $host_os in freebsd*) true;; *) false;; esac; then
6232 mono_native_text="FreeBSD"
6234 MONO_NATIVE_CXX=$CXX
6235 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6236 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6237 MONO_NATIVE_CFLAGS=$CFLAGS
6238 MONO_NATIVE_LDFLAGS=$LDFLAGS
6241 mono_native_compat=no
6242 MONO_NATIVE_PLATFORM=freebsd
6243 AC_MSG_CHECKING([Mono.Native support])
6244 AC_MSG_RESULT(freebsd)
6246 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_FREEBSD"
6247 elif test x$platform_android = xyes; then
6248 mono_native_text="Android"
6250 MONO_NATIVE_CXX=$CXX
6251 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6252 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6253 MONO_NATIVE_CFLAGS=$CFLAGS
6254 MONO_NATIVE_LDFLAGS=$LDFLAGS
6255 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6258 mono_native_compat=no
6259 MONO_NATIVE_PLATFORM=android
6261 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6264 mono_native_text="no"
6267 AC_MSG_RESULT($mono_native_text)
6269 if test x$mono_native_compat = xyes; then
6270 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6272 MONO_NATIVE_LIBRARY_NAME=libmono-native
6275 AC_SUBST(MONO_NATIVE_PLATFORM)
6276 AC_SUBST(MONO_NATIVE_CC)
6277 AC_SUBST(MONO_NATIVE_CXX)
6278 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6279 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6280 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6281 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6282 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6283 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6284 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6285 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6286 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6287 AC_SUBST(MONO_NATIVE_CFLAGS)
6288 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6289 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6290 AC_SUBST(MONO_NATIVE_LDFLAGS)
6291 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6292 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6293 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6294 AC_SUBST(MONO_NATIVE_LIBADD)
6296 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6297 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6298 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6299 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6300 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6301 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6302 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6303 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_FREEBSD, test x$MONO_NATIVE_PLATFORM = xfreebsd)
6305 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6306 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6307 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6308 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6309 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6311 ### C++ Linker selection
6313 # We have to lie to autotools, sometimes.
6315 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6316 # otherwise to CC. We want C linking even if we're compiling with C++ enabled
6317 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6318 # except if we're linking with LLVM which relies on it.
6320 # Explanation of the hack:
6323 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6324 # automake chooses the linker that it used to compile a target based on the
6325 # _SOURCES for that target. If the target is comprised of only C code, it
6326 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6327 # linker arguments and a -o). If the target _SOURCES include at least one C++ file,
6328 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6330 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6331 # or libc++) linked in - even when Mono is written in C++, we take care not to
6332 # require the runtime library. As a result, we don't want g++ or clang++ to do
6333 # the linking. On the other hand if LLVM is enabled, then we _must_ use the
6334 # C++ linker - LLVM doesn't have the same restrictions.
6336 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6337 # mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6338 # automake's autodetection and lets us use the linker that we want.
6340 if test "x$enable_llvm_runtime" = "xyes"; then
6341 AC_SUBST(MONO_CXXLD, [$CXX])
6343 AC_SUBST(MONO_CXXLD, [$CC])
6346 ### Set -Werror options
6348 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6350 if test x"$GCC" = xyes; then
6352 if test "x$with_jemalloc" != "xyes"; then
6354 # incompatible-pointer-types requires gcc circa 5.x
6357 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6358 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6362 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6368 CFLAGS="$CFLAGS -Werror=return-type"
6371 # Implicit function declarations are not 64 bit safe
6372 # Do this late, since this causes lots of configure tests to fail
6373 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6374 # jay has a lot of implicit declarations
6375 JAY_CFLAGS="-Wno-implicit-function-declaration"
6382 # Update all submodules recursively to ensure everything is checked out
6383 (cd $srcdir && scripts/update_submodules.sh)
6388 acceptance-tests/Makefile
6390 scripts/mono-find-provides
6391 scripts/mono-find-requires
6395 mono/native/Makefile
6397 mono/utils/jemalloc/Makefile
6398 mono/metadata/Makefile
6402 mono/arch/x86/Makefile
6403 mono/arch/amd64/Makefile
6404 mono/arch/ppc/Makefile
6405 mono/arch/sparc/Makefile
6406 mono/arch/s390x/Makefile
6407 mono/arch/arm/Makefile
6408 mono/arch/arm64/Makefile
6409 mono/arch/mips/Makefile
6410 mono/arch/riscv/Makefile
6412 mono/native/platform-type.c
6413 mono/native/platform-type-compat.c
6414 mono/native/platform-type-unified.c
6416 mono/tests/assembly-load-reference/Makefile
6417 mono/tests/tests-config
6418 mono/tests/gc-descriptors/Makefile
6419 mono/tests/testing_gac/Makefile
6420 mono/tests/fullaot-mixed/Makefile
6421 mono/tests/llvmonly-mixed/Makefile
6422 mono/unit-tests/Makefile
6423 mono/benchmark/Makefile
6425 mono/profiler/Makefile
6427 mono/eglib/eglib-config.h
6428 mono/eglib/test/Makefile
6431 ikvm-native/Makefile
6436 data/net_2_0/Makefile
6437 data/net_4_0/Makefile
6438 data/net_4_5/Makefile
6439 data/net_2_0/Browsers/Makefile
6440 data/net_4_0/Browsers/Makefile
6441 data/net_4_5/Browsers/Makefile
6447 data/mono-options.pc
6448 data/mono-lineeditor.pc
6454 data/system.web.extensions_1.0.pc
6455 data/system.web.extensions.design_1.0.pc
6456 data/system.web.mvc.pc
6457 data/system.web.mvc2.pc
6458 data/system.web.mvc3.pc
6459 data/aspnetwebstack.pc
6465 tools/locale-builder/Makefile
6467 tools/pedump/Makefile
6473 if test x$host_win32 = xyes; then
6474 # Get rid of 'cyg' prefixes in library names
6475 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6476 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6477 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6478 # executable doesn't work...
6479 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6482 if test x$host_darwin = xyes; then
6483 # This doesn't seem to be required and it slows down parallel builds
6484 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6489 NONE) prefix=$ac_default_prefix ;;
6491 case $exec_prefix in
6492 NONE) exec_prefix='${prefix}' ;;
6496 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6497 # any existing config.make. This allows people to share the same source tree
6498 # with different build directories, one native and one cross
6500 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6502 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6504 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6505 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6506 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6507 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6508 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6509 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6510 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6511 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6512 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6515 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6516 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6519 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6522 [myver=$($AWK 'BEGIN {
6523 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6524 if(length(vsplit [1]) > 4) {
6525 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6527 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6530 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6531 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6533 if test x$host_darwin = xyes; then
6534 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6535 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6536 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6537 elif test x$host_win32 = xyes; then
6538 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6539 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6540 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6541 elif test x$host_linux = xyes; then
6542 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6543 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6544 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6546 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6547 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6548 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6551 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6552 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6555 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6556 enable_system_aot=yes
6559 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6560 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6563 if test x$DISABLE_MCS_DOCS = xyes; then
6564 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6567 if test x$has_extension_module != xno; then
6568 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6571 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6573 if test "x$test_bcl_opt" = "xyes"; then
6574 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6577 echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6578 echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6579 echo "VBCS_LOCATION?=$VBCS_LOCATION" >> $srcdir/$mcsdir/build/config.make
6581 if test $csc_compiler = mcs; then
6582 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6585 if test "x$AOT_BUILD_FLAGS" != "x" ; then
6586 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6587 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6588 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6591 if test "x$AOT_MODE" != "x" ; then
6592 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6595 if test "x$enable_btls" = "xyes"; then
6596 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6599 if test "x$mono_native" = "xyes"; then
6600 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6602 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6605 if test x$mono_native_compat = xyes; then
6606 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6608 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6611 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6612 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6613 if test x$enable_compiler_server = xyes; then
6614 echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
6616 echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
6618 echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
6624 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6626 btls_platform_string=
6627 if test x$enable_btls = xyes; then
6628 if test x$btls_android = xyes; then
6629 btls_platform_string=" (android:$BTLS_PLATFORM)"
6631 btls_platform_string=" ($BTLS_PLATFORM)"
6636 if test x$buildsgen = xyes; then
6637 if test x$enable_cooperative_suspend != xno; then
6638 thread_suspend_msg="Suspend: Cooperative"
6639 elif test x$enable_hybrid_suspend != xno; then
6640 thread_suspend_msg="Suspend: Hybrid"
6642 thread_suspend_msg="Suspend: Preemptive"
6648 C# Compiler: $csc_compiler
6656 SIGALTSTACK: $with_sigaltstack
6658 BigArrays: $enable_big_arrays
6659 DTrace: $enable_dtrace
6660 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6661 Spectre: $spectre_mitigation_status
6662 Mono.Native: $mono_native_text
6665 .NET 4.x: $with_profile4_x
6666 Xamarin.Android: $with_monodroid
6667 Xamarin.iOS: $with_monotouch
6668 Xamarin.WatchOS: $with_monotouch_watch
6669 Xamarin.TVOS: $with_monotouch_tv
6670 Xamarin.Mac: $with_xammac
6671 Windows AOT: $with_winaot
6673 Unreal: $with_unreal
6674 WebAssembly: $with_wasm
6675 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6676 JNI support: $jdk_headers_found
6677 libgdiplus: $libgdiplus_msg
6679 BTLS: $enable_btls$btls_platform_string
6680 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
6681 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6682 .NET Core: $with_core
6685 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6686 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)