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-xz 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=48B64EB1-FC8C-4707-A363-84A1FE488DCA
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 AC_ARG_WITH(static-zlib, [ --with-static-zlib=PATH use the specified static zlib instead of -lz],[STATIC_ZLIB_PATH=$with_static_zlib],[STATIC_ZLIB_PATH=])
644 if test "x$STATIC_ZLIB_PATH" != "x"; then
646 AC_SUBST(STATIC_ZLIB_PATH)
649 AM_CONDITIONAL(HAVE_STATIC_ZLIB, test x$have_static_zlib = xyes)
650 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
651 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
653 # for mono/metadata/debug-symfile.c
654 AC_CHECK_HEADERS(elf.h)
657 AC_CHECK_HEADERS(poll.h)
658 AC_CHECK_HEADERS(sys/poll.h)
659 AC_CHECK_HEADERS(sys/wait.h)
660 AC_CHECK_HEADERS(grp.h)
661 AC_CHECK_HEADERS(syslog.h)
662 AC_CHECK_FUNCS(vsyslog)
665 AC_CHECK_HEADERS(wchar.h)
667 # for Linux statfs support
668 AC_CHECK_HEADERS(linux/magic.h)
670 # For Android NDK unified headers
671 if test x$platform_android = xyes; then
672 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
673 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
674 AC_CHECK_HEADERS(android/ndk-version.h)
676 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
677 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
678 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
679 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
680 # doesn't contain the required definitions (NDK 14)
681 if test x$have_android_signal_inlines = xyes; then
682 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
684 AC_LANG_PROGRAM([#include <signal.h>
685 #include <android/legacy_signal_inlines.h>],[
687 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
691 android_sigrtminmax_work=yes
694 android_sigrtminmax_work=no
698 if test x$android_sigrtminmax_work = xno; then
699 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
703 # Attempt to detect whether we're using Android NDK unified headers
704 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
705 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
707 android_unified_headers=no
708 if test x$have_android_api_level = xyes; then
709 if test x$have_android_versioning = xyes; then
710 AC_MSG_CHECKING([whether using Android NDK unified headers])
712 # Both macros are defined only in the NDK unified headers
715 #include <android/api-level.h>
716 #include <android/versioning.h>
718 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
720 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
724 android_unified_headers=yes
727 android_unified_headers=no
733 if test x$android_unified_headers = xyes; then
734 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
738 # not 64 bit clean in cross-compile
739 AC_CHECK_SIZEOF(void *)
740 AC_CHECK_SIZEOF(long)
743 AC_CHECK_SIZEOF(long long)
745 AC_CACHE_CHECK([for clang],
758 AC_ARG_ENABLE(visibility-hidden,
759 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
760 disable_visibility_hidden=yes, disable_visibility_hidden=no)
763 if test x"$GCC" = xyes; then
764 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
765 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
767 # We require C99 with some GNU extensions, e.g. `linux` macro
768 CFLAGS="$CFLAGS -std=gnu99"
770 # The runtime code does not respect ANSI C strict aliasing rules
771 CFLAGS="$CFLAGS -fno-strict-aliasing"
773 # We rely on signed overflow to behave
774 CFLAGS="$CFLAGS -fwrapv"
776 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
777 if test x"$disable_visibility_hidden" = xno; then
778 # Don't export any symbols by default
779 SHARED_CFLAGS="-fvisibility=hidden"
780 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
784 # Check for the normal version, since gcc ignores unknown -Wno options
785 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
786 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
790 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
796 if test "x$mono_cv_clang" = "xyes"; then
797 # https://bugzilla.samba.org/show_bug.cgi?id=8118
798 WARN="$WARN -Qunused-arguments"
799 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
800 # We rely on zero length arrays in structs
801 WARN="$WARN -Wno-zero-length-array"
804 # The Sun Forte compiler complains about inline functions that access static variables
805 # so disable all inlining.
808 CFLAGS="$CFLAGS -Dinline="
812 CFLAGS="$WARN $CFLAGS -g"
813 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
814 CPPFLAGS="$WARN $CPPFLAGS -g"
816 # Where's the 'mcs' source tree?
817 if test -d $srcdir/mcs; then
823 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
824 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
825 mcsdir=$with_mcs_path
829 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
831 AC_ARG_WITH(core, [ --with-core=only controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
832 if test x$with_core = xonly; then
833 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
834 with_runtime_preset=netcore
836 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
839 # A sanity check to catch cases where the package was unpacked
840 # with an ancient tar program (Solaris)
842 AC_ARG_ENABLE(solaris-tar-check,
843 [ --disable-solaris-tar-check disable solaris tar check],
844 do_solaris_tar_check=no, do_solaris_tar_check=yes)
846 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
847 AC_MSG_CHECKING(integrity of package)
848 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
852 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"
853 AC_MSG_ERROR([$errorm])
857 if test "x$with_mcs_path" != "x"; then
858 mcs_topdir=$(cd "$mcsdir" && pwd)
859 mcs_topdir_from_srcdir=$mcs_topdir
861 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
862 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
865 # Convert mcs_topdir* paths to Windows syntax.
866 if test x$cross_compiling$host_win32 = xnoyes; then
867 mcs_topdir=$(cygpath -m $mcs_topdir)
868 case $mcs_topdir_from_srcdir in
870 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
875 AC_SUBST([mcs_topdir])
876 AC_SUBST([mcs_topdir_from_srcdir])
878 # gettext: prepare the translation directories.
879 # we do not configure the full gettext, as we consume it dynamically from C#
882 if test "x$USE_NLS" = "xyes"; then
883 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
885 if test "x$HAVE_MSGFMT" = "xno"; then
886 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
890 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
893 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
894 if test x$with_crosspkgdir = "x"; then
895 if test -s $PKG_CONFIG_PATH; then
896 pkg_config_path=$PKG_CONFIG_PATH
899 pkg_config_path=$with_crosspkgdir
900 PKG_CONFIG_PATH=$pkg_config_path
901 export PKG_CONFIG_PATH
905 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
906 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
907 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
909 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
910 if test x$werror_flag = xyes; then
911 WERROR_CFLAGS="-Werror"
913 AC_SUBST([WERROR_CFLAGS])
914 AC_SUBST([SHARED_CFLAGS])
916 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
918 AC_SUBST(GLIB_CFLAGS)
920 # Enable support for fast thread-local storage
921 # Some systems have broken support, so we allow to disable it.
922 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
924 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
925 # This does not work on some platforms (bug #55253)
926 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
928 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
929 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
930 # Same as --with-shared_mono=no
931 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
933 if test "x$enable_static" = "xno"; then
937 if test "x$enable_shared" = "xno"; then
941 if test "x$enable_libraries" = "xno"; then
945 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
947 if test "x$host_win32" = "xyes"; then
948 # Boehm GC requires the runtime to be in its own dll
952 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
953 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
954 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
955 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
957 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
958 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
959 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
961 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
962 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
966 # Pass it to libgc as well
967 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
974 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
976 if test x$enable_small_config = xyes; then
977 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
978 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
981 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)
983 DISABLED_FEATURES=none
986 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
987 AC_MSG_CHECKING([CSharp compiler to use])
988 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
989 if test x$withval = xmcs; then
991 elif test x$withval = xroslyn; then
993 elif test x$withval = xdefault; then
996 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
998 ],[csc_compiler=default])
1000 if test $csc_compiler = default; then
1001 if test $endian = big; then
1003 elif test $endian = little; then
1005 powerpc*) csc_compiler=mcs ;;
1006 *) csc_compiler=roslyn ;;
1012 AC_MSG_RESULT($csc_compiler)
1014 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
1015 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
1016 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])
1019 if test x$target_win32 = xyes; then
1021 with_jemalloc_assert=no
1022 with_jemalloc_always=no
1025 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
1026 if test "x$with_jemalloc_assert" = "xyes"; then
1027 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
1028 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
1029 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
1032 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
1033 if test "x$with_jemalloc_always" = "xyes"; then
1035 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
1036 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
1037 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
1040 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
1041 if test "x$with_jemalloc" = "xyes"; then
1042 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
1043 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
1044 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
1046 if test "x$target_mach" = "xyes"; then
1047 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
1050 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
1051 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
1053 AC_SUBST(JEMALLOC_CFLAGS)
1054 AC_SUBST(JEMALLOC_CPPFLAGS)
1055 AC_SUBST(JEMALLOC_LDFLAGS)
1056 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1060 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1061 # MERP - The MS telemetry profile. Not for general use.
1062 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1064 # 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.
1066 #--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.
1067 #--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.
1068 #--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.
1069 #--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.
1071 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])
1072 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])
1073 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1075 if test "x$with_crash_privacy" = "xyes"; then
1076 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1079 if test "x$with_structured_crashes" = "xno"; then
1080 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1084 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1089 if test "x$crash_reporting" != "xyes"; then
1090 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1091 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1094 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1095 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1097 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1098 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1100 if test x$enable_monodroid = xyes; then
1101 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1104 if test x$enable_monotouch = xyes; then
1105 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1108 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1110 # mono/corefx/native has a lot of invalid C++98 in its headers
1111 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1112 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1113 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1114 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1116 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1117 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1118 # and add it whenever we're running clang on Darwin.
1119 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1120 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1123 AC_SUBST(CXXFLAGS_COMMON)
1125 if test "x$enable_cxx" = "xyes"; then
1127 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1129 # -std=gnu99 -xc++ is not allowed and errors.
1130 CXX_REMOVE_CFLAGS=-std=gnu99
1131 # These give warnings and should be removed. They are C-only.
1132 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1133 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1134 # Likewise with CentOS 6 gcc 4.4.
1135 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1137 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1138 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1139 # generates a warning every time we run gcc which is very unsightly.
1140 # The warning is for e.g. sprintf(foo, "") which can just be
1141 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1142 # and completely legal and valid.
1143 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1144 # Alternatively, just run $CXX -xc++ -c /dev/null.
1146 ORIG_CXXFLAGS=$CXXFLAGS
1147 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1148 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1149 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1151 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1152 CXXFLAGS=$ORIG_CXXFLAGS
1155 AC_SUBST(CXX_ADD_CFLAGS)
1156 AC_SUBST(CXX_REMOVE_CFLAGS)
1159 # Set the build profiles and options before things which use them
1162 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])
1163 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1164 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1165 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])
1166 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])
1167 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1168 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1169 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])
1170 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])
1171 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])
1172 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1173 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1174 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1175 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1178 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])
1179 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])
1180 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])
1181 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])
1184 dnl Spectre compiler mitigation flag checks
1186 if test "x$with_spectre_mitigation" = "xyes"; then
1187 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1189 SPECTRE_INDIRECT_BRANCH_KIND=
1190 case "x$with_spectre_indirect_branch_choice" in
1191 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1192 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1193 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1194 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1195 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1198 SPECTRE_FUNCTION_RETURN_KIND=""
1199 case "x$with_spectre_function_return_choice" in
1200 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1201 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1202 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1203 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1204 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1207 AX_CHECK_COMPILE_FLAG(
1208 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1209 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1212 AX_CHECK_COMPILE_FLAG(
1213 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1214 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1217 if test "x$SPECTRE_CFLAGS" != "x" ; then
1218 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1219 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1220 spectre_mitigation_status="mitigation enabled"
1223 spectre_mitigation_status="no mitigation"
1227 dnl Profile defaults
1229 TEST_PROFILE=default
1230 enable_llvm_default=no
1232 with_profile4_x_default=no
1233 with_monodroid_default=no
1234 with_monotouch_default=no
1235 with_monotouch_watch_default=no
1236 with_monotouch_tv_default=no
1237 with_xammac_default=no
1238 with_testing_aot_full_interp_default=no
1239 with_testing_aot_hybrid_default=no
1240 with_testing_aot_full_default=no
1241 with_winaot_default=no
1242 with_orbis_default=no
1243 with_unreal_default=no
1244 with_wasm_default=no
1246 with_bitcode_default=no
1247 enable_cooperative_suspend_default=no
1248 enable_hybrid_suspend_default=no
1250 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1252 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1254 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1255 DISABLE_MCS_DOCS_default=yes
1256 elif test x$with_runtime_preset = xnetcore; then
1257 DISABLE_MCS_DOCS_default=yes
1259 mono_feature_disable_remoting='yes'
1260 mono_feature_disable_reflection_emit_save='yes'
1261 mono_feature_disable_appdomains='yes'
1262 mono_feature_disable_cleanup='yes'
1263 mono_feature_disable_assembly_remapping='yes'
1264 disable_mono_native=yes
1266 elif test x$with_runtime_preset = xnet_4_x; then
1267 with_profile4_x_default=yes
1268 TEST_PROFILE=net_4_x
1269 elif test x$with_runtime_preset = xall; then
1270 with_profile4_x_default=yes
1271 with_monodroid_default=yes
1272 with_monotouch_default=yes
1273 with_monotouch_watch_default=yes
1274 with_monotouch_tv_default=yes
1275 with_xammac_default=yes
1276 with_winaot_default=yes
1277 with_orbis_default=yes
1278 with_unreal_default=yes
1279 with_wasm_default=yes
1280 with_testing_aot_full_interp_default=yes
1281 with_testing_aot_hybrid_default=yes
1282 with_testing_aot_full_default=yes
1283 TEST_PROFILE=net_4_x
1284 elif test x$with_runtime_preset = xbitcode; then
1285 DISABLE_MCS_DOCS_default=yes
1286 with_testing_aot_full_default=yes
1287 with_bitcode_default=yes
1288 enable_cooperative_suspend_default=yes
1289 # FIXME: use TEST_PROFILE=testing_aot_full
1290 TEST_PROFILE=testing_aot_bitcode
1291 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1292 enable_llvm_default=yes
1294 mono_feature_disable_com='yes'
1295 mono_feature_disable_remoting='yes'
1296 mono_feature_disable_reflection_emit_save='yes'
1297 mono_feature_disable_reflection_emit='yes'
1298 mono_feature_disable_appdomains='yes'
1300 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1301 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1302 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1304 elif test x$with_runtime_preset = xbitcodeinterp; then
1305 with_testing_aot_full_interp_default=yes
1306 with_bitcode_default=yes
1307 enable_cooperative_suspend_default=yes
1308 # FIXME: use TEST_PROFILE=testing_aot_full_interp
1309 TEST_PROFILE=testing_aot_bitcode_interp
1310 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1311 enable_llvm_default=yes
1313 # mscorlib.dll aot compilation crashes
1314 mono_feature_disable_com='yes'
1316 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1317 AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1318 AOT_RUN_FLAGS="--llvmonly-interp"
1319 elif test x$with_runtime_preset = xfullaot; then
1320 DISABLE_MCS_DOCS_default=yes
1321 with_testing_aot_full_default=yes
1322 TEST_PROFILE=testing_aot_full
1324 mono_feature_disable_com='yes'
1325 mono_feature_disable_remoting='yes'
1326 mono_feature_disable_reflection_emit_save='yes'
1327 mono_feature_disable_reflection_emit='yes'
1328 mono_feature_disable_appdomains='yes'
1330 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1331 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1333 elif test x$with_runtime_preset = xfullaot_llvm; then
1334 DISABLE_MCS_DOCS_default=yes
1335 with_testing_aot_full_default=yes
1336 TEST_PROFILE=testing_aot_full
1338 mono_feature_disable_com='yes'
1339 mono_feature_disable_remoting='yes'
1340 mono_feature_disable_reflection_emit_save='yes'
1341 mono_feature_disable_reflection_emit='yes'
1342 mono_feature_disable_appdomains='yes'
1344 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1345 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1347 elif test x$with_runtime_preset = xhybridaot; 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 --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1353 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1354 elif test x$with_runtime_preset = xhybridaot_llvm; then
1355 DISABLE_MCS_DOCS_default=yes
1356 with_testing_aot_hybrid_default=yes
1357 TEST_PROFILE=testing_aot_hybrid
1359 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1360 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1361 elif test x$with_runtime_preset = xfullaotinterp; then
1362 with_testing_aot_full_interp_default=yes
1363 TEST_PROFILE=testing_aot_full_interp
1365 # mscorlib.dll aot compilation crashes
1366 mono_feature_disable_com='yes'
1368 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1369 AOT_RUN_FLAGS="--full-aot-interp"
1370 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1371 with_testing_aot_full_interp_default=yes
1372 TEST_PROFILE=testing_aot_full_interp
1374 # mscorlib.dll aot compilation crashes
1375 mono_feature_disable_com='yes'
1377 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1378 AOT_RUN_FLAGS="--full-aot-interp"
1379 elif test x$with_runtime_preset = xaot; then
1380 with_profile4_x_default=yes
1382 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1385 DISABLE_MCS_DOCS_default=yes
1386 elif test x$with_runtime_preset = xaot_llvm; then
1387 with_profile4_x_default=yes
1389 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1392 DISABLE_MCS_DOCS_default=yes
1393 elif test x$with_runtime_preset = xwinaot; then
1394 DISABLE_MCS_DOCS_default=yes
1395 with_winaot_default=yes
1398 mono_feature_disable_com='yes'
1399 mono_feature_disable_remoting='yes'
1400 mono_feature_disable_reflection_emit_save='yes'
1401 mono_feature_disable_reflection_emit='yes'
1402 mono_feature_disable_appdomains='yes'
1404 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1405 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1407 elif test x$with_runtime_preset = xwinaot_llvm; then
1408 DISABLE_MCS_DOCS_default=yes
1409 with_winaot_default=yes
1412 mono_feature_disable_com='yes'
1413 mono_feature_disable_remoting='yes'
1414 mono_feature_disable_reflection_emit_save='yes'
1415 mono_feature_disable_reflection_emit='yes'
1416 mono_feature_disable_appdomains='yes'
1418 INVARIANT_AOT_OPTIONS="llcopts=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1419 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1420 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1422 elif test x$with_runtime_preset = xorbis; then
1423 DISABLE_MCS_DOCS_default=yes
1424 with_orbis_default=yes
1427 mono_feature_disable_com='yes'
1428 mono_feature_disable_remoting='yes'
1429 mono_feature_disable_reflection_emit_save='yes'
1430 mono_feature_disable_reflection_emit='yes'
1431 mono_feature_disable_appdomains='yes'
1433 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1434 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1436 elif test x$with_runtime_preset = xunreal; then
1437 DISABLE_MCS_DOCS_default=yes
1438 with_unreal_default=yes
1441 mono_feature_disable_com='yes'
1442 mono_feature_disable_remoting='yes'
1443 mono_feature_disable_appdomains='no'
1445 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1446 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1447 elif test x$with_runtime_preset = xwasm; then
1448 DISABLE_MCS_DOCS_default=yes
1449 with_wasm_default=yes
1452 mono_feature_disable_com='yes'
1453 mono_feature_disable_remoting='yes'
1454 mono_feature_disable_reflection_emit_save='yes'
1455 mono_feature_disable_reflection_emit='yes'
1456 mono_feature_disable_appdomains='yes'
1458 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1459 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1461 TEST_PROFILE=net_4_x
1462 with_profile4_x_default=yes
1465 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1466 AC_SUBST(AOT_BUILD_FLAGS)
1467 AC_SUBST(AOT_RUN_FLAGS)
1468 # For llvmonlycheck + fullaotcheck
1469 AC_SUBST(INVARIANT_AOT_OPTIONS)
1472 AC_SUBST(TEST_PROFILE)
1474 if test "x$with_profile4_x" = "xdefault"; then
1475 with_profile4_x=$with_profile4_x_default
1477 if test "x$with_monodroid" = "xdefault"; then
1478 with_monodroid=$with_monodroid_default
1480 if test "x$with_monotouch" = "xdefault"; then
1481 with_monotouch=$with_monotouch_default
1483 if test "x$with_monotouch_watch" = "xdefault"; then
1484 with_monotouch_watch=$with_monotouch_watch_default
1486 if test "x$with_monotouch_tv" = "xdefault"; then
1487 with_monotouch_tv=$with_monotouch_tv_default
1489 if test "x$with_bitcode" = "xdefault"; then
1490 with_bitcode=$with_bitcode_default
1492 if test "x$with_xammac" = "xdefault"; then
1493 with_xammac=$with_xammac_default
1495 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1496 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1498 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1499 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1501 if test "x$with_testing_aot_full" = "xdefault"; then
1502 with_testing_aot_full=$with_testing_aot_full_default
1504 if test "x$with_winaot" = "xdefault"; then
1505 with_winaot=$with_winaot_default
1507 if test "x$with_orbis" = "xdefault"; then
1508 with_orbis=$with_orbis_default
1510 if test "x$with_unreal" = "xdefault"; then
1511 with_unreal=$with_unreal_default
1513 if test "x$with_wasm" = "xdefault"; then
1514 with_wasm=$with_wasm_default
1518 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1519 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1520 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1521 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1522 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1523 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1524 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1525 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1526 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1527 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1528 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1529 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1530 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1531 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1532 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1534 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1535 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"])
1536 AM_CONDITIONAL(FULL_AOT_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"] || [test "x$TEST_PROFILE" = "xtesting_aot_bitcode_interp"])
1537 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1539 default_profile=net_4_x
1540 if test -z "$INSTALL_MONODROID_TRUE"; then :
1541 default_profile=monodroid
1543 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1544 default_profile=monotouch
1546 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1547 default_profile=xammac
1549 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1550 default_profile=testing_aot_full_interp
1552 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1553 default_profile=testing_aot_hybrid
1555 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1556 default_profile=testing_aot_full
1558 if test -z "$INSTALL_WINAOT_TRUE"; then :
1559 default_profile=winaot
1561 if test -z "$INSTALL_ORBIS_TRUE"; then :
1562 default_profile=orbis
1564 if test -z "$INSTALL_UNREAL_TRUE"; then :
1565 default_profile=unreal
1567 if test -z "$INSTALL_WASM_TRUE"; then :
1568 default_profile=wasm
1570 if test -z "$INSTALL_4_x_TRUE"; then :
1571 default_profile=net_4_x
1573 DEFAULT_PROFILE=$default_profile
1574 AC_SUBST(DEFAULT_PROFILE)
1577 # End build profile configuration
1580 if test x$USE_NLS = xprofile_default; then
1582 AC_MSG_CHECKING([NLS used])
1584 # We make the default value for USE_NLS
1585 # "no" on OSX because it isn't available on most
1586 # default OSX installs. The most common configurations will
1587 # all disable it, so this saves us typing.
1588 if test x$host_darwin = xyes; then
1595 AC_MSG_RESULT([$USE_NLS])
1598 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1599 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1600 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1601 security, lldb, mdb, assert_messages, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers, sockets.],
1603 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1604 eval "mono_feature_disable_$feature='yes'"
1606 DISABLED_FEATURES=$enable_minimal
1607 disabled="Disabled: $enable_minimal"
1610 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1612 if test "x$mono_feature_disable_aot" = "xyes"; then
1613 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1614 enable_system_aot=no
1615 AC_MSG_NOTICE([Disabled AOT compiler])
1618 if test "x$mono_feature_disable_profiler" = "xyes"; then
1619 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1620 AC_MSG_NOTICE([Disabled support for the profiler])
1622 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1624 if test "x$mono_feature_disable_decimal" = "xyes"; then
1625 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1626 AC_MSG_NOTICE([Disabled support for decimal])
1629 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1630 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1631 AC_MSG_NOTICE([Disabled support for P/Invoke])
1634 if test "x$mono_feature_disable_debug" = "xyes"; then
1635 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1636 AC_MSG_NOTICE([Disabled support for runtime debugging])
1639 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1640 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1641 mono_feature_disable_reflection_emit_save=yes
1642 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1645 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1646 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1647 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1650 if test "x$mono_feature_disable_large_code" = "xyes"; then
1651 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1652 AC_MSG_NOTICE([Disabled support for large assemblies])
1655 if test "x$mono_feature_disable_logging" = "xyes"; then
1656 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1657 AC_MSG_NOTICE([Disabled support for logging])
1660 if test "x$mono_feature_disable_com" = "xyes"; then
1661 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1662 AC_MSG_NOTICE([Disabled COM support])
1665 if test "x$mono_feature_disable_ssa" = "xyes"; then
1666 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1667 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1670 if test "x$mono_feature_disable_generics" = "xyes"; then
1671 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1672 AC_MSG_NOTICE([Disabled Generics Support])
1675 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1676 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1677 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1680 if test "x$mono_feature_disable_portability" = "xyes"; then
1681 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1682 AC_MSG_NOTICE([Disabled IO Portability layer])
1685 if test "x$mono_feature_disable_attach" = "xyes"; then
1686 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1687 AC_MSG_NOTICE([Disabled agent attach])
1690 if test "x$mono_feature_disable_verifier" = "xyes"; then
1691 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1692 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1695 if test "x$mono_feature_disable_jit" = "xyes"; then
1696 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1697 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1700 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1702 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1703 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1704 AC_MSG_NOTICE([Disabled the interpreter])
1707 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1709 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1710 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1713 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1715 if test "x$mono_feature_disable_simd" = "xyes"; then
1716 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1717 AC_MSG_NOTICE([Disabled SIMD support])
1720 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1721 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1722 AC_MSG_NOTICE([Disabled Soft Debugger.])
1725 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1727 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1728 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1729 AC_MSG_NOTICE([Disabled Performance Counters.])
1731 if test "x$mono_feature_disable_normalization" = "xyes"; then
1732 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1733 AC_MSG_NOTICE([Disabled String normalization support.])
1736 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1737 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1738 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1739 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1742 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1743 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1744 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1747 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1748 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1749 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1752 if test "x$mono_feature_disable_remoting" = "xyes"; then
1753 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1754 AC_MSG_NOTICE([Disabled remoting])
1757 if test "x$mono_feature_disable_security" = "xyes"; then
1758 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1759 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1762 if test "x$mono_feature_disable_lldb" = "xyes"; then
1763 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1764 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1767 if test "x$mono_feature_disable_mdb" = "xyes"; then
1768 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1769 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1772 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1773 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1774 AC_MSG_NOTICE([Disabled assertion messages.])
1777 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1778 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1779 AC_MSG_NOTICE([Disabled runtime cleanup.])
1782 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1783 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1784 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1788 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1789 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1790 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1793 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1794 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1795 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1798 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1799 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1800 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1803 if test "x$mono_feature_disable_sockets" = "xyes"; then
1804 AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
1805 AC_MSG_NOTICE([Disabled sockets])
1808 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1809 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1811 has_extension_module=no
1812 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1814 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1815 if test x$extension = xdefault ; then
1816 has_extension_module=yes;
1819 if test x$enable_extension_module = xyes; then
1820 has_extension_module=yes;
1824 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1826 if test x$has_extension_module != xno ; then
1827 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1828 AC_MSG_NOTICE([Enabling mono extension module.])
1832 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1834 AC_MSG_CHECKING(for visibility __attribute__)
1837 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1838 int main () { doit (); return 0; }
1841 have_visibility_hidden=yes
1844 have_visibility_hidden=no
1849 dnl Boehm GC configuration
1852 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1854 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1855 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1857 if test "x$support_boehm" = "xyes"; then
1859 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1860 if test x$enable_parallel_mark = xyes; then
1861 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1871 if test "x$support_boehm" = "xyes"; then
1875 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1876 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1877 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1879 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1881 if test x$target_win32 = xyes; then
1882 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1883 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1886 gc_msg="Included Boehm GC with typed GC"
1887 if test x$enable_parallel_mark = xyes; then
1888 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1889 gc_msg="$gc_msg and parallel mark"
1891 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1896 AC_MSG_WARN("External Boehm is no longer supported")
1900 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1904 AC_MSG_WARN("Compiling mono without GC.")
1905 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1906 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1910 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1914 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])
1915 if test "x$large_heap" = "xyes"; then
1916 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1919 AC_SUBST(LIBGC_CPPFLAGS)
1920 AC_SUBST(LIBGC_LIBS)
1921 AC_SUBST(LIBGC_STATIC_LIBS)
1923 AC_SUBST(BOEHM_DEFINES)
1926 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1929 dnl End of Boehm GC Configuration
1932 dnl *************************************
1933 dnl *** Checks for zero length arrays ***
1934 dnl *************************************
1935 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1943 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1946 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1949 dnl ***********************************
1950 dnl *** Checks for signals
1951 dnl ***********************************
1952 AC_CHECK_HEADERS(signal.h)
1953 AC_CHECK_FUNCS(sigaction)
1954 AC_CHECK_FUNCS(kill)
1955 AC_CHECK_FUNCS(signal)
1957 # signal() is declared inline in Android headers
1958 # so we need to workaround it by overriding the check.
1959 if test x$platform_android = xyes; then
1960 AC_DEFINE(HAVE_SIGNAL,1)
1963 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1964 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1966 if test x$host_win32 = xno; then
1967 dnl *************************************
1968 dnl *** Checks for time capabilities ***
1969 dnl *************************************
1971 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1972 AC_TRY_COMPILE([#include <time.h>], [
1973 const int foo = CLOCK_MONOTONIC;
1976 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1981 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1982 AC_TRY_COMPILE([#include <time.h>], [
1983 const int foo = CLOCK_MONOTONIC_COARSE;
1986 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1991 AC_MSG_CHECKING(for CLOCK_REALTIME)
1992 AC_TRY_COMPILE([#include <time.h>], [
1993 const int foo = CLOCK_REALTIME;
1996 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
2001 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
2002 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
2003 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
2004 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
2005 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
2006 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
2008 dnl hires monotonic clock support
2009 AC_SEARCH_LIBS(clock_gettime, rt)
2010 AC_CHECK_FUNCS(clock_nanosleep)
2012 dnl dynamic loader support
2013 AC_CHECK_FUNC(dlopen, DL_LIB="",
2014 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
2016 if test x$dl_support = xno; then
2017 AC_MSG_WARN([No dynamic loading support available])
2019 LIBS="$LIBS $DL_LIB"
2020 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
2021 dnl from glib's configure.ac
2022 AC_CACHE_CHECK([for preceeding underscore in symbols],
2024 AC_TRY_RUN([#include <dlfcn.h>
2025 int mono_underscore_test (void) { return 42; }
2027 void *f1 = (void*)0, *f2 = (void*)0, *handle;
2028 handle = dlopen ((void*)0, 0);
2030 f1 = dlsym (handle, "mono_underscore_test");
2031 f2 = dlsym (handle, "_mono_underscore_test");
2032 } return (!f2 || f1);
2034 [mono_cv_uscore=yes],
2035 [mono_cv_uscore=no],
2038 if test "x$mono_cv_uscore" = "xyes"; then
2039 MONO_DL_NEED_USCORE=1
2041 MONO_DL_NEED_USCORE=0
2043 AC_SUBST(MONO_DL_NEED_USCORE)
2044 AC_CHECK_FUNC(dlerror)
2047 dnl ******************************************************************
2048 dnl *** Checks for the IKVM JNI interface library ***
2049 dnl ******************************************************************
2050 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])
2053 if test x$with_ikvm_native = xyes; then
2054 ikvm_native_dir=ikvm-native
2055 jdk_headers_found="IKVM Native"
2058 AC_SUBST(ikvm_native_dir)
2060 AC_CHECK_HEADERS(execinfo.h)
2062 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2064 AC_CHECK_FUNCS(getgrgid_r)
2065 AC_CHECK_FUNCS(getgrnam_r)
2066 AC_CHECK_FUNCS(getresuid)
2067 AC_CHECK_FUNCS(setresuid)
2068 AC_CHECK_FUNCS(kqueue)
2069 AC_CHECK_FUNCS(backtrace_symbols)
2070 AC_CHECK_FUNCS(mkstemp)
2071 AC_CHECK_FUNCS(mmap)
2072 AC_CHECK_FUNCS(madvise)
2073 AC_CHECK_FUNCS(getrusage)
2074 AC_CHECK_FUNCS(getpriority)
2075 AC_CHECK_FUNCS(setpriority)
2076 AC_CHECK_FUNCS(dl_iterate_phdr)
2077 AC_CHECK_FUNCS(dladdr)
2078 AC_CHECK_FUNCS(sysconf)
2079 AC_CHECK_FUNCS(getrlimit)
2080 AC_CHECK_FUNCS(prctl)
2081 AC_CHECK_FUNCS(arc4random)
2082 AC_CHECK_FUNCS(nl_langinfo)
2084 AC_CHECK_FUNCS(sched_getaffinity)
2085 AC_CHECK_FUNCS(sched_setaffinity)
2086 AC_CHECK_FUNCS(sched_getcpu)
2088 if test x$platform_android != xyes; then
2089 AC_CHECK_FUNCS(getpwnam_r)
2090 AC_CHECK_FUNCS(getpwuid_r)
2093 AC_CHECK_FUNCS(readlink)
2094 AC_CHECK_FUNCS(chmod)
2095 AC_CHECK_FUNCS(lstat)
2096 AC_CHECK_FUNCS(getdtablesize)
2098 AC_CHECK_FUNCS(ftruncate)
2099 AC_CHECK_FUNCS(msync)
2101 AC_CHECK_FUNCS(gethostname getpeername)
2102 AC_CHECK_FUNCS(utime utimes)
2104 AC_CHECK_FUNCS(openlog closelog)
2105 AC_CHECK_FUNCS(atexit)
2107 AC_FUNC_STRERROR_R()
2109 dnl ****************************************************************
2110 dnl *** Check for sched_setaffinity from glibc versions before ***
2111 dnl *** 2.3.4. The older versions of the function only take 2 ***
2112 dnl *** parameters, not 3. ***
2114 dnl *** Because the interface change was not made in a minor ***
2115 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2116 dnl *** won't always indicate the interface sched_affinity has. ***
2117 dnl ****************************************************************
2118 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2119 AC_TRY_COMPILE([#include <sched.h>], [
2121 sched_setaffinity(0, &mask);
2123 # Yes, we have it...
2125 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2127 # We have the new, three-parameter version
2130 AC_TRY_COMPILE([#include <sched.h>], [
2131 CPU_COUNT((void *) 0);
2134 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2136 # We have the new, three-parameter version
2140 dnl ******************************************************************
2141 dnl *** Check for large file support ***
2142 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2143 dnl ******************************************************************
2145 # Check that off_t can represent 2**63 - 1 correctly, working around
2146 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2147 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2149 AC_DEFUN([LARGE_FILES], [
2150 large_CPPFLAGS=$CPPFLAGS
2151 CPPFLAGS="$CPPFLAGS $1"
2153 #include <sys/types.h>
2156 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2157 #define COMPILE_TIME_ASSERT(pred) \
2158 switch(0){case 0:case pred:;}
2159 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2162 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2163 large_CPPFLAGS="$large_CPPFLAGS $1"
2168 CPPFLAGS=$large_CPPFLAGS
2171 AC_MSG_CHECKING(if off_t is 64 bits wide)
2173 if test $large_offt = no; then
2174 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2175 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2177 if test $large_offt = no; then
2178 AC_MSG_WARN([No 64 bit file size support available])
2181 dnl *****************************
2182 dnl *** Checks for libsocket ***
2183 dnl *****************************
2184 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2188 dnl *****************************
2189 dnl *** Checks for libinotify ***
2190 dnl *****************************
2191 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2194 dnl *******************************
2195 dnl *** Checks for MSG_NOSIGNAL ***
2196 dnl *******************************
2197 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2198 AC_TRY_COMPILE([#include <sys/socket.h>], [
2199 int f = MSG_NOSIGNAL;
2201 # Yes, we have it...
2203 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2205 # We'll have to use signals
2209 dnl *****************************
2210 dnl *** Checks for IPPROTO_IP ***
2211 dnl *****************************
2212 AC_MSG_CHECKING(for IPPROTO_IP)
2213 AC_TRY_COMPILE([#include <netinet/in.h>], [
2214 int level = IPPROTO_IP;
2216 # Yes, we have it...
2218 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2220 # We'll have to use getprotobyname
2224 dnl *******************************
2225 dnl *** Checks for IPPROTO_IPV6 ***
2226 dnl *******************************
2227 AC_MSG_CHECKING(for IPPROTO_IPV6)
2228 AC_TRY_COMPILE([#include <netinet/in.h>], [
2229 int level = IPPROTO_IPV6;
2231 # Yes, we have it...
2233 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2235 # We'll have to use getprotobyname
2239 dnl ******************************
2240 dnl *** Checks for IPPROTO_TCP ***
2241 dnl ******************************
2242 AC_MSG_CHECKING(for IPPROTO_TCP)
2243 AC_TRY_COMPILE([#include <netinet/in.h>], [
2244 int level = IPPROTO_TCP;
2246 # Yes, we have it...
2248 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2250 # We'll have to use getprotobyname
2254 dnl *****************************
2255 dnl *** Checks for SOL_IP ***
2256 dnl *****************************
2257 AC_MSG_CHECKING(for SOL_IP)
2258 AC_TRY_COMPILE([#include <netdb.h>], [
2261 # Yes, we have it...
2263 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2265 # We'll have to use getprotobyname
2269 dnl *****************************
2270 dnl *** Checks for SOL_IPV6 ***
2271 dnl *****************************
2272 AC_MSG_CHECKING(for SOL_IPV6)
2273 AC_TRY_COMPILE([#include <netdb.h>], [
2274 int level = SOL_IPV6;
2276 # Yes, we have it...
2278 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2280 # We'll have to use getprotobyname
2284 dnl *****************************
2285 dnl *** Checks for SOL_TCP ***
2286 dnl *****************************
2287 AC_MSG_CHECKING(for SOL_TCP)
2288 AC_TRY_COMPILE([#include <netdb.h>], [
2289 int level = SOL_TCP;
2291 # Yes, we have it...
2293 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2295 # We'll have to use getprotobyname
2299 dnl *****************************
2300 dnl *** Checks for IP_PKTINFO ***
2301 dnl *****************************
2302 AC_MSG_CHECKING(for IP_PKTINFO)
2303 AC_TRY_COMPILE([#include <linux/in.h>], [
2304 int level = IP_PKTINFO;
2306 # Yes, we have it...
2308 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2313 dnl *****************************
2314 dnl *** Checks for IPV6_PKTINFO ***
2315 dnl *****************************
2316 AC_MSG_CHECKING(for IPV6_PKTINFO)
2317 AC_TRY_COMPILE([#include <netdb.h>], [
2318 int level = IPV6_PKTINFO;
2320 # Yes, we have it...
2322 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2327 dnl **********************************
2328 dnl *** Checks for IP_DONTFRAG ***
2329 dnl **********************************
2330 AC_MSG_CHECKING(for IP_DONTFRAG)
2331 AC_TRY_COMPILE([#include <netinet/in.h>], [
2332 int level = IP_DONTFRAG;
2334 # Yes, we have it...
2336 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2341 dnl **********************************
2342 dnl *** Checks for IP_DONTFRAGMENT ***
2343 dnl **********************************
2344 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2345 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2346 int level = IP_DONTFRAGMENT;
2348 # Yes, we have it...
2350 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2355 dnl **********************************
2356 dnl *** Checks for IP_MTU_DISCOVER ***
2357 dnl **********************************
2358 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2359 AC_TRY_COMPILE([#include <linux/in.h>], [
2360 int level = IP_MTU_DISCOVER;
2362 # Yes, we have it...
2364 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2369 dnl **********************************
2370 dnl *** Checks for IP_PMTUDISC_DO ***
2371 dnl **********************************
2372 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2373 AC_TRY_COMPILE([#include <linux/in.h>], [
2374 int level = IP_PMTUDISC_DO;
2376 # Yes, we have it...
2378 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2383 dnl *********************************
2384 dnl *** Check for struct ip_mreqn ***
2385 dnl *********************************
2386 AC_MSG_CHECKING(for struct ip_mreqn)
2387 AC_TRY_COMPILE([#include <netinet/in.h>], [
2388 struct ip_mreqn mreq;
2389 mreq.imr_address.s_addr = 0;
2391 # Yes, we have it...
2393 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2395 # We'll just have to try and use struct ip_mreq
2397 AC_MSG_CHECKING(for struct ip_mreq)
2398 AC_TRY_COMPILE([#include <netinet/in.h>], [
2399 struct ip_mreq mreq;
2400 mreq.imr_interface.s_addr = 0;
2402 # Yes, we have it...
2404 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2406 # No multicast support
2411 dnl **********************************
2412 dnl *** Check for getaddrinfo ***
2413 dnl **********************************
2414 AC_MSG_CHECKING(for getaddrinfo)
2419 getaddrinfo(NULL,NULL,NULL,NULL);
2421 # Yes, we have it...
2423 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2428 dnl **********************************
2429 dnl *** Check for gethostbyname2_r ***
2430 dnl **********************************
2431 AC_MSG_CHECKING(for gethostbyname2_r)
2437 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2439 # Yes, we have it...
2441 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2446 dnl **********************************
2447 dnl *** Check for gethostbyname2 ***
2448 dnl **********************************
2449 AC_MSG_CHECKING(for gethostbyname2)
2454 gethostbyname2(NULL,0);
2456 # Yes, we have it...
2458 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2463 dnl **********************************
2464 dnl *** Check for gethostbyname ***
2465 dnl **********************************
2466 AC_MSG_CHECKING(for gethostbyname)
2471 gethostbyname(NULL);
2473 # Yes, we have it...
2475 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2480 dnl **********************************
2481 dnl *** Check for getprotobyname ***
2482 dnl **********************************
2483 AC_MSG_CHECKING(for getprotobyname)
2488 getprotobyname(NULL);
2490 # Yes, we have it...
2492 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2497 dnl **********************************
2498 dnl *** Check for getprotobyname_r ***
2499 dnl **********************************
2500 AC_MSG_CHECKING(for getprotobyname_r)
2505 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2507 # Yes, we have it...
2509 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2514 dnl **********************************
2515 dnl *** Check for getnameinfo ***
2516 dnl **********************************
2517 AC_MSG_CHECKING(for getnameinfo)
2522 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2524 # Yes, we have it...
2526 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2532 dnl **********************************
2533 dnl *** Check for inet_ntop ***
2534 dnl **********************************
2535 AC_MSG_CHECKING(for inet_ntop)
2538 #include <arpa/inet.h>
2540 inet_ntop (0, NULL, NULL, 0);
2542 # Yes, we have it...
2544 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2549 dnl *****************************
2550 dnl *** Checks for libnsl ***
2551 dnl *****************************
2552 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2554 AC_CHECK_FUNCS(inet_pton inet_aton)
2556 dnl *****************************
2557 dnl *** Checks for libxnet ***
2558 dnl *****************************
2561 AC_MSG_CHECKING(for Solaris XPG4 support)
2562 if test -f /usr/lib/libxnet.so; then
2563 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2564 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2565 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2572 if test "$GCC" = "yes"; then
2573 CFLAGS="$CFLAGS -Wno-char-subscripts"
2578 dnl *****************************
2579 dnl *** Checks for libpthread ***
2580 dnl *****************************
2581 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2582 # and libpthread does not exist
2586 dnl Haiku has pthread in libroot (libc equiv)
2587 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2590 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2593 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2596 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2599 AC_CHECK_HEADERS(pthread.h)
2600 AC_CHECK_HEADERS(pthread_np.h)
2601 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2602 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2603 AC_CHECK_FUNCS(pthread_kill)
2604 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2605 AC_TRY_COMPILE([ #include <pthread.h>], [
2606 pthread_mutexattr_t attr;
2607 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2612 AC_ERROR(Posix system lacks support for recursive mutexes)
2614 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2615 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2616 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2617 AC_CHECK_FUNCS(mincore mlock munlock)
2619 dnl ***********************************
2620 dnl *** Checks for working __thread ***
2621 dnl ***********************************
2622 AC_MSG_CHECKING(for working __thread)
2623 if test "x$with_tls" != "x__thread"; then
2624 AC_MSG_RESULT(disabled)
2625 elif test "x$cross_compiling" = "xyes"; then
2626 AC_MSG_RESULT(cross compiling, assuming yes)
2629 #if defined(__APPLE__) && defined(__clang__)
2630 #error "__thread does not currently work with clang on Mac OS X"
2634 #include <pthread.h>
2636 static int res1, res2;
2638 void thread_main (void *arg)
2653 pthread_create (&t1, NULL, thread_main, 1);
2654 pthread_create (&t2, NULL, thread_main, 2);
2656 pthread_join (t1, NULL);
2657 pthread_join (t2, NULL);
2659 return !(res1 + res2 == 2);
2669 dnl **************************************
2670 dnl *** Checks for working sigaltstack ***
2671 dnl **************************************
2672 AC_MSG_CHECKING(for working sigaltstack)
2673 if test "x$with_sigaltstack" != "xyes"; then
2674 AC_MSG_RESULT(disabled)
2675 elif test "x$cross_compiling" = "xyes"; then
2676 AC_MSG_RESULT(cross compiling, assuming no)
2684 #include <pthread.h>
2685 #include <sys/wait.h>
2686 #if defined(__FreeBSD__) || defined(__NetBSD__)
2687 #define SA_STACK SA_ONSTACK
2690 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2695 volatile char*__ptr = NULL;
2697 loop (void *ignored)
2706 struct sigaction sa;
2709 pthread_attr_t attr;
2711 sa.sa_sigaction = sigsegv_signal_handler;
2712 sigemptyset (&sa.sa_mask);
2713 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2714 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2715 perror ("sigaction");
2719 /* x86 darwin deliver segfaults using SIGBUS */
2720 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2721 perror ("sigaction");
2724 sas.ss_sp = malloc (SIGSTKSZ);
2725 sas.ss_size = SIGSTKSZ;
2727 if (sigaltstack (&sas, NULL) == -1) {
2728 perror ("sigaltstack");
2732 pthread_attr_init (&attr);
2733 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2734 printf ("pthread_create\n");
2758 for (i = 0; i < 300; ++i) {
2759 waitpid (son, &status, WNOHANG);
2760 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2765 kill (son, SIGKILL);
2771 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2778 dnl ********************************
2779 dnl *** Checks for semaphore lib ***
2780 dnl ********************************
2781 # 'Real Time' functions on Solaris
2782 # posix4 on Solaris 2.6
2783 # pthread (first!) on Linux
2784 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2786 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2787 AC_CHECK_FUNCS(shm_open)
2789 dnl ********************************
2790 dnl *** Checks for timezone stuff **
2791 dnl ********************************
2792 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2798 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2799 if test $ac_cv_struct_tm_gmtoff = yes; then
2800 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2802 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2807 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2808 if test $ac_cv_var_timezone = yes; then
2809 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2811 AC_ERROR(unable to find a way to determine timezone)
2815 dnl *********************************
2816 dnl *** Checks for math functions ***
2817 dnl *********************************
2818 AC_SEARCH_LIBS(sqrtf, m)
2820 dnl ****************************************************************
2821 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2822 dnl *** have it in the library (duh)) ***
2823 dnl ****************************************************************
2824 AC_CHECK_FUNCS(poll)
2826 dnl **********************************
2828 dnl **********************************
2829 AC_CHECK_HEADERS(sys/epoll.h)
2831 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2832 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2833 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2838 AC_CHECK_HEADERS(sys/event.h)
2839 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2841 dnl **************************************
2842 dnl * Darwin has a race that prevents us from using reliably:
2843 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2844 dnl * Since kqueue is mostly used for scaling large web servers,
2845 dnl * and very few folks run Mono on large web servers on OSX, falling
2847 dnl **************************************
2848 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2849 if test "x$host_darwin" = "xno"; then
2850 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2854 dnl ******************************
2855 dnl *** Checks for SIOCGIFCONF ***
2856 dnl ******************************
2857 AC_CHECK_HEADERS(sys/ioctl.h)
2858 AC_CHECK_HEADERS(net/if.h, [], [],
2860 #ifdef HAVE_SYS_TYPES_H
2861 # include <sys/types.h>
2863 #ifdef HAVE_SYS_SOCKET_H
2864 # include <sys/socket.h>
2867 AC_MSG_CHECKING(for ifreq)
2870 #include <sys/ioctl.h>
2878 x = (void *) &ifr->ifr_addr;
2881 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2885 dnl **********************************
2886 dnl *** Checks for sin_len ***
2887 dnl **********************************
2888 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2890 #include <netinet/in.h>
2892 struct sockaddr_in saddr;
2893 saddr.sin_len = sizeof (saddr);
2896 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2900 dnl **********************************
2901 dnl *** Checks for sin6_len ***
2902 dnl **********************************
2903 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2905 #include <netinet/in.h>
2907 struct sockaddr_in6 saddr6;
2908 saddr6.sin6_len = sizeof (saddr6);
2911 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2915 dnl **********************************
2916 dnl *** Check for getifaddrs ***
2917 dnl **********************************
2918 AC_MSG_CHECKING(for getifaddrs)
2921 #include <sys/types.h>
2922 #include <sys/socket.h>
2923 #ifdef HAVE_NET_IF_H
2926 #include <ifaddrs.h>
2930 # Yes, we have it...
2932 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2936 dnl **********************************
2937 dnl *** Check for if_nametoindex ***
2938 dnl **********************************
2939 AC_MSG_CHECKING(for if_nametoindex)
2942 #include <sys/types.h>
2943 #include <sys/socket.h>
2946 if_nametoindex(NULL);
2948 # Yes, we have it...
2950 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2954 dnl **********************************
2955 dnl *** Check for access ***
2956 dnl **********************************
2957 AC_MSG_CHECKING(for access)
2963 # Yes, we have it...
2965 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2970 dnl **********************************
2971 dnl *** Checks for proclib ***
2972 dnl **********************************
2973 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.)])
2974 dnl **********************************
2975 dnl *** Checks for MonoPosixHelper ***
2976 dnl **********************************
2977 AC_CHECK_HEADERS(checklist.h)
2978 AC_CHECK_HEADERS(pathconf.h)
2979 AC_CHECK_HEADERS(fstab.h)
2980 AC_CHECK_HEADERS(attr/xattr.h)
2981 AC_CHECK_HEADERS(sys/extattr.h)
2982 AC_CHECK_HEADERS(sys/sendfile.h)
2983 AC_CHECK_HEADERS(sys/statvfs.h)
2984 AC_CHECK_HEADERS(sys/statfs.h)
2985 AC_CHECK_HEADERS(sys/vfstab.h)
2986 AC_CHECK_HEADERS(sys/xattr.h)
2987 AC_CHECK_HEADERS(sys/mman.h)
2988 AC_CHECK_HEADERS(sys/param.h)
2989 AC_CHECK_HEADERS(sys/mount.h, [], [],
2991 #ifdef HAVE_SYS_PARAM_H
2992 # include <sys/param.h>
2995 AC_CHECK_HEADERS(sys/mount.h)
2996 AC_CHECK_FUNCS(confstr)
2997 AC_CHECK_FUNCS(seekdir telldir)
2998 AC_CHECK_FUNCS(getdomainname)
2999 AC_CHECK_FUNCS(setdomainname)
3000 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
3001 AC_CHECK_FUNCS(setgroups)
3002 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
3003 AC_CHECK_FUNCS(getfsstat)
3004 AC_CHECK_FUNCS(lutimes futimes)
3005 AC_CHECK_FUNCS(mremap)
3006 AC_CHECK_FUNCS(remap_file_pages)
3007 AC_CHECK_FUNCS(posix_fadvise)
3008 AC_CHECK_FUNCS(posix_fallocate)
3009 AC_CHECK_FUNCS(posix_madvise)
3010 AC_CHECK_FUNCS(vsnprintf)
3011 AC_CHECK_FUNCS(sendfile)
3012 AC_CHECK_FUNCS(gethostid sethostid)
3013 AC_CHECK_FUNCS(sethostname)
3014 AC_CHECK_FUNCS(statfs)
3015 AC_CHECK_FUNCS(fstatfs)
3016 AC_CHECK_FUNCS(statvfs)
3017 AC_CHECK_FUNCS(fstatvfs)
3018 AC_CHECK_FUNCS(stime)
3019 AC_CHECK_FUNCS(ttyname_r)
3020 AC_CHECK_FUNCS(psignal)
3021 AC_CHECK_FUNCS(getlogin_r)
3022 AC_CHECK_FUNCS(lockf)
3023 AC_CHECK_FUNCS(swab)
3024 AC_CHECK_FUNCS(setusershell endusershell)
3025 AC_CHECK_FUNCS(futimens utimensat)
3026 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
3027 AC_CHECK_FUNCS(readv writev preadv pwritev)
3028 AC_CHECK_FUNCS(setpgid)
3029 AC_CHECK_FUNCS(system)
3030 AC_CHECK_FUNCS(fork execv execve)
3031 AC_CHECK_FUNCS(waitpid)
3032 AC_CHECK_FUNCS(accept4)
3033 AC_CHECK_FUNCS(localtime_r)
3034 AC_CHECK_FUNCS(mkdtemp)
3035 AC_CHECK_SIZEOF(size_t)
3036 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
3037 [#include <sys/types.h>
3038 #include <sys/stat.h>
3039 #include <unistd.h>])
3040 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
3041 [#include <sys/types.h>
3042 #include <sys/stat.h>
3043 #include <unistd.h>])
3044 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
3045 [#include <sys/time.h>])
3046 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
3047 [#include <sys/socket.h>])
3048 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
3049 [#include <unistd.h>
3050 #include <fcntl.h>])
3051 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
3052 [#include <sys/uio.h>])
3053 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
3054 [#include <sys/socket.h>])
3055 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
3056 [#include <sys/poll.h>])
3057 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
3058 [#include <sys/socket.h>])
3059 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
3060 [#include <sys/socket.h>])
3061 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3062 [#include <netinet/in.h>])
3063 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3064 [#include <netinet/in.h>])
3065 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3066 [#include <sys/un.h>])
3067 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3068 [#include <sys/types.h>
3069 #include <sys/stat.h>
3070 #include <unistd.h>])
3071 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3072 [#include <time.h>])
3073 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3074 [#include <sys/time.h>
3075 #include <sys/types.h>
3076 #include <utime.h>])
3077 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3078 [#include <sys/time.h>])
3079 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3080 [#include <sys/types.h>
3081 #include <utime.h>])
3083 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
3084 [#include <sys/types.h>
3085 #include <dirent.h>])
3087 [struct passwd.pw_gecos],,,
3088 [#include <sys/types.h>
3091 [struct statfs.f_flags],,,
3092 [#include <sys/types.h>
3093 #include <sys/vfs.h>])
3095 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3096 [#include <sys/types.h>
3097 #include <sys/stat.h>
3098 #include <unistd.h>])
3100 dnl Favour xattr through glibc, but use libattr if we have to
3101 AC_CHECK_FUNC(lsetxattr, ,
3102 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3106 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3108 [struct kinfo_proc.kp_proc],,,
3109 [#include <sys/types.h>
3110 #include <sys/param.h>
3111 #include <sys/sysctl.h>
3112 #include <sys/proc.h>
3115 dnl *********************************
3116 dnl *** Checks for Windows compilation ***
3117 dnl *********************************
3118 AC_CHECK_HEADERS(sys/time.h)
3119 AC_CHECK_HEADERS(sys/param.h)
3120 AC_CHECK_HEADERS(dirent.h)
3122 dnl ******************************************
3123 dnl *** Checks for OSX and iOS compilation ***
3124 dnl ******************************************
3125 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3127 dnl *********************************
3128 dnl *** Check for Console 2.0 I/O ***
3129 dnl *********************************
3130 AC_CHECK_HEADERS([curses.h])
3131 AC_CHECK_HEADERS([term.h], [], [],
3136 AC_CHECK_HEADERS([termios.h])
3138 dnl *********************************
3139 dnl *** Checks for random ***
3140 dnl *********************************
3141 if test x$host_darwin = xno; then
3142 AC_CHECK_HEADERS(sys/random.h)
3143 AC_CHECK_FUNCS(getrandom getentropy)
3146 dnl *********************************
3147 dnl *** Checks for Mono.Native ***
3148 dnl *********************************
3150 # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3151 # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3153 AC_MSG_CHECKING(for linux/in.h)
3155 #include <sys/socket.h>
3156 #include <linux/in.h>
3160 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3165 AC_CHECK_HEADERS([linux/if_packet.h])
3167 AC_MSG_CHECKING(for struct in_pktinfo)
3169 #ifdef HAVE_LINUX_IN_H
3170 #include <sys/socket.h>
3171 #include <linux/in.h>
3173 #include <netinet/in.h>
3176 struct in_pktinfo pktinfo;
3179 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3184 AC_MSG_CHECKING(for struct ip_mreqn)
3187 #include <sys/socket.h>
3188 #include <linux/in.h>
3190 #include <netinet/in.h>
3193 struct ip_mreqn mreqn;
3196 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3201 if test x$host_darwin = xno; then
3202 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3205 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3206 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3208 # AC_CHECK_FUNC(getifaddrs, [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3210 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3211 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3212 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3213 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3215 if test "x$mono_native_platform_ios" = "xno"; then
3216 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3217 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3218 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3221 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3222 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3223 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3224 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3225 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
3226 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3227 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3228 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3230 if test "x$platform_android" != "xyes"; then
3231 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3234 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3235 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3236 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3237 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3238 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3239 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3241 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>]])
3242 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>]])
3243 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>]])
3244 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>]])
3245 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3246 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3247 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3249 AC_MSG_CHECKING(for struct statfs)
3251 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3252 #include <sys/mount.h>
3254 #include <sys/statfs.h>
3260 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3265 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3266 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3269 AC_MSG_CHECKING(for readdir_r)
3274 struct dirent* entry;
3275 struct dirent* result;
3276 readdir_r(dir, entry, &result);
3279 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3284 AC_MSG_CHECKING(for kevent with void *data)
3286 #include <sys/types.h>
3287 #include <sys/event.h>
3289 struct kevent event;
3291 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3294 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3299 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3300 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3302 AC_MSG_CHECKING(for sendfile with 4 arguments)
3304 #include <sys/sendfile.h>
3306 #if defined(TARGET_ANDROID)
3307 #if !defined(__ANDROID_API__)
3308 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3309 #elif __ANDROID_API__ < 21
3310 #error sendfile is not supported on this Android API level
3314 int result = sendfile(0, 0, 0, 0);
3317 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3322 ORIG_CFLAGS="$CFLAGS"
3323 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3325 AC_MSG_CHECKING(for sendfile with 6 arguments)
3328 #include <sys/types.h>
3329 #include <sys/socket.h>
3330 #include <sys/uio.h>
3332 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3335 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3340 CFLAGS="$ORIG_CFLAGS"
3342 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3343 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3344 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3345 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3347 ORIG_CFLAGS="$CFLAGS"
3348 CFLAGS="$CFLAGS -Werror=sign-conversion"
3350 AC_MSG_CHECKING(for getnameinfo with signed flags)
3352 #include <sys/types.h>
3355 const struct sockaddr *addr;
3362 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3365 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3370 CFLAGS="$ORIG_CFLAGS"
3372 if test "x$host_linux" = "xyes"; then
3373 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3375 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3378 # HAVE_CLOCK_MONOTONIC check already done above
3379 # HAVE_CLOCK_REALTIME check already done above
3380 # HAVE_MACH_ABSOLUTE_TIME check already done above
3381 # HAVE_MACH_TIMEBASE_INFO check already done above
3382 # HAVE_FUTIMES check already done above
3383 # HAVE_FUTIMENS check already done above
3385 ORIG_CFLAGS="$CFLAGS"
3386 CFLAGS="$CFLAGS -Werror=sign-conversion"
3388 AC_MSG_CHECKING(for bind with unsigned addrlen)
3390 #include <sys/socket.h>
3393 struct sockaddr* addr;
3395 bind(fd, addr, addrLen);
3398 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3403 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3405 #include <netinet/in.h>
3406 #include <netinet/tcp.h>
3408 struct ipv6_mreq opt;
3409 unsigned int index = 0;
3410 opt.ipv6mr_interface = index;
3413 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3418 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3420 #include <sys/inotify.h>
3424 int result = inotify_rm_watch(fd, wd);
3427 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3432 CFLAGS="$ORIG_CFLAGS"
3434 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3435 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3437 elif test "x$cross_compiling" = "xyes"; then
3438 AC_MSG_RESULT(cross compiling, assuming yes)
3439 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3442 #include <sys/mman.h>
3448 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3452 shm_unlink("/mono_configure_shm_open");
3454 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3455 // on at least the current version of Mac OS X
3457 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3464 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3470 AC_MSG_CHECKING(for getpriority with int who)
3472 #include <sys/resource.h>
3476 int result = getpriority(which, who);
3479 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3484 AC_MSG_CHECKING(for kevent with int parameters)
3486 #include <sys/types.h>
3487 #include <sys/event.h>
3490 const struct kevent* chagelist;
3492 struct kevent* eventlist;
3494 const struct timespec* timeout;
3495 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3498 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3503 AC_CHECK_FUNCS(mkstemps)
3504 # AC_CHECK_FUNCS(mkstemp) # already done above
3506 if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3507 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3510 AC_MSG_CHECKING(for tcp/var.h)
3512 #include <sys/types.h>
3513 #include <sys/socketvar.h>
3514 #include <netinet/ip.h>
3515 #include <netinet/tcp.h>
3516 #include <netinet/tcp_var.h>
3520 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3525 AC_CHECK_HEADERS([sys/cdefs.h])
3527 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3529 #ifdef HAVE_SYS_CDEFS_H
3530 #include <sys/cdefs.h>
3532 #include <netinet/tcp.h>
3534 int result = TCP_ESTABLISHED;
3537 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3542 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3544 AC_MSG_CHECKING(for struct rt_msghdr)
3546 #include <sys/types.h>
3547 #include <net/route.h>
3552 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3557 AC_CHECK_HEADERS([sys/sysctl.h])
3558 AC_CHECK_HEADERS([linux/rtnetlink.h])
3560 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3561 #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3562 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3564 ORIG_CFLAGS="$CFLAGS"
3565 CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3567 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3571 size_t namelen = 20;
3573 int result = getdomainname(name, namelen);
3576 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3581 CFLAGS="$ORIG_CFLAGS"
3583 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3584 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3585 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3587 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
3588 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3589 elif test "x$host_linux" = "xyes"; then
3590 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3593 # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3594 # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3595 # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3596 # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3599 AC_MSG_CHECKING(for GSS/GSS.h)
3601 #include <GSS/GSS.h>
3605 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3606 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3612 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3614 #include <gssapi/gssapi_ext.h>
3623 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3625 #include <gssapi/gssapi_ext.h>
3626 #include <gssapi/gssapi_krb5.h>
3627 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3631 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3636 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3638 AC_CHECK_HEADERS([crt_externs.h])
3640 AC_MSG_CHECKING(for _NSGetEnviron)
3642 #include <crt_externs.h>
3644 char **result = *(_NSGetEnviron());
3647 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3652 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3654 # *** End of Mono.Native checks ***
3656 AM_CONDITIONAL(ENABLE_GSS, false)
3658 dnl *********************************
3659 dnl *** Checks for Windows compilation ***
3660 dnl *********************************
3661 AC_CHECK_HEADERS(winternl.h)
3663 jdk_headers_found=no
3664 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3665 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3666 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3667 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3668 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3669 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3670 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3672 dnl *********************************
3673 dnl *** Check for struct ip_mreqn ***
3674 dnl *********************************
3675 AC_MSG_CHECKING(for struct ip_mreqn)
3676 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3677 struct ip_mreqn mreq;
3678 mreq.imr_address.s_addr = 0;
3680 # Yes, we have it...
3682 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3684 # We'll just have to try and use struct ip_mreq
3686 AC_MSG_CHECKING(for struct ip_mreq)
3687 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3688 struct ip_mreq mreq;
3689 mreq.imr_interface.s_addr = 0;
3691 # Yes, we have it...
3693 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3695 # No multicast support
3700 dnl **********************************
3701 dnl *** Check for getaddrinfo ***
3702 dnl **********************************
3703 AC_MSG_CHECKING(for getaddrinfo)
3706 #include <winsock2.h>
3707 #include <ws2tcpip.h>
3709 getaddrinfo(NULL,NULL,NULL,NULL);
3711 # Yes, we have it...
3713 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3718 dnl **********************************
3719 dnl *** Check for gethostbyname ***
3720 dnl **********************************
3721 AC_MSG_CHECKING(for gethostbyname)
3724 #include <winsock2.h>
3725 #include <ws2tcpip.h>
3727 gethostbyname(NULL);
3729 # Yes, we have it...
3731 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3736 dnl **********************************
3737 dnl *** Check for getprotobyname ***
3738 dnl **********************************
3739 AC_MSG_CHECKING(for getprotobyname)
3742 #include <winsock2.h>
3743 #include <ws2tcpip.h>
3745 getprotobyname(NULL);
3747 # Yes, we have it...
3749 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3754 dnl **********************************
3755 dnl *** Check for getnameinfo ***
3756 dnl **********************************
3757 AC_MSG_CHECKING(for getnameinfo)
3760 #include <winsock2.h>
3761 #include <ws2tcpip.h>
3763 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3765 # Yes, we have it...
3767 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3772 dnl **********************************
3773 dnl *** Check for inet_ntop ***
3774 dnl **********************************
3775 AC_MSG_CHECKING(for inet_ntop)
3778 #include <winsock2.h>
3779 #include <ws2tcpip.h>
3781 inet_ntop (0, NULL, NULL, 0);
3783 # Yes, we have it...
3785 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3790 dnl **********************************
3791 dnl *** Check for inet_pton ***
3792 dnl **********************************
3793 AC_MSG_CHECKING(for inet_pton)
3796 #include <winsock2.h>
3797 #include <ws2tcpip.h>
3802 inet_pton (0, NULL, NULL);
3804 # Yes, we have it...
3806 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3811 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3812 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3813 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3814 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3815 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3816 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3817 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3821 AC_MSG_CHECKING(for socklen_t)
3823 #include <sys/types.h>
3824 #include <sys/socket.h>
3828 ac_cv_c_socklen_t=yes
3829 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3835 AC_CHECK_FUNCS(execvp)
3837 dnl ****************************
3838 dnl *** Look for /dev/random ***
3839 dnl ****************************
3841 AC_MSG_CHECKING([if usage of random device is requested])
3842 AC_ARG_ENABLE(dev-random,
3843 [ --disable-dev-random disable the use of the random device (enabled by default)],
3844 try_dev_random=$enableval, try_dev_random=yes)
3846 AC_MSG_RESULT($try_dev_random)
3850 dnl IBM i does not have /dev/random, use unblocking only
3853 NAME_DEV_RANDOM="/dev/urandom"
3856 dnl Win32 does not have /dev/random, they have their own method...
3858 *-mingw*|*-*-cygwin*)
3859 ac_cv_have_dev_random=no
3862 dnl Everywhere else, it's /dev/random
3865 NAME_DEV_RANDOM="/dev/random"
3869 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3871 dnl Now check if the device actually exists
3873 if test "x$try_dev_random" = "xyes"; then
3874 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3875 [if test -r "$NAME_DEV_RANDOM" ; then
3876 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3877 if test "x$ac_cv_have_dev_random" = "xyes"; then
3878 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3881 AC_MSG_CHECKING(for random device)
3882 ac_cv_have_dev_random=no
3883 AC_MSG_RESULT(has been disabled)
3886 if test "x$host_win32" = "xyes"; then
3887 AC_DEFINE(HAVE_CRYPT_RNG)
3890 if test "x$ac_cv_have_dev_random" = "xno" \
3891 && test "x$host_win32" = "xno"; then
3894 *** A system-provided entropy source was not found on this system.
3895 *** Because of this, the System.Security.Cryptography random number generator
3896 *** will throw a NotImplemented exception.
3898 *** If you are seeing this message, and you know your system DOES have an
3899 *** entropy collection in place, please report an issue on GitHub and
3900 *** provide information about the system and how to access the random device.
3902 *** Otherwise you can install either egd or prngd and set the environment
3903 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3907 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)
3909 AC_MSG_CHECKING([if big-arrays are to be enabled])
3910 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)
3911 if test "x$enable_big_arrays" = "xyes" ; then
3912 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3913 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3915 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3918 AC_MSG_RESULT($enable_big_arrays)
3924 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3926 if test "x$enable_dtrace" = "xyes"; then
3927 if test "x$has_dtrace" = "xno"; then
3928 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3930 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3931 if test "x$DTRACE" = "xno"; then
3932 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3934 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3935 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3941 if test "x$enable_dtrace" = "xyes"; then
3942 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3944 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3947 DTRACEFLAGS="-arch ppc64"
3950 DTRACEFLAGS="-arch x86_64"
3959 DTRACEFLAGS="-arch ppc"
3962 DTRACEFLAGS="-arch i386"
3969 AC_SUBST(DTRACEFLAGS)
3975 AC_CHECK_HEADERS([sys/sdt.h])
3977 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3978 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3980 dnl **************************
3981 dnl *** AOT cross offsets ***
3982 dnl **************************
3984 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3985 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3991 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3992 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3993 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)
3994 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3995 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3997 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3999 if test "x$enable_llvm" = "xdefault"; then
4000 enable_llvm=$enable_llvm_default
4003 enable_llvm_msvc_only="no"
4004 if test "x$enable_llvm" = "xyes"; then
4005 if test "x$host_win32" = "xyes"; then
4006 if test "x$cross_compiling" = "xno"; then
4009 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
4010 enable_llvm_msvc_only="yes"
4013 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
4017 if test "x$enable_loadedllvm" = "xyes"; then
4018 AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
4019 enable_loadedllvm=no
4025 if test "x$enable_llvm" = "xyes"; then
4026 if test "x$with_llvm" != "x"; then
4027 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
4028 if test x$host_win32 = xyes; then
4029 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
4031 if test ! -x $EXTERNAL_LLVM_CONFIG; then
4032 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
4035 if test x$host_win32 = xyes; then
4036 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
4038 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
4040 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
4045 LLVM_CODEGEN_LIBS="x86codegen"
4048 LLVM_CODEGEN_LIBS="armcodegen"
4051 LLVM_CODEGEN_LIBS="aarch64codegen"
4054 LLVM_CODEGEN_LIBS="powerpccodegen"
4057 if test "x$host" != "x$target"; then
4058 # No need for jit libs
4062 AC_SUBST(LLVM_CODEGEN_LIBS)
4063 AC_SUBST(EXTERNAL_LLVM_CONFIG)
4065 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
4066 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4067 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4069 if test "x$enable_llvm_msvc_only" != "xyes"; then
4070 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4072 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4076 # AC_DEFINE necessary for correct restore behavior on Linux
4077 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4078 if test "x$internal_llvm" != "xno"; then
4079 if test "x$enable_llvm_msvc_only" != "xyes"; then
4080 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4082 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4086 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4087 if test "x$enable_llvm_asserts" != "xno"; then
4088 if test "x$enable_llvm_msvc_only" != "xyes"; then
4089 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4091 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4095 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4097 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
4098 if test "x$enable_loadedllvm" = "xyes"; then
4099 if test "x$enable_llvm_msvc_only" != "xyes"; then
4100 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
4104 if test "x$enable_llvm" = "xyes"; then
4105 enable_llvm_runtime=yes
4108 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4109 if test "x$enable_llvm_runtime" = "xyes"; then
4110 if test "x$enable_llvm_msvc_only" != "xyes"; then
4111 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4113 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4118 ACCESS_UNALIGNED="yes"
4122 SQLITE="libsqlite.so.0"
4123 SQLITE3="libsqlite3.so.0"
4125 GDKX11="libgdk-x11-2.0.so.0"
4126 GTKX11="libgtk-x11-2.0.so.0"
4127 XINERAMA="libXinerama.so.1"
4129 sizeof_register="SIZEOF_VOID_P"
4132 boehm_supported=true
4141 ACCESS_UNALIGNED="no"
4149 ACCESS_UNALIGNED="no"
4151 AC_MSG_CHECKING(for mips n32)
4153 #if _MIPS_SIM != _ABIN32
4170 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4175 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4176 # int astruct __attribute__ ((visibility ("hidden")));
4179 # void *p = &astruct;
4181 # gcc -fPIC --shared -o libfoo.so foo.c
4183 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4184 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4185 have_visibility_hidden=no
4188 have_visibility_hidden=no
4199 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4206 openbsd*|freebsd*|kfreebsd-gnu*)
4213 x86_64-*-* | amd64-*-*)
4216 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4217 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4224 BTLS_PLATFORM=x86_64
4225 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4230 BTLS_PLATFORM=x86_64
4231 boehm_supported=false
4233 openbsd*|freebsd*|kfreebsd-gnu*)
4236 BTLS_PLATFORM=x86_64
4240 BTLS_PLATFORM=x86_64
4245 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4251 ACCESS_UNALIGNED="no"
4258 if test x"$GCC" = xyes; then
4259 # We don't support v8 cpus
4260 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4262 if test x"$AR" = xfalse; then
4263 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4266 *-mingw*|*-*-cygwin*)
4267 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4268 have_visibility_hidden=no
4272 # Old Boehm fails to compile for x86_64-mingw.
4273 # It is trivial to fix, but just silently drop it.
4274 boehm_supported=false
4278 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4279 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4280 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4281 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4283 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4284 if ! (echo $CC | grep -q -- 'clang'); then
4285 CFLAGS="$CFLAGS -mminimal-toc"
4289 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4295 BTLS_PLATFORM=powerpc
4296 dnl on AIX/PASE, shared libraries can be inside archives
4297 dnl if they are, we specify them by lib.a(lib.so)
4298 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4299 LIBC="libc.a(shr_64.o)"
4300 INTL="libintl.a(libintl.so.8)"
4304 BTLS_PLATFORM=powerpc
4313 ACCESS_UNALIGNED="no"
4314 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4320 ACCESS_UNALIGNED="no"
4321 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4326 ACCESS_UNALIGNED="no"
4328 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4331 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4333 arm*-linux*-gnueabi)
4334 BTLS_PLATFORM=armsoft
4341 ACCESS_UNALIGNED="no"
4342 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4344 aarch64-*darwin*ilp32)
4347 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4349 # assuming no other target other than watchOS is using aarch64*darwin triple
4353 # https://lkml.org/lkml/2012/7/15/133
4356 boehm_supported=false
4359 BTLS_PLATFORM=aarch64
4360 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4365 ACCESS_UNALIGNED="yes"
4368 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4375 BTLS_PLATFORM=riscv32
4377 boehm_supported=false
4384 BTLS_PLATFORM=riscv64
4386 boehm_supported=false
4392 if test "x$host" != "x$target"; then
4393 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4395 enable_support_build=no
4397 # Can't use tls, since it depends on the runtime detection of tls offsets
4398 # in mono-compiler.h
4405 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4409 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4413 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4417 powerpc64-ps3-linux-gnu)
4419 arch_target=powerpc64
4420 AC_DEFINE(TARGET_PS3, 1, [...])
4421 # It would be better to just use TARGET_POWERPC64, but lots of code already
4423 AC_DEFINE(__mono_ppc64__, 1, [...])
4424 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4426 target_byte_order=G_BIG_ENDIAN
4428 powerpc64-xbox360-linux-gnu)
4430 arch_target=powerpc64
4431 AC_DEFINE(TARGET_XBOX360, 1, [...])
4432 # It would be better to just use TARGET_POWERPC64, but lots of code already
4435 target_byte_order=G_BIG_ENDIAN
4439 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4443 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4456 AC_DEFINE(TARGET_PS4, 1, [...])
4457 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4458 CPPFLAGS="$CPPFLAGS"
4461 aarch64*darwin*_ilp32)
4463 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4464 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4471 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4472 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4479 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4480 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4485 x86_64-google-fuchsia)
4488 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
4491 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4499 AC_DEFINE(TARGET_ANDROID, 1, [...])
4506 AC_DEFINE(TARGET_WASM, 1, [...])
4510 AC_DEFINE(TARGET_X86, 1, [...])
4514 AC_DEFINE(TARGET_AMD64, 1, [...])
4518 AC_DEFINE(TARGET_ARM, 1, [...])
4520 ACCESS_UNALIGNED="no"
4523 AC_DEFINE(TARGET_ARM64, 1, [...])
4527 AC_DEFINE(TARGET_POWERPC, 1, [...])
4530 AC_DEFINE(TARGET_POWERPC, 1, [...])
4531 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4534 AC_DEFINE(TARGET_S390X, 1, [...])
4537 AC_DEFINE(TARGET_MIPS, 1, [...])
4540 AC_DEFINE(TARGET_SPARC, 1, [...])
4543 AC_DEFINE(TARGET_SPARC64, 1, [...])
4546 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4547 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4550 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4551 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4556 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4557 target_sizeof_void_p=4
4560 target_sizeof_void_p=8
4563 AC_MSG_ERROR([unknown target])
4569 AC_DEFINE(HOST_WASM, 1, [...])
4572 AC_DEFINE(HOST_X86, 1, [...])
4575 AC_DEFINE(HOST_AMD64, 1, [...])
4578 AC_DEFINE(HOST_ARM, 1, [...])
4581 AC_DEFINE(HOST_ARM64, 1, [...])
4584 AC_DEFINE(HOST_POWERPC, 1, [...])
4587 AC_DEFINE(HOST_POWERPC, 1, [...])
4588 AC_DEFINE(HOST_POWERPC64, 1, [...])
4591 AC_DEFINE(HOST_S390X, 1, [...])
4594 AC_DEFINE(HOST_MIPS, 1, [...])
4597 AC_DEFINE(HOST_SPARC, 1, [...])
4600 AC_DEFINE(HOST_SPARC64, 1, [...])
4603 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4604 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4607 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4608 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4612 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4614 X86 | AMD64 | ARM | ARM64)
4615 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4619 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4620 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4626 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4627 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4629 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4631 if test "x$enable_vtune" = "xyes"; then
4632 if test "x$with_vtune" = "x"; then
4633 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4635 VTUNE_PATH=$with_vtune
4637 VTUNE_INCLUDE=$VTUNE_PATH/include
4640 VTUNE_LIB=$VTUNE_PATH/lib32
4643 VTUNE_LIB=$VTUNE_PATH/lib64
4646 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4649 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4650 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4652 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4653 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4656 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4657 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4659 AC_SUBST(VTUNE_LIBS)
4660 AC_SUBST(VTUNE_CFLAGS)
4662 dnl Use GCC atomic ops if they work on the target.
4663 if test x$GCC = "xyes"; then
4665 X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4666 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4671 if test "x$target_mach" = "xyes"; then
4673 if test "x$TARGET_SYS" = "xWATCHOS"; then
4674 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4675 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4676 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4678 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64" -o "x$TARGET" = "xARM6432"; then
4679 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4680 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4681 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4685 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4686 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4687 #error fail this for ios
4690 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4691 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4692 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4695 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4696 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4697 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4702 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4705 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4707 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4709 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4710 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4711 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4712 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4714 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4717 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4719 if test "x$sizeof_register" = "x4"; then
4720 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4721 elif test "x$sizeof_register" = "x8"; then
4722 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4724 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4727 if test "x$have_visibility_hidden" = "xyes"; then
4728 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4731 if test "x$have_deprecated" = "xyes"; then
4732 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4736 dnl Simple Generational checks (sgen)
4739 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4740 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4741 if test x$buildsgen = xyes; then
4742 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4743 SGEN_DEFINES="-DHAVE_SGEN_GC"
4746 if test x$with_sgen_default_concurrent != xno; then
4747 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4748 conc_gc_msg=" (concurrent by default)"
4751 if test "x$gc_msg" = "x"; then
4752 gc_msg="sgen$conc_gc_msg"
4754 gc_msg="sgen$conc_gc_msg and $gc_msg"
4757 AC_SUBST(SGEN_DEFINES)
4758 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4760 jit_status="Building and using the JIT"
4768 INTL="libintl.dylib"
4769 SQLITE="libsqlite.0.dylib"
4770 SQLITE3="libsqlite3.0.dylib"
4772 GDKX11="libgdk-x11-2.0.dylib"
4773 GTKX11="libgtk-x11-2.0.dylib"
4778 SQLITE="libsqlite.so"
4779 SQLITE3="libsqlite3.so"
4789 SQLITE="libsqlite.so"
4790 SQLITE3="libsqlite3.so"
4795 SQLITE="libsqlite.so"
4796 SQLITE3="libsqlite3.so"
4800 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4801 AC_MSG_CHECKING(for the soname of libX11.so)
4802 for i in $x_libraries $dlsearch_path; do
4804 if test -f $i/libX11.so.$r; then
4811 if test "x$X11" = "xlibX11.so"; then
4812 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4820 ######################################
4822 ######################################
4826 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4827 if test x$GCC = xyes; then
4828 GNUC_UNUSED='__attribute__((__unused__))'
4829 GNUC_NORETURN='__attribute__((__noreturn__))'
4831 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4834 AC_SUBST(GNUC_PRETTY)
4835 AC_SUBST(GNUC_UNUSED)
4836 AC_SUBST(GNUC_NORETURN)
4837 AC_SUBST(BREAKPOINT)
4839 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4842 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4858 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4863 arm*-darwin*|aarch64*-*|riscv*)
4864 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4867 ORDER=G_LITTLE_ENDIAN
4870 LDFLAGS="$LDFLAGS -ltextencoding"
4873 CFLAGS="$CFLAGS -pthread"
4874 LDFLAGS="$LDFLAGS -pthread"
4884 # Defined for all targets/platforms using classic Windows API support.
4885 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4886 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4888 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4889 AC_CHECK_FUNCS(getrlimit)
4890 AC_CHECK_FUNCS(fork execv execve)
4891 AC_CHECK_FUNCS(waitpid)
4893 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4895 if test x$with_overridable_allocators = xyes; then
4896 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4897 AC_MSG_NOTICE([Overridable allocator support enabled])
4899 AC_MSG_NOTICE([Overridable allocator support disabled])
4903 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4904 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4905 # removed once support for 10.6 is dropped.
4907 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4909 if test x$target_osx = xyes; then
4910 AC_CHECK_FUNCS(getpwuid_r)
4911 elif test x$target_ios = xno; then
4912 AC_CHECK_FUNCS(strndup getpwuid_r)
4915 AC_SEARCH_LIBS(sqrtf, m)
4917 # nanosleep may not be part of libc, also search it in other libraries
4918 AC_SEARCH_LIBS(nanosleep, rt)
4920 AC_SEARCH_LIBS(dlopen, dl)
4921 old_ldflags="${LDFLAGS}"
4922 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4923 if test $lt_cv_prog_gnu_ld = yes; then
4924 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4927 *-*-aix*|*-*-os400*)
4930 dnl Try to use export-dynamic anyways
4931 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4935 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4936 if test $found_export_dynamic = no; then
4937 LDFLAGS="${old_ldflags}"
4940 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4941 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4942 AC_CHECK_LIB(iconv, iconv_open)
4943 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4944 AC_SUBST(HAVE_ALLOCA_H)
4946 # Get the exact type of size_t, not just its size.
4947 # This is so we can find an exact printf format among u, lu, llu, I64u.
4948 # To avoid warnings about slight mismatches.
4949 # C99 runtime "zu" dependency is being avoided here.
4951 # We have to compile as C++ because C is too lenient
4952 # and lets the wrong thing compile, with warnings.
4954 # Note: "zu" or ifdef <something> have the advantage
4955 # of producing installable "biarch" headers. i.e. one Mac header
4956 # for Mac/x86 and Mac/amd64.
4960 # Check long before int because it is the overwhelming Unix answer,
4961 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4963 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4965 AC_MSG_CHECKING(if size_t is unsigned long)
4966 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4968 unsigned long *a = (size_t*)0;
4971 AC_SUBST(GSIZE_FORMAT, '"lu"')
4974 AC_MSG_CHECKING(if size_t is unsigned int)
4975 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4977 unsigned *a = (size_t*)0;
4980 AC_SUBST(GSIZE_FORMAT, '"u"')
4982 # At this point the majority of systems have their answer,
4983 # and we descend into non-standard or new-standard territory.
4985 # Check __int64 first because I64 on some systems predates ll, enabling
4986 # new compiler/old runtime interop, and the types always have the same size.
4988 AC_MSG_CHECKING(if size_t is unsigned __int64)
4989 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4991 unsigned __int64 *a = (size_t*)0;
4994 AC_SUBST(GSIZE_FORMAT, '"I64u"')
4997 AC_MSG_CHECKING(if size_t is unsigned long long)
4998 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5000 unsigned long long *a = (size_t*)0;
5003 AC_SUBST(GSIZE_FORMAT, '"llu"')
5006 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
5014 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
5015 # This provides for an exact match with functions that
5016 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
5017 # uintptr_t is not necessarily the same.
5019 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
5020 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
5022 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
5032 AC_SUBST(GSIZE_FORMAT)
5035 # END OF EGLIB CHECKS
5038 AC_ARG_WITH([libgdiplus],
5039 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
5040 [], [with_libgdiplus=installed])
5042 # default install location
5043 libgdiplus_install_loc=libgdiplus${libsuffix}
5046 libgdiplus_install_loc=libgdiplus${libsuffix}.0
5050 case $with_libgdiplus in
5057 if test x$cross_compiling = xno; then
5058 if test x$host_darwin = xyes; then
5059 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
5061 libgdiplus_install_loc=$a
5069 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5072 /*) # absolute path, assume it is an install location
5073 libgdiplus_loc=$with_libgdiplus
5074 libgdiplus_install_loc=$with_libgdiplus
5078 libgdiplus_loc=`pwd`/$with_libgdiplus
5081 AC_SUBST(libgdiplus_loc)
5082 AC_SUBST(libgdiplus_install_loc)
5084 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)
5085 if test "x$icall_symbol_map" = "xyes"; then
5086 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5089 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5090 if test "x$icall_export" = "xyes"; then
5091 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5094 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5095 if test "x$icall_tables" = "xno"; then
5096 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5099 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5101 if test "x$with_tls" = "x__thread"; then
5102 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5103 # Pass the information to libgc
5104 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5105 AC_MSG_CHECKING(if the tls_model attribute is supported)
5106 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5109 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5115 if test ${TARGET} = ARM; then
5116 dnl ******************************************
5117 dnl *** Check to see what FPU is available ***
5118 dnl ******************************************
5119 AC_MSG_CHECKING(which FPU to use)
5122 # This is a bit tricky:
5124 # if (__ARM_PCS_VFP) {
5125 # /* mfloat-abi=hard == VFP with hard ABI */
5126 # } elif (!__SOFTFP__) {
5127 # /* mfloat-abi=softfp == VFP with soft ABI */
5129 # /* mfloat-abi=soft == no VFP */
5132 # The exception is iOS (w/ GCC) where none of the above
5133 # are defined (but iOS always uses the 'softfp' ABI).
5135 # No support for FPA.
5140 # iOS GCC always uses the 'softfp' ABI.
5141 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5145 # Are we using the 'hard' ABI?
5146 if test x$fpu = xNONE; then
5147 AC_TRY_COMPILE([], [
5148 #ifndef __ARM_PCS_VFP
5149 #error "Float ABI is not 'hard'"
5158 # No 'hard' ABI. 'soft' or 'softfp'?
5159 if test x$fpu = xNONE; then
5160 AC_TRY_COMPILE([], [
5162 #error "Float ABI is not 'softfp'"
5171 if test x$arm_fpu != x; then
5176 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5179 dnl *********************************************
5180 dnl *** Check which ARM version(s) we can use ***
5181 dnl *********************************************
5182 AC_MSG_CHECKING(which ARM version to use)
5184 AC_TRY_COMPILE([], [
5185 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5186 #error Not on ARM v5.
5194 AC_TRY_COMPILE([], [
5195 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5196 #error Not on ARM v6.
5205 AC_TRY_COMPILE([], [
5206 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5207 #error Not on ARM v7.
5217 AC_MSG_RESULT($arm_ver)
5219 if test x$arm_v5 = xyes; then
5220 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5221 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5224 if test x$arm_v6 = xyes; then
5225 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5226 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5229 if test x$arm_v7 = xyes; then
5230 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5231 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5234 if test x$host_linux = xyes; then
5236 if test x$fpu = xNONE; then
5244 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5245 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5247 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5249 if test x$fpabi = xauto; then
5250 AC_TRY_COMPILE([], [
5251 #ifdef __riscv_float_abi_double
5261 if test x$fpabi = xauto; then
5262 AC_TRY_COMPILE([], [
5263 #ifdef __riscv_float_abi_single
5273 if test x$fpabi = xauto; then
5274 AC_TRY_COMPILE([], [
5275 #ifdef __riscv_float_abi_soft
5287 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5288 AC_MSG_RESULT([double-precision])
5291 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5292 AC_MSG_ERROR([single-precision, not supported])
5295 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5296 AC_MSG_RESULT([soft float])
5299 AC_MSG_ERROR([unknown])
5302 AC_MSG_ERROR([invalid option: $fpabi])
5307 if test ${TARGET} = unknown; then
5308 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5309 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5312 if test "x$platform_android" = "xyes"; then
5313 case "x${TARGET}" in
5318 BTLS_PLATFORM=android-armv5
5322 BTLS_PLATFORM=android-armv6
5326 BTLS_PLATFORM=android-armv7
5335 BTLS_PLATFORM=android-v8a
5339 BTLS_PLATFORM=android-x86
5343 BTLS_PLATFORM=android-x64
5351 if test ${ACCESS_UNALIGNED} = no; then
5352 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5355 if test x$host_darwin = xyes; then
5356 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5358 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5359 [AC_MSG_RESULT([no])],
5361 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5363 RANLIB="$RANLIB -no_warning_for_no_symbols"
5364 AC_MSG_RESULT([yes])
5371 # Pass CPPFLAGS to libgc configure
5372 # We should use a separate variable for this to avoid passing useless and
5373 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5374 # This should be executed late so we pick up the final version of CPPFLAGS
5375 # The problem with this approach, is that during a reconfigure, the main
5376 # configure scripts gets invoked with these arguments, so we use separate
5377 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5378 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5379 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5380 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5382 # Don't pass -finstrument-for-thread-suspension in,
5383 # if these are instrumented it will be very bad news
5384 # (infinite recursion, undefined parking behavior, etc)
5385 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5386 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\""
5387 if test "x$support_boehm" = "xyes"; then
5388 AC_CONFIG_SUBDIRS(libgc)
5394 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5395 if test x$with_malloc_mempools = xyes; then
5397 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5402 DISABLE_MCS_DOCS=default
5403 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5404 if test x$with_mcs_docs != xyes; then
5405 DISABLE_MCS_DOCS=yes
5408 if test -n "$INSTALL_4_x_TRUE"; then :
5409 DISABLE_MCS_DOCS=yes
5411 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5412 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5415 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)],[
5416 if test x$with_lazy_gc_thread_creation != xno ; then
5417 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5419 ], [with_lazy_gc_thread_creation=no])
5421 dnl *****************************
5422 dnl *** Thread suspend policy ***
5423 dnl *****************************
5425 dnl Set a default hybrid or cooperative suspend on some platforms
5427 dnl Coop default is set by the bitcode preset.
5429 dnl If coop isn't on by default, maybe hybrid should be?
5430 if test x$enable_cooperative_suspend_default != xyes; then
5433 dnl Some host/target confusion, there's no host_osx (and
5434 dnl host_darwin would be true on iOS not just macOS).
5435 if test x$target_osx = xyes; then
5436 enable_hybrid_suspend_default=yes
5437 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5438 enable_hybrid_suspend_default=yes
5444 dnl Now check if there were flags overriding the defaults
5446 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])
5447 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5449 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5450 enable_cooperative_suspend=$with_cooperative_gc
5453 if test x$enable_cooperative_suspend = xdefault; then
5454 enable_cooperative_suspend=$enable_cooperative_suspend_default
5457 if test x$enable_cooperative_suspend != xno; then
5458 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5461 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5463 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])
5465 if test x$enable_hybrid_suspend = xdefault; then
5466 enable_hybrid_suspend=$enable_hybrid_suspend_default
5469 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5470 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5473 if test x$enable_hybrid_suspend != xno ; then
5474 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5477 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5479 dnl End of thread suspend policy
5481 dnl ***************************
5482 dnl *** feature experiments ***
5483 dnl ***************************
5485 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5486 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null],[
5488 if test x$enable_experiment != x ; then
5489 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5491 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5492 eval "mono_experiment_test_enable_$feature='yes'"
5495 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5496 eval "mono_experiment_test_enable_null='yes'"
5500 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5501 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5505 dnl **********************
5506 dnl *** checked builds ***
5507 dnl **********************
5509 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],[
5511 if test x$enable_checked_build != x ; then
5512 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5514 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5515 eval "mono_checked_build_test_enable_$feature='yes'"
5518 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5519 eval "mono_checked_build_test_enable_gc='yes'"
5520 eval "mono_checked_build_test_enable_metadata='yes'"
5521 eval "mono_checked_build_test_enable_thread='yes'"
5522 eval "mono_checked_build_test_enable_private_types='yes'"
5523 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5526 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5527 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5530 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5531 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5534 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5535 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5538 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5539 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5542 if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5544 with_overridable_allocators=yes
5545 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5547 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5551 dnl End of checked builds
5553 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5555 AC_CHECK_HEADER([malloc.h],
5556 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5557 [Define to 1 if you have /usr/include/malloc.h.])],,)
5559 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5560 # instead of libmono-static.a
5561 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5562 LIBMONO_LA=libmini-static.la
5564 if test x$buildsgen = xyes; then
5565 LIBMONO_LA=libmonosgen-$API_VER.la
5567 LIBMONO_LA=libmonoboehm-$API_VER.la
5570 AC_SUBST(LIBMONO_LA)
5576 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5577 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5578 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5579 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5580 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5581 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])
5583 if test "x$with_btls_android_api" = "x" ; then
5584 case "$BTLS_PLATFORM" in
5586 with_btls_android_api=16" ;;
5588 with_btls_android_api=16" ;;
5590 with_btls_android_api=16 ;;
5592 with_btls_android_api=21 ;;
5594 with_btls_android_api=16 ;;
5596 with_btls_android_api=21 ;;
5600 if test "x$enable_btls" = "xno"; then
5604 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5607 if test "x$enable_btls" = "xyes"; then
5608 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5609 if test "x$CMAKE" = "xno"; then
5610 AC_MSG_ERROR("cmake not found")
5613 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5620 if test "x$host_win32" = "xyes"; then
5621 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5624 case "$BTLS_PLATFORM" in
5630 btls_cflags="$btls_cflags -arch i386"
5633 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5634 if test "x$HAVE_YASM" != "xyes"; then
5635 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5644 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5645 if test "x$HAVE_YASM" != "xyes"; then
5646 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5653 btls_cflags="-DOPENSSL_NO_ASM=1"
5657 btls_cflags="-DOPENSSL_NO_ASM=1"
5661 btls_cflags="-march=armv8-a+crypto"
5670 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5671 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5675 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5678 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5681 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5684 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5687 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5690 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5699 AC_MSG_ERROR(Invalid BTLS platform)
5702 if test "x$platform_android" = "xyes"; then
5703 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5704 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5707 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5708 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5712 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5713 if test "x$with_btls_android_ndk" != "x"; then
5714 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5716 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5720 if test "x$btls_arch" != "x"; then
5721 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5724 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5726 AC_SUBST(BTLS_CFLAGS)
5727 AC_SUBST(BTLS_PLATFORM)
5728 AC_SUBST(BTLS_CMAKE_ARGS)
5730 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5735 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5737 if test x$DISABLE_MCS_DOCS = xyes; then
5744 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5745 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5746 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5748 libmono_ldflags="$libmono_ldflags $LIBS"
5750 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5751 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5752 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5753 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5754 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5755 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5756 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5757 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5758 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5759 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5760 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
5761 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5762 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5763 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5764 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5765 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5766 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5767 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5768 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5769 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5770 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5771 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5772 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5773 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5775 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5785 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5786 AC_SUBST(arch_target)
5788 #This must always be defined when building the runtime
5789 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5791 mono_build_root=`pwd`
5792 AC_SUBST(mono_build_root)
5794 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5795 if test x$host_win32 = xno; then
5796 if test x$enable_msvc = xyes; then
5797 echo "Error, --enable-msvc only supported for Windows builds."
5801 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5803 if test "x$enable_msvc" = "xyes"; then
5804 if test "x$support_boehm" = "xyes"; then
5805 echo "Error, Boehm GC is not supported when using --enable-msvc."
5808 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5809 if test "x$host_cpu" = "xi686"; then
5810 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5811 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5812 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5813 mono_runtime_wrapper=$mono_runtime
5815 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5816 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5817 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5818 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
5820 AC_SUBST(mono_msvc_build_dir)
5821 AC_SUBST(mono_msvc_build_lib_dir)
5822 AC_SUBST(mono_msvc_build_bin_dir)
5824 mono_runtime=mono/mini/mono
5825 mono_runtime_wrapper=$mono_runtime
5828 AC_SUBST(mono_runtime)
5829 AC_SUBST(mono_runtime_wrapper)
5831 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/csc.exe
5832 VBCS_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.1.0/VBCSCompiler.exe
5834 if test $csc_compiler = mcs; then
5835 CSC=$mcs_topdir/class/lib/build/mcs.exe
5840 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5842 mono_cfg_root=$mono_build_root/runtime
5843 if test x$host_win32 = xyes; then
5844 if test "x$cross_compiling" = "xno"; then
5845 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5846 CSC=`cygpath -m -a $CSC`
5847 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5848 VBCS_LOCATION=`cygpath -m -a $VBCS_LOCATION`
5850 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5853 mono_cfg_dir=$mono_cfg_root/etc
5856 if test "x$platform_android" = "xyes"; then
5860 AC_SUBST(mono_cfg_dir)
5864 AC_CONFIG_FILES([po/mcs/Makefile.in])
5866 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5867 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5868 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5870 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5873 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5875 *) reldir=$depth/$srcdir ;;
5877 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5878 cd runtime/etc/mono/1.0
5879 rm -f machine.config
5880 $LN_S $reldir/data/net_1_1/machine.config machine.config
5884 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5887 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5889 *) reldir=$depth/$srcdir ;;
5891 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5892 cd runtime/etc/mono/2.0
5893 rm -f machine.config
5894 $LN_S $reldir/data/net_2_0/machine.config machine.config
5898 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5901 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5903 *) reldir=$depth/$srcdir ;;
5905 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5906 cd runtime/etc/mono/2.0
5908 $LN_S $reldir/data/net_2_0/web.config web.config
5912 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5915 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5917 *) reldir=$depth/$srcdir ;;
5919 $ac_aux_dir/install-sh -d runtime/etc/mono/
5920 cd runtime/etc/mono/
5922 $LN_S $reldir/data/browscap.ini browscap.ini
5926 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5927 [ depth=../../../../..
5929 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5931 *) reldir=$depth/$srcdir ;;
5933 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5934 cd runtime/etc/mono/2.0/Browsers
5935 rm -f Compat.browser
5936 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5940 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5941 [ depth=../../../../..
5943 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5945 *) reldir=$depth/$srcdir ;;
5947 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5948 cd runtime/etc/mono/4.0/Browsers
5949 rm -f Compat.browser
5950 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5954 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5955 [ depth=../../../../..
5957 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5959 *) reldir=$depth/$srcdir ;;
5961 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5962 cd runtime/etc/mono/4.5/Browsers
5963 rm -f Compat.browser
5964 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5968 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5971 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5973 *) reldir=$depth/$srcdir ;;
5975 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5976 cd runtime/etc/mono/4.0
5977 rm -f machine.config
5978 $LN_S $reldir/data/net_4_0/machine.config machine.config
5982 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5985 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5987 *) reldir=$depth/$srcdir ;;
5989 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5990 cd runtime/etc/mono/4.0
5992 $LN_S $reldir/data/net_4_0/web.config web.config
5996 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5999 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6001 *) reldir=$depth/$srcdir ;;
6003 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6004 cd runtime/etc/mono/4.5
6005 rm -f machine.config
6006 $LN_S $reldir/data/net_4_5/machine.config machine.config
6010 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
6013 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6015 *) reldir=$depth/$srcdir ;;
6017 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6018 cd runtime/etc/mono/4.5
6020 $LN_S $reldir/data/net_4_5/web.config web.config
6024 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])
6025 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])
6026 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
6029 # Mono.Native Support
6030 # -------------------
6031 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
6032 # It is built as a stand-alone shared library and not bundled with the runtime because we
6033 # may need to build two different versions of it.
6035 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
6036 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
6038 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
6039 # implementation accordingly. We build a single `libmono-native` shared library.
6041 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
6043 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
6044 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
6045 # depending on platform.
6047 # We build two versions of the shared library:
6048 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
6049 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
6051 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
6052 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
6053 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
6055 # This can be called by automated tests both to ensure that the library has been correctly installed and also
6056 # to verify that it's the correct version of it.
6059 AC_MSG_CHECKING([Mono.Native support])
6060 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
6061 if test x$disable_mono_native = xyes; then
6063 elif test x$target_osx = xyes; then
6065 MONO_NATIVE_CXX=$CXX
6066 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6067 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6068 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6069 MONO_NATIVE_CFLAGS=$CFLAGS
6070 MONO_NATIVE_LDFLAGS=$LDFLAGS
6073 MONO_NATIVE_PLATFORM=macos
6074 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
6076 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
6077 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6079 if test x$mono_native_compat = xyes; then
6080 mono_native_compat=yes
6081 mono_native_text="Mac OSX (compat + unified v10.12)"
6082 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6083 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6084 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6085 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6086 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6088 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6089 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6090 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6091 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6092 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6093 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6095 mono_native_compat=no
6096 mono_native_text="Mac OSX"
6098 elif test x$mono_native_platform_ios = xyes; then
6099 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6101 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6102 if test x$mono_native_ios_sim = xyes; then
6103 mono_native_ios_target=ios-simulator
6104 mono_native_text="iOS Simulator"
6105 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6107 mono_native_ios_target=iphoneos
6108 mono_native_text="iOS Device"
6109 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6111 mono_native_unified_version="10.0"
6112 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6114 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6115 if test x$mono_native_ios_sim = xyes; then
6116 mono_native_ios_target=tvos-simulator
6117 mono_native_text="AppleTV Simulator"
6118 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6120 mono_native_ios_target=tvos
6121 mono_native_text="AppleTV Device"
6122 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6124 mono_native_unified_version="10.0"
6125 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6127 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6128 if test x$mono_native_ios_sim = xyes; then
6129 mono_native_ios_target=watchos-simulator
6130 mono_native_text="Apple Watch Simulator"
6131 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6133 mono_native_ios_target=watchos
6134 mono_native_text="Apple Watch Device"
6135 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6137 mono_native_unified_version="5.0"
6138 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6140 AC_MSG_ERROR([Unknown iOS Target])
6145 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6147 if test x$with_bitcode = xyes; then
6148 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6149 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6151 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6154 if test x$enable_gss = xyes; then
6155 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6159 MONO_NATIVE_CXX=$CXX
6160 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6161 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6162 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6163 MONO_NATIVE_CFLAGS=$CFLAGS
6164 MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6166 if test x$mono_native_compat = xyes; then
6167 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6168 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6169 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6170 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6171 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6172 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6174 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6175 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6176 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6177 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6178 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6179 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"
6183 MONO_NATIVE_PLATFORM=ios
6184 elif test x$host_linux = xyes; then
6185 mono_native_text="Linux"
6187 MONO_NATIVE_CXX=$CXX
6188 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6189 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6190 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6191 MONO_NATIVE_CFLAGS=$CFLAGS
6192 MONO_NATIVE_LDFLAGS=$LDFLAGS
6195 mono_native_compat=no
6196 MONO_NATIVE_PLATFORM=linux
6198 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6199 elif test x$target_wasm = xyes; then
6200 mono_native_text="wasm"
6202 MONO_NATIVE_CXX=$CXX
6203 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6204 # The system.native code uses _WASM_ to check for wasm
6205 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6206 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6207 MONO_NATIVE_CFLAGS=$CFLAGS
6208 MONO_NATIVE_LDFLAGS=$LDFLAGS
6211 mono_native_compat=no
6212 MONO_NATIVE_PLATFORM=linux
6214 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6215 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6216 mono_native_text="AIX"
6218 MONO_NATIVE_CXX=$CXX
6219 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6220 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6221 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6222 MONO_NATIVE_CFLAGS=$CFLAGS
6223 dnl flock in AIX exists in libbsd (not the same as freedesktop.org
6224 dnl libbsd) which Mono.Native needs.
6225 dnl Because of the way that the library is built by default, unresolved
6226 dnl references are kept and resolved at runtime. Often, the dependency
6227 dnl chain means libbsd is loaded anyways, but not necessarily. It's
6228 dnl better to explicitly link it, even though it has it shadows libc's
6229 dnl ioctl with its own. (As for the other unresolved imports, those
6230 dnl should be provided by the Mono runtime loaded.)
6231 MONO_NATIVE_LDFLAGS="$LDFLAGS -lbsd"
6234 mono_native_compat=no
6235 MONO_NATIVE_PLATFORM=aix
6237 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6238 elif case $host_os in freebsd*) true;; *) false;; esac; then
6239 mono_native_text="FreeBSD"
6241 MONO_NATIVE_CXX=$CXX
6242 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6243 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6244 MONO_NATIVE_CFLAGS=$CFLAGS
6245 MONO_NATIVE_LDFLAGS=$LDFLAGS
6248 mono_native_compat=no
6249 MONO_NATIVE_PLATFORM=freebsd
6250 AC_MSG_CHECKING([Mono.Native support])
6251 AC_MSG_RESULT(freebsd)
6253 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_FREEBSD"
6254 elif test x$platform_android = xyes; then
6255 mono_native_text="Android"
6257 MONO_NATIVE_CXX=$CXX
6258 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6259 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6260 MONO_NATIVE_CFLAGS=$CFLAGS
6261 MONO_NATIVE_LDFLAGS=$LDFLAGS
6262 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6265 mono_native_compat=no
6266 MONO_NATIVE_PLATFORM=android
6268 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6271 mono_native_text="no"
6274 AC_MSG_RESULT($mono_native_text)
6276 if test x$mono_native_compat = xyes; then
6277 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6279 MONO_NATIVE_LIBRARY_NAME=libmono-native
6282 AC_SUBST(MONO_NATIVE_PLATFORM)
6283 AC_SUBST(MONO_NATIVE_CC)
6284 AC_SUBST(MONO_NATIVE_CXX)
6285 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6286 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6287 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6288 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6289 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6290 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6291 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6292 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6293 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6294 AC_SUBST(MONO_NATIVE_CFLAGS)
6295 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6296 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6297 AC_SUBST(MONO_NATIVE_LDFLAGS)
6298 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6299 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6300 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6301 AC_SUBST(MONO_NATIVE_LIBADD)
6303 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6304 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6305 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6306 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6307 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6308 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6309 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6310 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_FREEBSD, test x$MONO_NATIVE_PLATFORM = xfreebsd)
6312 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6313 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6314 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6315 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6316 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6318 ### C++ Linker selection
6320 # We have to lie to autotools, sometimes.
6322 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6323 # otherwise to CC. We want C linking even if we're compiling with C++ enabled
6324 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6325 # except if we're linking with LLVM which relies on it.
6327 # Explanation of the hack:
6330 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6331 # automake chooses the linker that it used to compile a target based on the
6332 # _SOURCES for that target. If the target is comprised of only C code, it
6333 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6334 # linker arguments and a -o). If the target _SOURCES include at least one C++ file,
6335 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6337 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6338 # or libc++) linked in - even when Mono is written in C++, we take care not to
6339 # require the runtime library. As a result, we don't want g++ or clang++ to do
6340 # the linking. On the other hand if LLVM is enabled, then we _must_ use the
6341 # C++ linker - LLVM doesn't have the same restrictions.
6343 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6344 # mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6345 # automake's autodetection and lets us use the linker that we want.
6347 if test "x$enable_llvm_runtime" = "xyes"; then
6348 AC_SUBST(MONO_CXXLD, [$CXX])
6350 AC_SUBST(MONO_CXXLD, [$CC])
6353 ### Set -Werror options
6355 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6357 if test x"$GCC" = xyes; then
6359 if test "x$with_jemalloc" != "xyes"; then
6361 # incompatible-pointer-types requires gcc circa 5.x
6364 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6365 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6369 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6375 CFLAGS="$CFLAGS -Werror=return-type"
6378 # Implicit function declarations are not 64 bit safe
6379 # Do this late, since this causes lots of configure tests to fail
6380 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6381 # jay has a lot of implicit declarations
6382 JAY_CFLAGS="-Wno-implicit-function-declaration"
6389 # Update all submodules recursively to ensure everything is checked out
6390 (cd $srcdir && scripts/update_submodules.sh)
6395 acceptance-tests/Makefile
6397 scripts/mono-find-provides
6398 scripts/mono-find-requires
6402 mono/native/Makefile
6404 mono/utils/jemalloc/Makefile
6405 mono/metadata/Makefile
6409 mono/arch/x86/Makefile
6410 mono/arch/amd64/Makefile
6411 mono/arch/ppc/Makefile
6412 mono/arch/sparc/Makefile
6413 mono/arch/s390x/Makefile
6414 mono/arch/arm/Makefile
6415 mono/arch/arm64/Makefile
6416 mono/arch/mips/Makefile
6417 mono/arch/riscv/Makefile
6419 mono/native/platform-type.c
6420 mono/native/platform-type-compat.c
6421 mono/native/platform-type-unified.c
6423 mono/tests/assembly-load-reference/Makefile
6424 mono/tests/tests-config
6425 mono/tests/gc-descriptors/Makefile
6426 mono/tests/testing_gac/Makefile
6427 mono/tests/fullaot-mixed/Makefile
6428 mono/tests/llvmonly-mixed/Makefile
6429 mono/unit-tests/Makefile
6430 mono/benchmark/Makefile
6432 mono/profiler/Makefile
6434 mono/eglib/eglib-config.h
6435 mono/eglib/test/Makefile
6438 ikvm-native/Makefile
6443 data/net_2_0/Makefile
6444 data/net_4_0/Makefile
6445 data/net_4_5/Makefile
6446 data/net_2_0/Browsers/Makefile
6447 data/net_4_0/Browsers/Makefile
6448 data/net_4_5/Browsers/Makefile
6454 data/mono-options.pc
6455 data/mono-lineeditor.pc
6461 data/system.web.extensions_1.0.pc
6462 data/system.web.extensions.design_1.0.pc
6463 data/system.web.mvc.pc
6464 data/system.web.mvc2.pc
6465 data/system.web.mvc3.pc
6466 data/aspnetwebstack.pc
6472 tools/locale-builder/Makefile
6474 tools/pedump/Makefile
6480 if test x$host_win32 = xyes; then
6481 # Get rid of 'cyg' prefixes in library names
6482 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6483 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6484 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6485 # executable doesn't work...
6486 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6489 if test x$host_darwin = xyes; then
6490 # This doesn't seem to be required and it slows down parallel builds
6491 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6496 NONE) prefix=$ac_default_prefix ;;
6498 case $exec_prefix in
6499 NONE) exec_prefix='${prefix}' ;;
6503 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6504 # any existing config.make. This allows people to share the same source tree
6505 # with different build directories, one native and one cross
6507 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6509 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6511 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6512 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6513 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6514 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6515 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6516 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6517 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6518 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6519 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6522 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6523 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6526 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6529 [myver=$($AWK 'BEGIN {
6530 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6531 if(length(vsplit [1]) > 4) {
6532 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6534 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6537 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6538 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6540 if test x$host_darwin = xyes; then
6541 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6542 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6543 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6544 elif test x$host_win32 = xyes; then
6545 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6546 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6547 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6548 elif test x$host_linux = xyes; then
6549 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6550 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6551 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6553 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6554 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6555 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6558 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6559 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6562 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6563 enable_system_aot=yes
6566 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6567 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6570 if test x$DISABLE_MCS_DOCS = xyes; then
6571 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6574 if test x$has_extension_module != xno; then
6575 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6578 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6580 if test "x$test_bcl_opt" = "xyes"; then
6581 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6584 echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6585 echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6586 echo "VBCS_LOCATION?=$VBCS_LOCATION" >> $srcdir/$mcsdir/build/config.make
6588 if test $csc_compiler = mcs; then
6589 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6592 if test "x$AOT_BUILD_FLAGS" != "x" ; then
6593 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6594 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6595 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6598 if test "x$AOT_MODE" != "x" ; then
6599 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6602 if test "x$enable_btls" = "xyes"; then
6603 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6606 if test "x$mono_native" = "xyes"; then
6607 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6609 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6612 if test x$mono_native_compat = xyes; then
6613 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6615 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6618 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6619 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6620 if test x$enable_compiler_server = xyes; then
6621 echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
6623 echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
6625 echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
6631 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6633 btls_platform_string=
6634 if test x$enable_btls = xyes; then
6635 if test x$btls_android = xyes; then
6636 btls_platform_string=" (android:$BTLS_PLATFORM)"
6638 btls_platform_string=" ($BTLS_PLATFORM)"
6643 if test x$buildsgen = xyes; then
6644 if test x$enable_cooperative_suspend != xno; then
6645 thread_suspend_msg="Suspend: Cooperative"
6646 elif test x$enable_hybrid_suspend != xno; then
6647 thread_suspend_msg="Suspend: Hybrid"
6649 thread_suspend_msg="Suspend: Preemptive"
6655 C# Compiler: $csc_compiler
6663 SIGALTSTACK: $with_sigaltstack
6665 BigArrays: $enable_big_arrays
6666 DTrace: $enable_dtrace
6667 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6668 Spectre: $spectre_mitigation_status
6669 Mono.Native: $mono_native_text
6672 .NET 4.x: $with_profile4_x
6673 Xamarin.Android: $with_monodroid
6674 Xamarin.iOS: $with_monotouch
6675 Xamarin.WatchOS: $with_monotouch_watch
6676 Xamarin.TVOS: $with_monotouch_tv
6677 Xamarin.Mac: $with_xammac
6678 Windows AOT: $with_winaot
6680 Unreal: $with_unreal
6681 WebAssembly: $with_wasm
6682 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6683 JNI support: $jdk_headers_found
6684 libgdiplus: $libgdiplus_msg
6686 BTLS: $enable_btls$btls_platform_string
6687 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
6688 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6689 .NET Core: $with_core
6692 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6693 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)