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.
7 AC_INIT(mono, [6.13.0],
8 [https://github.com/mono/mono/issues/new])
10 AC_CONFIG_SRCDIR([Makefile.am])
11 AC_CONFIG_MACRO_DIR([m4])
16 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
17 # The extra brackets are to foil regex-based scans.
18 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
20 AM_INIT_AUTOMAKE([1.9 dist-xz tar-ustar no-dist-gzip foreign subdir-objects]
21 m4_esyscmd([case `automake --version | head -n 1` in # parallel-tests is default in automake 1.13+, we need to explicitly enable it
22 *1.11*|*1.12*) echo parallel-tests;; # for 1.11 and 1.12 but not below as those versions don't recognize the flag
23 esac])) # TODO: remove this hack once we require automake 1.11+
25 AC_CONFIG_HEADERS([config.h])
27 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test]))
28 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test-bundle]))
35 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
37 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
38 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
39 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
42 # This is the version of the corlib-runtime interface. When
43 # making changes to this interface (by changing the layout
44 # of classes the runtime knows about, changing icall signature or
45 # semantics etc), change this variable.
47 # This must be unique relative to corlib interface and semantics.
49 # If you change corlib such that a runtime change is required, or
50 # vice versa, change this string. Examples include removing icalls,
51 # adding icalls, changing icall signatures, and changing type layouts
52 # that both sides know.
54 # It is an arbitrary string and should be parsed as such.
55 # A guid works and is encouraged.
57 # Generate it with uuidgen. For example:
58 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
60 # There is no ordering of corlib versions, no old or new,
61 # an exact match is required between corlib and runtime.
63 # This line is parsed by tools besides autoconf, such as msvc/mono.winconfig.targets.
64 # It should remain in the format they expect.
66 MONO_CORLIB_VERSION=1A5E0066-58DC-428A-B21C-0AD6CDAE2789
69 # Put a quoted #define in config.h.
70 # Substitute @MONO_CORLIB_VERSION@ unquoted.
72 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
73 AC_SUBST(MONO_CORLIB_VERSION)
77 echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
81 # In case of cygwin, override LN_S, irrespective of what it determines.
82 # The build uses cygwin, but the actual runtime doesn't.
84 *cygwin* ) LN_S='cp -p';;
92 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
93 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
94 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
95 CFLAGS_FOR_LIBGC=$CFLAGS
96 CPPFLAGS_FOR_BTLS=$CPPFLAGS
97 CFLAGS_FOR_BTLS=$CFLAGS
99 # libgc uses some deprecated APIs
100 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
103 # These are the flags that need to be stored in the mono.pc file for
104 # compiling code that will embed Mono
108 AC_SUBST(libmono_cflags)
109 AC_SUBST(libmono_ldflags)
111 # Variable to have relocatable .pc files (lib, or lib64)
112 # realpath isn't always available, and requires that all but the tip of the provided
113 # path exists. Fall back to the old behaviour, but realpath allows depth >1
114 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
115 # too deep for the old method to work
116 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
117 AC_SUBST(reloc_libdir)
119 # Set to yes if Unix sockets cannot be created in an anonymous namespace
122 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
123 extra_runtime_ldflags=""
125 # Thread configuration inspired by sleepycat's db
126 AC_MSG_CHECKING([host platform characteristics])
146 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
147 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
148 libgc_threads=pthreads
153 CORETARGETS="-p:TargetsUnix=true -p:TargetsOSX=true"
156 *-mingw*|*-*-cygwin*)
157 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
158 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
161 if test "x$cross_compiling" = "xno"; then
162 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
166 if test "x$host" = "x$target"; then
172 CORETARGETS="-p:TargetsWindows=true"
174 # Boehm not supported on 64-bit Windows.
176 x86_64-*-* | amd64-*-*)
183 # Windows 7 or later is required
184 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
185 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
186 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi -static-libgcc"
187 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
188 libmono_cflags="-mms-bitfields -mwindows"
189 libmono_ldflags="-mms-bitfields -mwindows"
193 with_sgen_default_concurrent=yes
197 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
198 libmono_cflags="-D_REENTRANT"
199 LDFLAGS="$LDFLAGS -pthread"
200 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
201 libmono_ldflags="-pthread"
203 libgc_threads=pthreads
206 with_sgen_default_concurrent=yes
209 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
210 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
211 libmono_ldflags="-lpthread -pthread"
212 libgc_threads=pthreads
216 with_sgen_default_concurrent=yes
220 LDFLAGS="$LDFLAGS -lutil"
221 if test "x$PTHREAD_CFLAGS" = "x"; then
222 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
225 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
226 libmono_cflags="$PTHREAD_CFLAGS"
228 if test "x$PTHREAD_LIBS" = "x"; then
229 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
230 libmono_ldflags="-pthread"
232 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
233 libmono_ldflags="$PTHREAD_LIBS"
235 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
237 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
238 libgc_threads=pthreads
251 with_sgen_default_concurrent=yes
254 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
255 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
256 if test "x$disable_munmap" != "xyes"; then
257 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
259 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
260 LDFLAGS="$LDFLAGS -pthread"
262 AC_DEFINE(PTHREAD_POINTER_ID)
263 libgc_threads=pthreads
267 with_sgen_default_concurrent=yes
271 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
272 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
274 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
275 if test "x$disable_munmap" != "xyes"; then
276 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
278 libmono_cflags="-D_REENTRANT"
279 libgc_threads=pthreads
286 # Android doesn't support boehm, as it's missing <link.h>
290 # isinf(3) requires -lm
291 LDFLAGS="$LDFLAGS -lm"
293 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
294 # PAGE_SIZE; breaks mono/io-layer/collection.c
295 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
296 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
297 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
299 # FIXME? Only if __ANDROID_API__ < 24?
300 # FILE32API means "long", which is stuck at 32bits for 32bit ABI (64bits for 64bit ABI).
301 # ABI 24 introduces the "o" for "file offset" variations, which can be widened to 64bits for 32bit ABI (and still 64bits for 64bit).
302 # Android itself uses FILE32API, and mono should use system zlib on Android anyway.
303 ZLIB_CFLAGS="$ZLIB_CFLAGS -DUSE_FILE32API"
305 # to bypass the underscore linker check, can't work when cross-compiling
311 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
312 if test "x$disable_munmap" != "xyes"; then
313 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
315 libmono_cflags="-D_REENTRANT"
316 libgc_threads=pthreads
317 CORETARGETS="-p:TargetsUnix=true"
319 if test "x$cross_compiling" != "xno"; then
320 # to bypass the underscore linker check, not
321 # available during cross-compilation
326 AC_DEFINE(MUSL, 1, [musl libc])
353 # deal with this in the FPU detection section, since
354 # we cannot determine FPU from triplet and don't want
355 # to duplicate the logic
364 # https://bugzilla.novell.com/show_bug.cgi?id=504411
368 # https://bugzilla.novell.com/show_bug.cgi?id=504411
376 with_sgen_default_concurrent=yes
379 echo "nacl no longer supported."
383 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
384 # +ESdbgasm only valid on bundled cc on RISC
385 # silently ignored for ia64
386 if test $GCC != "yes"; then
387 CFLAGS="$CFLAGS +ESdbgasm"
388 # Arrange for run-time dereferencing of null
389 # pointers to produce a SIGSEGV signal.
390 LDFLAGS="$LDFLAGS -z"
392 CFLAGS="$CFLAGS +ESdbgasm"
393 LDFLAGS="$LDFLAGS -z"
394 libmono_cflags="-D_REENTRANT"
395 libmono_ldflags="-lpthread"
396 libgc_threads=pthreads
401 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS -D__EXTENSIONS__ -D_XPG4_2"
403 libmono_cflags="-D_REENTRANT"
404 libgc_threads=pthreads
407 enable_solaris_tar_check=yes
411 # Temporary workaround for Apple Silicon
412 # config.guess returns arm-apple-darwin20.0.0
413 if test $ac_cv_host = arm-apple-darwin20.0.0 -o $ac_cv_target = arm-apple-darwin20.0.0; then
414 echo "You are running on Apple Silicon, but using an old config.guess, invoke configure like this:"
415 echo "Run configure using ./configure --host=aarch64-apple-darwin20.0.0 --target=aarch64-apple-darwin20.0.0"
418 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
421 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
422 libmono_cflags="-D_THREAD_SAFE"
424 AC_DEFINE(PTHREAD_POINTER_ID)
425 AC_DEFINE(USE_MACH_SEMA, 1, [...])
426 CORETARGETS="-p:TargetsUnix=true -p:TargetsOSX=true"
427 libgc_threads=pthreads
429 if test "x$cross_compiling" = "xyes"; then
430 has_broken_apple_cpp=yes
432 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
433 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
434 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
436 dnl Snow Leopard and newer config.guess reports as this
438 BROKEN_DARWIN_FLAGS="-arch i386"
439 BROKEN_DARWIN_CPPFLAGS=""
440 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
441 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
442 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
443 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
444 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
445 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
446 with_sgen_default_concurrent=yes
451 with_sgen_default_concurrent=yes
469 dnl BSD_SOURCE is for getifaddrs
470 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
471 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
472 LIBS="$LIBS -lnetwork -ltextencoding"
474 AC_DEFINE(PTHREAD_POINTER_ID)
475 dnl Haiku does not support static TLS with __thread
477 libgc_threads=pthreads
482 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
483 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
494 AC_DEFINE(HOST_AIX,1,[Targeting the AIX and PASE platforms])
496 dnl IMPORTANT: For svr4 sonames on AIX, you should set
497 dnl `OBJECT_MODE=64` when configuring.
498 dnl libtool cannot generate functioning svr4 sonames on
499 dnl 64-bit without it.
500 dnl Unfortunately, everything is complicated by the fact that
501 dnl gcc doesn't respect this variable. (otherwise we could set
502 dnl it for build time for configure and make)
503 dnl On IBM i PASE using IBM's packages, GCC *does* respect this
504 dnl variable, and builds are 64-bit by default. svr4 sonames
505 dnl must still be specified when configuring on i, however.
506 dnl As such, because Mono doesn't support 32-bit AIX or PASE,
507 dnl set up a 64-bit build (assming GCC; XLC not supported)
508 dnl regardless of what variable is used.
511 if test "x$OBJECT_MODE" = "x64" && test "x$CC" = "x" && test "x$CXX" = "x"; then
512 dnl HACK: Set -maix64 at the GCC invocation
513 dnl level explicitly to work around the fact
514 dnl GCC in default maix32 mode explodes when
515 dnl binutils respects OBJECT_MODE.
516 dnl When that check occurs, flags are not
517 dnl passed to to the compiler, so GCC has no
518 dnl chance to change its mode.
519 dnl Otherwise, it may enter a state where it
520 dnl runs, but uses the libtool "compile"
521 dnl wrapper, which subtly breaks other things.
522 dnl This should propagate to all uses of CC.
523 dnl This is only set if not manually set.
529 dnl Not needed on i because it defaults to 64-bit and
530 dnl has a GCC smart enough to respect OBJECT_MODE.
532 dnl We still set this for *FLAGS, however, because we may not
533 dnl be setting OBJECT_MODE.
534 LDFLAGS="$LDFLAGS -maix64"
535 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -pthread -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
536 libmono_cflags="-pthread -D_THREAD_SAFE -D_REENTRANT"
537 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
538 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
539 dnl specifiy 64-bit mode for tools. (OBJECT_MODE is finicky with cmake.)
540 dnl XXX: We should stop the hardcoding madness
541 AR="/usr/bin/ar -X64"
542 NM="/usr/bin/nm -X64"
543 STRIP="/usr/bin/strip -X64"
544 RANLIB="/usr/bin/ranlib -X64"
545 dnl SGen is the future (changes to Boehm support code would be
546 dnl required if you wish to re-enable Boehm)
551 dnl Similar limitation to macOS about the first thread and the
552 dnl guard page, except sometimes the runtime hangs. Disable for
553 dnl now until cause can be determined or it seems OK enough.
555 dnl use pthread TLS, __thread has issues with the compiler flags we use
557 dnl ppc Linux is the same? test further
560 CORETARGETS="-p:TargetsUnix=true"
563 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
569 if test x$need_link_unlink = xyes; then
570 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
573 if test x$host_win32 = xyes; then
574 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
577 if test x$target_win32 = xyes; then
578 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
581 if test x$host_darwin = xyes; then
582 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
585 # Defined for all targets/platforms using classic Windows API support.
586 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
587 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
589 AC_SUBST(extra_runtime_ldflags)
590 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
591 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
592 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
593 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
594 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
595 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
596 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
597 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
598 AM_CONDITIONAL(HOST_WASM, test x$host_wasm = xyes)
599 AM_CONDITIONAL(HOST_AIX, test x$host_aix = xyes)
601 if test -z "$HOST_DARWIN_TRUE"; then :
602 PLATFORM_AOT_SUFFIX=.dylib
603 PLATFORM_AOT_PREFIX=lib
606 if test -z "$HOST_LINUX_TRUE"; then :
607 PLATFORM_AOT_SUFFIX=.so
608 PLATFORM_AOT_PREFIX=lib
611 if test -z "$HOST_WIN32_TRUE"; then :
612 PLATFORM_AOT_SUFFIX=.dll
616 AC_SUBST(PLATFORM_AOT_SUFFIX)
617 AC_SUBST(PLATFORM_AOT_PREFIX)
619 if test -z "$HOST_WASM_TRUE"; then :
620 AC_DEFINE(HAVE_UTIME)
621 AC_DEFINE(HAVE_UTIMES)
624 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
626 AC_CHECK_TOOL(CC, gcc, gcc)
628 AC_CHECK_TOOL(CXX, g++, g++)
630 AM_PATH_PYTHON([3.2])
635 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
637 # Set ASFLAGS if not already set.
638 : ${CCASFLAGS='$(CFLAGS)'}
642 if test "x$CXX" = "xno"; then
643 AC_MSG_ERROR([No c++ compiler found. You need to install a c++ compiler])
646 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
647 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
648 if test "x$CXX" = "xg++"; then
649 if test "x$GXX" != "xyes"; then
650 # automake/libtool is so broken, it requires g++ even if the c++ sources
651 # are inside automake conditionals
652 AC_MSG_ERROR([You need to install g++])
656 dnl may require a specific autoconf version
657 dnl AC_PROG_CC_FOR_BUILD
658 dnl CC_FOR_BUILD not automatically detected
660 CFLAGS_FOR_BUILD=$CFLAGS
662 if test "x$cross_compiling" = "xyes"; then
667 AC_SUBST(CC_FOR_BUILD)
668 AC_SUBST(CFLAGS_FOR_BUILD)
670 AC_SUBST(BUILD_EXEEXT)
672 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
673 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
678 # This causes monodis to not link correctly
679 #AC_DISABLE_FAST_INSTALL
681 #lookup makedev() header
685 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
688 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
689 AC_SUBST(export_ldflags)
691 # Test whenever ld supports -version-script
695 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 gnu/lib-names.h)
696 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)
698 # zlib/configure checks for unistd.h existence and defines HAVE_UNISTD_H on the compiler
699 # command line (not config.h) if it is present.
700 AC_CHECK_HEADER(unistd.h,
702 ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_UNISTD_H"],
705 AC_SUBST(HAVE_UNISTD_H)
707 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
708 [], [], [#include <stddef.h>
709 #include <sys/socket.h>
710 #include <linux/socket.h>])
712 AC_CHECK_HEADERS(sys/user.h, [], [],
714 #ifdef HAVE_SYS_PARAM_H
715 # include <sys/param.h>
719 AC_CHECK_HEADERS(linux/serial.h)
722 # Use bundled zlib on Windows to be sure it is static.
725 zlib_msg="bundled zlib"
727 # Use bundled zlib on RISC-V for now to make cross-compiling easier.
730 zlib_msg="bundled zlib"
733 AC_CHECK_HEADER(zlib.h, [have_sys_zlib=yes], [have_sys_zlib=no])
734 if test x$have_sys_zlib = xyes; then
735 AC_TRY_COMPILE([#include <zlib.h>], [
736 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
738 #error No good zlib found
741 AC_MSG_RESULT(Using system zlib)
742 zlib_msg="system zlib"
745 AC_MSG_RESULT(zlib too old, using embedded zlib)
747 zlib_msg="bundled zlib"
750 AC_MSG_RESULT(zlib not found, using embedded zlib)
752 zlib_msg="bundled zlib"
757 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=])
758 if test "x$STATIC_ZLIB_PATH" != "x"; then
761 zlib_msg="static zlib from $STATIC_ZLIB_PATH"
762 AC_SUBST(STATIC_ZLIB_PATH)
765 AM_CONDITIONAL(HAVE_STATIC_ZLIB, test x$have_static_zlib = xyes)
766 AM_CONDITIONAL(HAVE_SYS_ZLIB, test x$have_sys_zlib = xyes)
767 if test x$have_static_zlib = xyes; then
768 AC_DEFINE(HAVE_STATIC_ZLIB, 1, [Use static zlib])
770 if test x$have_sys_zlib = xyes; then
771 AC_DEFINE(HAVE_SYS_ZLIB, 1, [Use OS-provided zlib])
773 # for mono/metadata/debug-symfile.c
774 AC_CHECK_HEADERS(elf.h)
776 # for perf jit dump support
777 AC_CHECK_HEADERS(sys/mman.h)
778 if test "x$host_linux" = "xyes" -a x$ac_cv_header_sys_mman_h = xyes -a x$ac_cv_header_elf_h = xyes -a x$ac_cv_header_sys_syscall_h = xyes; then
779 AC_DEFINE(ENABLE_JIT_DUMP, 1, [Enable jit dump support on Linux])
783 AC_CHECK_HEADERS(poll.h)
784 AC_CHECK_HEADERS(sys/poll.h)
785 AC_CHECK_HEADERS(sys/wait.h)
786 AC_CHECK_HEADERS(grp.h)
787 AC_CHECK_HEADERS(syslog.h)
788 AC_CHECK_FUNCS(vsyslog)
791 AC_CHECK_HEADERS(wchar.h)
793 # for Linux statfs support
794 AC_CHECK_HEADERS(linux/magic.h)
796 # For Android NDK unified headers
797 if test x$platform_android = xyes; then
798 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
799 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
800 AC_CHECK_HEADERS(android/ndk-version.h)
802 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
803 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
804 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
805 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
806 # doesn't contain the required definitions (NDK 14)
807 if test x$have_android_signal_inlines = xyes; then
808 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
810 AC_LANG_PROGRAM([#include <signal.h>
811 #include <android/legacy_signal_inlines.h>],[
813 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
817 android_sigrtminmax_work=yes
820 android_sigrtminmax_work=no
824 if test x$android_sigrtminmax_work = xno; then
825 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
829 # Attempt to detect whether we're using Android NDK unified headers
830 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
831 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
833 android_unified_headers=no
834 if test x$have_android_api_level = xyes; then
835 if test x$have_android_versioning = xyes; then
836 AC_MSG_CHECKING([whether using Android NDK unified headers])
838 # Both macros are defined only in the NDK unified headers
841 #include <android/api-level.h>
842 #include <android/versioning.h>
844 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
846 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
850 android_unified_headers=yes
853 android_unified_headers=no
859 if test x$android_unified_headers = xyes; then
860 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
864 # not 64 bit clean in cross-compile
865 AC_CHECK_SIZEOF(void *)
866 AC_CHECK_SIZEOF(long)
869 AC_CHECK_SIZEOF(long long)
871 AC_CACHE_CHECK([for clang],
884 AC_ARG_ENABLE(visibility-hidden,
885 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
886 disable_visibility_hidden=yes, disable_visibility_hidden=no)
889 if test x"$GCC" = xyes; then
890 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
891 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
893 # We require C99 with some GNU extensions, e.g. `linux` macro
894 CFLAGS="$CFLAGS -std=gnu99"
896 # The runtime code does not respect ANSI C strict aliasing rules
897 CFLAGS="$CFLAGS -fno-strict-aliasing"
899 # We rely on signed overflow to behave
900 CFLAGS="$CFLAGS -fwrapv"
902 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
903 if test x"$disable_visibility_hidden" = xno; then
904 # Don't export any symbols by default
905 SHARED_CFLAGS="-fvisibility=hidden"
906 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
910 # Check for the normal version, since gcc ignores unknown -Wno options
911 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
912 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
916 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
922 if test "x$mono_cv_clang" = "xyes"; then
923 # https://bugzilla.samba.org/show_bug.cgi?id=8118
924 WARN="$WARN -Qunused-arguments"
925 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
926 # We rely on zero length arrays in structs
927 WARN="$WARN -Wno-zero-length-array"
930 # The Sun Forte compiler complains about inline functions that access static variables
931 # so disable all inlining.
934 CFLAGS="$CFLAGS -Dinline="
938 CFLAGS="$WARN $CFLAGS -g"
939 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
940 CPPFLAGS="$WARN $CPPFLAGS -g"
942 # Where's the 'mcs' source tree?
943 if test -d $srcdir/mcs; then
949 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
950 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
951 mcsdir=$with_mcs_path
955 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
957 AC_ARG_WITH(core, [ --with-core=only controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
958 if test x$with_core = xonly; then
959 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
960 with_runtime_preset=netcore
962 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
965 # A sanity check to catch cases where the package was unpacked
966 # with an ancient tar program (Solaris)
968 AC_ARG_ENABLE(solaris-tar-check,
969 [ --disable-solaris-tar-check disable solaris tar check],
970 do_solaris_tar_check=no, do_solaris_tar_check=yes)
972 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
973 AC_MSG_CHECKING(integrity of package)
974 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
978 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"
979 AC_MSG_ERROR([$errorm])
983 if test "x$with_mcs_path" != "x"; then
984 mcs_topdir=$(cd "$mcsdir" && pwd)
985 mcs_topdir_from_srcdir=$mcs_topdir
987 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
988 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
991 # Convert mcs_topdir* paths to Windows syntax.
992 if test x$cross_compiling$host_win32 = xnoyes; then
993 mcs_topdir=$(cygpath -m $mcs_topdir)
994 case $mcs_topdir_from_srcdir in
996 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
1001 AC_SUBST([mcs_topdir])
1002 AC_SUBST([mcs_topdir_from_srcdir])
1004 # gettext: prepare the translation directories.
1005 # we do not configure the full gettext, as we consume it dynamically from C#
1008 if test "x$USE_NLS" = "xyes"; then
1009 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
1011 if test "x$HAVE_MSGFMT" = "xno"; then
1012 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
1016 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
1019 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
1020 if test x$with_crosspkgdir = "x"; then
1021 if test -s $PKG_CONFIG_PATH; then
1022 pkg_config_path=$PKG_CONFIG_PATH
1025 pkg_config_path=$with_crosspkgdir
1026 PKG_CONFIG_PATH=$pkg_config_path
1027 export PKG_CONFIG_PATH
1031 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
1032 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
1033 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
1035 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
1036 if test x$werror_flag = xyes; then
1037 WERROR_CFLAGS="-Werror"
1039 AC_SUBST([WERROR_CFLAGS])
1040 AC_SUBST([SHARED_CFLAGS])
1042 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
1044 AC_SUBST(GLIB_CFLAGS)
1046 # Enable support for fast thread-local storage
1047 # Some systems have broken support, so we allow to disable it.
1048 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
1050 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
1051 # This does not work on some platforms (bug #55253)
1052 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
1054 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
1055 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
1056 # Same as --with-shared_mono=no
1057 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
1059 if test "x$enable_static" = "xno"; then
1063 if test "x$enable_shared" = "xno"; then
1067 if test "x$enable_libraries" = "xno"; then
1071 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
1073 if test "x$host_win32" = "xyes"; then
1074 # Boehm GC requires the runtime to be in its own dll
1078 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
1079 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
1080 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
1081 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
1083 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
1084 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
1085 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
1087 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
1088 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
1089 AC_TRY_COMPILE([], [
1092 # Pass it to libgc as well
1093 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
1100 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
1102 if test x$enable_small_config = xyes; then
1103 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
1104 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
1107 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)
1109 DISABLED_FEATURES=none
1110 csc_compiler=default
1112 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
1113 AC_MSG_CHECKING([CSharp compiler to use])
1114 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
1115 if test x$withval = xmcs; then
1117 elif test x$withval = xroslyn; then
1119 elif test x$withval = xdefault; then
1122 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
1124 ],[csc_compiler=default])
1126 if test $csc_compiler = default; then
1127 if test $endian = big; then
1129 s390x*) csc_compiler=roslyn ;;
1132 elif test $endian = little; then
1134 powerpc*) csc_compiler=mcs ;;
1135 *) csc_compiler=roslyn ;;
1141 AC_MSG_RESULT($csc_compiler)
1143 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
1144 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
1145 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])
1148 if test x$target_win32 = xyes; then
1150 with_jemalloc_assert=no
1151 with_jemalloc_always=no
1154 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
1155 if test "x$with_jemalloc_assert" = "xyes"; then
1156 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
1157 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
1158 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
1161 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
1162 if test "x$with_jemalloc_always" = "xyes"; then
1164 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
1165 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
1166 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
1169 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
1170 if test "x$with_jemalloc" = "xyes"; then
1171 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
1172 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
1173 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
1175 if test "x$target_mach" = "xyes"; then
1176 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
1179 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
1180 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
1182 AC_SUBST(JEMALLOC_CFLAGS)
1183 AC_SUBST(JEMALLOC_CPPFLAGS)
1184 AC_SUBST(JEMALLOC_LDFLAGS)
1185 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1189 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1190 # MERP - The MS telemetry profile. Not for general use.
1191 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1193 # 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.
1195 #--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.
1196 #--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.
1197 #--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.
1198 #--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.
1200 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])
1201 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])
1202 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1204 if test "x$with_crash_privacy" = "xyes"; then
1205 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1208 if test "x$with_structured_crashes" = "xno"; then
1209 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1213 *-mingw*|*-*-cygwin*)
1218 if test "x$crash_reporting" != "xyes"; then
1219 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1220 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1222 AM_CONDITIONAL(DISABLE_CRASH_REPORTING, test x$crash_reporting != xyes)
1224 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1225 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1227 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1228 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1230 if test x$enable_monodroid = xyes; then
1231 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1234 if test x$enable_monotouch = xyes; then
1235 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1238 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1239 AM_CONDITIONAL(ENABLE_CXX, test x$enable_cxx = xyes)
1241 # mono/corefx/native has a lot of invalid C++98 in its headers
1242 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1243 # use these C99 print macros in the command line, since glib may not win first inttypes include
1244 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1245 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1246 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1247 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1249 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1250 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1251 # and add it whenever we're running clang on Darwin.
1252 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1253 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1256 AC_SUBST(CXXFLAGS_COMMON)
1258 if test "x$enable_cxx" = "xyes"; then
1260 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1262 # -std=gnu99 -xc++ is not allowed and errors.
1263 CXX_REMOVE_CFLAGS=-std=gnu99
1264 # These give warnings and should be removed. They are C-only.
1265 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1266 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1267 # Likewise with CentOS 6 gcc 4.4.
1268 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1270 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1271 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1272 # generates a warning every time we run gcc which is very unsightly.
1273 # The warning is for e.g. sprintf(foo, "") which can just be
1274 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1275 # and completely legal and valid.
1276 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1277 # Alternatively, just run $CXX -xc++ -c /dev/null.
1279 ORIG_CXXFLAGS=$CXXFLAGS
1280 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1281 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1282 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1284 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1285 CXXFLAGS=$ORIG_CXXFLAGS
1288 AC_SUBST(CXX_ADD_CFLAGS)
1289 AC_SUBST(CXX_REMOVE_CFLAGS)
1292 # Set the build profiles and options before things which use them
1295 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])
1296 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1297 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1298 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])
1299 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])
1300 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1301 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1302 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])
1303 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])
1304 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])
1305 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1306 AC_ARG_WITH(testing_winaot_interp, [ --with-testing_winaot_interp=yes,no If you want to build the Windows friendly AOT + Interpreter testing assemblies (defaults to no)], [], [with_testing_winaot_interp=default])
1307 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1308 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1309 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1312 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,winaot,winaotinterp,winaot_llvm,winaotinterp_llvm,bitcode,bitcodeinterp,unreal,fullaotinterp,fullaotinterp_llvm Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1313 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])
1314 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])
1315 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])
1317 AC_ARG_WITH(static_icu, [ --with-static-icu=yes|no Integrate ICU statically into the runtime (defaults to no)],[
1318 if test x$with_static_icu = xyes ; then
1319 AC_DEFINE(STATIC_ICU,1,[Integrate ICU statically into the runtime.])
1321 ], [with_static_icu=no])
1324 dnl Spectre compiler mitigation flag checks
1326 if test "x$with_spectre_mitigation" = "xyes"; then
1327 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1329 SPECTRE_INDIRECT_BRANCH_KIND=
1330 case "x$with_spectre_indirect_branch_choice" in
1331 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1332 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1333 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1334 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1335 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1338 SPECTRE_FUNCTION_RETURN_KIND=""
1339 case "x$with_spectre_function_return_choice" in
1340 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1341 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1342 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1343 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1344 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1347 AX_CHECK_COMPILE_FLAG(
1348 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1349 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1352 AX_CHECK_COMPILE_FLAG(
1353 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1354 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1357 if test "x$SPECTRE_CFLAGS" != "x" ; then
1358 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1359 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1360 spectre_mitigation_status="mitigation enabled"
1363 spectre_mitigation_status="no mitigation"
1367 dnl Profile defaults
1369 TEST_PROFILE=default
1370 enable_llvm_default=no
1372 with_profile4_x_default=no
1373 with_monodroid_default=no
1374 with_monotouch_default=no
1375 with_monotouch_watch_default=no
1376 with_monotouch_tv_default=no
1377 with_xammac_default=no
1378 with_testing_aot_full_interp_default=no
1379 with_testing_aot_hybrid_default=no
1380 with_testing_aot_full_default=no
1381 with_winaot_default=no
1382 with_testing_winaot_interp_default=no
1383 with_orbis_default=no
1384 with_unreal_default=no
1385 with_wasm_default=no
1387 with_bitcode_default=no
1388 enable_cooperative_suspend_default=no
1389 enable_hybrid_suspend_default=no
1391 # For the sake of clearer error messages, these numbers should all be different from each other.
1392 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4400,nftnptr-arg-trampolines=4000,nrgctx-trampolines=21000
1394 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1396 MONO_LLVM_PATH_OPTION=llvm-path="`pwd`/llvm/usr/bin"
1398 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1399 DISABLE_MCS_DOCS_default=yes
1402 if test x$with_runtime_preset = xnetcore; then
1403 # Keep in sync with winconfig.h netcore configuration.
1404 DISABLE_MCS_DOCS_default=yes
1407 enable_support_build=no
1409 mono_feature_disable_remoting='yes'
1410 mono_feature_disable_reflection_emit_save='yes'
1411 mono_feature_disable_appdomains='yes'
1412 mono_feature_disable_cleanup='yes'
1413 mono_feature_disable_assembly_remapping='yes'
1414 mono_feature_disable_security='yes'
1415 mono_feature_disable_mdb='yes'
1416 mono_feature_disable_com='yes'
1417 mono_feature_disable_gac='yes'
1418 mono_feature_disable_perfcounters='yes'
1419 mono_feature_disable_attach='yes'
1420 mono_feature_disable_cfgdir_config='yes'
1421 if test "x$enable_monodroid" = "x" -a "x$enable_monotouch" = "x"; then
1422 mono_feature_disable_dllmap='yes' # FIXME: the mobile products use this
1424 disable_mono_native=yes
1426 elif test x$with_runtime_preset = xnet_4_x; then
1427 with_profile4_x_default=yes
1428 TEST_PROFILE=net_4_x
1429 elif test x$with_runtime_preset = xall; then
1430 with_profile4_x_default=yes
1431 with_monodroid_default=yes
1432 with_monotouch_default=yes
1433 with_monotouch_watch_default=yes
1434 with_monotouch_tv_default=yes
1435 with_xammac_default=yes
1436 with_winaot_default=yes
1437 with_testing_winaot_interp_default=yes
1438 with_orbis_default=yes
1439 with_unreal_default=yes
1440 with_wasm_default=yes
1441 with_testing_aot_full_interp_default=yes
1442 with_testing_aot_hybrid_default=yes
1443 with_testing_aot_full_default=yes
1444 TEST_PROFILE=net_4_x
1445 elif test x$with_runtime_preset = xbitcode; then
1446 DISABLE_MCS_DOCS_default=yes
1447 with_testing_aot_full_default=yes
1448 with_bitcode_default=yes
1449 enable_cooperative_suspend_default=yes
1450 # FIXME: use TEST_PROFILE=testing_aot_full
1451 TEST_PROFILE=testing_aot_bitcode
1452 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1453 enable_llvm_default=yes
1455 mono_feature_disable_com='yes'
1456 mono_feature_disable_remoting='yes'
1457 mono_feature_disable_reflection_emit_save='yes'
1458 mono_feature_disable_reflection_emit='yes'
1459 mono_feature_disable_appdomains='yes'
1461 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1462 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1463 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1465 elif test x$with_runtime_preset = xbitcodeinterp; then
1466 with_testing_aot_full_interp_default=yes
1467 with_bitcode_default=yes
1468 enable_cooperative_suspend_default=yes
1469 # FIXME: use TEST_PROFILE=testing_aot_full_interp
1470 TEST_PROFILE=testing_aot_bitcode_interp
1471 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1472 enable_llvm_default=yes
1474 # mscorlib.dll aot compilation crashes
1475 mono_feature_disable_com='yes'
1477 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1478 AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1479 AOT_RUN_FLAGS="--llvmonly-interp"
1480 elif test x$with_runtime_preset = xfullaot; then
1481 DISABLE_MCS_DOCS_default=yes
1482 with_testing_aot_full_default=yes
1483 TEST_PROFILE=testing_aot_full
1485 mono_feature_disable_com='yes'
1486 mono_feature_disable_remoting='yes'
1487 mono_feature_disable_reflection_emit_save='yes'
1488 mono_feature_disable_reflection_emit='yes'
1489 mono_feature_disable_appdomains='yes'
1491 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1492 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1494 elif test x$with_runtime_preset = xfullaot_llvm; then
1495 DISABLE_MCS_DOCS_default=yes
1496 with_testing_aot_full_default=yes
1497 TEST_PROFILE=testing_aot_full
1499 mono_feature_disable_com='yes'
1500 mono_feature_disable_remoting='yes'
1501 mono_feature_disable_reflection_emit_save='yes'
1502 mono_feature_disable_reflection_emit='yes'
1503 mono_feature_disable_appdomains='yes'
1505 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1506 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1508 elif test x$with_runtime_preset = xhybridaot; then
1509 DISABLE_MCS_DOCS_default=yes
1510 with_testing_aot_hybrid_default=yes
1511 TEST_PROFILE=testing_aot_hybrid
1513 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1514 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1515 elif test x$with_runtime_preset = xhybridaot_llvm; then
1516 DISABLE_MCS_DOCS_default=yes
1517 with_testing_aot_hybrid_default=yes
1518 TEST_PROFILE=testing_aot_hybrid
1520 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1521 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1522 elif test x$with_runtime_preset = xfullaotinterp; then
1523 with_testing_aot_full_interp_default=yes
1524 TEST_PROFILE=testing_aot_full_interp
1526 # mscorlib.dll aot compilation crashes
1527 mono_feature_disable_com='yes'
1529 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1530 AOT_RUN_FLAGS="--full-aot-interp"
1531 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1532 with_testing_aot_full_interp_default=yes
1533 TEST_PROFILE=testing_aot_full_interp
1535 # mscorlib.dll aot compilation crashes
1536 mono_feature_disable_com='yes'
1538 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1539 AOT_RUN_FLAGS="--full-aot-interp"
1540 elif test x$with_runtime_preset = xaot; then
1541 with_profile4_x_default=yes
1543 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1546 DISABLE_MCS_DOCS_default=yes
1547 elif test x$with_runtime_preset = xaot_llvm; then
1548 with_profile4_x_default=yes
1550 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1553 DISABLE_MCS_DOCS_default=yes
1554 elif test x$with_runtime_preset = xwinaot; then
1555 DISABLE_MCS_DOCS_default=yes
1556 with_winaot_default=yes
1559 mono_feature_disable_com='yes'
1560 mono_feature_disable_remoting='yes'
1561 mono_feature_disable_reflection_emit_save='yes'
1562 mono_feature_disable_reflection_emit='yes'
1563 mono_feature_disable_appdomains='yes'
1565 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1566 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1568 elif test x$with_runtime_preset = xwinaotinterp; then
1569 DISABLE_MCS_DOCS_default=yes
1570 with_testing_winaot_interp_default=yes
1571 TEST_PROFILE=testing_winaot_interp
1573 mono_feature_disable_com='yes'
1574 mono_feature_disable_remoting='yes'
1575 mono_feature_disable_appdomains='yes'
1577 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1578 AOT_RUN_FLAGS="--full-aot-interp"
1579 elif test x$with_runtime_preset = xwinaotinterp_llvm; then
1580 DISABLE_MCS_DOCS_default=yes
1581 with_testing_winaot_interp_default=yes
1582 TEST_PROFILE=testing_winaot_interp
1584 mono_feature_disable_com='yes'
1585 mono_feature_disable_remoting='yes'
1586 mono_feature_disable_appdomains='yes'
1588 INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1589 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1590 AOT_RUN_FLAGS="--full-aot-interp"
1591 elif test x$with_runtime_preset = xwinaot_llvm; then
1592 DISABLE_MCS_DOCS_default=yes
1593 with_winaot_default=yes
1596 mono_feature_disable_com='yes'
1597 mono_feature_disable_remoting='yes'
1598 mono_feature_disable_reflection_emit_save='yes'
1599 mono_feature_disable_reflection_emit='yes'
1600 mono_feature_disable_appdomains='yes'
1602 INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1603 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1604 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1606 elif test x$with_runtime_preset = xorbis; then
1607 DISABLE_MCS_DOCS_default=yes
1608 with_orbis_default=yes
1611 mono_feature_disable_com='yes'
1612 mono_feature_disable_remoting='yes'
1613 mono_feature_disable_reflection_emit_save='yes'
1614 mono_feature_disable_reflection_emit='yes'
1615 mono_feature_disable_appdomains='yes'
1617 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1618 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1620 elif test x$with_runtime_preset = xunreal; then
1621 DISABLE_MCS_DOCS_default=yes
1622 with_unreal_default=yes
1625 mono_feature_disable_com='yes'
1626 mono_feature_disable_remoting='yes'
1627 mono_feature_disable_appdomains='no'
1629 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1630 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1631 elif test x$with_runtime_preset = xwasm; then
1632 DISABLE_MCS_DOCS_default=yes
1633 with_wasm_default=yes
1636 mono_feature_disable_com='yes'
1637 mono_feature_disable_remoting='yes'
1638 mono_feature_disable_reflection_emit_save='yes'
1639 mono_feature_disable_reflection_emit='yes'
1640 mono_feature_disable_appdomains='yes'
1642 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1643 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1645 TEST_PROFILE=net_4_x
1646 with_profile4_x_default=yes
1649 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1650 AC_SUBST(AOT_BUILD_FLAGS)
1651 AC_SUBST(AOT_RUN_FLAGS)
1652 # For llvmonlycheck + fullaotcheck
1653 AC_SUBST(INVARIANT_AOT_OPTIONS)
1656 AC_SUBST(TEST_PROFILE)
1658 if test "x$with_profile4_x" = "xdefault"; then
1659 with_profile4_x=$with_profile4_x_default
1661 if test "x$with_monodroid" = "xdefault"; then
1662 with_monodroid=$with_monodroid_default
1664 if test "x$with_monotouch" = "xdefault"; then
1665 with_monotouch=$with_monotouch_default
1667 if test "x$with_monotouch_watch" = "xdefault"; then
1668 with_monotouch_watch=$with_monotouch_watch_default
1670 if test "x$with_monotouch_tv" = "xdefault"; then
1671 with_monotouch_tv=$with_monotouch_tv_default
1673 if test "x$with_bitcode" = "xdefault"; then
1674 with_bitcode=$with_bitcode_default
1676 if test "x$with_xammac" = "xdefault"; then
1677 with_xammac=$with_xammac_default
1679 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1680 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1682 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1683 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1685 if test "x$with_testing_aot_full" = "xdefault"; then
1686 with_testing_aot_full=$with_testing_aot_full_default
1688 if test "x$with_winaot" = "xdefault"; then
1689 with_winaot=$with_winaot_default
1691 if test "x$with_testing_winaot_interp" = "xdefault"; then
1692 with_testing_winaot_interp=$with_testing_winaot_interp_default
1694 if test "x$with_orbis" = "xdefault"; then
1695 with_orbis=$with_orbis_default
1697 if test "x$with_unreal" = "xdefault"; then
1698 with_unreal=$with_unreal_default
1700 if test "x$with_wasm" = "xdefault"; then
1701 with_wasm=$with_wasm_default
1705 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1706 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1707 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1708 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1709 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1710 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1711 AM_CONDITIONAL(STATIC_ICU, test "x$with_static_icu" = "xyes")
1712 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1713 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1714 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1715 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1716 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1717 AM_CONDITIONAL(INSTALL_TESTING_WINAOT_INTERP, [test "x$with_testing_winaot_interp" != "xno"])
1718 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1719 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1720 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1721 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1723 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1724 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"])
1725 AM_CONDITIONAL(FULL_AOT_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"] || [test "x$TEST_PROFILE" = "xtesting_aot_bitcode_interp"] || [test "x$TEST_PROFILE" = "xtesting_winaot_interp"])
1726 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1728 default_profile=net_4_x
1729 if test -z "$INSTALL_MONODROID_TRUE"; then :
1730 default_profile=monodroid
1732 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1733 default_profile=monotouch
1735 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1736 default_profile=xammac
1738 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1739 default_profile=testing_aot_full_interp
1741 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1742 default_profile=testing_aot_hybrid
1744 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1745 default_profile=testing_aot_full
1747 if test -z "$INSTALL_WINAOT_TRUE"; then :
1748 default_profile=winaot
1750 if test -z "$INSTALL_TESTING_WINAOT_INTERP_TRUE"; then :
1751 default_profile=testing_winaot_interp
1753 if test -z "$INSTALL_ORBIS_TRUE"; then :
1754 default_profile=orbis
1756 if test -z "$INSTALL_UNREAL_TRUE"; then :
1757 default_profile=unreal
1759 if test -z "$INSTALL_WASM_TRUE"; then :
1760 default_profile=wasm
1762 if test -z "$INSTALL_4_x_TRUE"; then :
1763 default_profile=net_4_x
1765 DEFAULT_PROFILE=$default_profile
1766 AC_SUBST(DEFAULT_PROFILE)
1769 # End build profile configuration
1772 if test x$USE_NLS = xprofile_default; then
1774 AC_MSG_CHECKING([NLS used])
1776 # We make the default value for USE_NLS
1777 # "no" on OSX because it isn't available on most
1778 # default OSX installs. The most common configurations will
1779 # all disable it, so this saves us typing.
1780 if test x$host_darwin = xyes; then
1787 AC_MSG_RESULT([$USE_NLS])
1790 AC_ARG_ENABLE(static-gcc-libs, [ --enable-static-gcc-libs Statically link GCC support libs (for MinGW32)])
1791 if test "x$enable_static_gcc_libs" = "xyes"; then
1792 # llvm/build.mk doesn't use automake, so make a regular make variable for it.
1793 AC_SUBST(STATIC_GCC_LIBS,1)
1795 AM_CONDITIONAL(ENABLE_STATIC_GCC_LIBS, test "x$enable_static_gcc_libs" = "xyes")
1797 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1798 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier, dllmap, reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting, security, lldb, mdb, assert_messages, config, cfgdir_config, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_toggleref, sgen_debug_helpers, sgen_binary_protocol, sockets, gac, threads, processes, eventpipe.],
1800 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1801 eval "mono_feature_disable_$feature='yes'"
1803 DISABLED_FEATURES=$enable_minimal
1804 disabled="Disabled: $enable_minimal"
1807 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1809 if test "x$mono_feature_disable_aot" = "xyes"; then
1810 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1811 enable_system_aot=no
1812 AC_MSG_NOTICE([Disabled AOT compiler])
1815 if test "x$mono_feature_disable_profiler" = "xyes"; then
1816 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1817 AC_MSG_NOTICE([Disabled support for the profiler])
1819 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1821 if test "x$mono_feature_disable_decimal" = "xyes"; then
1822 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1823 AC_MSG_NOTICE([Disabled support for decimal])
1826 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1827 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1828 AC_MSG_NOTICE([Disabled support for P/Invoke])
1831 if test "x$mono_feature_disable_debug" = "xyes"; then
1832 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1833 AC_MSG_NOTICE([Disabled support for runtime debugging])
1836 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1837 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1838 mono_feature_disable_reflection_emit_save=yes
1839 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1842 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1843 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1844 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1847 if test "x$mono_feature_disable_large_code" = "xyes"; then
1848 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1849 AC_MSG_NOTICE([Disabled support for large assemblies])
1852 if test "x$mono_feature_disable_logging" = "xyes"; then
1853 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1854 AC_MSG_NOTICE([Disabled support for logging])
1857 if test "x$mono_feature_disable_com" = "xyes"; then
1858 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1859 AC_MSG_NOTICE([Disabled COM support])
1862 if test "x$mono_feature_disable_ssa" = "xyes"; then
1863 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1864 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1867 if test "x$mono_feature_disable_generics" = "xyes"; then
1868 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1869 AC_MSG_NOTICE([Disabled Generics Support])
1872 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1873 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1874 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1877 if test "x$mono_feature_disable_portability" = "xyes"; then
1878 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1879 AC_MSG_NOTICE([Disabled IO Portability layer])
1882 if test "x$mono_feature_disable_attach" = "xyes"; then
1883 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1884 AC_MSG_NOTICE([Disabled agent attach])
1887 if test "x$mono_feature_disable_verifier" = "xyes"; then
1888 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1889 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1892 if test "x$mono_feature_disable_jit" = "xyes"; then
1893 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1894 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1897 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1899 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1900 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1901 AC_MSG_NOTICE([Disabled the interpreter])
1904 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1906 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1907 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1910 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1912 if test "x$mono_feature_disable_simd" = "xyes"; then
1913 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1914 AC_MSG_NOTICE([Disabled SIMD support])
1917 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1918 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1919 AC_MSG_NOTICE([Disabled Soft Debugger.])
1922 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1924 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1925 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1926 AC_MSG_NOTICE([Disabled Performance Counters.])
1928 if test "x$mono_feature_disable_normalization" = "xyes"; then
1929 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1930 AC_MSG_NOTICE([Disabled String normalization support.])
1933 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1934 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1935 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1936 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1939 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1940 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1941 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1944 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1945 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1946 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1949 if test "x$mono_feature_disable_remoting" = "xyes"; then
1950 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1951 AC_MSG_NOTICE([Disabled remoting])
1954 if test "x$mono_feature_disable_security" = "xyes"; then
1955 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1956 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1959 if test "x$mono_feature_disable_lldb" = "xyes"; then
1960 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1961 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1964 if test "x$mono_feature_disable_mdb" = "xyes"; then
1965 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1966 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1969 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1970 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1971 AC_MSG_NOTICE([Disabled assertion messages.])
1974 if test "x$mono_feature_disable_cfgdir_config" = "xyes"; then
1975 AC_DEFINE(DISABLE_CFGDIR_CONFIG, 1, [Disable config directories.])
1976 AC_MSG_NOTICE([Disabled config directories.])
1979 if test "x$mono_feature_disable_config" = "xyes"; then
1980 AC_DEFINE(DISABLE_CONFIG, 1, [Disable .config file support.])
1981 AC_MSG_NOTICE([Disabled .config file support.])
1984 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1985 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1986 AC_MSG_NOTICE([Disabled runtime cleanup.])
1989 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1990 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1991 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1994 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1995 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1996 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1999 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
2000 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
2001 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
2004 if test "x$mono_feature_disable_sgen_toggleref" = "xyes"; then
2005 AC_DEFINE(DISABLE_SGEN_TOGGLEREF, 1, [Disable toggleref support in SGEN.])
2006 AC_MSG_NOTICE([Disabled toggleref support in SGEN.])
2009 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
2010 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
2011 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
2014 if test "x$mono_feature_disable_sgen_binary_protocol" = "xyes"; then
2015 AC_DEFINE(DISABLE_SGEN_BINARY_PROTOCOL, 1, [Disable binary protocol logging in SGEN.])
2016 AC_MSG_NOTICE([Disabled binary protocol logging in SGEN.])
2019 if test "x$mono_feature_disable_sockets" = "xyes"; then
2020 AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
2021 AC_MSG_NOTICE([Disabled sockets])
2024 if test "x$mono_feature_disable_gac" = "xyes"; then
2025 AC_DEFINE(DISABLE_GAC, 1, [Disable GAC])
2026 AC_MSG_NOTICE([Disabled GAC support])
2029 if test "x$mono_feature_disable_dllmap" = "xyes"; then
2030 AC_DEFINE(DISABLE_DLLMAP,1,[Disables use of DllMaps in MonoVM])
2031 AC_MSG_NOTICE([Disabled DllMap in the loader.])
2034 if test "x$mono_feature_disable_threads" = "xyes"; then
2035 AC_DEFINE(DISABLE_THREADS, 1, [Disable Threads])
2036 AC_MSG_NOTICE([Disabled threading support])
2039 if test "x$mono_feature_disable_processes" = "xyes"; then
2040 AC_DEFINE(DISABLE_PROCESSES, 1, [Disable process support])
2041 AC_MSG_NOTICE([Disabled process support])
2044 if test "x$mono_feature_disable_eventpipe" = "xyes"; then
2045 AC_DEFINE(DISABLE_EVENTPIPE, 1, [Disable EventPipe support])
2046 AC_MSG_NOTICE([Disabled EventPipe support])
2047 enable_perftracing=no
2050 if test x$enable_perftracing = x -a x$with_core = xonly; then
2051 if test -f $srcdir/mono/eventpipe/ep.h; then
2052 enable_perftracing=yes
2055 if test x$enable_perftracing = xyes; then
2056 AC_DEFINE(ENABLE_PERFTRACING,1,[Enables support for eventpipe library])
2058 AM_CONDITIONAL(ENABLE_PERFTRACING, test x$enable_perftracing = xyes)
2060 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
2061 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
2063 has_extension_module=no
2064 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
2066 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
2067 if test x$extension = xdefault ; then
2068 has_extension_module=yes;
2071 if test x$enable_extension_module = xyes; then
2072 has_extension_module=yes;
2076 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
2078 if test x$has_extension_module != xno ; then
2079 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
2080 AC_MSG_NOTICE([Enabling mono extension module.])
2084 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
2086 AC_MSG_CHECKING(for visibility __attribute__)
2089 void __attribute__ ((visibility ("hidden"))) doit (void) {}
2090 int main () { doit (); return 0; }
2093 have_visibility_hidden=yes
2096 have_visibility_hidden=no
2101 dnl Boehm GC configuration
2104 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
2106 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
2107 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
2109 if test "x$support_boehm" = "xyes"; then
2111 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
2112 if test x$enable_parallel_mark = xyes; then
2113 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
2122 LIBGC_CPPFLAGS='-I$(top_srcdir)/external/bdwgc/include -I$(top_srcdir)/external/bdwgc/libatomic_ops/src'
2123 LIBGC_LIBS='$(top_builddir)/external/bdwgc/libgc.la'
2124 LIBGC_STATIC_LIBS='$(top_builddir)/external/bdwgc/libgc-static.la'
2126 BOEHM_DEFINES="-DHAVE_BOEHM_GC -DGC_THREADS"
2128 if test x$target_win32 = xyes; then
2129 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
2130 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
2133 gc_msg="Included Boehm GC with typed GC"
2134 if test x$enable_parallel_mark = xyes; then
2135 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
2136 gc_msg="$gc_msg and parallel mark"
2138 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
2143 AC_MSG_WARN("External Boehm is no longer supported")
2147 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
2151 AC_MSG_WARN("Compiling mono without GC.")
2152 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
2153 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
2157 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
2161 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])
2162 if test "x$large_heap" = "xyes"; then
2163 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
2166 AC_SUBST(LIBGC_CPPFLAGS)
2167 AC_SUBST(LIBGC_LIBS)
2168 AC_SUBST(LIBGC_STATIC_LIBS)
2169 AC_SUBST(BOEHM_DEFINES)
2172 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
2175 dnl End of Boehm GC Configuration
2178 dnl *************************************
2179 dnl *** Checks for zero length arrays ***
2180 dnl *************************************
2181 AC_MSG_CHECKING(whether $CC supports zero length arrays)
2189 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
2192 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
2195 dnl ***********************************
2196 dnl *** Checks for signals
2197 dnl ***********************************
2198 AC_CHECK_HEADERS(signal.h)
2199 AC_CHECK_FUNCS(sigaction)
2200 AC_CHECK_FUNCS(kill)
2201 AC_CHECK_FUNCS(signal)
2203 # signal() is declared inline in Android headers
2204 # so we need to workaround it by overriding the check.
2205 if test x$platform_android = xyes; then
2206 AC_DEFINE(HAVE_SIGNAL,1)
2209 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
2210 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
2212 if test x$host_win32 = xno; then
2213 dnl *************************************
2214 dnl *** Checks for time capabilities ***
2215 dnl *************************************
2217 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
2218 AC_TRY_COMPILE([#include <time.h>], [
2219 const int foo = CLOCK_MONOTONIC;
2222 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
2227 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
2228 AC_TRY_COMPILE([#include <time.h>], [
2229 const int foo = CLOCK_MONOTONIC_COARSE;
2232 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
2237 AC_MSG_CHECKING(for CLOCK_REALTIME)
2238 AC_TRY_COMPILE([#include <time.h>], [
2239 const int foo = CLOCK_REALTIME;
2242 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
2247 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
2248 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
2249 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
2250 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
2251 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
2252 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
2254 AC_CHECK_TYPES([clockid_t], [AC_DEFINE(HAVE_CLOCKID_T)], [],
2255 [#include <sys/types.h>])
2257 dnl hires monotonic clock support
2258 AC_SEARCH_LIBS(clock_gettime, rt)
2259 AC_CHECK_FUNCS(clock_nanosleep)
2261 dnl dynamic loader support
2262 AC_CHECK_FUNC(dlopen, DL_LIB="",
2263 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
2265 if test x$dl_support = xno; then
2266 AC_MSG_WARN([No dynamic loading support available])
2268 LIBS="$LIBS $DL_LIB"
2269 dnl from glib's configure.ac
2270 if test "x$cross_compiling" = "xyes"; then
2271 AC_MSG_RESULT(cross compiling, assuming no)
2274 AC_CACHE_CHECK([for preceeding underscore in symbols],
2276 AC_TRY_RUN([#include <dlfcn.h>
2277 int mono_underscore_test (void) { return 42; }
2279 void *f1 = (void*)0, *f2 = (void*)0, *handle;
2280 handle = dlopen ((void*)0, 0);
2282 f1 = dlsym (handle, "mono_underscore_test");
2283 f2 = dlsym (handle, "_mono_underscore_test");
2284 } return (!f2 || f1);
2286 [mono_cv_uscore=yes],
2287 [mono_cv_uscore=no],
2291 if test "x$mono_cv_uscore" = "xyes"; then
2292 AC_DEFINE(MONO_DL_NEED_USCORE, 1, [Does dlsym require leading underscore.])
2294 AC_CHECK_FUNC(dlerror)
2297 dnl ******************************************************************
2298 dnl *** Checks for the IKVM JNI interface library ***
2299 dnl ******************************************************************
2300 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])
2302 if test x$with_ikvm_native = xyes; then
2303 jdk_headers_found="IKVM Native"
2306 AC_CHECK_HEADERS(execinfo.h)
2308 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2310 AC_CHECK_FUNCS(getgrgid_r)
2311 AC_CHECK_FUNCS(getgrnam_r)
2312 AC_CHECK_FUNCS(getresuid)
2313 AC_CHECK_FUNCS(setresuid)
2314 AC_CHECK_FUNCS(kqueue)
2315 # IBM provides a compatibility library for offering this function.
2316 # BSDs and others, have execinfo in base or packages.
2317 AC_SEARCH_LIBS(backtrace_symbols, execinfo util)
2318 # Two-step so it sets it in config.h
2319 AC_CHECK_FUNCS(backtrace_symbols)
2320 AC_CHECK_FUNCS(mkstemp)
2321 AC_CHECK_FUNCS(mmap)
2322 AC_CHECK_FUNCS(getrusage)
2323 AC_CHECK_FUNCS(getpriority)
2324 AC_CHECK_FUNCS(setpriority)
2325 AC_CHECK_FUNCS(dl_iterate_phdr)
2326 AC_CHECK_FUNCS(dladdr)
2327 AC_CHECK_FUNCS(sysconf)
2328 AC_CHECK_FUNCS(getrlimit)
2329 AC_CHECK_FUNCS(prctl)
2330 AC_CHECK_FUNCS(arc4random)
2331 AC_CHECK_FUNCS(nl_langinfo)
2333 AC_CHECK_FUNCS(sched_getaffinity)
2334 AC_CHECK_FUNCS(sched_setaffinity)
2335 AC_CHECK_FUNCS(sched_getcpu)
2337 if test x$platform_android != xyes; then
2338 AC_CHECK_FUNCS(getpwnam_r)
2339 AC_CHECK_FUNCS(getpwuid_r)
2342 AC_CHECK_FUNCS(readlink)
2343 AC_CHECK_FUNCS(chmod)
2344 AC_CHECK_FUNCS(lstat)
2345 AC_CHECK_FUNCS(getdtablesize)
2347 AC_CHECK_FUNCS(ftruncate)
2348 AC_CHECK_FUNCS(msync)
2350 AC_CHECK_FUNCS(gethostname getpeername)
2351 AC_CHECK_FUNCS(utime utimes)
2353 AC_CHECK_FUNCS(openlog closelog)
2354 AC_CHECK_FUNCS(atexit)
2355 AC_CHECK_FUNCS(popen)
2357 AC_FUNC_STRERROR_R()
2359 dnl ****************************************************************
2360 dnl *** Check for sched_setaffinity from glibc versions before ***
2361 dnl *** 2.3.4. The older versions of the function only take 2 ***
2362 dnl *** parameters, not 3. ***
2364 dnl *** Because the interface change was not made in a minor ***
2365 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2366 dnl *** won't always indicate the interface sched_affinity has. ***
2367 dnl ****************************************************************
2368 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2369 AC_TRY_COMPILE([#include <sched.h>], [
2371 sched_setaffinity(0, &mask);
2373 # Yes, we have it...
2375 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2377 # We have the new, three-parameter version
2380 AC_TRY_COMPILE([#include <sched.h>], [
2381 CPU_COUNT((void *) 0);
2384 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2386 # We have the new, three-parameter version
2390 dnl ******************************************************************
2391 dnl *** Check for large file support ***
2392 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2393 dnl ******************************************************************
2395 # Check that off_t can represent 2**63 - 1 correctly, working around
2396 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2397 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2399 AC_DEFUN([LARGE_FILES], [
2400 large_CPPFLAGS=$CPPFLAGS
2401 CPPFLAGS="$CPPFLAGS $1"
2403 #include <sys/types.h>
2406 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2407 #define COMPILE_TIME_ASSERT(pred) \
2408 switch(0){case 0:case pred:;}
2409 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2412 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2413 large_CPPFLAGS="$large_CPPFLAGS $1"
2418 CPPFLAGS=$large_CPPFLAGS
2421 AC_MSG_CHECKING(if off_t is 64 bits wide)
2423 if test $large_offt = no; then
2424 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2425 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2427 if test $large_offt = no; then
2428 AC_MSG_WARN([No 64 bit file size support available])
2431 dnl *****************************
2432 dnl *** Checks for libsocket ***
2433 dnl *****************************
2434 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2436 dnl *****************************
2437 dnl *** Checks for IPPROTO_IP ***
2438 dnl *****************************
2439 AC_MSG_CHECKING(for IPPROTO_IP)
2440 AC_TRY_COMPILE([#include <netinet/in.h>], [
2441 int level = IPPROTO_IP;
2443 # Yes, we have it...
2445 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2447 # We'll have to use getprotobyname
2451 dnl *******************************
2452 dnl *** Checks for IPPROTO_IPV6 ***
2453 dnl *******************************
2454 AC_MSG_CHECKING(for IPPROTO_IPV6)
2455 AC_TRY_COMPILE([#include <netinet/in.h>], [
2456 int level = IPPROTO_IPV6;
2458 # Yes, we have it...
2460 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2462 # We'll have to use getprotobyname
2466 dnl ******************************
2467 dnl *** Checks for IPPROTO_TCP ***
2468 dnl ******************************
2469 AC_MSG_CHECKING(for IPPROTO_TCP)
2470 AC_TRY_COMPILE([#include <netinet/in.h>], [
2471 int level = IPPROTO_TCP;
2473 # Yes, we have it...
2475 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2477 # We'll have to use getprotobyname
2481 dnl *****************************
2482 dnl *** Checks for SOL_IP ***
2483 dnl *****************************
2484 AC_MSG_CHECKING(for SOL_IP)
2485 AC_TRY_COMPILE([#include <netdb.h>], [
2488 # Yes, we have it...
2490 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2492 # We'll have to use getprotobyname
2496 dnl *****************************
2497 dnl *** Checks for SOL_IPV6 ***
2498 dnl *****************************
2499 AC_MSG_CHECKING(for SOL_IPV6)
2500 AC_TRY_COMPILE([#include <netdb.h>], [
2501 int level = SOL_IPV6;
2503 # Yes, we have it...
2505 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2507 # We'll have to use getprotobyname
2511 dnl *****************************
2512 dnl *** Checks for SOL_TCP ***
2513 dnl *****************************
2514 AC_MSG_CHECKING(for SOL_TCP)
2515 AC_TRY_COMPILE([#include <netdb.h>], [
2516 int level = SOL_TCP;
2518 # Yes, we have it...
2520 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2522 # We'll have to use getprotobyname
2526 dnl *****************************
2527 dnl *** Checks for IP_PKTINFO ***
2528 dnl *****************************
2529 AC_MSG_CHECKING(for IP_PKTINFO)
2530 AC_TRY_COMPILE([#include <linux/in.h>], [
2531 int level = IP_PKTINFO;
2533 # Yes, we have it...
2535 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2540 dnl *****************************
2541 dnl *** Checks for IPV6_PKTINFO ***
2542 dnl *****************************
2543 AC_MSG_CHECKING(for IPV6_PKTINFO)
2544 AC_TRY_COMPILE([#include <netdb.h>], [
2545 int level = IPV6_PKTINFO;
2547 # Yes, we have it...
2549 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2554 dnl **********************************
2555 dnl *** Checks for IP_DONTFRAG ***
2556 dnl **********************************
2557 AC_MSG_CHECKING(for IP_DONTFRAG)
2558 AC_TRY_COMPILE([#include <netinet/in.h>], [
2559 int level = IP_DONTFRAG;
2561 # Yes, we have it...
2563 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2568 dnl **********************************
2569 dnl *** Checks for IP_DONTFRAGMENT ***
2570 dnl **********************************
2571 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2572 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2573 int level = IP_DONTFRAGMENT;
2575 # Yes, we have it...
2577 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2582 dnl **********************************
2583 dnl *** Checks for IP_MTU_DISCOVER ***
2584 dnl **********************************
2585 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2586 AC_TRY_COMPILE([#include <linux/in.h>], [
2587 int level = IP_MTU_DISCOVER;
2589 # Yes, we have it...
2591 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2596 dnl **********************************
2597 dnl *** Checks for IP_PMTUDISC_DO ***
2598 dnl **********************************
2599 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2600 AC_TRY_COMPILE([#include <linux/in.h>], [
2601 int level = IP_PMTUDISC_DO;
2603 # Yes, we have it...
2605 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2610 dnl *********************************
2611 dnl *** Check for struct ip_mreqn ***
2612 dnl *********************************
2613 AC_MSG_CHECKING(for struct ip_mreqn)
2614 AC_TRY_COMPILE([#include <netinet/in.h>], [
2615 struct ip_mreqn mreq;
2616 mreq.imr_address.s_addr = 0;
2618 # Yes, we have it...
2620 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2622 # We'll just have to try and use struct ip_mreq
2624 AC_MSG_CHECKING(for struct ip_mreq)
2625 AC_TRY_COMPILE([#include <netinet/in.h>], [
2626 struct ip_mreq mreq;
2627 mreq.imr_interface.s_addr = 0;
2629 # Yes, we have it...
2631 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2633 # No multicast support
2638 dnl **********************************
2639 dnl *** Check for getaddrinfo ***
2640 dnl **********************************
2641 AC_MSG_CHECKING(for getaddrinfo)
2646 getaddrinfo(NULL,NULL,NULL,NULL);
2648 # Yes, we have it...
2650 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2655 dnl **********************************
2656 dnl *** Check for gethostbyname2_r ***
2657 dnl **********************************
2658 AC_MSG_CHECKING(for gethostbyname2_r)
2664 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2666 # Yes, we have it...
2668 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2673 dnl **********************************
2674 dnl *** Check for gethostbyname2 ***
2675 dnl **********************************
2676 AC_MSG_CHECKING(for gethostbyname2)
2681 gethostbyname2(NULL,0);
2683 # Yes, we have it...
2685 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2690 dnl **********************************
2691 dnl *** Check for gethostbyname ***
2692 dnl **********************************
2693 AC_MSG_CHECKING(for gethostbyname)
2698 gethostbyname(NULL);
2700 # Yes, we have it...
2702 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2707 dnl **********************************
2708 dnl *** Check for getprotobyname ***
2709 dnl **********************************
2710 AC_MSG_CHECKING(for getprotobyname)
2715 getprotobyname(NULL);
2717 # Yes, we have it...
2719 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2724 dnl **********************************
2725 dnl *** Check for getprotobyname_r ***
2726 dnl **********************************
2727 AC_MSG_CHECKING(for getprotobyname_r)
2732 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2734 # Yes, we have it...
2736 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2741 dnl **********************************
2742 dnl *** Check for getnameinfo ***
2743 dnl **********************************
2744 AC_MSG_CHECKING(for getnameinfo)
2749 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2751 # Yes, we have it...
2753 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2759 dnl **********************************
2760 dnl *** Check for inet_ntop ***
2761 dnl **********************************
2762 AC_MSG_CHECKING(for inet_ntop)
2765 #include <arpa/inet.h>
2767 inet_ntop (0, NULL, NULL, 0);
2769 # Yes, we have it...
2771 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2776 dnl *****************************
2777 dnl *** Checks for libnsl ***
2778 dnl *****************************
2779 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2781 AC_CHECK_FUNCS(inet_pton inet_aton)
2783 dnl *****************************
2784 dnl *** Checks for libxnet ***
2785 dnl *****************************
2788 AC_MSG_CHECKING(for Solaris XPG4 support)
2789 if test -f /usr/lib/libxnet.so; then
2790 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2791 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2792 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2799 if test "$GCC" = "yes"; then
2800 CFLAGS="$CFLAGS -Wno-char-subscripts"
2805 dnl *****************************
2806 dnl *** Checks for libpthread ***
2807 dnl *****************************
2808 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2809 # and libpthread does not exist
2813 dnl Haiku has pthread in libroot (libc equiv)
2814 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2817 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2820 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2823 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2826 AC_CHECK_HEADERS(pthread.h)
2827 AC_CHECK_HEADERS(pthread_np.h)
2828 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2829 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2830 AC_CHECK_FUNCS(pthread_kill pthread_jit_write_protect_np)
2831 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2832 AC_TRY_COMPILE([ #include <pthread.h>], [
2833 pthread_mutexattr_t attr;
2834 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2839 AC_ERROR(Posix system lacks support for recursive mutexes)
2841 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2842 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2843 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2844 dnl check that pthread_mutexattr_setprotocol is declared
2845 AC_CHECK_DECLS([pthread_mutexattr_setprotocol], [], [], [[#include <pthread.h>]])
2846 AC_CHECK_FUNCS(mincore mlock munlock)
2848 dnl ***********************************
2849 dnl *** Checks for working __thread ***
2850 dnl ***********************************
2851 AC_MSG_CHECKING(for working __thread)
2852 if test "x$with_tls" != "x__thread"; then
2853 AC_MSG_RESULT(disabled)
2854 elif test "x$cross_compiling" = "xyes"; then
2855 AC_MSG_RESULT(cross compiling, assuming yes)
2858 #if defined(__APPLE__) && defined(__clang__)
2859 #error "__thread does not currently work with clang on Mac OS X"
2863 #include <pthread.h>
2865 static int res1, res2;
2867 void thread_main (void *arg)
2882 pthread_create (&t1, NULL, thread_main, 1);
2883 pthread_create (&t2, NULL, thread_main, 2);
2885 pthread_join (t1, NULL);
2886 pthread_join (t2, NULL);
2888 return !(res1 + res2 == 2);
2898 dnl **************************************
2899 dnl *** Checks for working sigaltstack ***
2900 dnl **************************************
2901 AC_MSG_CHECKING(for working sigaltstack)
2902 if test "x$with_sigaltstack" != "xyes"; then
2903 AC_MSG_RESULT(disabled)
2904 elif test "x$cross_compiling" = "xyes"; then
2905 AC_MSG_RESULT(cross compiling, assuming no)
2913 #include <pthread.h>
2914 #include <sys/wait.h>
2915 #if defined(__FreeBSD__) || defined(__NetBSD__)
2916 #define SA_STACK SA_ONSTACK
2919 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2924 volatile char*__ptr = NULL;
2926 loop (void *ignored)
2935 struct sigaction sa;
2938 pthread_attr_t attr;
2940 sa.sa_sigaction = sigsegv_signal_handler;
2941 sigemptyset (&sa.sa_mask);
2942 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2943 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2944 perror ("sigaction");
2948 /* x86 darwin deliver segfaults using SIGBUS */
2949 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2950 perror ("sigaction");
2953 sas.ss_sp = malloc (SIGSTKSZ);
2954 sas.ss_size = SIGSTKSZ;
2956 if (sigaltstack (&sas, NULL) == -1) {
2957 perror ("sigaltstack");
2961 pthread_attr_init (&attr);
2962 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2963 printf ("pthread_create\n");
2987 for (i = 0; i < 300; ++i) {
2988 waitpid (son, &status, WNOHANG);
2989 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2994 kill (son, SIGKILL);
3000 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
3007 dnl ********************************
3008 dnl *** Checks for sys_signame ***
3009 dnl ********************************
3010 AC_MSG_CHECKING(for sys_signame)
3014 const char *signame = sys_signame[0];
3016 # Yes, we have it...
3018 AC_DEFINE(HAVE_SYSSIGNAME, 1, [Have sys_signame])
3024 dnl ********************************
3025 dnl *** Checks for semaphore lib ***
3026 dnl ********************************
3027 # 'Real Time' functions on Solaris
3028 # posix4 on Solaris 2.6
3029 # pthread (first!) on Linux
3030 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
3032 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
3033 AC_CHECK_FUNCS(shm_open)
3035 dnl ********************************
3036 dnl *** Checks for timezone stuff **
3037 dnl ********************************
3038 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
3044 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
3045 if test $ac_cv_struct_tm_gmtoff = yes; then
3046 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
3048 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
3053 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
3054 if test $ac_cv_var_timezone = yes; then
3055 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
3057 AC_ERROR(unable to find a way to determine timezone)
3061 dnl *********************************
3062 dnl *** Checks for math functions ***
3063 dnl *********************************
3064 AC_SEARCH_LIBS(sqrtf, m)
3066 dnl ****************************************************************
3067 dnl *** Checks for working poll() (macosx defines it but doesn't ***
3068 dnl *** have it in the library (duh)) ***
3069 dnl ****************************************************************
3070 AC_CHECK_FUNCS(poll)
3072 dnl **********************************
3074 dnl **********************************
3075 AC_CHECK_HEADERS(sys/epoll.h)
3077 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
3078 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
3079 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
3084 AC_CHECK_HEADERS(sys/event.h)
3085 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
3087 dnl **************************************
3088 dnl * Darwin has a race that prevents us from using reliably:
3089 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
3090 dnl * Since kqueue is mostly used for scaling large web servers,
3091 dnl * and very few folks run Mono on large web servers on OSX, falling
3093 dnl **************************************
3094 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
3095 if test "x$host_darwin" = "xno"; then
3096 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
3100 dnl ******************************
3101 dnl *** Checks for SIOCGIFCONF ***
3102 dnl ******************************
3103 AC_CHECK_HEADERS(sys/ioctl.h)
3104 AC_CHECK_HEADERS(net/if.h, [], [],
3106 #ifdef HAVE_SYS_TYPES_H
3107 # include <sys/types.h>
3109 #ifdef HAVE_SYS_SOCKET_H
3110 # include <sys/socket.h>
3113 AC_MSG_CHECKING(for ifreq)
3116 #include <sys/ioctl.h>
3124 x = (void *) &ifr->ifr_addr;
3127 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
3131 dnl **********************************
3132 dnl *** Checks for sin_len ***
3133 dnl **********************************
3134 AC_MSG_CHECKING(for sockaddr_in.sin_len)
3136 #include <netinet/in.h>
3138 struct sockaddr_in saddr;
3139 saddr.sin_len = sizeof (saddr);
3142 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
3146 dnl **********************************
3147 dnl *** Checks for sin6_len ***
3148 dnl **********************************
3149 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
3151 #include <netinet/in.h>
3153 struct sockaddr_in6 saddr6;
3154 saddr6.sin6_len = sizeof (saddr6);
3157 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
3161 dnl **********************************
3162 dnl *** Check for getifaddrs ***
3163 dnl **********************************
3164 AC_MSG_CHECKING(for getifaddrs)
3167 #include <sys/types.h>
3168 #include <sys/socket.h>
3169 #ifdef HAVE_NET_IF_H
3172 #include <ifaddrs.h>
3176 # Yes, we have it...
3178 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
3182 dnl **********************************
3183 dnl *** Check for if_nametoindex ***
3184 dnl **********************************
3185 AC_MSG_CHECKING(for if_nametoindex)
3188 #include <sys/types.h>
3189 #include <sys/socket.h>
3192 if_nametoindex(NULL);
3194 # Yes, we have it...
3196 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
3200 dnl **********************************
3201 dnl *** Check for access ***
3202 dnl **********************************
3203 AC_MSG_CHECKING(for access)
3209 # Yes, we have it...
3211 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
3216 dnl **********************************
3217 dnl *** Checks for proclib ***
3218 dnl **********************************
3219 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.)])
3220 dnl **********************************
3221 dnl *** Checks for MonoPosixHelper ***
3222 dnl **********************************
3223 AC_CHECK_HEADERS(checklist.h)
3224 AC_CHECK_HEADERS(pathconf.h)
3225 AC_CHECK_HEADERS(fstab.h)
3226 AC_CHECK_HEADERS(attr/xattr.h)
3227 AC_CHECK_HEADERS(sys/extattr.h)
3228 AC_CHECK_HEADERS(sys/sendfile.h)
3229 AC_CHECK_HEADERS(sys/statvfs.h)
3230 AC_CHECK_HEADERS(sys/statfs.h)
3231 AC_CHECK_HEADERS(sys/vfstab.h)
3232 AC_CHECK_HEADERS(sys/xattr.h)
3233 AC_CHECK_HEADERS(sys/mman.h)
3234 AC_CHECK_HEADERS(sys/param.h)
3235 AC_CHECK_HEADERS(sys/mount.h, [], [],
3237 #ifdef HAVE_SYS_PARAM_H
3238 # include <sys/param.h>
3241 AC_CHECK_HEADERS(sys/mount.h)
3242 AC_CHECK_FUNCS(confstr)
3243 AC_CHECK_FUNCS(seekdir telldir)
3244 AC_CHECK_FUNCS(getdomainname)
3245 AC_CHECK_FUNCS(setdomainname)
3246 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
3247 AC_CHECK_FUNCS(setgroups)
3248 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
3249 AC_CHECK_FUNCS(getfsstat)
3250 AC_CHECK_FUNCS(lutimes futimes)
3251 AC_CHECK_FUNCS(mremap)
3252 AC_CHECK_FUNCS(remap_file_pages)
3253 AC_CHECK_FUNCS(posix_fadvise)
3254 AC_CHECK_FUNCS(posix_fallocate)
3255 AC_CHECK_FUNCS(vsnprintf)
3256 AC_CHECK_FUNCS(sendfile)
3257 AC_CHECK_FUNCS(gethostid sethostid)
3258 AC_CHECK_FUNCS(sethostname)
3259 AC_CHECK_FUNCS(statfs)
3260 AC_CHECK_FUNCS(fstatfs)
3261 AC_CHECK_FUNCS(statvfs)
3262 AC_CHECK_FUNCS(fstatvfs)
3263 AC_CHECK_FUNCS(stime)
3264 AC_CHECK_FUNCS(ttyname_r)
3265 AC_CHECK_FUNCS(psignal)
3266 AC_CHECK_FUNCS(getlogin_r)
3267 AC_CHECK_FUNCS(lockf)
3268 AC_CHECK_FUNCS(swab)
3269 AC_CHECK_FUNCS(setusershell endusershell)
3270 AC_CHECK_FUNCS(futimens utimensat)
3271 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
3272 AC_CHECK_FUNCS(readv writev preadv pwritev)
3273 AC_CHECK_FUNCS(setpgid)
3274 AC_CHECK_FUNCS(system)
3275 AC_CHECK_FUNCS(fork execv execve)
3276 AC_CHECK_FUNCS(waitpid)
3277 AC_CHECK_FUNCS(accept4)
3278 AC_CHECK_FUNCS(localtime_r)
3279 AC_CHECK_FUNCS(mkdtemp)
3280 AC_CHECK_SIZEOF(size_t)
3281 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
3282 [#include <sys/types.h>
3283 #include <sys/stat.h>
3284 #include <unistd.h>])
3285 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
3286 [#include <sys/types.h>
3287 #include <sys/stat.h>
3288 #include <unistd.h>])
3289 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
3290 [#include <sys/time.h>])
3291 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
3292 [#include <sys/socket.h>])
3293 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
3294 [#include <unistd.h>
3295 #include <fcntl.h>])
3296 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
3297 [#include <sys/uio.h>])
3298 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
3299 [#include <sys/socket.h>])
3300 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
3301 [#include <sys/poll.h>])
3302 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
3303 [#include <sys/socket.h>])
3304 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
3305 [#include <sys/socket.h>])
3306 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3307 [#include <netinet/in.h>])
3308 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3309 [#include <netinet/in.h>])
3310 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3311 [#include <sys/un.h>])
3312 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3313 [#include <sys/types.h>
3314 #include <sys/stat.h>
3315 #include <unistd.h>])
3316 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3317 [#include <time.h>])
3318 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3319 [#include <sys/time.h>
3320 #include <sys/types.h>
3321 #include <utime.h>])
3322 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3323 [#include <sys/time.h>])
3324 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3325 [#include <sys/types.h>
3326 #include <utime.h>])
3328 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
3329 [#include <sys/types.h>
3330 #include <dirent.h>])
3332 [struct passwd.pw_gecos],,,
3333 [#include <sys/types.h>
3336 [struct statfs.f_flags],,,
3337 [#include <sys/types.h>
3338 #include <sys/vfs.h>])
3340 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3341 [#include <sys/types.h>
3342 #include <sys/stat.h>
3343 #include <unistd.h>])
3345 dnl Favour xattr through glibc, but use libattr if we have to
3346 AC_CHECK_FUNC(lsetxattr, ,
3347 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3351 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3353 [struct kinfo_proc.kp_proc],,,
3354 [#include <sys/types.h>
3355 #include <sys/param.h>
3356 #include <sys/sysctl.h>
3357 #include <sys/proc.h>
3360 dnl *********************************
3361 dnl *** Checks for Windows compilation ***
3362 dnl *********************************
3363 AC_CHECK_HEADERS(sys/time.h)
3364 AC_CHECK_HEADERS(sys/param.h)
3365 AC_CHECK_HEADERS(dirent.h)
3367 dnl ******************************************
3368 dnl *** Checks for OSX and iOS compilation ***
3369 dnl ******************************************
3370 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3372 dnl *********************************
3373 dnl *** Check for Console 2.0 I/O ***
3374 dnl *********************************
3375 AC_CHECK_HEADERS([curses.h])
3376 AC_CHECK_HEADERS([term.h], [], [],
3381 AC_CHECK_HEADERS([termios.h])
3383 dnl *********************************
3384 dnl *** Checks for random ***
3385 dnl *********************************
3386 if test x$host_darwin = xno; then
3387 AC_CHECK_HEADERS(sys/random.h)
3388 AC_CHECK_FUNCS(getrandom getentropy)
3391 dnl *********************************
3392 dnl *** Checks for Mono.Native ***
3393 dnl *********************************
3395 # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3396 # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3398 AC_MSG_CHECKING(for linux/in.h)
3400 #include <sys/socket.h>
3401 #include <linux/in.h>
3405 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3410 AC_CHECK_HEADERS([linux/if_packet.h])
3412 AC_MSG_CHECKING(for struct in_pktinfo)
3414 #ifdef HAVE_LINUX_IN_H
3415 #include <sys/socket.h>
3416 #include <linux/in.h>
3418 #include <netinet/in.h>
3421 struct in_pktinfo pktinfo;
3424 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3429 AC_MSG_CHECKING(for struct ip_mreqn)
3432 #include <sys/socket.h>
3433 #include <linux/in.h>
3435 #include <netinet/in.h>
3438 struct ip_mreqn mreqn;
3441 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3446 if test x$host_darwin = xno; then
3447 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3450 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3451 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3453 # AC_CHECK_FUNC(getifaddrs, [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3454 AC_CHECK_FUNC(Qp2getifaddrs, [AC_DEFINE(HAVE_QP2GETIFADDRS, 1, [Qp2getifaddrs])])
3456 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3457 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3458 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3459 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3461 if test "x$mono_native_platform_ios" = "xno"; then
3462 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3463 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3464 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3467 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3468 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3469 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3470 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3471 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
3472 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3473 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3474 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3476 if test "x$platform_android" != "xyes"; then
3477 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3480 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3481 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3482 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3483 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3484 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3485 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3487 AC_CHECK_DECL(lchflags, [AC_DEFINE(HAVE_LCHFLAGS, 1, [lchflags])], [],
3488 [[#include <sys/types.h>
3489 #include <sys/stat.h>]])
3490 AC_CHECK_MEMBER(struct stat.st_flags,
3491 [AC_DEFINE(HAVE_STAT_FLAGS, 1, [struct stat.st_flags])],
3493 [#include <sys/types.h>
3494 #include <sys/stat.h>])
3496 AC_CHECK_MEMBER(struct stat.st_birthtimespec,
3497 [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtimespec])],
3499 [#include <sys/types.h>
3500 #include <sys/stat.h>])
3501 AC_CHECK_MEMBER(struct stat.st_atimespec,
3502 [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])],
3504 [#include <sys/types.h>
3505 #include <sys/stat.h>])
3506 AC_CHECK_MEMBER(struct stat.st_atim,
3507 [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])],
3509 [#include <sys/types.h>
3510 #include <sys/stat.h>])
3511 AC_CHECK_MEMBER(struct stat.st_atimensec,
3512 [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])],
3514 [#include <sys/types.h>
3515 #include <sys/stat.h>])
3516 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [#include <dirent.h>])
3517 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [#include <sys/mount.h>])
3518 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [#include <sys/mount.h>])
3520 AC_MSG_CHECKING(for struct statfs)
3522 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3523 #include <sys/mount.h>
3525 #include <sys/statfs.h>
3531 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3536 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3537 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3540 AC_MSG_CHECKING(for readdir_r)
3545 struct dirent* entry;
3546 struct dirent* result;
3547 readdir_r(dir, entry, &result);
3550 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3555 AC_MSG_CHECKING(for kevent with void *data)
3557 #include <sys/types.h>
3558 #include <sys/event.h>
3560 struct kevent event;
3562 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3565 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3570 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3571 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3573 AC_MSG_CHECKING(for sendfile with 4 arguments)
3575 #include <sys/sendfile.h>
3577 #if defined(TARGET_ANDROID)
3578 #if !defined(__ANDROID_API__)
3579 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3580 #elif __ANDROID_API__ < 21
3581 #error sendfile is not supported on this Android API level
3585 int result = sendfile(0, 0, 0, 0);
3588 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3593 ORIG_CFLAGS="$CFLAGS"
3594 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3596 AC_MSG_CHECKING(for sendfile with 6 arguments)
3599 #include <sys/types.h>
3600 #include <sys/socket.h>
3601 #include <sys/uio.h>
3603 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3606 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3611 CFLAGS="$ORIG_CFLAGS"
3613 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3614 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3615 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3616 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3618 ORIG_CFLAGS="$CFLAGS"
3619 CFLAGS="$CFLAGS -Werror=sign-conversion"
3621 AC_MSG_CHECKING(for getnameinfo with signed flags)
3623 #include <sys/types.h>
3626 const struct sockaddr *addr;
3633 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3636 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3641 CFLAGS="$ORIG_CFLAGS"
3643 if test "x$host_linux" = "xyes"; then
3644 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3646 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3649 # HAVE_CLOCK_MONOTONIC check already done above
3650 # HAVE_CLOCK_REALTIME check already done above
3651 # HAVE_MACH_ABSOLUTE_TIME check already done above
3652 # HAVE_MACH_TIMEBASE_INFO check already done above
3653 # HAVE_FUTIMES check already done above
3654 # HAVE_FUTIMENS check already done above
3656 ORIG_CFLAGS="$CFLAGS"
3657 CFLAGS="$CFLAGS -Werror=sign-conversion"
3659 AC_MSG_CHECKING(for bind with unsigned addrlen)
3661 #include <sys/socket.h>
3664 struct sockaddr* addr;
3666 bind(fd, addr, addrLen);
3669 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3674 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3676 #include <netinet/in.h>
3677 #include <netinet/tcp.h>
3679 struct ipv6_mreq opt;
3680 unsigned int index = 0;
3681 opt.ipv6mr_interface = index;
3684 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3689 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3691 #include <sys/inotify.h>
3695 int result = inotify_rm_watch(fd, wd);
3698 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3705 dnl *****************************
3706 dnl *** Checks for libinotify ***
3707 dnl *****************************
3708 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
3709 if test "x$ac_cv_lib_inotify_inotify_init" = "xyes" ; then
3710 AC_DEFINE(HAVE_LIBINOTIFY, 1, [FreeBSD libinotify kqueue shim])
3711 dnl Needs to be done this way to avoid collision with various
3712 dnl ports including glib and llvm*
3713 METADATA_CFLAGS="-I/usr/local/include"
3714 AC_SUBST(METADATA_CFLAGS)
3716 dnl Workaround due to inotify_rm_watch check failing without -I
3717 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd in libinotify)
3719 #include </usr/local/include/sys/inotify.h>
3723 int result = inotify_rm_watch(fd, wd);
3726 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3732 CFLAGS="$ORIG_CFLAGS"
3734 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3735 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3737 elif test "x$cross_compiling" = "xyes"; then
3738 AC_MSG_RESULT(cross compiling, assuming yes)
3739 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3742 #include <sys/mman.h>
3749 /* IBM i doesn't implement this and returns SIGILL */
3752 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3756 shm_unlink("/mono_configure_shm_open");
3758 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3759 // on at least the current version of Mac OS X
3761 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3768 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3774 AC_MSG_CHECKING(for getpriority with int who)
3776 #include <sys/resource.h>
3780 int result = getpriority(which, who);
3783 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3788 AC_MSG_CHECKING(for kevent with int parameters)
3790 #include <sys/types.h>
3791 #include <sys/event.h>
3794 const struct kevent* chagelist;
3796 struct kevent* eventlist;
3798 const struct timespec* timeout;
3799 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3802 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3807 AC_CHECK_FUNCS(mkstemps)
3808 # AC_CHECK_FUNCS(mkstemp) # already done above
3810 if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3811 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3814 AC_MSG_CHECKING(for tcp/var.h)
3816 #include <sys/types.h>
3817 #include <sys/socketvar.h>
3818 #include <netinet/ip.h>
3819 #include <netinet/tcp.h>
3820 #include <netinet/tcp_var.h>
3824 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3829 AC_CHECK_HEADERS([sys/cdefs.h])
3831 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3833 #ifdef HAVE_SYS_CDEFS_H
3834 #include <sys/cdefs.h>
3836 #include <netinet/tcp.h>
3838 int result = TCP_ESTABLISHED;
3841 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3846 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3848 AC_MSG_CHECKING(for struct rt_msghdr)
3850 #include <sys/types.h>
3851 #include <net/route.h>
3856 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3861 AC_CHECK_HEADERS([sys/sysctl.h])
3862 AC_CHECK_HEADERS([linux/rtnetlink.h])
3864 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3865 #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3866 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3868 ORIG_CFLAGS="$CFLAGS"
3869 CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3871 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3875 size_t namelen = 20;
3877 int result = getdomainname(name, namelen);
3880 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3885 CFLAGS="$ORIG_CFLAGS"
3887 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3888 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3889 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3891 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
3892 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3893 elif test "x$host_linux" = "xyes"; then
3894 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3897 # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3898 # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3899 # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3900 # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3903 AC_MSG_CHECKING(for GSS/GSS.h)
3905 #include <GSS/GSS.h>
3909 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3910 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3912 AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3917 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3919 #include <gssapi/gssapi_ext.h>
3924 AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3929 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3931 #include <gssapi/gssapi_ext.h>
3932 #include <gssapi/gssapi_krb5.h>
3933 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3937 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3942 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3944 AC_CHECK_HEADERS([crt_externs.h])
3946 AC_MSG_CHECKING(for _NSGetEnviron)
3948 #include <crt_externs.h>
3950 char **result = *(_NSGetEnviron());
3953 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3958 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3960 if test x$host_sunos = xyes; then
3961 # set -Werror=strict-prototypes, to match the flags used during the compilation.
3962 ORIG_CFLAGS="$CFLAGS"
3963 CFLAGS="$CFLAGS -Werror=strict-prototypes"
3966 AC_CHECK_FUNCS(madvise)
3967 AC_CHECK_FUNCS(posix_madvise)
3969 if test x$host_sunos = xyes; then
3970 CFLAGS="$ORIG_CFLAGS"
3973 # *** End of Mono.Native checks ***
3975 AM_CONDITIONAL(ENABLE_GSS, false)
3977 dnl *********************************
3978 dnl *** Checks for Windows compilation ***
3979 dnl *********************************
3980 AC_CHECK_HEADERS(winternl.h)
3982 jdk_headers_found=no
3983 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3984 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3985 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3986 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3987 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3988 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3989 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3991 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], , [#include <ws2tcpip.h>])
3993 dnl *********************************
3994 dnl *** Check for struct ip_mreqn ***
3995 dnl *********************************
3996 AC_MSG_CHECKING(for struct ip_mreqn)
3997 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3998 struct ip_mreqn mreq;
3999 mreq.imr_address.s_addr = 0;
4001 # Yes, we have it...
4003 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
4005 # We'll just have to try and use struct ip_mreq
4007 AC_MSG_CHECKING(for struct ip_mreq)
4008 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
4009 struct ip_mreq mreq;
4010 mreq.imr_interface.s_addr = 0;
4012 # Yes, we have it...
4014 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
4016 # No multicast support
4021 dnl **********************************
4022 dnl *** Check for getaddrinfo ***
4023 dnl **********************************
4024 AC_MSG_CHECKING(for getaddrinfo)
4027 #include <winsock2.h>
4028 #include <ws2tcpip.h>
4030 getaddrinfo(NULL,NULL,NULL,NULL);
4032 # Yes, we have it...
4034 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
4039 dnl **********************************
4040 dnl *** Check for gethostbyname ***
4041 dnl **********************************
4042 AC_MSG_CHECKING(for gethostbyname)
4045 #include <winsock2.h>
4046 #include <ws2tcpip.h>
4048 gethostbyname(NULL);
4050 # Yes, we have it...
4052 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
4057 dnl **********************************
4058 dnl *** Check for getprotobyname ***
4059 dnl **********************************
4060 AC_MSG_CHECKING(for getprotobyname)
4063 #include <winsock2.h>
4064 #include <ws2tcpip.h>
4066 getprotobyname(NULL);
4068 # Yes, we have it...
4070 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
4075 dnl **********************************
4076 dnl *** Check for getnameinfo ***
4077 dnl **********************************
4078 AC_MSG_CHECKING(for getnameinfo)
4081 #include <winsock2.h>
4082 #include <ws2tcpip.h>
4084 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
4086 # Yes, we have it...
4088 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
4093 dnl **********************************
4094 dnl *** Check for inet_ntop ***
4095 dnl **********************************
4096 AC_MSG_CHECKING(for inet_ntop)
4099 #include <winsock2.h>
4100 #include <ws2tcpip.h>
4102 inet_ntop (0, NULL, NULL, 0);
4104 # Yes, we have it...
4106 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
4111 dnl **********************************
4112 dnl *** Check for inet_pton ***
4113 dnl **********************************
4114 AC_MSG_CHECKING(for inet_pton)
4117 #include <winsock2.h>
4118 #include <ws2tcpip.h>
4123 inet_pton (0, NULL, NULL);
4125 # Yes, we have it...
4127 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
4134 AC_MSG_CHECKING(for socklen_t)
4136 #include <sys/types.h>
4137 #include <sys/socket.h>
4141 ac_cv_c_socklen_t=yes
4142 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
4148 AC_CHECK_FUNCS(execvp)
4150 dnl ****************************
4151 dnl *** Look for /dev/random ***
4152 dnl ****************************
4154 AC_MSG_CHECKING([if usage of random device is requested])
4155 AC_ARG_ENABLE(dev-random,
4156 [ --disable-dev-random disable the use of the random device (enabled by default)],
4157 try_dev_random=$enableval, try_dev_random=yes)
4159 AC_MSG_RESULT($try_dev_random)
4163 dnl IBM i does not have /dev/random, use unblocking only
4166 NAME_DEV_RANDOM="/dev/urandom"
4169 dnl Win32 does not have /dev/random, they have their own method...
4171 *-mingw*|*-*-cygwin*)
4172 ac_cv_have_dev_random=no
4175 dnl Everywhere else, it's /dev/random
4178 NAME_DEV_RANDOM="/dev/random"
4182 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
4184 dnl Now check if the device actually exists
4186 if test "x$try_dev_random" = "xyes"; then
4187 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
4188 [if test -r "$NAME_DEV_RANDOM" ; then
4189 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
4190 if test "x$ac_cv_have_dev_random" = "xyes"; then
4191 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
4194 AC_MSG_CHECKING(for random device)
4195 ac_cv_have_dev_random=no
4196 AC_MSG_RESULT(has been disabled)
4199 if test "x$host_win32" = "xyes"; then
4200 AC_DEFINE(HAVE_CRYPT_RNG)
4203 if test "x$ac_cv_have_dev_random" = "xno" \
4204 && test "x$host_win32" = "xno"; then
4207 *** A system-provided entropy source was not found on this system.
4208 *** Because of this, the System.Security.Cryptography random number generator
4209 *** will throw a NotImplemented exception.
4211 *** If you are seeing this message, and you know your system DOES have an
4212 *** entropy collection in place, please report an issue on GitHub and
4213 *** provide information about the system and how to access the random device.
4215 *** Otherwise you can install either egd or prngd and set the environment
4216 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
4220 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)
4222 AC_MSG_CHECKING([if big-arrays are to be enabled])
4223 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)
4224 if test "x$enable_big_arrays" = "xyes" ; then
4225 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4226 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
4228 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
4231 AC_MSG_RESULT($enable_big_arrays)
4237 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
4239 if test "x$enable_dtrace" = "xyes"; then
4240 if test "x$has_dtrace" = "xno"; then
4241 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
4243 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
4244 if test "x$DTRACE" = "xno"; then
4245 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
4247 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
4248 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
4254 if test "x$enable_dtrace" = "xyes"; then
4255 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
4257 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4260 DTRACEFLAGS="-arch ppc64"
4263 DTRACEFLAGS="-arch x86_64"
4272 DTRACEFLAGS="-arch ppc"
4275 DTRACEFLAGS="-arch i386"
4282 AC_SUBST(DTRACEFLAGS)
4288 AC_CHECK_HEADERS([sys/sdt.h])
4290 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
4291 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
4293 dnl **************************
4294 dnl *** AOT cross offsets ***
4295 dnl **************************
4297 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
4298 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
4304 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
4305 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
4306 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)
4307 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
4308 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
4310 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
4312 if test "x$enable_llvm" = "xdefault"; then
4313 enable_llvm=$enable_llvm_default
4316 if test "x$enable_loadedllvm" = "xyes"; then
4317 AC_MSG_WARN("Loadable LLVM is no longer supported. Enabling default LLVM support instead.")
4321 enable_llvm_msvc_only="no"
4322 if test "x$enable_llvm" = "xyes"; then
4323 if test "x$host_win32" = "xyes"; then
4324 if test "x$cross_compiling" = "xno"; then
4327 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
4328 enable_llvm_msvc_only="yes"
4331 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
4339 if test "x$enable_llvm" = "xyes"; then
4340 if test "x$with_llvm" != "x"; then
4341 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
4342 if test x$host_win32 = xyes; then
4343 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
4345 if test ! -x $EXTERNAL_LLVM_CONFIG; then
4346 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
4352 LLVM_CODEGEN_LIBS="x86codegen"
4355 LLVM_CODEGEN_LIBS="armcodegen"
4358 LLVM_CODEGEN_LIBS="aarch64codegen"
4361 LLVM_CODEGEN_LIBS="powerpccodegen"
4364 if test "x$host" != "x$target"; then
4365 # No need for jit libs
4369 AC_SUBST(LLVM_CODEGEN_LIBS)
4370 AC_SUBST(EXTERNAL_LLVM_CONFIG)
4372 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
4373 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4374 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4376 if test "x$enable_llvm_msvc_only" != "xyes"; then
4377 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4379 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4383 # AC_DEFINE necessary for correct restore behavior on Linux
4384 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4385 if test "x$internal_llvm" != "xno"; then
4386 if test "x$enable_llvm_msvc_only" != "xyes"; then
4387 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4389 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4393 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4394 if test "x$enable_llvm_asserts" != "xno"; then
4395 if test "x$enable_llvm_msvc_only" != "xyes"; then
4396 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4398 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4402 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4404 if test "x$enable_llvm" = "xyes"; then
4405 enable_llvm_runtime=yes
4408 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4409 if test "x$enable_llvm_runtime" = "xyes"; then
4410 if test "x$enable_llvm_msvc_only" != "xyes"; then
4411 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4413 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4418 ACCESS_UNALIGNED="yes"
4422 SQLITE="libsqlite.so.0"
4423 SQLITE3="libsqlite3.so.0"
4426 GDKX11="libgdk-x11-2.0.so.0"
4427 GTKX11="libgtk-x11-2.0.so.0"
4428 XINERAMA="libXinerama.so.1"
4430 sizeof_register="SIZEOF_VOID_P"
4433 boehm_supported=true
4443 ACCESS_UNALIGNED="no"
4446 if test "x$mono_cv_clang" = "xyes"; then
4447 INTERP_CFLAGS="-mllvm -join-liveintervals=false"
4448 AC_SUBST(INTERP_CFLAGS)
4455 ACCESS_UNALIGNED="no"
4457 AC_MSG_CHECKING(for mips n32)
4459 #if _MIPS_SIM != _ABIN32
4476 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4481 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4482 # int astruct __attribute__ ((visibility ("hidden")));
4485 # void *p = &astruct;
4487 # gcc -fPIC --shared -o libfoo.so foo.c
4489 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4490 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4491 have_visibility_hidden=no
4494 have_visibility_hidden=no
4505 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4512 openbsd*|freebsd*|kfreebsd-gnu*)
4519 x86_64-*-* | amd64-*-*)
4522 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4523 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4530 BTLS_PLATFORM=x86_64
4531 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4536 BTLS_PLATFORM=x86_64
4537 boehm_supported=false
4539 openbsd*|freebsd*|kfreebsd-gnu*)
4542 BTLS_PLATFORM=x86_64
4546 BTLS_PLATFORM=x86_64
4551 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4557 ACCESS_UNALIGNED="no"
4564 if test x"$GCC" = xyes; then
4565 # We don't support v8 cpus
4566 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4568 if test x"$AR" = xfalse; then
4569 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4572 *-mingw*|*-*-cygwin*)
4573 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4574 have_visibility_hidden=no
4578 # Old Boehm fails to compile for x86_64-mingw.
4579 # It is trivial to fix, but just silently drop it.
4580 boehm_supported=false
4584 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4585 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4586 powerpc*-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4587 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4589 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4590 # mono#18554 - be more robust in testing for -mminimal-toc
4591 AC_MSG_NOTICE([Checking for PowerPC ISA -mminimal-toc support])
4592 AX_CHECK_COMPILE_FLAG(
4594 [CFLAGS="$CFLAGS -mminimal-toc"],
4598 powerpc*-*-freebsd*)
4599 # We need to be aware if we are ELFv1 or v2 here
4600 AC_MSG_NOTICE([Checking FreeBSD ELF version])
4601 if ! ( echo | cc -dM -E - | awk '/_CALL_ELF/ {print $NF}'); then
4602 AC_DEFINE([POWERPC_ELF], 1, [PowerPC ELFv1])
4604 AC_DEFINE([POWERPC_ELFV2], 1, [PowerPC ELFv2])
4610 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4616 BTLS_PLATFORM=powerpc
4620 BTLS_PLATFORM=powerpc
4624 BTLS_PLATFORM=powerpc
4633 ACCESS_UNALIGNED="no"
4634 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4640 ACCESS_UNALIGNED="no"
4641 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4646 ACCESS_UNALIGNED="no"
4648 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4651 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4653 arm*-linux*-gnueabi)
4654 BTLS_PLATFORM=armsoft
4661 ACCESS_UNALIGNED="no"
4662 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4664 aarch64-*darwin*ilp32)
4667 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4669 # assuming no other target other than watchOS is using aarch64*darwin triple
4673 # https://lkml.org/lkml/2012/7/15/133
4676 boehm_supported=false
4679 BTLS_PLATFORM=aarch64
4680 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4685 ACCESS_UNALIGNED="yes"
4688 CFLAGS="$CFLAGS -mbackchain"
4695 BTLS_PLATFORM=riscv32
4697 boehm_supported=false
4704 BTLS_PLATFORM=riscv64
4706 boehm_supported=false
4712 if test "x$host" != "x$target"; then
4713 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4715 enable_support_build=no
4717 # Can't use tls, since it depends on the runtime detection of tls offsets
4718 # in mono-compiler.h
4725 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4729 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4733 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4737 powerpc64-ps3-linux-gnu)
4739 arch_target=powerpc64
4740 AC_DEFINE(TARGET_PS3, 1, [...])
4741 # It would be better to just use TARGET_POWERPC64, but lots of code already
4743 AC_DEFINE(__mono_ppc64__, 1, [...])
4744 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4746 target_byte_order=G_BIG_ENDIAN
4748 powerpc64-xbox360-linux-gnu)
4750 arch_target=powerpc64
4751 AC_DEFINE(TARGET_XBOX360, 1, [...])
4752 # It would be better to just use TARGET_POWERPC64, but lots of code already
4755 target_byte_order=G_BIG_ENDIAN
4759 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4763 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4776 AC_DEFINE(TARGET_PS4, 1, [...])
4777 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4778 CPPFLAGS="$CPPFLAGS"
4781 aarch64*darwin*_ilp32)
4783 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4785 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4789 # Both ios and osx/arm64 have the same aarc64-darwin triple,
4790 # assume ios for now when cross compiling
4798 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4799 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4806 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4807 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4812 x86_64-google-fuchsia)
4815 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
4818 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4826 AC_DEFINE(TARGET_ANDROID, 1, [...])
4833 AC_DEFINE(TARGET_WASM, 1, [...])
4837 AC_DEFINE(TARGET_X86, 1, [...])
4841 AC_DEFINE(TARGET_AMD64, 1, [...])
4845 AC_DEFINE(TARGET_ARM, 1, [...])
4847 ACCESS_UNALIGNED="no"
4850 AC_DEFINE(TARGET_ARM64, 1, [...])
4854 AC_DEFINE(TARGET_POWERPC, 1, [...])
4857 AC_DEFINE(TARGET_POWERPC, 1, [...])
4858 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4861 AC_DEFINE(TARGET_S390X, 1, [...])
4864 AC_DEFINE(TARGET_MIPS, 1, [...])
4867 AC_DEFINE(TARGET_SPARC, 1, [...])
4870 AC_DEFINE(TARGET_SPARC64, 1, [...])
4873 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4874 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4877 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4878 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4883 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4884 target_sizeof_void_p=4
4887 target_sizeof_void_p=8
4890 AC_MSG_ERROR([unknown target])
4896 AC_DEFINE(HOST_WASM, 1, [...])
4899 AC_DEFINE(HOST_X86, 1, [...])
4902 AC_DEFINE(HOST_AMD64, 1, [...])
4905 AC_DEFINE(HOST_ARM, 1, [...])
4908 AC_DEFINE(HOST_ARM64, 1, [...])
4911 AC_DEFINE(HOST_POWERPC, 1, [...])
4914 AC_DEFINE(HOST_POWERPC, 1, [...])
4915 AC_DEFINE(HOST_POWERPC64, 1, [...])
4918 AC_DEFINE(HOST_S390X, 1, [...])
4921 AC_DEFINE(HOST_MIPS, 1, [...])
4924 AC_DEFINE(HOST_SPARC, 1, [...])
4927 AC_DEFINE(HOST_SPARC64, 1, [...])
4930 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4931 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4934 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4935 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4939 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4941 X86 | AMD64 | ARM | ARM64)
4942 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4946 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4947 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4953 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4954 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4956 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4958 if test "x$enable_vtune" = "xyes"; then
4959 if test "x$with_vtune" = "x"; then
4960 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4962 VTUNE_PATH=$with_vtune
4964 VTUNE_INCLUDE=$VTUNE_PATH/include
4967 VTUNE_LIB=$VTUNE_PATH/lib32
4970 VTUNE_LIB=$VTUNE_PATH/lib64
4973 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4976 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4977 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4979 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4980 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4983 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4984 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4986 AC_SUBST(VTUNE_LIBS)
4987 AC_SUBST(VTUNE_CFLAGS)
4989 dnl Use GCC atomic ops if they work on the target.
4990 if test x$GCC = "xyes"; then
4992 X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4993 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4998 if test "x$target_mach" = "xyes"; then
5000 if test "x$TARGET_SYS" = "xWATCHOS"; then
5001 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
5002 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
5003 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
5005 elif test "x$TARGET_SYS" = "xIOS" -o "x$TARGET" = "xARM" -o "x$TARGET" = "xARM6432"; then
5006 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
5007 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
5008 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
5012 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
5013 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
5014 #error fail this for ios
5017 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
5018 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
5019 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
5021 if test "x$TARGET" = "xARM64"; then
5025 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
5026 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
5027 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
5032 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
5035 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
5037 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
5039 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
5040 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
5041 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
5042 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
5044 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
5047 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
5049 if test "x$sizeof_register" = "x4"; then
5050 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
5051 elif test "x$sizeof_register" = "x8"; then
5052 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
5054 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
5057 # zlib/configure detects visibility support similarly and defines HAVE_HIDDEN
5058 # on the compiler command line (not config.h).
5059 if test "x$have_visibility_hidden" = "xyes"; then
5060 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
5061 ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_HIDDEN"
5064 if test "x$have_deprecated" = "xyes"; then
5065 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
5069 dnl Simple Generational checks (sgen)
5072 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
5073 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
5074 if test x$buildsgen = xyes; then
5075 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
5076 SGEN_DEFINES="-DHAVE_SGEN_GC"
5079 if test x$with_sgen_default_concurrent != xno; then
5080 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
5081 conc_gc_msg=" (concurrent by default)"
5084 if test "x$gc_msg" = "x"; then
5085 gc_msg="sgen$conc_gc_msg"
5087 gc_msg="sgen$conc_gc_msg and $gc_msg"
5090 AC_SUBST(SGEN_DEFINES)
5091 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
5093 jit_status="Building and using the JIT"
5099 dnl on AIX/PASE, shared libraries can be and usually are inside archives
5100 dnl so, we specify them by libfoo.a(libfoo.so.0) for libtool's conventions,
5101 dnl or libfoo.a(shr[_64].o) for the AIX system convention,
5102 dnl or lib.so[.0](shr[_64].o) for libtool's hybrid convention
5103 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX
5104 LIBC="libc.a(shr_64.o)"
5105 # Thanks, I hate it! This is crumbly, especially the one-liner.
5106 AC_MSG_CHECKING([how to dlopen libintl])
5107 AC_LINK_IFELSE([AC_LANG_SOURCE([
5108 /* XXX: Check for libintl header/gettext func better? */
5109 #include <libintl.h>
5112 gettext("Dummy for autoconf");
5117 INTL="$(dump -X64 -Hp conftest$EXEEXT | grep libintl | cut -c 38- | tr -s " " | awk '{print $1"("$2")"}')"
5118 AC_MSG_RESULT([yes, $INTL])
5121 INTL="libintl.a(libintl.so.8)"
5122 AC_MSG_RESULT([no, falling back to $INTL])
5124 SQLITE3="libsqlite3.a(libsqlite3.so.0)"
5125 # it's very tempting to set a libsuffix, but it depends on the soname value
5128 dnl However, IBM's packages for i try to be more "normal" than the AIX world, naming wise.
5129 dnl The library archives has "normal" .so names, but they're members with predictable "shr" names for fat libraries.
5130 LIBC="libc.a(shr_64.o)"
5131 INTL="libintl.so(shr_64.o)"
5132 SQLITE3="libsqlite3.so(shr_64.o)"
5133 # likewise, it's safer to assume ".so(shr_64.o)" due to official IBM packages being built this way, but as with AIX, others may not be guaranteed
5134 # it may be worth revisiting this in the future
5139 INTL="libintl.dylib"
5140 SQLITE="libsqlite.0.dylib"
5141 SQLITE3="libsqlite3.0.dylib"
5143 GDKX11="libgdk-x11-2.0.dylib"
5144 GTKX11="libgtk-x11-2.0.dylib"
5149 SQLITE="libsqlite.so"
5150 SQLITE3="libsqlite3.so"
5160 SQLITE="libsqlite.so"
5161 SQLITE3="libsqlite3.so"
5166 SQLITE="libsqlite.so"
5167 SQLITE3="libsqlite3.so"
5170 if test "x$with_core" != "xonly"; then
5172 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
5173 AC_MSG_CHECKING(for the soname of libX11.so)
5174 for i in $x_libraries $dlsearch_path; do
5176 if test -f $i/libX11.so.$r; then
5183 if test "x$X11" = "xlibX11.so"; then
5184 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
5193 ######################################
5195 ######################################
5199 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
5200 if test x$GCC = xyes; then
5201 GNUC_UNUSED='__attribute__((__unused__))'
5202 GNUC_NORETURN='__attribute__((__noreturn__))'
5204 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
5207 AC_SUBST(GNUC_PRETTY)
5208 AC_SUBST(GNUC_UNUSED)
5209 AC_SUBST(GNUC_NORETURN)
5210 AC_SUBST(BREAKPOINT)
5212 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
5215 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
5231 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
5236 arm*-darwin*|aarch64*-*|riscv*)
5237 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
5240 ORDER=G_LITTLE_ENDIAN
5243 LDFLAGS="$LDFLAGS -ltextencoding"
5246 CFLAGS="$CFLAGS -pthread"
5247 LDFLAGS="$LDFLAGS -pthread"
5257 # Defined for all targets/platforms using classic Windows API support.
5258 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
5259 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
5261 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
5262 AC_CHECK_FUNCS(getrlimit)
5263 AC_CHECK_FUNCS(fork execv execve)
5264 AC_CHECK_FUNCS(waitpid)
5266 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
5268 if test x$with_overridable_allocators = xyes; then
5269 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5270 AC_MSG_NOTICE([Overridable allocator support enabled])
5272 AC_MSG_NOTICE([Overridable allocator support disabled])
5276 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
5277 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
5278 # removed once support for 10.6 is dropped.
5280 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
5282 if test x$target_osx = xyes; then
5283 AC_CHECK_FUNCS(getpwuid_r)
5284 elif test x$target_ios = xno; then
5285 AC_CHECK_FUNCS(strndup getpwuid_r)
5288 AC_SEARCH_LIBS(sqrtf, m)
5290 # nanosleep may not be part of libc, also search it in other libraries
5291 AC_SEARCH_LIBS(nanosleep, rt)
5293 AC_SEARCH_LIBS(dlopen, dl)
5295 # AIX/OS400 -bsymbolic
5296 # Apple -bind_at_load
5299 export_link_flags=--export-dynamic
5302 export_link_flags=--export-all-symbols
5305 export_link_flags=--export_dynamic
5308 AX_APPEND_LINK_FLAGS([-Wl,$export_link_flags -Wl,-Bsymbolic -bsymbolic -Wl,-z,now -Wl,-bind_at_load])
5310 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
5311 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
5312 AC_CHECK_LIB(iconv, iconv_open)
5313 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
5314 AC_SUBST(HAVE_ALLOCA_H)
5316 # Get the exact type of size_t, not just its size.
5317 # This is so we can find an exact printf format among u, lu, llu, I64u.
5318 # To avoid warnings about slight mismatches.
5319 # C99 runtime "zu" dependency is being avoided here.
5321 # We have to compile as C++ because C is too lenient
5322 # and lets the wrong thing compile, with warnings.
5324 # Note: "zu" or ifdef <something> have the advantage
5325 # of producing installable "biarch" headers. i.e. one Mac header
5326 # for Mac/x86 and Mac/amd64.
5330 # Check long before int because it is the overwhelming Unix answer,
5331 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
5333 # long ahead of int also tends to produce biarch-compatible headers except Windows.
5335 AC_MSG_CHECKING(if size_t is unsigned long)
5336 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5338 unsigned long *a = (size_t*)0;
5341 AC_SUBST(GSIZE_FORMAT, '"lu"')
5344 AC_MSG_CHECKING(if size_t is unsigned int)
5345 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5347 unsigned *a = (size_t*)0;
5350 AC_SUBST(GSIZE_FORMAT, '"u"')
5352 # At this point the majority of systems have their answer,
5353 # and we descend into non-standard or new-standard territory.
5355 # Check __int64 first because I64 on some systems predates ll, enabling
5356 # new compiler/old runtime interop, and the types always have the same size.
5358 AC_MSG_CHECKING(if size_t is unsigned __int64)
5359 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5361 unsigned __int64 *a = (size_t*)0;
5364 AC_SUBST(GSIZE_FORMAT, '"I64u"')
5367 AC_MSG_CHECKING(if size_t is unsigned long long)
5368 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5370 unsigned long long *a = (size_t*)0;
5373 AC_SUBST(GSIZE_FORMAT, '"llu"')
5376 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
5384 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
5385 # This provides for an exact match with functions that
5386 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
5387 # uintptr_t is not necessarily the same.
5389 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
5390 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
5392 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
5402 AC_SUBST(GSIZE_FORMAT)
5405 # END OF EGLIB CHECKS
5408 AC_ARG_WITH([libgdiplus],
5409 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
5410 [], [with_libgdiplus=installed])
5412 # default install location
5413 libgdiplus_install_loc=libgdiplus${libsuffix}
5416 libgdiplus_install_loc=libgdiplus${libsuffix}.0
5420 case $with_libgdiplus in
5427 if test x$cross_compiling = xno; then
5428 if test x$host_darwin = xyes; then
5429 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
5431 libgdiplus_install_loc=$a
5439 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5442 /*) # absolute path, assume it is an install location
5443 libgdiplus_loc=$with_libgdiplus
5444 libgdiplus_install_loc=$with_libgdiplus
5448 libgdiplus_loc=`pwd`/$with_libgdiplus
5451 AC_SUBST(libgdiplus_loc)
5452 AC_SUBST(libgdiplus_install_loc)
5454 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)
5455 if test "x$icall_symbol_map" = "xyes"; then
5456 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5459 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5460 if test "x$icall_export" = "xyes"; then
5461 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5464 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5465 if test "x$icall_tables" = "xno"; then
5466 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5469 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5471 if test "x$with_tls" = "x__thread"; then
5472 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5473 # Pass the information to libgc
5474 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5475 AC_MSG_CHECKING(if the tls_model attribute is supported)
5476 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5479 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5485 if test ${TARGET} = ARM; then
5486 dnl ******************************************
5487 dnl *** Check to see what FPU is available ***
5488 dnl ******************************************
5489 AC_MSG_CHECKING(which FPU to use)
5492 # This is a bit tricky:
5494 # if (__ARM_PCS_VFP) {
5495 # /* mfloat-abi=hard == VFP with hard ABI */
5496 # } elif (!__SOFTFP__) {
5497 # /* mfloat-abi=softfp == VFP with soft ABI */
5499 # /* mfloat-abi=soft == no VFP */
5502 # The exception is iOS (w/ GCC) where none of the above
5503 # are defined (but iOS always uses the 'softfp' ABI).
5505 # No support for FPA.
5510 # iOS GCC always uses the 'softfp' ABI.
5511 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5515 # Are we using the 'hard' ABI?
5516 if test x$fpu = xNONE; then
5517 AC_TRY_COMPILE([], [
5518 #ifndef __ARM_PCS_VFP
5519 #error "Float ABI is not 'hard'"
5528 # No 'hard' ABI. 'soft' or 'softfp'?
5529 if test x$fpu = xNONE; then
5530 AC_TRY_COMPILE([], [
5532 #error "Float ABI is not 'softfp'"
5541 if test x$arm_fpu != x; then
5546 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5549 dnl *********************************************
5550 dnl *** Check which ARM version(s) we can use ***
5551 dnl *********************************************
5552 AC_MSG_CHECKING(which ARM version to use)
5554 AC_TRY_COMPILE([], [
5555 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5556 #error Not on ARM v5.
5564 AC_TRY_COMPILE([], [
5565 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5566 #error Not on ARM v6.
5575 AC_TRY_COMPILE([], [
5576 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5577 #error Not on ARM v7.
5587 AC_MSG_RESULT($arm_ver)
5589 if test x$arm_v5 = xyes; then
5590 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5591 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5594 if test x$arm_v6 = xyes; then
5595 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5596 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5599 if test x$arm_v7 = xyes; then
5600 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5601 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5604 if test x$host_linux = xyes; then
5607 if test x$fpu = xNONE; then
5616 AC_SUBST(CORETARGETS)
5618 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5619 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5621 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5623 if test x$fpabi = xauto; then
5624 AC_TRY_COMPILE([], [
5625 #ifdef __riscv_float_abi_double
5635 if test x$fpabi = xauto; then
5636 AC_TRY_COMPILE([], [
5637 #ifdef __riscv_float_abi_single
5647 if test x$fpabi = xauto; then
5648 AC_TRY_COMPILE([], [
5649 #ifdef __riscv_float_abi_soft
5661 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5662 AC_MSG_RESULT([double-precision])
5665 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5666 AC_MSG_ERROR([single-precision, not supported])
5669 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5670 AC_MSG_RESULT([soft float])
5673 AC_MSG_ERROR([unknown])
5676 AC_MSG_ERROR([invalid option: $fpabi])
5681 if test ${TARGET} = unknown; then
5682 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5683 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5686 if test "x$platform_android" = "xyes"; then
5687 case "x${TARGET}" in
5692 BTLS_PLATFORM=android-armv5
5696 BTLS_PLATFORM=android-armv6
5700 BTLS_PLATFORM=android-armv7
5709 BTLS_PLATFORM=android-v8a
5713 BTLS_PLATFORM=android-x86
5717 BTLS_PLATFORM=android-x64
5725 if test ${ACCESS_UNALIGNED} = no; then
5726 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5729 if test x$host_darwin = xyes; then
5730 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5732 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5733 [AC_MSG_RESULT([no])],
5735 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5737 RANLIB="$RANLIB -no_warning_for_no_symbols"
5738 AC_MSG_RESULT([yes])
5745 # Pass CPPFLAGS to libgc configure
5746 # We should use a separate variable for this to avoid passing useless and
5747 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5748 # This should be executed late so we pick up the final version of CPPFLAGS
5749 # The problem with this approach, is that during a reconfigure, the main
5750 # configure scripts gets invoked with these arguments, so we use separate
5751 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5752 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5753 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5754 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5756 # Don't pass -finstrument-for-thread-suspension in,
5757 # if these are instrumented it will be very bad news
5758 # (infinite recursion, undefined parking behavior, etc)
5759 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5760 ac_configure_args="$ac_configure_args --enable-single-obj-compilation --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
5761 if test "x$support_boehm" = "xyes"; then
5762 AC_CONFIG_SUBDIRS(external/bdwgc)
5768 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5769 if test x$with_malloc_mempools = xyes; then
5771 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5776 DISABLE_MCS_DOCS=default
5777 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5778 if test x$with_mcs_docs != xyes; then
5779 DISABLE_MCS_DOCS=yes
5782 if test -n "$INSTALL_4_x_TRUE"; then :
5783 DISABLE_MCS_DOCS=yes
5785 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5786 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5789 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)],[
5790 if test x$with_lazy_gc_thread_creation != xno ; then
5791 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5793 ], [with_lazy_gc_thread_creation=no])
5795 dnl *****************************
5796 dnl *** Thread suspend policy ***
5797 dnl *****************************
5799 dnl Set a default hybrid or cooperative suspend on some platforms
5801 dnl Coop default is set by the bitcode preset.
5803 dnl If coop isn't on by default, maybe hybrid should be?
5804 if test x$enable_cooperative_suspend_default != xyes; then
5807 dnl Some host/target confusion, there's no host_osx (and
5808 dnl host_darwin would be true on iOS not just macOS).
5809 if test x$target_osx = xyes; then
5810 enable_hybrid_suspend_default=yes
5811 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5812 enable_hybrid_suspend_default=yes
5818 dnl Now check if there were flags overriding the defaults
5820 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])
5821 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5823 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5824 enable_cooperative_suspend=$with_cooperative_gc
5827 if test x$enable_cooperative_suspend = xdefault; then
5828 enable_cooperative_suspend=$enable_cooperative_suspend_default
5831 if test x$enable_cooperative_suspend != xno; then
5832 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5833 enable_hybrid_suspend_default=no
5836 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5838 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])
5840 if test x$enable_hybrid_suspend = xdefault; then
5841 enable_hybrid_suspend=$enable_hybrid_suspend_default
5844 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5845 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5848 if test x$enable_hybrid_suspend != xno ; then
5849 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5852 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5854 dnl End of thread suspend policy
5856 dnl ***************************
5857 dnl *** feature experiments ***
5858 dnl ***************************
5860 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5861 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null,tiered],[
5863 if test x$enable_experiment != x ; then
5864 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5866 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5867 eval "mono_experiment_test_enable_$feature='yes'"
5870 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5871 eval "mono_experiment_test_enable_null='yes'"
5872 eval "mono_experiment_test_enable_tiered='yes'"
5876 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5877 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5879 if test "x$mono_experiment_test_enable_tiered" = "xyes"; then
5880 AC_DEFINE(ENABLE_EXPERIMENT_TIERED, 1, [Enable experiment 'Tiered Compilation'])
5884 AM_CONDITIONAL(ENABLE_EXPERIMENT_TIERED, test x$mono_experiment_test_enable_tiered = xyes)
5886 dnl **********************
5887 dnl *** checked builds ***
5888 dnl **********************
5890 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],[
5892 if test x$enable_checked_build != x ; then
5893 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5895 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5896 eval "mono_checked_build_test_enable_$feature='yes'"
5899 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5900 eval "mono_checked_build_test_enable_gc='yes'"
5901 eval "mono_checked_build_test_enable_metadata='yes'"
5902 eval "mono_checked_build_test_enable_thread='yes'"
5903 eval "mono_checked_build_test_enable_private_types='yes'"
5904 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5907 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5908 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5911 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5912 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5915 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5916 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5919 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5920 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5923 if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5925 with_overridable_allocators=yes
5926 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5928 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5932 dnl End of checked builds
5934 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5936 AC_CHECK_HEADER([malloc.h],
5937 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5938 [Define to 1 if you have /usr/include/malloc.h.])],,)
5940 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5941 # instead of libmono-static.a
5942 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5943 LIBMONO_LA=libmini-static.la
5945 if test x$buildsgen = xyes; then
5946 LIBMONO_LA=libmonosgen-$API_VER.la
5948 LIBMONO_LA=libmonoboehm-$API_VER.la
5951 AC_SUBST(LIBMONO_LA)
5957 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5958 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5959 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5960 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5961 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5962 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])
5964 if test "x$with_btls_android_api" = "x" ; then
5965 case "$BTLS_PLATFORM" in
5967 with_btls_android_api=16" ;;
5969 with_btls_android_api=16" ;;
5971 with_btls_android_api=16 ;;
5973 with_btls_android_api=21 ;;
5975 with_btls_android_api=16 ;;
5977 with_btls_android_api=21 ;;
5981 if test "x$enable_btls" = "xno"; then
5985 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5988 if test "x$enable_btls" = "xyes"; then
5989 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5990 if test "x$CMAKE" = "xno"; then
5991 AC_MSG_ERROR("cmake not found")
5994 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
6001 if test "x$host_win32" = "xyes"; then
6002 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
6005 case "$BTLS_PLATFORM" in
6011 btls_cflags="$btls_cflags -arch i386"
6014 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
6015 if test "x$HAVE_YASM" != "xyes"; then
6016 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
6025 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
6026 if test "x$HAVE_YASM" != "xyes"; then
6027 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
6034 btls_cflags="-DOPENSSL_NO_ASM=1"
6038 btls_cflags="-DOPENSSL_NO_ASM=1"
6042 btls_cflags="-march=armv8-a+crypto"
6051 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
6052 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
6056 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6059 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6062 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6065 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6068 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6071 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6080 AC_MSG_ERROR(Invalid BTLS platform)
6083 if test "x$platform_android" = "xyes"; then
6084 if test "x$with_btls_android_cmake_toolchain" = "x"; then
6085 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
6088 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
6089 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
6093 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
6094 if test "x$with_btls_android_ndk" != "x"; then
6095 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
6097 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
6101 if test "x$btls_arch" != "x"; then
6102 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
6105 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
6107 AC_SUBST(BTLS_CFLAGS)
6108 AC_SUBST(BTLS_PLATFORM)
6109 AC_SUBST(BTLS_CMAKE_ARGS)
6111 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
6116 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
6118 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
6119 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
6120 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
6122 libmono_ldflags="$libmono_ldflags $LIBS"
6124 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
6125 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
6126 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
6127 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
6128 AM_CONDITIONAL(X86, test x$TARGET = xX86)
6129 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
6130 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
6131 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
6132 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
6133 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
6134 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
6135 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
6136 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
6137 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
6138 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
6139 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
6140 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
6141 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
6142 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
6143 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
6144 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
6145 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
6146 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
6147 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
6149 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
6160 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
6161 AC_SUBST(arch_target)
6163 #This must always be defined when building the runtime
6164 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
6166 mono_build_root=`pwd`
6167 AC_SUBST(mono_build_root)
6169 AC_ARG_ENABLE(msvc_only,[ --enable-msvc-only Build only with Visual Studio (msvc) (defaults to no). Disable gcc build.], enable_msvc_only=$enableval, enable_msvc_only=no)
6170 if test x$host_win32 = xno; then
6171 if test x$enable_msvc_only = xyes; then
6172 echo "Error, --enable-msvc-only only supported for Windows builds."
6176 AM_CONDITIONAL(ENABLE_MSVC_ONLY, test x$enable_msvc_only = xyes)
6178 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
6179 if test x$host_win32 = xno; then
6180 if test x$enable_msvc = xyes; then
6181 echo "Error, --enable-msvc only supported for Windows builds."
6185 if test x$enable_msvc_only = xyes; then
6188 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
6190 if test "x$enable_msvc" = "xyes"; then
6191 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
6192 if test "x$host_cpu" = "xi686"; then
6193 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
6194 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
6195 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
6196 mono_runtime_wrapper=$mono_runtime
6198 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
6199 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
6200 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
6201 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
6203 AC_SUBST(mono_msvc_build_dir)
6204 AC_SUBST(mono_msvc_build_lib_dir)
6205 AC_SUBST(mono_msvc_build_bin_dir)
6207 mono_runtime=mono/mini/mono
6208 mono_runtime_wrapper=$mono_runtime
6211 AC_SUBST(mono_runtime)
6212 AC_SUBST(mono_runtime_wrapper)
6214 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/csc.exe
6215 VBCS_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/VBCSCompiler.exe
6217 if test $csc_compiler = mcs; then
6218 CSC=$mcs_topdir/class/lib/build/mcs.exe
6223 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
6225 mono_cfg_root=$mono_build_root/runtime
6226 if test x$host_win32 = xyes; then
6227 if test "x$cross_compiling" = "xno"; then
6228 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
6229 CSC=`cygpath -m -a $CSC`
6230 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
6231 VBCS_LOCATION=`cygpath -m -a $VBCS_LOCATION`
6233 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
6236 mono_cfg_dir=$mono_cfg_root/etc
6239 if test "x$platform_android" = "xyes"; then
6243 AC_SUBST(mono_cfg_dir)
6247 if test "x$with_core" != "xonly"; then
6249 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
6252 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6254 *) reldir=$depth/$srcdir ;;
6256 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
6257 cd runtime/etc/mono/1.0
6258 rm -f machine.config
6259 $LN_S $reldir/data/net_1_1/machine.config machine.config
6263 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
6266 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6268 *) reldir=$depth/$srcdir ;;
6270 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6271 cd runtime/etc/mono/2.0
6272 rm -f machine.config
6273 $LN_S $reldir/data/net_2_0/machine.config machine.config
6277 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
6280 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6282 *) reldir=$depth/$srcdir ;;
6284 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6285 cd runtime/etc/mono/2.0
6287 $LN_S $reldir/data/net_2_0/web.config web.config
6291 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
6294 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6296 *) reldir=$depth/$srcdir ;;
6298 $ac_aux_dir/install-sh -d runtime/etc/mono/
6299 cd runtime/etc/mono/
6301 $LN_S $reldir/data/browscap.ini browscap.ini
6305 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
6306 [ depth=../../../../..
6308 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6310 *) reldir=$depth/$srcdir ;;
6312 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
6313 cd runtime/etc/mono/2.0/Browsers
6314 rm -f Compat.browser
6315 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6319 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
6320 [ depth=../../../../..
6322 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6324 *) reldir=$depth/$srcdir ;;
6326 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
6327 cd runtime/etc/mono/4.0/Browsers
6328 rm -f Compat.browser
6329 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6333 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
6334 [ depth=../../../../..
6336 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6338 *) reldir=$depth/$srcdir ;;
6340 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
6341 cd runtime/etc/mono/4.5/Browsers
6342 rm -f Compat.browser
6343 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6347 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
6350 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6352 *) reldir=$depth/$srcdir ;;
6354 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6355 cd runtime/etc/mono/4.0
6356 rm -f machine.config
6357 $LN_S $reldir/data/net_4_0/machine.config machine.config
6361 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
6364 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6366 *) reldir=$depth/$srcdir ;;
6368 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6369 cd runtime/etc/mono/4.0
6371 $LN_S $reldir/data/net_4_0/web.config web.config
6375 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
6378 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6380 *) reldir=$depth/$srcdir ;;
6382 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6383 cd runtime/etc/mono/4.5
6384 rm -f machine.config
6385 $LN_S $reldir/data/net_4_5/machine.config machine.config
6389 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
6392 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6394 *) reldir=$depth/$srcdir ;;
6396 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6397 cd runtime/etc/mono/4.5
6399 $LN_S $reldir/data/net_4_5/web.config web.config
6404 # Top level Makefile.am subdirs
6405 if test "x$with_core" = "xonly"; then
6406 MONO_SUBDIRS="llvm mono"
6408 if test "x$support_boehm" = "xyes" -a "x$libgc" = "xincluded"; then
6409 mono_subdirs_libgc=external/bdwgc
6412 if test x$enable_support_build != xno; then
6413 mono_subdirs_support=support
6416 if test x$cross_compiling = xno; then
6417 # Some tools might not build when cross-compiling
6418 mono_subdirs_tools=tools
6421 if test x$DISABLE_MCS_DOCS != xyes; then
6422 mono_subdirs_docs=docs
6425 if test x$with_ikvm_native = xyes; then
6426 mono_subdirs_ikvm_native=ikvm-native
6429 MONO_SUBDIRS="po $mono_subdirs_libgc llvm mono $mono_subdirs_ikvm_native $mono_subdirs_support data runtime scripts man samples $mono_subdirs_tools $mono_subdirs_docs msvc acceptance-tests"
6430 MONO_NOINST_SUBDIRS="$mono_subdirs_libgc"
6433 AC_SUBST(MONO_SUBDIRS)
6434 AC_SUBST(MONO_NOINST_SUBDIRS)
6436 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])
6437 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])
6438 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
6441 # Mono.Native Support
6442 # -------------------
6443 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
6444 # It is built as a stand-alone shared library and not bundled with the runtime because we
6445 # may need to build two different versions of it.
6447 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
6448 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
6450 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
6451 # implementation accordingly. We build a single `libmono-native` shared library.
6453 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
6455 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
6456 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
6457 # depending on platform.
6459 # We build two versions of the shared library:
6460 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
6461 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
6463 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
6464 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
6465 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
6467 # This can be called by automated tests both to ensure that the library has been correctly installed and also
6468 # to verify that it's the correct version of it.
6471 AC_MSG_CHECKING([Mono.Native support])
6472 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
6473 if test x$disable_mono_native = xyes; then
6475 elif test x$target_osx = xyes; then
6477 MONO_NATIVE_CXX=$CXX
6478 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6479 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6480 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6481 MONO_NATIVE_CFLAGS=$CFLAGS
6482 MONO_NATIVE_LDFLAGS=$LDFLAGS
6485 MONO_NATIVE_PLATFORM=macos
6486 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
6488 if test x$enable_gss = xyes; then
6489 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -framework GSS"
6492 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
6493 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6495 if test x$mono_native_compat = xyes; then
6496 mono_native_compat=yes
6497 mono_native_text="Mac OSX (compat + unified v10.12)"
6498 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6499 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6500 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6501 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6502 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6504 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6505 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6506 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6507 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6508 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6509 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6511 mono_native_compat=no
6512 mono_native_text="Mac OSX"
6514 elif test x$mono_native_platform_ios = xyes; then
6515 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6517 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6518 if test x$mono_native_ios_sim = xyes; then
6519 mono_native_ios_target=ios-simulator
6520 mono_native_text="iOS Simulator"
6521 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6523 mono_native_ios_target=iphoneos
6524 mono_native_text="iOS Device"
6525 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6527 mono_native_unified_version="10.0"
6528 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6530 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6531 if test x$mono_native_ios_sim = xyes; then
6532 mono_native_ios_target=tvos-simulator
6533 mono_native_text="AppleTV Simulator"
6534 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6536 mono_native_ios_target=tvos
6537 mono_native_text="AppleTV Device"
6538 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6540 mono_native_unified_version="10.0"
6541 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6543 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6544 if test x$mono_native_ios_sim = xyes; then
6545 mono_native_ios_target=watchos-simulator
6546 mono_native_text="Apple Watch Simulator"
6547 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6549 mono_native_ios_target=watchos
6550 mono_native_text="Apple Watch Device"
6551 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6553 mono_native_unified_version="5.0"
6554 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6556 AC_MSG_ERROR([Unknown iOS Target])
6561 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6563 if test x$with_bitcode = xyes; then
6564 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6565 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6567 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6570 if test x$enable_gss = xyes; then
6571 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6575 MONO_NATIVE_CXX=$CXX
6576 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6577 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6578 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6579 MONO_NATIVE_CFLAGS=$CFLAGS
6580 MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6582 if test x$mono_native_compat = xyes; then
6583 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6584 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6585 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6586 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6587 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6588 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6590 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6591 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6592 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6593 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6594 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6595 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"
6599 MONO_NATIVE_PLATFORM=ios
6600 elif test x$host_linux = xyes; then
6601 mono_native_text="Linux"
6603 MONO_NATIVE_CXX=$CXX
6604 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6605 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6606 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6607 MONO_NATIVE_CFLAGS=$CFLAGS
6608 MONO_NATIVE_LDFLAGS=$LDFLAGS
6609 if test x$enable_gss = xyes; then
6610 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -lgssapi_krb5"
6612 AC_MSG_WARN([GSS is not enabled, it requires libkrb5-dev package])
6615 mono_native_compat=no
6616 MONO_NATIVE_PLATFORM=linux
6618 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6619 elif test x$target_wasm = xyes; then
6620 mono_native_text="wasm"
6622 MONO_NATIVE_CXX=$CXX
6623 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6624 # The system.native code uses _WASM_ to check for wasm
6625 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6626 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6627 MONO_NATIVE_CFLAGS=$CFLAGS
6628 MONO_NATIVE_LDFLAGS=$LDFLAGS
6631 mono_native_compat=no
6632 MONO_NATIVE_PLATFORM=linux
6634 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6635 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6636 mono_native_text="AIX"
6638 MONO_NATIVE_CXX=$CXX
6639 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6640 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6641 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6642 MONO_NATIVE_CFLAGS=$CFLAGS
6643 dnl nosymbolic- is a hack in case -G for linking is used, as -G seems
6644 dnl to change the way unresolved symbols work on library load in an
6645 dnl incompatible manner. (as references to runtime functions are
6646 dnl resolved later) Default params otherwise are that, so seems OK.
6647 dnl Likewise, we don't seem to need to cover the entire runtime with
6648 dnl it either, on both AIX and PASE. -brtl from -G does seem to spew
6649 dnl Big Scary TOC Warnings (tm) from the linker, but it doesn't seem
6650 dnl problematic with gcc's -mminimal-toc.
6652 dnl flock in AIX exists in libbsd (not the same as freedesktop.org
6653 dnl libbsd) which Mono.Native needs.
6654 dnl Because of the way that the library is built by default, unresolved
6655 dnl references are kept and resolved at runtime. Often, the dependency
6656 dnl chain means libbsd is loaded anyways, but not necessarily. It's
6657 dnl better to explicitly link it, even though it has it shadows libc's
6658 dnl ioctl with its own. (As for the other unresolved imports, those
6659 dnl should be provided by the Mono runtime loaded.)
6660 MONO_NATIVE_LDFLAGS="$LDFLAGS -lbsd -Wl,-bnosymbolic-"
6663 mono_native_compat=no
6664 MONO_NATIVE_PLATFORM=aix
6666 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6667 elif case $host_os in freebsd*) true;; *) false;; esac; then
6668 mono_native_text="FreeBSD"
6670 MONO_NATIVE_CXX=$CXX
6671 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6672 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6673 MONO_NATIVE_CFLAGS="$CFLAGS -I/usr/local/include"
6674 MONO_NATIVE_LDFLAGS=$LDFLAGS
6677 mono_native_compat=no
6678 MONO_NATIVE_PLATFORM=freebsd
6679 AC_MSG_CHECKING([Mono.Native support])
6680 AC_MSG_RESULT(freebsd)
6682 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_FREEBSD"
6683 elif case $host_os in netbsd*) true;; *) false;; esac; then
6684 mono_native_text="NetBSD"
6686 MONO_NATIVE_CXX=$CXX
6687 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6688 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6689 MONO_NATIVE_CFLAGS=$CFLAGS
6690 MONO_NATIVE_LDFLAGS=$LDFLAGS
6693 mono_native_compat=no
6694 MONO_NATIVE_PLATFORM=netbsd
6695 AC_MSG_CHECKING([Mono.Native support])
6696 AC_MSG_RESULT(netbsd)
6698 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_NETBSD"
6699 elif case $host_os in haiku*) true;; *) false;; esac; then
6700 mono_native_text="Haiku"
6702 MONO_NATIVE_CXX=$CXX
6703 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6704 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6705 MONO_NATIVE_CFLAGS=$CFLAGS
6706 MONO_NATIVE_LDFLAGS=$LDFLAGS
6709 mono_native_compat=no
6710 MONO_NATIVE_PLATFORM=haiku
6711 AC_MSG_CHECKING([Mono.Native support])
6712 AC_MSG_RESULT(haiku)
6714 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_HAIKU"
6715 elif test x$platform_android = xyes; then
6716 mono_native_text="Android"
6718 MONO_NATIVE_CXX=$CXX
6719 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6720 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6721 MONO_NATIVE_CFLAGS=$CFLAGS
6722 MONO_NATIVE_LDFLAGS=$LDFLAGS
6723 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6726 mono_native_compat=no
6727 MONO_NATIVE_PLATFORM=android
6729 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6732 mono_native_text="no"
6735 AC_MSG_RESULT($mono_native_text)
6737 if test x$mono_native_compat = xyes; then
6738 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6740 MONO_NATIVE_LIBRARY_NAME=libmono-native
6743 AC_SUBST(MONO_NATIVE_PLATFORM)
6744 AC_SUBST(MONO_NATIVE_CC)
6745 AC_SUBST(MONO_NATIVE_CXX)
6746 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6747 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6748 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6749 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6750 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6751 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6752 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6753 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6754 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6755 AC_SUBST(MONO_NATIVE_CFLAGS)
6756 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6757 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6758 AC_SUBST(MONO_NATIVE_LDFLAGS)
6759 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6760 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6761 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6762 AC_SUBST(MONO_NATIVE_LIBADD)
6764 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6765 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6766 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6767 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6768 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6769 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6770 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6771 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_FREEBSD, test x$MONO_NATIVE_PLATFORM = xfreebsd)
6772 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_NETBSD, test x$MONO_NATIVE_PLATFORM = xnetbsd)
6773 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_HAIKU, test x$MONO_NATIVE_PLATFORM = xhaiku)
6775 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6776 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6777 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6778 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6779 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6781 ### C++ Linker selection
6783 # We have to lie to autotools, sometimes.
6785 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6786 # otherwise to CC. We want C linking even if we're compiling with C++ enabled
6787 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6788 # except if we're linking with LLVM which relies on it.
6790 # Explanation of the hack:
6793 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6794 # automake chooses the linker that it used to compile a target based on the
6795 # _SOURCES for that target. If the target is comprised of only C code, it
6796 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6797 # linker arguments and a -o). If the target _SOURCES include at least one C++ file,
6798 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6800 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6801 # or libc++) linked in - even when Mono is written in C++, we take care not to
6802 # require the runtime library. As a result, we don't want g++ or clang++ to do
6803 # the linking. On the other hand if LLVM is enabled, then we _must_ use the
6804 # C++ linker - LLVM doesn't have the same restrictions.
6806 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6807 # mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6808 # automake's autodetection and lets us use the linker that we want.
6810 if test "x$enable_llvm_runtime" = "xyes"; then
6811 AC_SUBST(MONO_CXXLD, [$CXX])
6812 AC_SUBST(MONO_LIBTOOL_TAG, '--tag=CXX')
6814 AC_SUBST(MONO_CXXLD, [$CC])
6815 AC_SUBST(MONO_LIBTOOL_TAG, '')
6818 ### Set -Werror options
6820 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6822 if test x"$GCC" = xyes; then
6824 if test "x$with_jemalloc" != "xyes"; then
6826 # incompatible-pointer-types requires gcc circa 5.x
6829 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6830 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6834 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6840 CFLAGS="$CFLAGS -Werror=return-type"
6843 # Implicit function declarations are not 64 bit safe
6844 # Do this late, since this causes lots of configure tests to fail
6845 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6846 # jay has a lot of implicit declarations
6847 JAY_CFLAGS="-Wno-implicit-function-declaration"
6850 CFLAGS="$CFLAGS -Wsometimes-uninitialized -Werror"
6851 AC_MSG_CHECKING(for -Wsometimes-uninitialized option to gcc)
6855 CFLAGS="$ORIG_CFLAGS -Werror=sometimes-uninitialized"
6862 # zlib/configure checks if this program compiles and if so
6863 # defines _LARGEFILE64_SOURCE on the compiler command line (not config.h).
6865 AC_MSG_CHECKING([for large file support])
6868 #include <sys/types.h>
6872 # FIXME The ramifications of _LARGEFILE64_SOURCE are not understood.
6873 # ZLIB_CFLAGS="$ZLIB_CFLAGS -D_LARGEFILE64_SOURCE=1"
6880 if test x$with_core = xonly; then
6881 if test x$cross_compiling = xno; then
6882 AC_CHECK_FILE($srcdir/../libraries/Native/Unix/System.Globalization.Native/pal_icushim.h, [have_shim_globalization=yes], [have_shim_globalization=no])
6884 if test x$have_shim_globalization = xyes || test x$cross_compiling = xyes; then
6885 ICU_SHIM_PATH=../../../libraries/Native/Unix/System.Globalization.Native
6886 if test x$target_wasm = xyes && test x$with_static_icu = xyes; then
6887 ICU_CFLAGS="-DTARGET_UNIX -DU_DISABLE_RENAMING"
6889 elif test x$target_osx = xyes; then
6890 ORIG_CPPFLAGS=$CPPFLAGS
6891 # adding icu path to pkg_config_path
6892 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig
6893 export PKG_CONFIG_PATH
6894 CPPFLAGS="`pkg-config --cflags-only-I icu-uc`"
6895 AC_CHECK_LIB(icucore, ucol_open, LIBS=$LIBS,
6896 [AC_MSG_ERROR([Cannot find libicucore, skipping build for System.Globalization.Native. .NET globalization is not expected to function.])])
6897 AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6898 if test x$have_sys_icu = xyes; then
6899 ICU_CFLAGS="$CPPFLAGS -DPALEXPORT="" -DOSX_ICU_LIBRARY_PATH=AS_ESCAPE(\"/usr/lib/libicucore.dylib\", '\"') -DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations"
6901 CPPFLAGS=$ORIG_CPPFLAGS
6902 elif test x$platform_android = xyes; then
6903 ICU_CFLAGS="-DPALEXPORT="" -DHAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS -DHAVE_SET_MAX_VARIABLE -DTARGET_UNIX -DTARGET_ANDROID -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
6905 elif test x$host_linux = xyes; then
6906 AC_CHECK_LIB(icuuc, main, LIBS=$LIBS,
6907 [AC_MSG_ERROR([Cannot find libicuuc, try installing libicu-dev (or the appropriate package for your platform).])])
6908 AC_CHECK_LIB(icui18n, main, LIBS=$LIBS,
6909 [AC_MSG_ERROR([Cannot find libicui18n, try installing libicu-dev (or the appropriate package for your platform).])])
6910 AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6911 if test x$have_sys_icu = xyes; then
6912 ICU_CFLAGS="-DPALEXPORT="" -DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
6914 elif test x$host_sunos = xyes; then
6915 ICU_CFLAGS="-DPALEXPORT="" -DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
6917 elif test x$host_wasm = xyes; then
6918 ICU_CFLAGS="-DPALEXPORT="" -DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
6921 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6923 AC_SUBST(ICU_CFLAGS)
6925 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6928 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6931 AC_SUBST(GLOBALIZATION_SHIM_DEFINES)
6932 AC_SUBST(ICU_SHIM_PATH)
6933 AM_CONDITIONAL(HAVE_SYS_ICU, test x$have_sys_icu = xyes)
6939 AC_SUBST(ZLIB_CFLAGS)
6941 # Update all submodules recursively to ensure everything is checked out
6942 if test "x$with_core" != "xonly"; then
6943 (cd $srcdir && scripts/update_submodules.sh)
6948 if test x$host_win32 = xyes; then
6949 # Get rid of 'cyg' prefixes in library names
6950 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6951 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6952 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6953 # executable doesn't work...
6954 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6957 if test x$host_darwin = xyes; then
6958 # This doesn't seem to be required and it slows down parallel builds
6959 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6964 NONE) prefix=$ac_default_prefix ;;
6966 case $exec_prefix in
6967 NONE) exec_prefix='${prefix}' ;;
6971 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6972 # any existing config.make. This allows people to share the same source tree
6973 # with different build directories, one native and one cross
6975 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6977 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6979 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6980 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6981 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6982 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6983 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6984 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6985 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6986 echo "VERSION = $VERSION" >> $mcs_topdir/build/config.make
6989 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6990 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6993 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6996 [myver=$($AWK 'BEGIN {
6997 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6998 if(length(vsplit [1]) > 4) {
6999 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
7001 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
7004 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
7005 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
7007 if test x$host_darwin = xyes; then
7008 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
7009 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
7010 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
7011 elif test x$host_win32 = xyes; then
7012 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
7013 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
7014 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
7015 elif test x$host_linux = xyes; then
7016 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
7017 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
7018 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
7020 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
7021 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
7022 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
7025 echo "PLATFORM_AOT_PREFIX = $PLATFORM_AOT_PREFIX" >> $mcs_topdir/build/config.make
7026 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
7027 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
7030 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
7031 enable_system_aot=yes
7034 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
7035 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
7038 if test x$DISABLE_MCS_DOCS = xyes; then
7039 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
7042 if test x$has_extension_module != xno; then
7043 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
7046 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
7048 if test "x$test_bcl_opt" = "xyes"; then
7049 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
7052 echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7053 echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7054 echo "VBCS_LOCATION?=$VBCS_LOCATION" >> $srcdir/$mcsdir/build/config.make
7056 if test $csc_compiler = mcs; then
7057 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
7060 if test "x$AOT_BUILD_FLAGS" != "x" ; then
7061 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
7062 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
7064 if test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" = "xno"; then
7065 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS,$MONO_LLVM_PATH_OPTION" >> $srcdir/$mcsdir/build/config.make
7067 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
7071 if test "x$AOT_MODE" != "x" ; then
7072 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
7075 if test "x$enable_btls" = "xyes"; then
7076 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
7079 if test "x$mono_native" = "xyes"; then
7080 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
7082 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
7085 if test x$mono_native_compat = xyes; then
7086 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
7088 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
7091 force_enable_compiler_server=no;
7093 AC_MSG_CHECKING([compiler server])
7094 AC_ARG_WITH(compiler-server, [ --with-compiler-server=yes,no,default,force Enables or disables compiler server],[
7095 if test x$withval = xyes; then
7096 enable_compiler_server=yes;
7097 # force will bypass any automatic disables to allow you to test the compiler server
7098 # in scenarios where it is disabled
7099 elif test x$withval = xforce; then
7100 enable_compiler_server=yes;
7101 force_enable_compiler_server=yes;
7102 elif test x$withval = xno; then
7103 enable_compiler_server=no;
7104 elif test x$withval = xdefault; then
7105 enable_compiler_server=yes;
7107 AC_MSG_ERROR([You must supply one of "yes", "no", "default" or "force" to the --with-compiler-server option])
7109 ],[enable_compiler_server=yes])
7111 AC_MSG_RESULT($enable_compiler_server)
7113 if test x$enable_compiler_server = xyes; then
7114 if test x$force_enable_compiler_server = xyes; then
7115 AC_MSG_WARN([forcing compiler server to stay enabled])
7116 elif test x$host_darwin = xyes || test x$host_win32 = xyes; then
7117 AC_MSG_WARN([compiler server temporarily disabled on darwin and win32])
7118 enable_compiler_server=no;
7119 elif test x$csc_compiler = xmcs; then
7120 AC_MSG_WARN([mcs does not support the compiler server])
7121 enable_compiler_server=no;
7125 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
7126 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
7127 if test x$enable_compiler_server = xyes; then
7128 echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
7130 echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
7132 echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
7134 if test x$enable_msvc_only = xyes; then
7135 echo "ENABLE_MSVC_ONLY=1" >> $srcdir/$mcsdir/build/config.make
7142 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
7144 btls_platform_string=
7145 if test x$enable_btls = xyes; then
7146 if test x$btls_android = xyes; then
7147 btls_platform_string=" (android:$BTLS_PLATFORM)"
7149 btls_platform_string=" ($BTLS_PLATFORM)"
7154 if test x$buildsgen = xyes; then
7155 if test x$enable_cooperative_suspend != xno; then
7156 thread_suspend_msg="Suspend: Cooperative"
7157 elif test x$enable_hybrid_suspend != xno; then
7158 thread_suspend_msg="Suspend: Hybrid"
7160 thread_suspend_msg="Suspend: Preemptive"
7164 if test "x$with_core" = "xonly"; then
7165 if test ! -e netcore/Makefile; then
7166 # Out of tree builds
7168 echo "all:" > netcore/Makefile
7170 echo "VERSION = $VERSION" > netcore/config.make
7171 echo "RID = $RID" >> netcore/config.make
7172 echo "COREARCH = $COREARCH" >> netcore/config.make
7173 echo "CORETARGETS = $CORETARGETS" >> netcore/config.make
7174 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> netcore/config.make
7176 if test x$build_darwin = xyes; then
7177 echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7178 elif test x$host_darwin = xyes; then
7179 echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7180 elif test x$host_win32 = xyes; then
7181 echo "HOST_PLATFORM ?= win32" >> netcore/config.make
7182 elif test x$host_linux = xyes; then
7183 echo "HOST_PLATFORM ?= linux" >> netcore/config.make
7185 echo "HOST_PLATFORM ?= unix" >> netcore/config.make
7192 C# Compiler: $csc_compiler
7193 CompilerServer:$enable_compiler_server
7201 SIGALTSTACK: $with_sigaltstack
7203 BigArrays: $enable_big_arrays
7204 DTrace: $enable_dtrace
7205 LLVM Back End: $enable_llvm (built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
7206 Spectre: $spectre_mitigation_status
7207 Mono.Native: $mono_native_text
7210 .NET 4.x: $with_profile4_x
7211 Xamarin.Android: $with_monodroid
7212 Xamarin.iOS: $with_monotouch
7213 Xamarin.WatchOS: $with_monotouch_watch
7214 Xamarin.TVOS: $with_monotouch_tv
7215 Xamarin.Mac: $with_xammac
7216 Windows AOT: $with_winaot
7218 Unreal: $with_unreal
7219 WebAssembly: $with_wasm
7220 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid), AOT Full Interp ($with_testing_aot_full_interp), Windows Full AOT Interp ($with_testing_winaot_interp)
7221 JNI support: $jdk_headers_found
7222 libgdiplus: $libgdiplus_msg
7224 BTLS: $enable_btls$btls_platform_string
7225 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
7226 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
7227 .NET Core: $with_core
7230 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
7231 AC_MSG_WARN([Turning off static Mono is a risk, you might run into unexpected bugs])