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 -Wc++-compat"
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 SHARED_CFLAGS="$SHARED_CFLAGS -Werror"
1039 AC_SUBST([SHARED_CFLAGS])
1041 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
1043 AC_SUBST(GLIB_CFLAGS)
1045 # Enable support for fast thread-local storage
1046 # Some systems have broken support, so we allow to disable it.
1047 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
1049 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
1050 # This does not work on some platforms (bug #55253)
1051 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
1053 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
1054 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
1055 # Same as --with-shared_mono=no
1056 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
1058 if test "x$enable_static" = "xno"; then
1062 if test "x$enable_shared" = "xno"; then
1066 if test "x$enable_libraries" = "xno"; then
1070 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
1072 if test "x$host_win32" = "xyes"; then
1073 # Boehm GC requires the runtime to be in its own dll
1077 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
1078 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
1079 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
1080 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
1082 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
1083 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
1084 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
1086 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
1087 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
1088 AC_TRY_COMPILE([], [
1091 # Pass it to libgc as well
1092 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
1099 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
1101 if test x$enable_small_config = xyes; then
1102 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
1103 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
1106 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)
1108 DISABLED_FEATURES=none
1109 csc_compiler=default
1111 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
1112 AC_MSG_CHECKING([CSharp compiler to use])
1113 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
1114 if test x$withval = xmcs; then
1116 elif test x$withval = xroslyn; then
1118 elif test x$withval = xdefault; then
1121 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
1123 ],[csc_compiler=default])
1125 if test $csc_compiler = default; then
1126 if test $endian = big; then
1128 s390x*) csc_compiler=roslyn ;;
1131 elif test $endian = little; then
1133 powerpc*) csc_compiler=mcs ;;
1134 *) csc_compiler=roslyn ;;
1140 AC_MSG_RESULT($csc_compiler)
1142 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
1143 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
1144 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])
1147 if test x$target_win32 = xyes; then
1149 with_jemalloc_assert=no
1150 with_jemalloc_always=no
1153 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
1154 if test "x$with_jemalloc_assert" = "xyes"; then
1155 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
1156 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
1157 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
1160 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
1161 if test "x$with_jemalloc_always" = "xyes"; then
1163 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
1164 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
1165 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
1168 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
1169 if test "x$with_jemalloc" = "xyes"; then
1170 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
1171 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
1172 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
1174 if test "x$target_mach" = "xyes"; then
1175 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
1178 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
1179 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
1181 AC_SUBST(JEMALLOC_CFLAGS)
1182 AC_SUBST(JEMALLOC_CPPFLAGS)
1183 AC_SUBST(JEMALLOC_LDFLAGS)
1184 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1188 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1189 # MERP - The MS telemetry profile. Not for general use.
1190 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1192 # 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.
1194 #--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.
1195 #--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.
1196 #--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.
1197 #--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.
1199 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])
1200 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])
1201 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1203 if test "x$with_crash_privacy" = "xyes"; then
1204 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1207 if test "x$with_structured_crashes" = "xno"; then
1208 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1212 *-mingw*|*-*-cygwin*)
1217 if test "x$crash_reporting" != "xyes"; then
1218 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1219 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1221 AM_CONDITIONAL(DISABLE_CRASH_REPORTING, test x$crash_reporting != xyes)
1223 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1224 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1226 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1227 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1229 if test x$enable_monodroid = xyes; then
1230 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1233 if test x$enable_monotouch = xyes; then
1234 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1237 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1238 AM_CONDITIONAL(ENABLE_CXX, test x$enable_cxx = xyes)
1240 # mono/corefx/native has a lot of invalid C++98 in its headers
1241 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1242 # use these C99 print macros in the command line, since glib may not win first inttypes include
1243 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1244 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1245 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1246 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1248 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1249 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1250 # and add it whenever we're running clang on Darwin.
1251 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1252 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1255 AC_SUBST(CXXFLAGS_COMMON)
1257 if test "x$enable_cxx" = "xyes"; then
1259 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1261 # -std=gnu99 -xc++ is not allowed and errors.
1262 CXX_REMOVE_CFLAGS=-std=gnu99
1263 # These give warnings and should be removed. They are C-only.
1264 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1265 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1266 # Likewise with CentOS 6 gcc 4.4.
1267 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1269 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1270 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1271 # generates a warning every time we run gcc which is very unsightly.
1272 # The warning is for e.g. sprintf(foo, "") which can just be
1273 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1274 # and completely legal and valid.
1275 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1276 # Alternatively, just run $CXX -xc++ -c /dev/null.
1278 ORIG_CXXFLAGS=$CXXFLAGS
1279 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1280 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1281 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1283 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1284 CXXFLAGS=$ORIG_CXXFLAGS
1287 AC_SUBST(CXX_ADD_CFLAGS)
1288 AC_SUBST(CXX_REMOVE_CFLAGS)
1291 # Set the build profiles and options before things which use them
1294 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])
1295 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1296 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1297 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])
1298 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])
1299 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1300 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1301 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])
1302 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])
1303 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])
1304 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1305 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])
1306 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1307 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1308 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1311 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])
1312 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])
1313 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])
1314 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])
1316 AC_ARG_WITH(static_icu, [ --with-static-icu=yes|no Integrate ICU statically into the runtime (defaults to no)],[
1317 if test x$with_static_icu = xyes ; then
1318 AC_DEFINE(STATIC_ICU,1,[Integrate ICU statically into the runtime.])
1320 ], [with_static_icu=no])
1323 dnl Spectre compiler mitigation flag checks
1325 if test "x$with_spectre_mitigation" = "xyes"; then
1326 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1328 SPECTRE_INDIRECT_BRANCH_KIND=
1329 case "x$with_spectre_indirect_branch_choice" in
1330 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1331 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1332 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1333 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1334 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1337 SPECTRE_FUNCTION_RETURN_KIND=""
1338 case "x$with_spectre_function_return_choice" in
1339 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1340 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1341 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1342 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1343 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1346 AX_CHECK_COMPILE_FLAG(
1347 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1348 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1351 AX_CHECK_COMPILE_FLAG(
1352 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1353 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1356 if test "x$SPECTRE_CFLAGS" != "x" ; then
1357 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1358 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1359 spectre_mitigation_status="mitigation enabled"
1362 spectre_mitigation_status="no mitigation"
1366 dnl Profile defaults
1368 TEST_PROFILE=default
1369 enable_llvm_default=no
1371 with_profile4_x_default=no
1372 with_monodroid_default=no
1373 with_monotouch_default=no
1374 with_monotouch_watch_default=no
1375 with_monotouch_tv_default=no
1376 with_xammac_default=no
1377 with_testing_aot_full_interp_default=no
1378 with_testing_aot_hybrid_default=no
1379 with_testing_aot_full_default=no
1380 with_winaot_default=no
1381 with_testing_winaot_interp_default=no
1382 with_orbis_default=no
1383 with_unreal_default=no
1384 with_wasm_default=no
1386 with_bitcode_default=no
1387 enable_cooperative_suspend_default=no
1388 enable_hybrid_suspend_default=no
1390 # For the sake of clearer error messages, these numbers should all be different from each other.
1391 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4400,nftnptr-arg-trampolines=4000,nrgctx-trampolines=21000
1393 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1395 MONO_LLVM_PATH_OPTION=llvm-path="`pwd`/llvm/usr/bin"
1397 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1398 DISABLE_MCS_DOCS_default=yes
1401 if test x$with_runtime_preset = xnetcore; then
1402 # Keep in sync with winconfig.h netcore configuration.
1403 DISABLE_MCS_DOCS_default=yes
1406 enable_support_build=no
1408 mono_feature_disable_remoting='yes'
1409 mono_feature_disable_reflection_emit_save='yes'
1410 mono_feature_disable_appdomains='yes'
1411 mono_feature_disable_cleanup='yes'
1412 mono_feature_disable_assembly_remapping='yes'
1413 mono_feature_disable_security='yes'
1414 mono_feature_disable_mdb='yes'
1415 mono_feature_disable_com='yes'
1416 mono_feature_disable_gac='yes'
1417 mono_feature_disable_perfcounters='yes'
1418 mono_feature_disable_attach='yes'
1419 mono_feature_disable_cfgdir_config='yes'
1420 if test "x$enable_monodroid" = "xno" -a "x$enable_monotouch" = "xno"; then
1421 mono_feature_disable_dllmap='yes' # FIXME: the mobile products use this
1423 disable_mono_native=yes
1425 elif test x$with_runtime_preset = xnet_4_x; then
1426 with_profile4_x_default=yes
1427 TEST_PROFILE=net_4_x
1428 elif test x$with_runtime_preset = xall; then
1429 with_profile4_x_default=yes
1430 with_monodroid_default=yes
1431 with_monotouch_default=yes
1432 with_monotouch_watch_default=yes
1433 with_monotouch_tv_default=yes
1434 with_xammac_default=yes
1435 with_winaot_default=yes
1436 with_testing_winaot_interp_default=yes
1437 with_orbis_default=yes
1438 with_unreal_default=yes
1439 with_wasm_default=yes
1440 with_testing_aot_full_interp_default=yes
1441 with_testing_aot_hybrid_default=yes
1442 with_testing_aot_full_default=yes
1443 TEST_PROFILE=net_4_x
1444 elif test x$with_runtime_preset = xbitcode; then
1445 DISABLE_MCS_DOCS_default=yes
1446 with_testing_aot_full_default=yes
1447 with_bitcode_default=yes
1448 enable_cooperative_suspend_default=yes
1449 # FIXME: use TEST_PROFILE=testing_aot_full
1450 TEST_PROFILE=testing_aot_bitcode
1451 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1452 enable_llvm_default=yes
1454 mono_feature_disable_com='yes'
1455 mono_feature_disable_remoting='yes'
1456 mono_feature_disable_reflection_emit_save='yes'
1457 mono_feature_disable_reflection_emit='yes'
1458 mono_feature_disable_appdomains='yes'
1460 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1461 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1462 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1464 elif test x$with_runtime_preset = xbitcodeinterp; then
1465 with_testing_aot_full_interp_default=yes
1466 with_bitcode_default=yes
1467 enable_cooperative_suspend_default=yes
1468 # FIXME: use TEST_PROFILE=testing_aot_full_interp
1469 TEST_PROFILE=testing_aot_bitcode_interp
1470 PLATFORM_TEST_HARNESS_EXCLUDES=BitcodeNotSupported
1471 enable_llvm_default=yes
1473 # mscorlib.dll aot compilation crashes
1474 mono_feature_disable_com='yes'
1476 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1477 AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1478 AOT_RUN_FLAGS="--llvmonly-interp"
1479 elif test x$with_runtime_preset = xfullaot; then
1480 DISABLE_MCS_DOCS_default=yes
1481 with_testing_aot_full_default=yes
1482 TEST_PROFILE=testing_aot_full
1484 mono_feature_disable_com='yes'
1485 mono_feature_disable_remoting='yes'
1486 mono_feature_disable_reflection_emit_save='yes'
1487 mono_feature_disable_reflection_emit='yes'
1488 mono_feature_disable_appdomains='yes'
1490 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1491 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1493 elif test x$with_runtime_preset = xfullaot_llvm; then
1494 DISABLE_MCS_DOCS_default=yes
1495 with_testing_aot_full_default=yes
1496 TEST_PROFILE=testing_aot_full
1498 mono_feature_disable_com='yes'
1499 mono_feature_disable_remoting='yes'
1500 mono_feature_disable_reflection_emit_save='yes'
1501 mono_feature_disable_reflection_emit='yes'
1502 mono_feature_disable_appdomains='yes'
1504 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1505 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1507 elif test x$with_runtime_preset = xhybridaot; then
1508 DISABLE_MCS_DOCS_default=yes
1509 with_testing_aot_hybrid_default=yes
1510 TEST_PROFILE=testing_aot_hybrid
1512 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1513 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1514 elif test x$with_runtime_preset = xhybridaot_llvm; then
1515 DISABLE_MCS_DOCS_default=yes
1516 with_testing_aot_hybrid_default=yes
1517 TEST_PROFILE=testing_aot_hybrid
1519 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1520 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1521 elif test x$with_runtime_preset = xfullaotinterp; then
1522 with_testing_aot_full_interp_default=yes
1523 TEST_PROFILE=testing_aot_full_interp
1525 # mscorlib.dll aot compilation crashes
1526 mono_feature_disable_com='yes'
1528 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1529 AOT_RUN_FLAGS="--full-aot-interp"
1530 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1531 with_testing_aot_full_interp_default=yes
1532 TEST_PROFILE=testing_aot_full_interp
1534 # mscorlib.dll aot compilation crashes
1535 mono_feature_disable_com='yes'
1537 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1538 AOT_RUN_FLAGS="--full-aot-interp"
1539 elif test x$with_runtime_preset = xaot; then
1540 with_profile4_x_default=yes
1542 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1545 DISABLE_MCS_DOCS_default=yes
1546 elif test x$with_runtime_preset = xaot_llvm; then
1547 with_profile4_x_default=yes
1549 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1552 DISABLE_MCS_DOCS_default=yes
1553 elif test x$with_runtime_preset = xwinaot; then
1554 DISABLE_MCS_DOCS_default=yes
1555 with_winaot_default=yes
1558 mono_feature_disable_com='yes'
1559 mono_feature_disable_remoting='yes'
1560 mono_feature_disable_reflection_emit_save='yes'
1561 mono_feature_disable_reflection_emit='yes'
1562 mono_feature_disable_appdomains='yes'
1564 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1565 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1567 elif test x$with_runtime_preset = xwinaotinterp; then
1568 DISABLE_MCS_DOCS_default=yes
1569 with_testing_winaot_interp_default=yes
1570 TEST_PROFILE=testing_winaot_interp
1572 mono_feature_disable_com='yes'
1573 mono_feature_disable_remoting='yes'
1574 mono_feature_disable_appdomains='yes'
1576 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1577 AOT_RUN_FLAGS="--full-aot-interp"
1578 elif test x$with_runtime_preset = xwinaotinterp_llvm; then
1579 DISABLE_MCS_DOCS_default=yes
1580 with_testing_winaot_interp_default=yes
1581 TEST_PROFILE=testing_winaot_interp
1583 mono_feature_disable_com='yes'
1584 mono_feature_disable_remoting='yes'
1585 mono_feature_disable_appdomains='yes'
1587 INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1588 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1589 AOT_RUN_FLAGS="--full-aot-interp"
1590 elif test x$with_runtime_preset = xwinaot_llvm; then
1591 DISABLE_MCS_DOCS_default=yes
1592 with_winaot_default=yes
1595 mono_feature_disable_com='yes'
1596 mono_feature_disable_remoting='yes'
1597 mono_feature_disable_reflection_emit_save='yes'
1598 mono_feature_disable_reflection_emit='yes'
1599 mono_feature_disable_appdomains='yes'
1601 INVARIANT_AOT_OPTIONS="llvmllc=-mattr=sse4.1,$INVARIANT_AOT_OPTIONS"
1602 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1603 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1605 elif test x$with_runtime_preset = xorbis; then
1606 DISABLE_MCS_DOCS_default=yes
1607 with_orbis_default=yes
1610 mono_feature_disable_com='yes'
1611 mono_feature_disable_remoting='yes'
1612 mono_feature_disable_reflection_emit_save='yes'
1613 mono_feature_disable_reflection_emit='yes'
1614 mono_feature_disable_appdomains='yes'
1616 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1617 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1619 elif test x$with_runtime_preset = xunreal; then
1620 DISABLE_MCS_DOCS_default=yes
1621 with_unreal_default=yes
1624 mono_feature_disable_com='yes'
1625 mono_feature_disable_remoting='yes'
1626 mono_feature_disable_appdomains='no'
1628 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1629 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1630 elif test x$with_runtime_preset = xwasm; then
1631 DISABLE_MCS_DOCS_default=yes
1632 with_wasm_default=yes
1635 mono_feature_disable_com='yes'
1636 mono_feature_disable_remoting='yes'
1637 mono_feature_disable_reflection_emit_save='yes'
1638 mono_feature_disable_reflection_emit='yes'
1639 mono_feature_disable_appdomains='yes'
1641 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1642 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1644 TEST_PROFILE=net_4_x
1645 with_profile4_x_default=yes
1648 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1649 AC_SUBST(AOT_BUILD_FLAGS)
1650 AC_SUBST(AOT_RUN_FLAGS)
1651 # For llvmonlycheck + fullaotcheck
1652 AC_SUBST(INVARIANT_AOT_OPTIONS)
1655 AC_SUBST(TEST_PROFILE)
1657 if test "x$with_profile4_x" = "xdefault"; then
1658 with_profile4_x=$with_profile4_x_default
1660 if test "x$with_monodroid" = "xdefault"; then
1661 with_monodroid=$with_monodroid_default
1663 if test "x$with_monotouch" = "xdefault"; then
1664 with_monotouch=$with_monotouch_default
1666 if test "x$with_monotouch_watch" = "xdefault"; then
1667 with_monotouch_watch=$with_monotouch_watch_default
1669 if test "x$with_monotouch_tv" = "xdefault"; then
1670 with_monotouch_tv=$with_monotouch_tv_default
1672 if test "x$with_bitcode" = "xdefault"; then
1673 with_bitcode=$with_bitcode_default
1675 if test "x$with_xammac" = "xdefault"; then
1676 with_xammac=$with_xammac_default
1678 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1679 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1681 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1682 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1684 if test "x$with_testing_aot_full" = "xdefault"; then
1685 with_testing_aot_full=$with_testing_aot_full_default
1687 if test "x$with_winaot" = "xdefault"; then
1688 with_winaot=$with_winaot_default
1690 if test "x$with_testing_winaot_interp" = "xdefault"; then
1691 with_testing_winaot_interp=$with_testing_winaot_interp_default
1693 if test "x$with_orbis" = "xdefault"; then
1694 with_orbis=$with_orbis_default
1696 if test "x$with_unreal" = "xdefault"; then
1697 with_unreal=$with_unreal_default
1699 if test "x$with_wasm" = "xdefault"; then
1700 with_wasm=$with_wasm_default
1704 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1705 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1706 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1707 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1708 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1709 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1710 AM_CONDITIONAL(STATIC_ICU, test "x$with_static_icu" = "xyes")
1711 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1712 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1713 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1714 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1715 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1716 AM_CONDITIONAL(INSTALL_TESTING_WINAOT_INTERP, [test "x$with_testing_winaot_interp" != "xno"])
1717 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1718 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1719 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1720 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1722 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1723 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"])
1724 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"])
1725 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1727 default_profile=net_4_x
1728 if test -z "$INSTALL_MONODROID_TRUE"; then :
1729 default_profile=monodroid
1731 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1732 default_profile=monotouch
1734 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1735 default_profile=xammac
1737 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1738 default_profile=testing_aot_full_interp
1740 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1741 default_profile=testing_aot_hybrid
1743 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1744 default_profile=testing_aot_full
1746 if test -z "$INSTALL_WINAOT_TRUE"; then :
1747 default_profile=winaot
1749 if test -z "$INSTALL_TESTING_WINAOT_INTERP_TRUE"; then :
1750 default_profile=testing_winaot_interp
1752 if test -z "$INSTALL_ORBIS_TRUE"; then :
1753 default_profile=orbis
1755 if test -z "$INSTALL_UNREAL_TRUE"; then :
1756 default_profile=unreal
1758 if test -z "$INSTALL_WASM_TRUE"; then :
1759 default_profile=wasm
1761 if test -z "$INSTALL_4_x_TRUE"; then :
1762 default_profile=net_4_x
1764 DEFAULT_PROFILE=$default_profile
1765 AC_SUBST(DEFAULT_PROFILE)
1768 # End build profile configuration
1771 if test x$USE_NLS = xprofile_default; then
1773 AC_MSG_CHECKING([NLS used])
1775 # We make the default value for USE_NLS
1776 # "no" on OSX because it isn't available on most
1777 # default OSX installs. The most common configurations will
1778 # all disable it, so this saves us typing.
1779 if test x$host_darwin = xyes; then
1786 AC_MSG_RESULT([$USE_NLS])
1789 AC_ARG_ENABLE(static-gcc-libs, [ --enable-static-gcc-libs Statically link GCC support libs (for MinGW32)])
1790 if test "x$enable_static_gcc_libs" = "xyes"; then
1791 # llvm/build.mk doesn't use automake, so make a regular make variable for it.
1792 AC_SUBST(STATIC_GCC_LIBS,1)
1794 AM_CONDITIONAL(ENABLE_STATIC_GCC_LIBS, test "x$enable_static_gcc_libs" = "xyes")
1796 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1797 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.],
1799 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1800 eval "mono_feature_disable_$feature='yes'"
1802 DISABLED_FEATURES=$enable_minimal
1803 disabled="Disabled: $enable_minimal"
1806 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1808 if test "x$mono_feature_disable_aot" = "xyes"; then
1809 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1810 enable_system_aot=no
1811 AC_MSG_NOTICE([Disabled AOT compiler])
1814 if test "x$mono_feature_disable_profiler" = "xyes"; then
1815 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1816 AC_MSG_NOTICE([Disabled support for the profiler])
1818 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1820 if test "x$mono_feature_disable_decimal" = "xyes"; then
1821 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1822 AC_MSG_NOTICE([Disabled support for decimal])
1825 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1826 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1827 AC_MSG_NOTICE([Disabled support for P/Invoke])
1830 if test "x$mono_feature_disable_debug" = "xyes"; then
1831 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1832 AC_MSG_NOTICE([Disabled support for runtime debugging])
1835 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1836 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1837 mono_feature_disable_reflection_emit_save=yes
1838 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1841 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1842 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1843 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1846 if test "x$mono_feature_disable_large_code" = "xyes"; then
1847 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1848 AC_MSG_NOTICE([Disabled support for large assemblies])
1851 if test "x$mono_feature_disable_logging" = "xyes"; then
1852 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1853 AC_MSG_NOTICE([Disabled support for logging])
1856 if test "x$mono_feature_disable_com" = "xyes"; then
1857 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1858 AC_MSG_NOTICE([Disabled COM support])
1861 if test "x$mono_feature_disable_ssa" = "xyes"; then
1862 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1863 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1866 if test "x$mono_feature_disable_generics" = "xyes"; then
1867 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1868 AC_MSG_NOTICE([Disabled Generics Support])
1871 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1872 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1873 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1876 if test "x$mono_feature_disable_portability" = "xyes"; then
1877 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1878 AC_MSG_NOTICE([Disabled IO Portability layer])
1881 if test "x$mono_feature_disable_attach" = "xyes"; then
1882 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1883 AC_MSG_NOTICE([Disabled agent attach])
1886 if test "x$mono_feature_disable_verifier" = "xyes"; then
1887 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1888 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1891 if test "x$mono_feature_disable_jit" = "xyes"; then
1892 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1893 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1896 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1898 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1899 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1900 AC_MSG_NOTICE([Disabled the interpreter])
1903 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1905 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1906 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1909 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1911 if test "x$mono_feature_disable_simd" = "xyes"; then
1912 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1913 AC_MSG_NOTICE([Disabled SIMD support])
1916 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1917 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1918 AC_MSG_NOTICE([Disabled Soft Debugger.])
1921 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1923 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1924 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1925 AC_MSG_NOTICE([Disabled Performance Counters.])
1927 if test "x$mono_feature_disable_normalization" = "xyes"; then
1928 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1929 AC_MSG_NOTICE([Disabled String normalization support.])
1932 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1933 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1934 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1935 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1938 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1939 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1940 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1943 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1944 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1945 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1948 if test "x$mono_feature_disable_remoting" = "xyes"; then
1949 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1950 AC_MSG_NOTICE([Disabled remoting])
1953 if test "x$mono_feature_disable_security" = "xyes"; then
1954 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1955 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1958 if test "x$mono_feature_disable_lldb" = "xyes"; then
1959 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1960 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1963 if test "x$mono_feature_disable_mdb" = "xyes"; then
1964 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1965 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1968 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1969 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1970 AC_MSG_NOTICE([Disabled assertion messages.])
1973 if test "x$mono_feature_disable_cfgdir_config" = "xyes"; then
1974 AC_DEFINE(DISABLE_CFGDIR_CONFIG, 1, [Disable config directories.])
1975 AC_MSG_NOTICE([Disabled config directories.])
1978 if test "x$mono_feature_disable_config" = "xyes"; then
1979 AC_DEFINE(DISABLE_CONFIG, 1, [Disable .config file support.])
1980 AC_MSG_NOTICE([Disabled .config file support.])
1983 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1984 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1985 AC_MSG_NOTICE([Disabled runtime cleanup.])
1988 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1989 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1990 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1993 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1994 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1995 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1998 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1999 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
2000 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
2003 if test "x$mono_feature_disable_sgen_toggleref" = "xyes"; then
2004 AC_DEFINE(DISABLE_SGEN_TOGGLEREF, 1, [Disable toggleref support in SGEN.])
2005 AC_MSG_NOTICE([Disabled toggleref support in SGEN.])
2008 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
2009 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
2010 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
2013 if test "x$mono_feature_disable_sgen_binary_protocol" = "xyes"; then
2014 AC_DEFINE(DISABLE_SGEN_BINARY_PROTOCOL, 1, [Disable binary protocol logging in SGEN.])
2015 AC_MSG_NOTICE([Disabled binary protocol logging in SGEN.])
2018 if test "x$mono_feature_disable_sockets" = "xyes"; then
2019 AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
2020 AC_MSG_NOTICE([Disabled sockets])
2023 if test "x$mono_feature_disable_gac" = "xyes"; then
2024 AC_DEFINE(DISABLE_GAC, 1, [Disable GAC])
2025 AC_MSG_NOTICE([Disabled GAC support])
2028 if test "x$mono_feature_disable_dllmap" = "xyes"; then
2029 AC_DEFINE(DISABLE_DLLMAP,1,[Disables use of DllMaps in MonoVM])
2030 AC_MSG_NOTICE([Disabled DllMap in the loader.])
2033 if test "x$mono_feature_disable_threads" = "xyes"; then
2034 AC_DEFINE(DISABLE_THREADS, 1, [Disable Threads])
2035 AC_MSG_NOTICE([Disabled threading support])
2038 if test "x$mono_feature_disable_processes" = "xyes"; then
2039 AC_DEFINE(DISABLE_PROCESSES, 1, [Disable process support])
2040 AC_MSG_NOTICE([Disabled process support])
2043 if test "x$mono_feature_disable_eventpipe" = "xyes"; then
2044 AC_DEFINE(DISABLE_EVENTPIPE, 1, [Disable EventPipe support])
2045 AC_MSG_NOTICE([Disabled EventPipe support])
2046 enable_perftracing=no
2049 if test x$enable_perftracing = x -a x$with_core = xonly; then
2050 if test -f $srcdir/mono/eventpipe/ep.h; then
2051 enable_perftracing=yes
2054 if test x$enable_perftracing = xyes; then
2055 AC_DEFINE(ENABLE_PERFTRACING,1,[Enables support for eventpipe library])
2057 AM_CONDITIONAL(ENABLE_PERFTRACING, test x$enable_perftracing = xyes)
2059 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
2060 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
2062 has_extension_module=no
2063 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
2065 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
2066 if test x$extension = xdefault ; then
2067 has_extension_module=yes;
2070 if test x$enable_extension_module = xyes; then
2071 has_extension_module=yes;
2075 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
2077 if test x$has_extension_module != xno ; then
2078 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
2079 AC_MSG_NOTICE([Enabling mono extension module.])
2083 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
2085 AC_MSG_CHECKING(for visibility __attribute__)
2088 void __attribute__ ((visibility ("hidden"))) doit (void) {}
2089 int main () { doit (); return 0; }
2092 have_visibility_hidden=yes
2095 have_visibility_hidden=no
2100 dnl Boehm GC configuration
2103 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
2105 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
2106 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
2108 if test "x$support_boehm" = "xyes"; then
2110 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
2111 if test x$enable_parallel_mark = xyes; then
2112 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
2121 LIBGC_CPPFLAGS='-I$(top_srcdir)/external/bdwgc/include -I$(top_srcdir)/external/bdwgc/libatomic_ops/src'
2122 LIBGC_LIBS='$(top_builddir)/external/bdwgc/libgc.la'
2123 LIBGC_STATIC_LIBS='$(top_builddir)/external/bdwgc/libgc-static.la'
2125 BOEHM_DEFINES="-DHAVE_BOEHM_GC -DGC_THREADS"
2127 if test x$target_win32 = xyes; then
2128 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
2129 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
2132 gc_msg="Included Boehm GC with typed GC"
2133 if test x$enable_parallel_mark = xyes; then
2134 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
2135 gc_msg="$gc_msg and parallel mark"
2137 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
2142 AC_MSG_WARN("External Boehm is no longer supported")
2146 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
2150 AC_MSG_WARN("Compiling mono without GC.")
2151 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
2152 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
2156 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
2160 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])
2161 if test "x$large_heap" = "xyes"; then
2162 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
2165 AC_SUBST(LIBGC_CPPFLAGS)
2166 AC_SUBST(LIBGC_LIBS)
2167 AC_SUBST(LIBGC_STATIC_LIBS)
2168 AC_SUBST(BOEHM_DEFINES)
2171 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
2174 dnl End of Boehm GC Configuration
2177 dnl *************************************
2178 dnl *** Checks for zero length arrays ***
2179 dnl *************************************
2180 AC_MSG_CHECKING(whether $CC supports zero length arrays)
2188 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
2191 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
2194 dnl ***********************************
2195 dnl *** Checks for signals
2196 dnl ***********************************
2197 AC_CHECK_HEADERS(signal.h)
2198 AC_CHECK_FUNCS(sigaction)
2199 AC_CHECK_FUNCS(kill)
2200 AC_CHECK_FUNCS(signal)
2202 # signal() is declared inline in Android headers
2203 # so we need to workaround it by overriding the check.
2204 if test x$platform_android = xyes; then
2205 AC_DEFINE(HAVE_SIGNAL,1)
2208 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
2209 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
2211 if test x$host_win32 = xno; then
2212 dnl *************************************
2213 dnl *** Checks for time capabilities ***
2214 dnl *************************************
2216 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
2217 AC_TRY_COMPILE([#include <time.h>], [
2218 const int foo = CLOCK_MONOTONIC;
2221 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
2226 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
2227 AC_TRY_COMPILE([#include <time.h>], [
2228 const int foo = CLOCK_MONOTONIC_COARSE;
2231 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
2236 AC_MSG_CHECKING(for CLOCK_REALTIME)
2237 AC_TRY_COMPILE([#include <time.h>], [
2238 const int foo = CLOCK_REALTIME;
2241 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
2246 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
2247 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
2248 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
2249 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
2250 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
2251 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
2253 AC_CHECK_TYPES([clockid_t], [AC_DEFINE(HAVE_CLOCKID_T)], [],
2254 [#include <sys/types.h>])
2256 dnl hires monotonic clock support
2258 # Check for clock_gettime
2259 if test x$target_osx = xyes; then
2260 # On OSX, clock_gettime is only really available on 10.12 or later
2261 # However, it exists as a weak symbol on earlier versions, so hard-code a version check
2262 AC_MONO_APPLE_AVAILABLE(clock_gettime_available, [whether clock_gettime is available on OSX],
2263 [(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
2264 if test x$clock_gettime_available = xyes; then
2265 AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [clock_gettime])
2268 AC_CHECK_FUNC(clock_gettime, [
2269 AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [clock_gettime])
2271 # Old glibc (< 2.17) has clock_gettime in librt, so check there too
2272 AC_CHECK_LIB(rt, clock_gettime, [
2273 AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [clock_gettime])
2279 AC_CHECK_FUNCS(clock_nanosleep)
2281 dnl dynamic loader support
2282 AC_CHECK_FUNC(dlopen, DL_LIB="",
2283 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
2285 if test x$dl_support = xno; then
2286 AC_MSG_WARN([No dynamic loading support available])
2288 LIBS="$LIBS $DL_LIB"
2289 dnl from glib's configure.ac
2290 if test "x$cross_compiling" = "xyes"; then
2291 AC_MSG_RESULT(cross compiling, assuming no)
2294 AC_CACHE_CHECK([for preceeding underscore in symbols],
2296 AC_TRY_RUN([#include <dlfcn.h>
2297 int mono_underscore_test (void) { return 42; }
2299 void *f1 = (void*)0, *f2 = (void*)0, *handle;
2300 handle = dlopen ((void*)0, 0);
2302 f1 = dlsym (handle, "mono_underscore_test");
2303 f2 = dlsym (handle, "_mono_underscore_test");
2304 } return (!f2 || f1);
2306 [mono_cv_uscore=yes],
2307 [mono_cv_uscore=no],
2311 if test "x$mono_cv_uscore" = "xyes"; then
2312 AC_DEFINE(MONO_DL_NEED_USCORE, 1, [Does dlsym require leading underscore.])
2314 AC_CHECK_FUNC(dlerror)
2317 dnl ******************************************************************
2318 dnl *** Checks for the IKVM JNI interface library ***
2319 dnl ******************************************************************
2320 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])
2322 if test x$with_ikvm_native = xyes; then
2323 jdk_headers_found="IKVM Native"
2326 AC_CHECK_HEADERS(execinfo.h)
2328 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2330 AC_CHECK_FUNCS(getgrgid_r)
2331 AC_CHECK_FUNCS(getgrnam_r)
2332 AC_CHECK_FUNCS(getresuid)
2333 AC_CHECK_FUNCS(setresuid)
2334 AC_CHECK_FUNCS(kqueue)
2335 # IBM provides a compatibility library for offering this function.
2336 # BSDs and others, have execinfo in base or packages.
2337 AC_SEARCH_LIBS(backtrace_symbols, execinfo util)
2338 # Two-step so it sets it in config.h
2339 AC_CHECK_FUNCS(backtrace_symbols)
2340 AC_CHECK_FUNCS(mkstemp)
2341 AC_CHECK_FUNCS(mmap)
2342 AC_CHECK_FUNCS(getrusage)
2343 AC_CHECK_FUNCS(getpriority)
2344 AC_CHECK_FUNCS(setpriority)
2345 AC_CHECK_FUNCS(dl_iterate_phdr)
2346 AC_CHECK_FUNCS(dladdr)
2347 AC_CHECK_FUNCS(sysconf)
2348 AC_CHECK_FUNCS(getrlimit)
2349 AC_CHECK_FUNCS(prctl)
2350 AC_CHECK_FUNCS(arc4random)
2351 AC_CHECK_FUNCS(nl_langinfo)
2353 AC_CHECK_FUNCS(sched_getaffinity)
2354 AC_CHECK_FUNCS(sched_setaffinity)
2355 AC_CHECK_FUNCS(sched_getcpu)
2357 if test x$platform_android != xyes; then
2358 AC_CHECK_FUNCS(getpwnam_r)
2359 AC_CHECK_FUNCS(getpwuid_r)
2362 AC_CHECK_FUNCS(readlink)
2363 AC_CHECK_FUNCS(chmod)
2364 AC_CHECK_FUNCS(lstat)
2365 AC_CHECK_FUNCS(getdtablesize)
2367 AC_CHECK_FUNCS(ftruncate)
2368 AC_CHECK_FUNCS(msync)
2370 AC_CHECK_FUNCS(gethostname getpeername)
2371 AC_CHECK_FUNCS(utime utimes)
2373 AC_CHECK_FUNCS(openlog closelog)
2374 AC_CHECK_FUNCS(atexit)
2375 AC_CHECK_FUNCS(popen)
2377 AC_FUNC_STRERROR_R()
2379 dnl ****************************************************************
2380 dnl *** Check for sched_setaffinity from glibc versions before ***
2381 dnl *** 2.3.4. The older versions of the function only take 2 ***
2382 dnl *** parameters, not 3. ***
2384 dnl *** Because the interface change was not made in a minor ***
2385 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2386 dnl *** won't always indicate the interface sched_affinity has. ***
2387 dnl ****************************************************************
2388 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2389 AC_TRY_COMPILE([#include <sched.h>], [
2391 sched_setaffinity(0, &mask);
2393 # Yes, we have it...
2395 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2397 # We have the new, three-parameter version
2400 AC_TRY_COMPILE([#include <sched.h>], [
2401 CPU_COUNT((void *) 0);
2404 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2406 # We have the new, three-parameter version
2410 dnl ******************************************************************
2411 dnl *** Check for large file support ***
2412 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2413 dnl ******************************************************************
2415 # Check that off_t can represent 2**63 - 1 correctly, working around
2416 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2417 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2419 AC_DEFUN([LARGE_FILES], [
2420 large_CPPFLAGS=$CPPFLAGS
2421 CPPFLAGS="$CPPFLAGS $1"
2423 #include <sys/types.h>
2426 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2427 #define COMPILE_TIME_ASSERT(pred) \
2428 switch(0){case 0:case pred:;}
2429 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2432 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2433 large_CPPFLAGS="$large_CPPFLAGS $1"
2438 CPPFLAGS=$large_CPPFLAGS
2441 AC_MSG_CHECKING(if off_t is 64 bits wide)
2443 if test $large_offt = no; then
2444 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2445 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2447 if test $large_offt = no; then
2448 AC_MSG_WARN([No 64 bit file size support available])
2451 dnl *****************************
2452 dnl *** Checks for libsocket ***
2453 dnl *****************************
2454 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2456 dnl *****************************
2457 dnl *** Checks for IPPROTO_IP ***
2458 dnl *****************************
2459 AC_MSG_CHECKING(for IPPROTO_IP)
2460 AC_TRY_COMPILE([#include <netinet/in.h>], [
2461 int level = IPPROTO_IP;
2463 # Yes, we have it...
2465 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2467 # We'll have to use getprotobyname
2471 dnl *******************************
2472 dnl *** Checks for IPPROTO_IPV6 ***
2473 dnl *******************************
2474 AC_MSG_CHECKING(for IPPROTO_IPV6)
2475 AC_TRY_COMPILE([#include <netinet/in.h>], [
2476 int level = IPPROTO_IPV6;
2478 # Yes, we have it...
2480 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2482 # We'll have to use getprotobyname
2486 dnl ******************************
2487 dnl *** Checks for IPPROTO_TCP ***
2488 dnl ******************************
2489 AC_MSG_CHECKING(for IPPROTO_TCP)
2490 AC_TRY_COMPILE([#include <netinet/in.h>], [
2491 int level = IPPROTO_TCP;
2493 # Yes, we have it...
2495 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2497 # We'll have to use getprotobyname
2501 dnl *****************************
2502 dnl *** Checks for SOL_IP ***
2503 dnl *****************************
2504 AC_MSG_CHECKING(for SOL_IP)
2505 AC_TRY_COMPILE([#include <netdb.h>], [
2508 # Yes, we have it...
2510 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2512 # We'll have to use getprotobyname
2516 dnl *****************************
2517 dnl *** Checks for SOL_IPV6 ***
2518 dnl *****************************
2519 AC_MSG_CHECKING(for SOL_IPV6)
2520 AC_TRY_COMPILE([#include <netdb.h>], [
2521 int level = SOL_IPV6;
2523 # Yes, we have it...
2525 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2527 # We'll have to use getprotobyname
2531 dnl *****************************
2532 dnl *** Checks for SOL_TCP ***
2533 dnl *****************************
2534 AC_MSG_CHECKING(for SOL_TCP)
2535 AC_TRY_COMPILE([#include <netdb.h>], [
2536 int level = SOL_TCP;
2538 # Yes, we have it...
2540 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2542 # We'll have to use getprotobyname
2546 dnl *****************************
2547 dnl *** Checks for IP_PKTINFO ***
2548 dnl *****************************
2549 AC_MSG_CHECKING(for IP_PKTINFO)
2550 AC_TRY_COMPILE([#include <linux/in.h>], [
2551 int level = IP_PKTINFO;
2553 # Yes, we have it...
2555 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2560 dnl *****************************
2561 dnl *** Checks for IPV6_PKTINFO ***
2562 dnl *****************************
2563 AC_MSG_CHECKING(for IPV6_PKTINFO)
2564 AC_TRY_COMPILE([#include <netdb.h>], [
2565 int level = IPV6_PKTINFO;
2567 # Yes, we have it...
2569 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2574 dnl **********************************
2575 dnl *** Checks for IP_DONTFRAG ***
2576 dnl **********************************
2577 AC_MSG_CHECKING(for IP_DONTFRAG)
2578 AC_TRY_COMPILE([#include <netinet/in.h>], [
2579 int level = IP_DONTFRAG;
2581 # Yes, we have it...
2583 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2588 dnl **********************************
2589 dnl *** Checks for IP_DONTFRAGMENT ***
2590 dnl **********************************
2591 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2592 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2593 int level = IP_DONTFRAGMENT;
2595 # Yes, we have it...
2597 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2602 dnl **********************************
2603 dnl *** Checks for IP_MTU_DISCOVER ***
2604 dnl **********************************
2605 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2606 AC_TRY_COMPILE([#include <linux/in.h>], [
2607 int level = IP_MTU_DISCOVER;
2609 # Yes, we have it...
2611 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2616 dnl **********************************
2617 dnl *** Checks for IP_PMTUDISC_DO ***
2618 dnl **********************************
2619 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2620 AC_TRY_COMPILE([#include <linux/in.h>], [
2621 int level = IP_PMTUDISC_DO;
2623 # Yes, we have it...
2625 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2630 dnl *********************************
2631 dnl *** Check for struct ip_mreqn ***
2632 dnl *********************************
2633 AC_MSG_CHECKING(for struct ip_mreqn)
2634 AC_TRY_COMPILE([#include <netinet/in.h>], [
2635 struct ip_mreqn mreq;
2636 mreq.imr_address.s_addr = 0;
2638 # Yes, we have it...
2640 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2642 # We'll just have to try and use struct ip_mreq
2644 AC_MSG_CHECKING(for struct ip_mreq)
2645 AC_TRY_COMPILE([#include <netinet/in.h>], [
2646 struct ip_mreq mreq;
2647 mreq.imr_interface.s_addr = 0;
2649 # Yes, we have it...
2651 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2653 # No multicast support
2658 dnl **********************************
2659 dnl *** Check for getaddrinfo ***
2660 dnl **********************************
2661 AC_MSG_CHECKING(for getaddrinfo)
2666 getaddrinfo(NULL,NULL,NULL,NULL);
2668 # Yes, we have it...
2670 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2675 dnl **********************************
2676 dnl *** Check for gethostbyname2_r ***
2677 dnl **********************************
2678 AC_MSG_CHECKING(for gethostbyname2_r)
2684 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2686 # Yes, we have it...
2688 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2693 dnl **********************************
2694 dnl *** Check for gethostbyname2 ***
2695 dnl **********************************
2696 AC_MSG_CHECKING(for gethostbyname2)
2701 gethostbyname2(NULL,0);
2703 # Yes, we have it...
2705 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2710 dnl **********************************
2711 dnl *** Check for gethostbyname ***
2712 dnl **********************************
2713 AC_MSG_CHECKING(for gethostbyname)
2718 gethostbyname(NULL);
2720 # Yes, we have it...
2722 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2727 dnl **********************************
2728 dnl *** Check for getprotobyname ***
2729 dnl **********************************
2730 AC_MSG_CHECKING(for getprotobyname)
2735 getprotobyname(NULL);
2737 # Yes, we have it...
2739 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2744 dnl **********************************
2745 dnl *** Check for getprotobyname_r ***
2746 dnl **********************************
2747 AC_MSG_CHECKING(for getprotobyname_r)
2752 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2754 # Yes, we have it...
2756 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2761 dnl **********************************
2762 dnl *** Check for getnameinfo ***
2763 dnl **********************************
2764 AC_MSG_CHECKING(for getnameinfo)
2769 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2771 # Yes, we have it...
2773 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2779 dnl **********************************
2780 dnl *** Check for inet_ntop ***
2781 dnl **********************************
2782 AC_MSG_CHECKING(for inet_ntop)
2785 #include <arpa/inet.h>
2787 inet_ntop (0, NULL, NULL, 0);
2789 # Yes, we have it...
2791 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2796 dnl *****************************
2797 dnl *** Checks for libnsl ***
2798 dnl *****************************
2799 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2801 AC_CHECK_FUNCS(inet_pton inet_aton)
2803 dnl *****************************
2804 dnl *** Checks for libxnet ***
2805 dnl *****************************
2808 AC_MSG_CHECKING(for Solaris XPG4 support)
2809 if test -f /usr/lib/libxnet.so; then
2810 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2811 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2812 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2819 if test "$GCC" = "yes"; then
2820 CFLAGS="$CFLAGS -Wno-char-subscripts"
2825 dnl *****************************
2826 dnl *** Checks for libpthread ***
2827 dnl *****************************
2828 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2829 # and libpthread does not exist
2833 dnl Haiku has pthread in libroot (libc equiv)
2834 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2837 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2840 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2843 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2846 AC_CHECK_HEADERS(pthread.h)
2847 AC_CHECK_HEADERS(pthread_np.h)
2848 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2849 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2850 AC_CHECK_FUNCS(pthread_kill pthread_jit_write_protect_np)
2851 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2852 AC_TRY_COMPILE([ #include <pthread.h>], [
2853 pthread_mutexattr_t attr;
2854 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2859 AC_ERROR(Posix system lacks support for recursive mutexes)
2861 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2862 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2863 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2864 dnl check that pthread_mutexattr_setprotocol is declared
2865 AC_CHECK_DECLS([pthread_mutexattr_setprotocol], [], [], [[#include <pthread.h>]])
2866 AC_CHECK_FUNCS(mincore mlock munlock)
2868 dnl ***********************************
2869 dnl *** Checks for working __thread ***
2870 dnl ***********************************
2871 AC_MSG_CHECKING(for working __thread)
2872 if test "x$with_tls" != "x__thread"; then
2873 AC_MSG_RESULT(disabled)
2874 elif test "x$cross_compiling" = "xyes"; then
2875 AC_MSG_RESULT(cross compiling, assuming yes)
2878 #if defined(__APPLE__) && defined(__clang__)
2879 #error "__thread does not currently work with clang on Mac OS X"
2883 #include <pthread.h>
2885 static int res1, res2;
2887 void thread_main (void *arg)
2902 pthread_create (&t1, NULL, thread_main, 1);
2903 pthread_create (&t2, NULL, thread_main, 2);
2905 pthread_join (t1, NULL);
2906 pthread_join (t2, NULL);
2908 return !(res1 + res2 == 2);
2918 dnl **************************************
2919 dnl *** Checks for working sigaltstack ***
2920 dnl **************************************
2921 AC_MSG_CHECKING(for working sigaltstack)
2922 if test "x$with_sigaltstack" != "xyes"; then
2923 AC_MSG_RESULT(disabled)
2924 elif test "x$cross_compiling" = "xyes"; then
2925 AC_MSG_RESULT(cross compiling, assuming no)
2933 #include <pthread.h>
2934 #include <sys/wait.h>
2935 #if defined(__FreeBSD__) || defined(__NetBSD__)
2936 #define SA_STACK SA_ONSTACK
2939 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2944 volatile char*__ptr = NULL;
2946 loop (void *ignored)
2955 struct sigaction sa;
2958 pthread_attr_t attr;
2960 sa.sa_sigaction = sigsegv_signal_handler;
2961 sigemptyset (&sa.sa_mask);
2962 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2963 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2964 perror ("sigaction");
2968 /* x86 darwin deliver segfaults using SIGBUS */
2969 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2970 perror ("sigaction");
2973 sas.ss_sp = malloc (SIGSTKSZ);
2974 sas.ss_size = SIGSTKSZ;
2976 if (sigaltstack (&sas, NULL) == -1) {
2977 perror ("sigaltstack");
2981 pthread_attr_init (&attr);
2982 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2983 printf ("pthread_create\n");
3007 for (i = 0; i < 300; ++i) {
3008 waitpid (son, &status, WNOHANG);
3009 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
3014 kill (son, SIGKILL);
3020 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
3027 dnl ********************************
3028 dnl *** Checks for sys_signame ***
3029 dnl ********************************
3030 AC_MSG_CHECKING(for sys_signame)
3034 const char *signame = sys_signame[0];
3036 # Yes, we have it...
3038 AC_DEFINE(HAVE_SYSSIGNAME, 1, [Have sys_signame])
3044 dnl ********************************
3045 dnl *** Checks for semaphore lib ***
3046 dnl ********************************
3047 # 'Real Time' functions on Solaris
3048 # posix4 on Solaris 2.6
3049 # pthread (first!) on Linux
3050 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
3052 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
3053 AC_CHECK_FUNCS(shm_open)
3055 dnl ********************************
3056 dnl *** Checks for timezone stuff **
3057 dnl ********************************
3058 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
3064 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
3065 if test $ac_cv_struct_tm_gmtoff = yes; then
3066 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
3068 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
3073 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
3074 if test $ac_cv_var_timezone = yes; then
3075 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
3077 AC_ERROR(unable to find a way to determine timezone)
3081 dnl *********************************
3082 dnl *** Checks for math functions ***
3083 dnl *********************************
3084 AC_SEARCH_LIBS(sqrtf, m)
3086 dnl ****************************************************************
3087 dnl *** Checks for working poll() (macosx defines it but doesn't ***
3088 dnl *** have it in the library (duh)) ***
3089 dnl ****************************************************************
3090 AC_CHECK_FUNCS(poll)
3092 dnl **********************************
3094 dnl **********************************
3095 AC_CHECK_HEADERS(sys/epoll.h)
3097 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
3098 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
3099 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
3104 AC_CHECK_HEADERS(sys/event.h)
3105 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
3107 dnl **************************************
3108 dnl * Darwin has a race that prevents us from using reliably:
3109 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
3110 dnl * Since kqueue is mostly used for scaling large web servers,
3111 dnl * and very few folks run Mono on large web servers on OSX, falling
3113 dnl **************************************
3114 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
3115 if test "x$host_darwin" = "xno"; then
3116 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
3120 dnl ******************************
3121 dnl *** Checks for SIOCGIFCONF ***
3122 dnl ******************************
3123 AC_CHECK_HEADERS(sys/ioctl.h)
3124 AC_CHECK_HEADERS(net/if.h, [], [],
3126 #ifdef HAVE_SYS_TYPES_H
3127 # include <sys/types.h>
3129 #ifdef HAVE_SYS_SOCKET_H
3130 # include <sys/socket.h>
3133 AC_MSG_CHECKING(for ifreq)
3136 #include <sys/ioctl.h>
3144 x = (void *) &ifr->ifr_addr;
3147 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
3151 dnl **********************************
3152 dnl *** Checks for sin_len ***
3153 dnl **********************************
3154 AC_MSG_CHECKING(for sockaddr_in.sin_len)
3156 #include <netinet/in.h>
3158 struct sockaddr_in saddr;
3159 saddr.sin_len = sizeof (saddr);
3162 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
3166 dnl **********************************
3167 dnl *** Checks for sin6_len ***
3168 dnl **********************************
3169 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
3171 #include <netinet/in.h>
3173 struct sockaddr_in6 saddr6;
3174 saddr6.sin6_len = sizeof (saddr6);
3177 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
3181 dnl **********************************
3182 dnl *** Check for getifaddrs ***
3183 dnl **********************************
3184 AC_MSG_CHECKING(for getifaddrs)
3187 #include <sys/types.h>
3188 #include <sys/socket.h>
3189 #ifdef HAVE_NET_IF_H
3192 #include <ifaddrs.h>
3196 # Yes, we have it...
3198 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
3202 dnl **********************************
3203 dnl *** Check for if_nametoindex ***
3204 dnl **********************************
3205 AC_MSG_CHECKING(for if_nametoindex)
3208 #include <sys/types.h>
3209 #include <sys/socket.h>
3212 if_nametoindex(NULL);
3214 # Yes, we have it...
3216 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
3220 dnl **********************************
3221 dnl *** Check for access ***
3222 dnl **********************************
3223 AC_MSG_CHECKING(for access)
3229 # Yes, we have it...
3231 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
3236 dnl **********************************
3237 dnl *** Checks for proclib ***
3238 dnl **********************************
3239 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.)])
3240 dnl **********************************
3241 dnl *** Checks for MonoPosixHelper ***
3242 dnl **********************************
3243 AC_CHECK_HEADERS(checklist.h)
3244 AC_CHECK_HEADERS(pathconf.h)
3245 AC_CHECK_HEADERS(fstab.h)
3246 AC_CHECK_HEADERS(attr/xattr.h)
3247 AC_CHECK_HEADERS(sys/extattr.h)
3248 AC_CHECK_HEADERS(sys/sendfile.h)
3249 AC_CHECK_HEADERS(sys/statvfs.h)
3250 AC_CHECK_HEADERS(sys/statfs.h)
3251 AC_CHECK_HEADERS(sys/vfstab.h)
3252 AC_CHECK_HEADERS(sys/xattr.h)
3253 AC_CHECK_HEADERS(sys/mman.h)
3254 AC_CHECK_HEADERS(sys/param.h)
3255 AC_CHECK_HEADERS(sys/mount.h, [], [],
3257 #ifdef HAVE_SYS_PARAM_H
3258 # include <sys/param.h>
3261 AC_CHECK_HEADERS(sys/mount.h)
3262 AC_CHECK_FUNCS(confstr)
3263 AC_CHECK_FUNCS(seekdir telldir)
3264 AC_CHECK_FUNCS(getdomainname)
3265 AC_CHECK_FUNCS(setdomainname)
3266 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
3267 AC_CHECK_FUNCS(setgroups)
3268 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
3269 AC_CHECK_FUNCS(getfsstat)
3270 AC_CHECK_FUNCS(lutimes futimes)
3271 AC_CHECK_FUNCS(mremap)
3272 AC_CHECK_FUNCS(remap_file_pages)
3273 AC_CHECK_FUNCS(posix_fadvise)
3274 AC_CHECK_FUNCS(posix_fallocate)
3275 AC_CHECK_FUNCS(vsnprintf)
3276 AC_CHECK_FUNCS(sendfile)
3277 AC_CHECK_FUNCS(gethostid sethostid)
3278 AC_CHECK_FUNCS(sethostname)
3279 AC_CHECK_FUNCS(statfs)
3280 AC_CHECK_FUNCS(fstatfs)
3281 AC_CHECK_FUNCS(statvfs)
3282 AC_CHECK_FUNCS(fstatvfs)
3283 AC_CHECK_FUNCS(stime)
3284 AC_CHECK_FUNCS(ttyname_r)
3285 AC_CHECK_FUNCS(psignal)
3286 AC_CHECK_FUNCS(getlogin_r)
3287 AC_CHECK_FUNCS(lockf)
3288 AC_CHECK_FUNCS(swab)
3289 AC_CHECK_FUNCS(setusershell endusershell)
3290 AC_CHECK_FUNCS(futimens utimensat)
3291 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
3292 AC_CHECK_FUNCS(readv writev preadv pwritev)
3293 AC_CHECK_FUNCS(setpgid)
3294 AC_CHECK_FUNCS(system)
3295 AC_CHECK_FUNCS(fork execv execve)
3296 AC_CHECK_FUNCS(waitpid)
3297 AC_CHECK_FUNCS(accept4)
3298 AC_CHECK_FUNCS(localtime_r)
3299 AC_CHECK_FUNCS(mkdtemp)
3300 AC_CHECK_SIZEOF(size_t)
3301 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
3302 [#include <sys/types.h>
3303 #include <sys/stat.h>
3304 #include <unistd.h>])
3305 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
3306 [#include <sys/types.h>
3307 #include <sys/stat.h>
3308 #include <unistd.h>])
3309 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
3310 [#include <sys/time.h>])
3311 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
3312 [#include <sys/socket.h>])
3313 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
3314 [#include <unistd.h>
3315 #include <fcntl.h>])
3316 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
3317 [#include <sys/uio.h>])
3318 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
3319 [#include <sys/socket.h>])
3320 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
3321 [#include <sys/poll.h>])
3322 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
3323 [#include <sys/socket.h>])
3324 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
3325 [#include <sys/socket.h>])
3326 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
3327 [#include <netinet/in.h>])
3328 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3329 [#include <netinet/in.h>])
3330 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3331 [#include <sys/un.h>])
3332 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3333 [#include <sys/types.h>
3334 #include <sys/stat.h>
3335 #include <unistd.h>])
3336 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3337 [#include <time.h>])
3338 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3339 [#include <sys/time.h>
3340 #include <sys/types.h>
3341 #include <utime.h>])
3342 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3343 [#include <sys/time.h>])
3344 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3345 [#include <sys/types.h>
3346 #include <utime.h>])
3348 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
3349 [#include <sys/types.h>
3350 #include <dirent.h>])
3352 [struct passwd.pw_gecos],,,
3353 [#include <sys/types.h>
3356 [struct statfs.f_flags],,,
3357 [#include <sys/types.h>
3358 #include <sys/vfs.h>])
3360 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3361 [#include <sys/types.h>
3362 #include <sys/stat.h>
3363 #include <unistd.h>])
3365 dnl Favour xattr through glibc, but use libattr if we have to
3366 AC_CHECK_FUNC(lsetxattr, ,
3367 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3371 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3373 [struct kinfo_proc.kp_proc],,,
3374 [#include <sys/types.h>
3375 #include <sys/param.h>
3376 #include <sys/sysctl.h>
3377 #include <sys/proc.h>
3380 dnl *********************************
3381 dnl *** Checks for Windows compilation ***
3382 dnl *********************************
3383 AC_CHECK_HEADERS(sys/time.h)
3384 AC_CHECK_HEADERS(sys/param.h)
3385 AC_CHECK_HEADERS(dirent.h)
3387 dnl ******************************************
3388 dnl *** Checks for OSX and iOS compilation ***
3389 dnl ******************************************
3390 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3392 dnl *********************************
3393 dnl *** Check for Console 2.0 I/O ***
3394 dnl *********************************
3395 AC_CHECK_HEADERS([curses.h])
3396 AC_CHECK_HEADERS([term.h], [], [],
3401 AC_CHECK_HEADERS([termios.h])
3403 dnl *********************************
3404 dnl *** Checks for random ***
3405 dnl *********************************
3406 if test x$host_darwin = xno; then
3407 AC_CHECK_HEADERS(sys/random.h)
3408 AC_CHECK_FUNCS(getrandom getentropy)
3411 dnl *********************************
3412 dnl *** Checks for Mono.Native ***
3413 dnl *********************************
3415 # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3416 # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3418 AC_MSG_CHECKING(for linux/in.h)
3420 #include <sys/socket.h>
3421 #include <linux/in.h>
3425 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3430 AC_CHECK_HEADERS([linux/if_packet.h])
3432 AC_MSG_CHECKING(for struct in_pktinfo)
3434 #ifdef HAVE_LINUX_IN_H
3435 #include <sys/socket.h>
3436 #include <linux/in.h>
3438 #include <netinet/in.h>
3441 struct in_pktinfo pktinfo;
3444 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3449 AC_MSG_CHECKING(for struct ip_mreqn)
3452 #include <sys/socket.h>
3453 #include <linux/in.h>
3455 #include <netinet/in.h>
3458 struct ip_mreqn mreqn;
3461 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3466 if test x$host_darwin = xno; then
3467 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3470 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3471 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3473 # AC_CHECK_FUNC(getifaddrs, [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3474 AC_CHECK_FUNC(Qp2getifaddrs, [AC_DEFINE(HAVE_QP2GETIFADDRS, 1, [Qp2getifaddrs])])
3476 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3477 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3478 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3479 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3481 if test "x$mono_native_platform_ios" = "xno"; then
3482 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3483 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3484 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3487 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3488 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3489 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3490 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3491 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
3492 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3493 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3494 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3496 if test "x$platform_android" != "xyes"; then
3497 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3500 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3501 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3502 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3503 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3504 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3505 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3507 AC_CHECK_DECL(lchflags, [AC_DEFINE(HAVE_LCHFLAGS, 1, [lchflags])], [],
3508 [[#include <sys/types.h>
3509 #include <sys/stat.h>]])
3510 AC_CHECK_MEMBER(struct stat.st_flags,
3511 [AC_DEFINE(HAVE_STAT_FLAGS, 1, [struct stat.st_flags])],
3513 [#include <sys/types.h>
3514 #include <sys/stat.h>])
3516 AC_CHECK_MEMBER(struct stat.st_birthtimespec,
3517 [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtimespec])],
3519 [#include <sys/types.h>
3520 #include <sys/stat.h>])
3521 AC_CHECK_MEMBER(struct stat.st_atimespec,
3522 [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])],
3524 [#include <sys/types.h>
3525 #include <sys/stat.h>])
3526 AC_CHECK_MEMBER(struct stat.st_atim,
3527 [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])],
3529 [#include <sys/types.h>
3530 #include <sys/stat.h>])
3531 AC_CHECK_MEMBER(struct stat.st_atimensec,
3532 [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])],
3534 [#include <sys/types.h>
3535 #include <sys/stat.h>])
3536 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [#include <dirent.h>])
3537 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [#include <sys/mount.h>])
3538 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [#include <sys/mount.h>])
3540 AC_MSG_CHECKING(for struct statfs)
3542 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3543 #include <sys/mount.h>
3545 #include <sys/statfs.h>
3551 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3556 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3557 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3560 AC_MSG_CHECKING(for readdir_r)
3565 struct dirent* entry;
3566 struct dirent* result;
3567 readdir_r(dir, entry, &result);
3570 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3575 AC_MSG_CHECKING(for kevent with void *data)
3577 #include <sys/types.h>
3578 #include <sys/event.h>
3580 struct kevent event;
3582 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3585 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3590 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3591 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3593 AC_MSG_CHECKING(for sendfile with 4 arguments)
3595 #include <sys/sendfile.h>
3597 #if defined(TARGET_ANDROID)
3598 #if !defined(__ANDROID_API__)
3599 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3600 #elif __ANDROID_API__ < 21
3601 #error sendfile is not supported on this Android API level
3605 int result = sendfile(0, 0, 0, 0);
3608 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3613 ORIG_CFLAGS="$CFLAGS"
3614 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3616 AC_MSG_CHECKING(for sendfile with 6 arguments)
3619 #include <sys/types.h>
3620 #include <sys/socket.h>
3621 #include <sys/uio.h>
3623 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3626 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3631 CFLAGS="$ORIG_CFLAGS"
3633 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3634 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3635 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3636 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3638 ORIG_CFLAGS="$CFLAGS"
3639 CFLAGS="$CFLAGS -Werror=sign-conversion"
3641 AC_MSG_CHECKING(for getnameinfo with signed flags)
3643 #include <sys/types.h>
3646 const struct sockaddr *addr;
3653 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3656 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3661 CFLAGS="$ORIG_CFLAGS"
3663 if test "x$host_linux" = "xyes"; then
3664 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3666 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3669 # HAVE_CLOCK_MONOTONIC check already done above
3670 # HAVE_CLOCK_REALTIME check already done above
3671 # HAVE_MACH_ABSOLUTE_TIME check already done above
3672 # HAVE_MACH_TIMEBASE_INFO check already done above
3673 # HAVE_FUTIMES check already done above
3674 # HAVE_FUTIMENS check already done above
3676 ORIG_CFLAGS="$CFLAGS"
3677 CFLAGS="$CFLAGS -Werror=sign-conversion"
3679 AC_MSG_CHECKING(for bind with unsigned addrlen)
3681 #include <sys/socket.h>
3684 struct sockaddr* addr;
3686 bind(fd, addr, addrLen);
3689 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3694 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3696 #include <netinet/in.h>
3697 #include <netinet/tcp.h>
3699 struct ipv6_mreq opt;
3700 unsigned int index = 0;
3701 opt.ipv6mr_interface = index;
3704 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3709 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3711 #include <sys/inotify.h>
3715 int result = inotify_rm_watch(fd, wd);
3718 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3725 dnl *****************************
3726 dnl *** Checks for libinotify ***
3727 dnl *****************************
3728 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
3729 if test "x$ac_cv_lib_inotify_inotify_init" = "xyes" ; then
3730 AC_DEFINE(HAVE_LIBINOTIFY, 1, [FreeBSD libinotify kqueue shim])
3731 dnl Needs to be done this way to avoid collision with various
3732 dnl ports including glib and llvm*
3733 METADATA_CFLAGS="-I/usr/local/include"
3734 AC_SUBST(METADATA_CFLAGS)
3736 dnl Workaround due to inotify_rm_watch check failing without -I
3737 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd in libinotify)
3739 #include </usr/local/include/sys/inotify.h>
3743 int result = inotify_rm_watch(fd, wd);
3746 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3752 CFLAGS="$ORIG_CFLAGS"
3754 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3755 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3757 elif test "x$cross_compiling" = "xyes"; then
3758 AC_MSG_RESULT(cross compiling, assuming yes)
3759 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3762 #include <sys/mman.h>
3769 /* IBM i doesn't implement this and returns SIGILL */
3772 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3776 shm_unlink("/mono_configure_shm_open");
3778 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3779 // on at least the current version of Mac OS X
3781 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3788 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3794 AC_MSG_CHECKING(for getpriority with int who)
3796 #include <sys/resource.h>
3800 int result = getpriority(which, who);
3803 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3808 AC_MSG_CHECKING(for kevent with int parameters)
3810 #include <sys/types.h>
3811 #include <sys/event.h>
3814 const struct kevent* chagelist;
3816 struct kevent* eventlist;
3818 const struct timespec* timeout;
3819 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3822 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3827 AC_CHECK_FUNCS(mkstemps)
3828 # AC_CHECK_FUNCS(mkstemp) # already done above
3830 if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3831 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3834 AC_MSG_CHECKING(for tcp/var.h)
3836 #include <sys/types.h>
3837 #include <sys/socketvar.h>
3838 #include <netinet/ip.h>
3839 #include <netinet/tcp.h>
3840 #include <netinet/tcp_var.h>
3844 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3849 AC_CHECK_HEADERS([sys/cdefs.h])
3851 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3853 #ifdef HAVE_SYS_CDEFS_H
3854 #include <sys/cdefs.h>
3856 #include <netinet/tcp.h>
3858 int result = TCP_ESTABLISHED;
3861 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3866 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3868 AC_MSG_CHECKING(for struct rt_msghdr)
3870 #include <sys/types.h>
3871 #include <net/route.h>
3876 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3881 AC_CHECK_HEADERS([sys/sysctl.h])
3882 AC_CHECK_HEADERS([linux/rtnetlink.h])
3884 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3885 #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3886 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3888 ORIG_CFLAGS="$CFLAGS"
3889 CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3891 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3895 size_t namelen = 20;
3897 int result = getdomainname(name, namelen);
3900 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3905 CFLAGS="$ORIG_CFLAGS"
3907 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3908 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3909 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3911 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
3912 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3913 elif test "x$host_linux" = "xyes"; then
3914 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3917 # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3918 # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3919 # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3920 # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3923 AC_MSG_CHECKING(for GSS/GSS.h)
3925 #include <GSS/GSS.h>
3929 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3930 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3932 AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3937 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3939 #include <gssapi/gssapi_ext.h>
3944 AC_DEFINE(ENABLE_GSS, 1, [ENABLE_GSS])
3949 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3951 #include <gssapi/gssapi_ext.h>
3952 #include <gssapi/gssapi_krb5.h>
3953 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3957 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3962 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3964 AC_CHECK_HEADERS([crt_externs.h])
3966 AC_MSG_CHECKING(for _NSGetEnviron)
3968 #include <crt_externs.h>
3970 char **result = *(_NSGetEnviron());
3973 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3978 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3980 if test x$host_sunos = xyes; then
3981 # set -Werror=strict-prototypes, to match the flags used during the compilation.
3982 ORIG_CFLAGS="$CFLAGS"
3983 CFLAGS="$CFLAGS -Werror=strict-prototypes"
3986 AC_CHECK_FUNCS(madvise)
3987 AC_CHECK_FUNCS(posix_madvise)
3989 if test x$host_sunos = xyes; then
3990 CFLAGS="$ORIG_CFLAGS"
3993 # *** End of Mono.Native checks ***
3995 AM_CONDITIONAL(ENABLE_GSS, false)
3997 dnl *********************************
3998 dnl *** Checks for Windows compilation ***
3999 dnl *********************************
4000 AC_CHECK_HEADERS(winternl.h)
4002 jdk_headers_found=no
4003 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
4004 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
4005 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
4006 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
4007 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
4008 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
4009 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
4011 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], , [#include <ws2tcpip.h>])
4013 dnl *********************************
4014 dnl *** Check for struct ip_mreqn ***
4015 dnl *********************************
4016 AC_MSG_CHECKING(for struct ip_mreqn)
4017 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
4018 struct ip_mreqn mreq;
4019 mreq.imr_address.s_addr = 0;
4021 # Yes, we have it...
4023 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
4025 # We'll just have to try and use struct ip_mreq
4027 AC_MSG_CHECKING(for struct ip_mreq)
4028 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
4029 struct ip_mreq mreq;
4030 mreq.imr_interface.s_addr = 0;
4032 # Yes, we have it...
4034 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
4036 # No multicast support
4041 dnl **********************************
4042 dnl *** Check for getaddrinfo ***
4043 dnl **********************************
4044 AC_MSG_CHECKING(for getaddrinfo)
4047 #include <winsock2.h>
4048 #include <ws2tcpip.h>
4050 getaddrinfo(NULL,NULL,NULL,NULL);
4052 # Yes, we have it...
4054 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
4059 dnl **********************************
4060 dnl *** Check for gethostbyname ***
4061 dnl **********************************
4062 AC_MSG_CHECKING(for gethostbyname)
4065 #include <winsock2.h>
4066 #include <ws2tcpip.h>
4068 gethostbyname(NULL);
4070 # Yes, we have it...
4072 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
4077 dnl **********************************
4078 dnl *** Check for getprotobyname ***
4079 dnl **********************************
4080 AC_MSG_CHECKING(for getprotobyname)
4083 #include <winsock2.h>
4084 #include <ws2tcpip.h>
4086 getprotobyname(NULL);
4088 # Yes, we have it...
4090 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
4095 dnl **********************************
4096 dnl *** Check for getnameinfo ***
4097 dnl **********************************
4098 AC_MSG_CHECKING(for getnameinfo)
4101 #include <winsock2.h>
4102 #include <ws2tcpip.h>
4104 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
4106 # Yes, we have it...
4108 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
4113 dnl **********************************
4114 dnl *** Check for inet_ntop ***
4115 dnl **********************************
4116 AC_MSG_CHECKING(for inet_ntop)
4119 #include <winsock2.h>
4120 #include <ws2tcpip.h>
4122 inet_ntop (0, NULL, NULL, 0);
4124 # Yes, we have it...
4126 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
4131 dnl **********************************
4132 dnl *** Check for inet_pton ***
4133 dnl **********************************
4134 AC_MSG_CHECKING(for inet_pton)
4137 #include <winsock2.h>
4138 #include <ws2tcpip.h>
4143 inet_pton (0, NULL, NULL);
4145 # Yes, we have it...
4147 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
4154 AC_MSG_CHECKING(for socklen_t)
4156 #include <sys/types.h>
4157 #include <sys/socket.h>
4161 ac_cv_c_socklen_t=yes
4162 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
4168 AC_CHECK_FUNCS(execvp)
4170 dnl ****************************
4171 dnl *** Look for /dev/random ***
4172 dnl ****************************
4174 AC_MSG_CHECKING([if usage of random device is requested])
4175 AC_ARG_ENABLE(dev-random,
4176 [ --disable-dev-random disable the use of the random device (enabled by default)],
4177 try_dev_random=$enableval, try_dev_random=yes)
4179 AC_MSG_RESULT($try_dev_random)
4183 dnl IBM i does not have /dev/random, use unblocking only
4186 NAME_DEV_RANDOM="/dev/urandom"
4189 dnl Win32 does not have /dev/random, they have their own method...
4191 *-mingw*|*-*-cygwin*)
4192 ac_cv_have_dev_random=no
4195 dnl Everywhere else, it's /dev/random
4198 NAME_DEV_RANDOM="/dev/random"
4202 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
4204 dnl Now check if the device actually exists
4206 if test "x$try_dev_random" = "xyes"; then
4207 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
4208 [if test -r "$NAME_DEV_RANDOM" ; then
4209 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
4210 if test "x$ac_cv_have_dev_random" = "xyes"; then
4211 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
4214 AC_MSG_CHECKING(for random device)
4215 ac_cv_have_dev_random=no
4216 AC_MSG_RESULT(has been disabled)
4219 if test "x$host_win32" = "xyes"; then
4220 AC_DEFINE(HAVE_CRYPT_RNG)
4223 if test "x$ac_cv_have_dev_random" = "xno" \
4224 && test "x$host_win32" = "xno"; then
4227 *** A system-provided entropy source was not found on this system.
4228 *** Because of this, the System.Security.Cryptography random number generator
4229 *** will throw a NotImplemented exception.
4231 *** If you are seeing this message, and you know your system DOES have an
4232 *** entropy collection in place, please report an issue on GitHub and
4233 *** provide information about the system and how to access the random device.
4235 *** Otherwise you can install either egd or prngd and set the environment
4236 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
4240 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)
4242 AC_MSG_CHECKING([if big-arrays are to be enabled])
4243 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)
4244 if test "x$enable_big_arrays" = "xyes" ; then
4245 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4246 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
4248 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
4251 AC_MSG_RESULT($enable_big_arrays)
4257 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
4259 if test "x$enable_dtrace" = "xyes"; then
4260 if test "x$has_dtrace" = "xno"; then
4261 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
4263 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
4264 if test "x$DTRACE" = "xno"; then
4265 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
4267 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
4268 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
4274 if test "x$enable_dtrace" = "xyes"; then
4275 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
4277 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4280 DTRACEFLAGS="-arch ppc64"
4283 DTRACEFLAGS="-arch x86_64"
4292 DTRACEFLAGS="-arch ppc"
4295 DTRACEFLAGS="-arch i386"
4302 AC_SUBST(DTRACEFLAGS)
4308 AC_CHECK_HEADERS([sys/sdt.h])
4310 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
4311 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
4313 dnl **************************
4314 dnl *** AOT cross offsets ***
4315 dnl **************************
4317 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
4318 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
4324 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
4325 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
4326 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)
4327 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
4328 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
4330 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
4332 if test "x$enable_llvm" = "xdefault"; then
4333 enable_llvm=$enable_llvm_default
4336 if test "x$enable_loadedllvm" = "xyes"; then
4337 AC_MSG_WARN("Loadable LLVM is no longer supported. Enabling default LLVM support instead.")
4341 enable_llvm_msvc_only="no"
4342 if test "x$enable_llvm" = "xyes"; then
4343 if test "x$host_win32" = "xyes"; then
4344 if test "x$cross_compiling" = "xno"; then
4347 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
4348 enable_llvm_msvc_only="yes"
4351 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
4359 if test "x$enable_llvm" = "xyes"; then
4360 if test "x$with_llvm" != "x"; then
4361 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
4362 if test x$host_win32 = xyes; then
4363 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
4365 if test ! -x $EXTERNAL_LLVM_CONFIG; then
4366 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
4372 LLVM_CODEGEN_LIBS="x86codegen"
4375 LLVM_CODEGEN_LIBS="armcodegen"
4378 LLVM_CODEGEN_LIBS="aarch64codegen"
4381 LLVM_CODEGEN_LIBS="powerpccodegen"
4384 if test "x$host" != "x$target"; then
4385 # No need for jit libs
4389 AC_SUBST(LLVM_CODEGEN_LIBS)
4390 AC_SUBST(EXTERNAL_LLVM_CONFIG)
4392 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
4393 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4394 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4396 if test "x$enable_llvm_msvc_only" != "xyes"; then
4397 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4399 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4403 # AC_DEFINE necessary for correct restore behavior on Linux
4404 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4405 if test "x$internal_llvm" != "xno"; then
4406 if test "x$enable_llvm_msvc_only" != "xyes"; then
4407 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4409 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4413 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4414 if test "x$enable_llvm_asserts" != "xno"; then
4415 if test "x$enable_llvm_msvc_only" != "xyes"; then
4416 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4418 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4422 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4424 if test "x$enable_llvm" = "xyes"; then
4425 enable_llvm_runtime=yes
4428 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4429 if test "x$enable_llvm_runtime" = "xyes"; then
4430 if test "x$enable_llvm_msvc_only" != "xyes"; then
4431 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4433 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4438 ACCESS_UNALIGNED="yes"
4442 SQLITE="libsqlite.so.0"
4443 SQLITE3="libsqlite3.so.0"
4446 GDKX11="libgdk-x11-2.0.so.0"
4447 GTKX11="libgtk-x11-2.0.so.0"
4448 XINERAMA="libXinerama.so.1"
4450 sizeof_register="SIZEOF_VOID_P"
4453 boehm_supported=true
4463 ACCESS_UNALIGNED="no"
4466 if test "x$mono_cv_clang" = "xyes"; then
4467 INTERP_CFLAGS="-mllvm -join-liveintervals=false"
4468 AC_SUBST(INTERP_CFLAGS)
4475 ACCESS_UNALIGNED="no"
4477 AC_MSG_CHECKING(for mips n32)
4479 #if _MIPS_SIM != _ABIN32
4496 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4501 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4502 # int astruct __attribute__ ((visibility ("hidden")));
4505 # void *p = &astruct;
4507 # gcc -fPIC --shared -o libfoo.so foo.c
4509 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4510 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4511 have_visibility_hidden=no
4514 have_visibility_hidden=no
4525 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4532 openbsd*|freebsd*|kfreebsd-gnu*)
4539 x86_64-*-* | amd64-*-*)
4542 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4543 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4550 BTLS_PLATFORM=x86_64
4551 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4556 BTLS_PLATFORM=x86_64
4557 boehm_supported=false
4559 openbsd*|freebsd*|kfreebsd-gnu*)
4562 BTLS_PLATFORM=x86_64
4566 BTLS_PLATFORM=x86_64
4571 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4577 ACCESS_UNALIGNED="no"
4584 if test x"$GCC" = xyes; then
4585 # We don't support v8 cpus
4586 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4588 if test x"$AR" = xfalse; then
4589 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4592 *-mingw*|*-*-cygwin*)
4593 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4594 have_visibility_hidden=no
4598 # Old Boehm fails to compile for x86_64-mingw.
4599 # It is trivial to fix, but just silently drop it.
4600 boehm_supported=false
4604 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4605 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4606 powerpc*-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4607 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4609 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4610 # mono#18554 - be more robust in testing for -mminimal-toc
4611 AC_MSG_NOTICE([Checking for PowerPC ISA -mminimal-toc support])
4612 AX_CHECK_COMPILE_FLAG(
4614 [CFLAGS="$CFLAGS -mminimal-toc"],
4618 powerpc*-*-freebsd*)
4619 # We need to be aware if we are ELFv1 or v2 here
4620 AC_MSG_NOTICE([Checking FreeBSD ELF version])
4621 if ! ( echo | cc -dM -E - | awk '/_CALL_ELF/ {print $NF}'); then
4622 AC_DEFINE([POWERPC_ELF], 1, [PowerPC ELFv1])
4624 AC_DEFINE([POWERPC_ELFV2], 1, [PowerPC ELFv2])
4630 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4636 BTLS_PLATFORM=powerpc
4640 BTLS_PLATFORM=powerpc
4644 BTLS_PLATFORM=powerpc
4653 ACCESS_UNALIGNED="no"
4654 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4660 ACCESS_UNALIGNED="no"
4661 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4666 ACCESS_UNALIGNED="no"
4668 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4671 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4673 arm*-linux*-gnueabi)
4674 BTLS_PLATFORM=armsoft
4681 ACCESS_UNALIGNED="no"
4682 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4684 aarch64-*darwin*ilp32)
4687 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4689 # assuming no other target other than watchOS is using aarch64*darwin triple
4693 # https://lkml.org/lkml/2012/7/15/133
4696 boehm_supported=false
4699 BTLS_PLATFORM=aarch64
4700 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4705 ACCESS_UNALIGNED="yes"
4708 CFLAGS="$CFLAGS -mbackchain"
4715 BTLS_PLATFORM=riscv32
4717 boehm_supported=false
4724 BTLS_PLATFORM=riscv64
4726 boehm_supported=false
4732 if test "x$host" != "x$target"; then
4733 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4735 enable_support_build=no
4737 # Can't use tls, since it depends on the runtime detection of tls offsets
4738 # in mono-compiler.h
4745 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4749 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4753 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4757 powerpc64-ps3-linux-gnu)
4759 arch_target=powerpc64
4760 AC_DEFINE(TARGET_PS3, 1, [...])
4761 # It would be better to just use TARGET_POWERPC64, but lots of code already
4763 AC_DEFINE(__mono_ppc64__, 1, [...])
4764 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4766 target_byte_order=G_BIG_ENDIAN
4768 powerpc64-xbox360-linux-gnu)
4770 arch_target=powerpc64
4771 AC_DEFINE(TARGET_XBOX360, 1, [...])
4772 # It would be better to just use TARGET_POWERPC64, but lots of code already
4775 target_byte_order=G_BIG_ENDIAN
4779 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4783 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4796 AC_DEFINE(TARGET_PS4, 1, [...])
4797 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4798 CPPFLAGS="$CPPFLAGS"
4801 aarch64*darwin*_ilp32)
4803 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4805 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4809 # Both ios and osx/arm64 have the same aarc64-darwin triple,
4810 # assume ios for now when cross compiling
4818 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4819 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4826 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4827 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4832 x86_64-google-fuchsia)
4835 AC_DEFINE(HOST_FUCHSIA,1,[Targeting the Fuchsia platform])
4838 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4846 AC_DEFINE(TARGET_ANDROID, 1, [...])
4853 AC_DEFINE(TARGET_WASM, 1, [...])
4857 AC_DEFINE(TARGET_X86, 1, [...])
4861 AC_DEFINE(TARGET_AMD64, 1, [...])
4865 AC_DEFINE(TARGET_ARM, 1, [...])
4867 ACCESS_UNALIGNED="no"
4870 AC_DEFINE(TARGET_ARM64, 1, [...])
4874 AC_DEFINE(TARGET_POWERPC, 1, [...])
4877 AC_DEFINE(TARGET_POWERPC, 1, [...])
4878 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4881 AC_DEFINE(TARGET_S390X, 1, [...])
4884 AC_DEFINE(TARGET_MIPS, 1, [...])
4887 AC_DEFINE(TARGET_SPARC, 1, [...])
4890 AC_DEFINE(TARGET_SPARC64, 1, [...])
4893 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4894 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4897 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4898 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4903 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4904 target_sizeof_void_p=4
4907 target_sizeof_void_p=8
4910 AC_MSG_ERROR([unknown target])
4916 AC_DEFINE(HOST_WASM, 1, [...])
4919 AC_DEFINE(HOST_X86, 1, [...])
4922 AC_DEFINE(HOST_AMD64, 1, [...])
4925 AC_DEFINE(HOST_ARM, 1, [...])
4928 AC_DEFINE(HOST_ARM64, 1, [...])
4931 AC_DEFINE(HOST_POWERPC, 1, [...])
4934 AC_DEFINE(HOST_POWERPC, 1, [...])
4935 AC_DEFINE(HOST_POWERPC64, 1, [...])
4938 AC_DEFINE(HOST_S390X, 1, [...])
4941 AC_DEFINE(HOST_MIPS, 1, [...])
4944 AC_DEFINE(HOST_SPARC, 1, [...])
4947 AC_DEFINE(HOST_SPARC64, 1, [...])
4950 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4951 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4954 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4955 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4959 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4961 X86 | AMD64 | ARM | ARM64)
4962 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4966 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4967 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4973 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4974 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4976 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4978 if test "x$enable_vtune" = "xyes"; then
4979 if test "x$with_vtune" = "x"; then
4980 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4982 VTUNE_PATH=$with_vtune
4984 VTUNE_INCLUDE=$VTUNE_PATH/include
4987 VTUNE_LIB=$VTUNE_PATH/lib32
4990 VTUNE_LIB=$VTUNE_PATH/lib64
4993 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4996 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4997 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4999 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
5000 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
5003 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
5004 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
5006 AC_SUBST(VTUNE_LIBS)
5007 AC_SUBST(VTUNE_CFLAGS)
5009 dnl Use GCC atomic ops if they work on the target.
5010 if test x$GCC = "xyes"; then
5012 X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
5013 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
5018 if test "x$target_mach" = "xyes"; then
5020 if test "x$TARGET_SYS" = "xWATCHOS"; then
5021 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
5022 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
5023 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
5025 elif test "x$TARGET_SYS" = "xIOS" -o "x$TARGET" = "xARM" -o "x$TARGET" = "xARM6432"; then
5026 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
5027 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
5028 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
5032 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
5033 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
5034 #error fail this for ios
5037 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
5038 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
5039 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
5041 if test "x$TARGET" = "xARM64"; then
5045 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
5046 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
5047 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
5052 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
5055 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
5057 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
5059 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
5060 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
5061 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
5062 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
5064 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
5067 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
5069 if test "x$sizeof_register" = "x4"; then
5070 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
5071 elif test "x$sizeof_register" = "x8"; then
5072 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
5074 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
5077 # zlib/configure detects visibility support similarly and defines HAVE_HIDDEN
5078 # on the compiler command line (not config.h).
5079 if test "x$have_visibility_hidden" = "xyes"; then
5080 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
5081 ZLIB_CFLAGS="$ZLIB_CFLAGS -DHAVE_HIDDEN"
5084 if test "x$have_deprecated" = "xyes"; then
5085 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
5089 dnl Simple Generational checks (sgen)
5092 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
5093 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
5094 if test x$buildsgen = xyes; then
5095 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
5096 SGEN_DEFINES="-DHAVE_SGEN_GC"
5099 if test x$with_sgen_default_concurrent != xno; then
5100 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
5101 conc_gc_msg=" (concurrent by default)"
5104 if test "x$gc_msg" = "x"; then
5105 gc_msg="sgen$conc_gc_msg"
5107 gc_msg="sgen$conc_gc_msg and $gc_msg"
5110 AC_SUBST(SGEN_DEFINES)
5111 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
5113 jit_status="Building and using the JIT"
5119 dnl on AIX/PASE, shared libraries can be and usually are inside archives
5120 dnl so, we specify them by libfoo.a(libfoo.so.0) for libtool's conventions,
5121 dnl or libfoo.a(shr[_64].o) for the AIX system convention,
5122 dnl or lib.so[.0](shr[_64].o) for libtool's hybrid convention
5123 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX
5124 LIBC="libc.a(shr_64.o)"
5125 # Thanks, I hate it! This is crumbly, especially the one-liner.
5126 AC_MSG_CHECKING([how to dlopen libintl])
5127 AC_LINK_IFELSE([AC_LANG_SOURCE([
5128 /* XXX: Check for libintl header/gettext func better? */
5129 #include <libintl.h>
5132 gettext("Dummy for autoconf");
5137 INTL="$(dump -X64 -Hp conftest$EXEEXT | grep libintl | cut -c 38- | tr -s " " | awk '{print $1"("$2")"}')"
5138 AC_MSG_RESULT([yes, $INTL])
5141 INTL="libintl.a(libintl.so.8)"
5142 AC_MSG_RESULT([no, falling back to $INTL])
5144 SQLITE3="libsqlite3.a(libsqlite3.so.0)"
5145 # it's very tempting to set a libsuffix, but it depends on the soname value
5148 dnl However, IBM's packages for i try to be more "normal" than the AIX world, naming wise.
5149 dnl The library archives has "normal" .so names, but they're members with predictable "shr" names for fat libraries.
5150 LIBC="libc.a(shr_64.o)"
5151 INTL="libintl.so(shr_64.o)"
5152 SQLITE3="libsqlite3.so(shr_64.o)"
5153 # 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
5154 # it may be worth revisiting this in the future
5159 INTL="libintl.dylib"
5160 SQLITE="libsqlite.0.dylib"
5161 SQLITE3="libsqlite3.0.dylib"
5163 GDKX11="libgdk-x11-2.0.dylib"
5164 GTKX11="libgtk-x11-2.0.dylib"
5169 SQLITE="libsqlite.so"
5170 SQLITE3="libsqlite3.so"
5180 SQLITE="libsqlite.so"
5181 SQLITE3="libsqlite3.so"
5186 SQLITE="libsqlite.so"
5187 SQLITE3="libsqlite3.so"
5190 if test "x$with_core" != "xonly"; then
5192 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
5193 AC_MSG_CHECKING(for the soname of libX11.so)
5194 for i in $x_libraries $dlsearch_path; do
5196 if test -f $i/libX11.so.$r; then
5203 if test "x$X11" = "xlibX11.so"; then
5204 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
5213 ######################################
5215 ######################################
5219 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
5220 if test x$GCC = xyes; then
5221 GNUC_UNUSED='__attribute__((__unused__))'
5222 GNUC_NORETURN='__attribute__((__noreturn__))'
5224 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
5227 AC_SUBST(GNUC_PRETTY)
5228 AC_SUBST(GNUC_UNUSED)
5229 AC_SUBST(GNUC_NORETURN)
5230 AC_SUBST(BREAKPOINT)
5232 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
5235 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
5251 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
5256 arm*-darwin*|aarch64*-*|riscv*)
5257 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
5260 ORDER=G_LITTLE_ENDIAN
5263 LDFLAGS="$LDFLAGS -ltextencoding"
5266 CFLAGS="$CFLAGS -pthread"
5267 LDFLAGS="$LDFLAGS -pthread"
5277 # Defined for all targets/platforms using classic Windows API support.
5278 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
5279 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
5281 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
5282 AC_CHECK_FUNCS(getrlimit)
5283 AC_CHECK_FUNCS(fork execv execve)
5284 AC_CHECK_FUNCS(waitpid)
5286 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
5288 if test x$with_overridable_allocators = xyes; then
5289 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5290 AC_MSG_NOTICE([Overridable allocator support enabled])
5292 AC_MSG_NOTICE([Overridable allocator support disabled])
5296 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
5297 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
5298 # removed once support for 10.6 is dropped.
5300 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
5302 if test x$target_osx = xyes; then
5303 AC_CHECK_FUNCS(getpwuid_r)
5304 elif test x$target_ios = xno; then
5305 AC_CHECK_FUNCS(strndup getpwuid_r)
5308 AC_SEARCH_LIBS(sqrtf, m)
5310 # nanosleep may not be part of libc, also search it in other libraries
5311 AC_SEARCH_LIBS(nanosleep, rt)
5313 AC_SEARCH_LIBS(dlopen, dl)
5315 # AIX/OS400 -bsymbolic
5316 # Apple -bind_at_load
5319 export_link_flags=--export-dynamic
5322 export_link_flags=--export-all-symbols
5325 export_link_flags=--export_dynamic
5328 AX_APPEND_LINK_FLAGS([-Wl,$export_link_flags -Wl,-Bsymbolic -bsymbolic -Wl,-z,now -Wl,-bind_at_load])
5330 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
5331 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
5332 AC_CHECK_LIB(iconv, iconv_open)
5333 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
5334 AC_SUBST(HAVE_ALLOCA_H)
5336 # Get the exact type of size_t, not just its size.
5337 # This is so we can find an exact printf format among u, lu, llu, I64u.
5338 # To avoid warnings about slight mismatches.
5339 # C99 runtime "zu" dependency is being avoided here.
5341 # We have to compile as C++ because C is too lenient
5342 # and lets the wrong thing compile, with warnings.
5344 # Note: "zu" or ifdef <something> have the advantage
5345 # of producing installable "biarch" headers. i.e. one Mac header
5346 # for Mac/x86 and Mac/amd64.
5350 # Check long before int because it is the overwhelming Unix answer,
5351 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
5353 # long ahead of int also tends to produce biarch-compatible headers except Windows.
5355 AC_MSG_CHECKING(if size_t is unsigned long)
5356 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5358 unsigned long *a = (size_t*)0;
5361 AC_SUBST(GSIZE_FORMAT, '"lu"')
5364 AC_MSG_CHECKING(if size_t is unsigned int)
5365 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5367 unsigned *a = (size_t*)0;
5370 AC_SUBST(GSIZE_FORMAT, '"u"')
5372 # At this point the majority of systems have their answer,
5373 # and we descend into non-standard or new-standard territory.
5375 # Check __int64 first because I64 on some systems predates ll, enabling
5376 # new compiler/old runtime interop, and the types always have the same size.
5378 AC_MSG_CHECKING(if size_t is unsigned __int64)
5379 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5381 unsigned __int64 *a = (size_t*)0;
5384 AC_SUBST(GSIZE_FORMAT, '"I64u"')
5387 AC_MSG_CHECKING(if size_t is unsigned long long)
5388 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
5390 unsigned long long *a = (size_t*)0;
5393 AC_SUBST(GSIZE_FORMAT, '"llu"')
5396 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
5404 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
5405 # This provides for an exact match with functions that
5406 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
5407 # uintptr_t is not necessarily the same.
5409 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
5410 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
5412 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
5422 AC_SUBST(GSIZE_FORMAT)
5425 # END OF EGLIB CHECKS
5428 AC_ARG_WITH([libgdiplus],
5429 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
5430 [], [with_libgdiplus=installed])
5432 # default install location
5433 libgdiplus_install_loc=libgdiplus${libsuffix}
5436 libgdiplus_install_loc=libgdiplus${libsuffix}.0
5440 case $with_libgdiplus in
5447 if test x$cross_compiling = xno; then
5448 if test x$host_darwin = xyes; then
5449 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
5451 libgdiplus_install_loc=$a
5459 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5462 /*) # absolute path, assume it is an install location
5463 libgdiplus_loc=$with_libgdiplus
5464 libgdiplus_install_loc=$with_libgdiplus
5468 libgdiplus_loc=`pwd`/$with_libgdiplus
5471 AC_SUBST(libgdiplus_loc)
5472 AC_SUBST(libgdiplus_install_loc)
5474 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)
5475 if test "x$icall_symbol_map" = "xyes"; then
5476 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5479 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5480 if test "x$icall_export" = "xyes"; then
5481 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5484 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5485 if test "x$icall_tables" = "xno"; then
5486 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5489 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5491 if test "x$with_tls" = "x__thread"; then
5492 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5493 # Pass the information to libgc
5494 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5495 AC_MSG_CHECKING(if the tls_model attribute is supported)
5496 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5499 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5505 if test ${TARGET} = ARM; then
5506 dnl ******************************************
5507 dnl *** Check to see what FPU is available ***
5508 dnl ******************************************
5509 AC_MSG_CHECKING(which FPU to use)
5512 # This is a bit tricky:
5514 # if (__ARM_PCS_VFP) {
5515 # /* mfloat-abi=hard == VFP with hard ABI */
5516 # } elif (!__SOFTFP__) {
5517 # /* mfloat-abi=softfp == VFP with soft ABI */
5519 # /* mfloat-abi=soft == no VFP */
5522 # The exception is iOS (w/ GCC) where none of the above
5523 # are defined (but iOS always uses the 'softfp' ABI).
5525 # No support for FPA.
5530 # iOS GCC always uses the 'softfp' ABI.
5531 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5535 # Are we using the 'hard' ABI?
5536 if test x$fpu = xNONE; then
5537 AC_TRY_COMPILE([], [
5538 #ifndef __ARM_PCS_VFP
5539 #error "Float ABI is not 'hard'"
5548 # No 'hard' ABI. 'soft' or 'softfp'?
5549 if test x$fpu = xNONE; then
5550 AC_TRY_COMPILE([], [
5552 #error "Float ABI is not 'softfp'"
5561 if test x$arm_fpu != x; then
5566 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5569 dnl *********************************************
5570 dnl *** Check which ARM version(s) we can use ***
5571 dnl *********************************************
5572 AC_MSG_CHECKING(which ARM version to use)
5574 AC_TRY_COMPILE([], [
5575 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5576 #error Not on ARM v5.
5584 AC_TRY_COMPILE([], [
5585 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5586 #error Not on ARM v6.
5595 AC_TRY_COMPILE([], [
5596 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5597 #error Not on ARM v7.
5607 AC_MSG_RESULT($arm_ver)
5609 if test x$arm_v5 = xyes; then
5610 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5611 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5614 if test x$arm_v6 = xyes; then
5615 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5616 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5619 if test x$arm_v7 = xyes; then
5620 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5621 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5624 if test x$host_linux = xyes; then
5627 if test x$fpu = xNONE; then
5636 AC_SUBST(CORETARGETS)
5638 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5639 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5641 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5643 if test x$fpabi = xauto; then
5644 AC_TRY_COMPILE([], [
5645 #ifdef __riscv_float_abi_double
5655 if test x$fpabi = xauto; then
5656 AC_TRY_COMPILE([], [
5657 #ifdef __riscv_float_abi_single
5667 if test x$fpabi = xauto; then
5668 AC_TRY_COMPILE([], [
5669 #ifdef __riscv_float_abi_soft
5681 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5682 AC_MSG_RESULT([double-precision])
5685 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5686 AC_MSG_ERROR([single-precision, not supported])
5689 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5690 AC_MSG_RESULT([soft float])
5693 AC_MSG_ERROR([unknown])
5696 AC_MSG_ERROR([invalid option: $fpabi])
5701 if test ${TARGET} = unknown; then
5702 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5703 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5706 if test "x$platform_android" = "xyes"; then
5707 case "x${TARGET}" in
5712 BTLS_PLATFORM=android-armv5
5716 BTLS_PLATFORM=android-armv6
5720 BTLS_PLATFORM=android-armv7
5729 BTLS_PLATFORM=android-v8a
5733 BTLS_PLATFORM=android-x86
5737 BTLS_PLATFORM=android-x64
5745 if test ${ACCESS_UNALIGNED} = no; then
5746 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5749 if test x$host_darwin = xyes; then
5750 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5752 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5753 [AC_MSG_RESULT([no])],
5755 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5757 RANLIB="$RANLIB -no_warning_for_no_symbols"
5758 AC_MSG_RESULT([yes])
5765 # Pass CPPFLAGS to libgc configure
5766 # We should use a separate variable for this to avoid passing useless and
5767 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5768 # This should be executed late so we pick up the final version of CPPFLAGS
5769 # The problem with this approach, is that during a reconfigure, the main
5770 # configure scripts gets invoked with these arguments, so we use separate
5771 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5772 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5773 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5774 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5776 # Don't pass -finstrument-for-thread-suspension in,
5777 # if these are instrumented it will be very bad news
5778 # (infinite recursion, undefined parking behavior, etc)
5779 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5780 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\""
5781 if test "x$support_boehm" = "xyes"; then
5782 AC_CONFIG_SUBDIRS(external/bdwgc)
5788 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5789 if test x$with_malloc_mempools = xyes; then
5791 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5796 DISABLE_MCS_DOCS=default
5797 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5798 if test x$with_mcs_docs != xyes; then
5799 DISABLE_MCS_DOCS=yes
5802 if test -n "$INSTALL_4_x_TRUE"; then :
5803 DISABLE_MCS_DOCS=yes
5805 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5806 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5809 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)],[
5810 if test x$with_lazy_gc_thread_creation != xno ; then
5811 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5813 ], [with_lazy_gc_thread_creation=no])
5815 dnl *****************************
5816 dnl *** Thread suspend policy ***
5817 dnl *****************************
5819 dnl Set a default hybrid or cooperative suspend on some platforms
5821 dnl Coop default is set by the bitcode preset.
5823 dnl If coop isn't on by default, maybe hybrid should be?
5824 if test x$enable_cooperative_suspend_default != xyes; then
5827 dnl Some host/target confusion, there's no host_osx (and
5828 dnl host_darwin would be true on iOS not just macOS).
5829 if test x$target_osx = xyes; then
5830 enable_hybrid_suspend_default=yes
5831 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5832 enable_hybrid_suspend_default=yes
5838 dnl Now check if there were flags overriding the defaults
5840 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])
5841 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5843 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5844 enable_cooperative_suspend=$with_cooperative_gc
5847 if test x$enable_cooperative_suspend = xdefault; then
5848 enable_cooperative_suspend=$enable_cooperative_suspend_default
5851 if test x$enable_cooperative_suspend != xno; then
5852 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5853 enable_hybrid_suspend_default=no
5856 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5858 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])
5860 if test x$enable_hybrid_suspend = xdefault; then
5861 enable_hybrid_suspend=$enable_hybrid_suspend_default
5864 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5865 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5868 if test x$enable_hybrid_suspend != xno ; then
5869 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5872 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5874 dnl End of thread suspend policy
5876 dnl ***************************
5877 dnl *** feature experiments ***
5878 dnl ***************************
5880 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5881 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null,tiered],[
5883 if test x$enable_experiment != x ; then
5884 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5886 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5887 eval "mono_experiment_test_enable_$feature='yes'"
5890 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5891 eval "mono_experiment_test_enable_null='yes'"
5892 eval "mono_experiment_test_enable_tiered='yes'"
5896 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5897 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5899 if test "x$mono_experiment_test_enable_tiered" = "xyes"; then
5900 AC_DEFINE(ENABLE_EXPERIMENT_TIERED, 1, [Enable experiment 'Tiered Compilation'])
5904 AM_CONDITIONAL(ENABLE_EXPERIMENT_TIERED, test x$mono_experiment_test_enable_tiered = xyes)
5906 dnl **********************
5907 dnl *** checked builds ***
5908 dnl **********************
5910 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],[
5912 if test x$enable_checked_build != x ; then
5913 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5915 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5916 eval "mono_checked_build_test_enable_$feature='yes'"
5919 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5920 eval "mono_checked_build_test_enable_gc='yes'"
5921 eval "mono_checked_build_test_enable_metadata='yes'"
5922 eval "mono_checked_build_test_enable_thread='yes'"
5923 eval "mono_checked_build_test_enable_private_types='yes'"
5924 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5927 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5928 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5931 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5932 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5935 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5936 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5939 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5940 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5943 if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5945 with_overridable_allocators=yes
5946 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5948 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5952 dnl End of checked builds
5954 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5956 AC_CHECK_HEADER([malloc.h],
5957 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5958 [Define to 1 if you have /usr/include/malloc.h.])],,)
5960 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5961 # instead of libmono-static.a
5962 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5963 LIBMONO_LA=libmini-static.la
5965 if test x$buildsgen = xyes; then
5966 LIBMONO_LA=libmonosgen-$API_VER.la
5968 LIBMONO_LA=libmonoboehm-$API_VER.la
5971 AC_SUBST(LIBMONO_LA)
5977 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5978 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5979 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5980 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5981 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5982 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])
5984 if test "x$with_btls_android_api" = "x" ; then
5985 case "$BTLS_PLATFORM" in
5987 with_btls_android_api=16" ;;
5989 with_btls_android_api=16" ;;
5991 with_btls_android_api=16 ;;
5993 with_btls_android_api=21 ;;
5995 with_btls_android_api=16 ;;
5997 with_btls_android_api=21 ;;
6001 if test "x$enable_btls" = "xno"; then
6005 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
6008 if test "x$enable_btls" = "xyes"; then
6009 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
6010 if test "x$CMAKE" = "xno"; then
6011 AC_MSG_ERROR("cmake not found")
6014 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
6021 if test "x$host_win32" = "xyes"; then
6022 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
6025 case "$BTLS_PLATFORM" in
6031 btls_cflags="$btls_cflags -arch i386"
6034 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
6035 if test "x$HAVE_YASM" != "xyes"; then
6036 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
6045 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
6046 if test "x$HAVE_YASM" != "xyes"; then
6047 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
6054 btls_cflags="-DOPENSSL_NO_ASM=1"
6058 btls_cflags="-DOPENSSL_NO_ASM=1"
6062 btls_cflags="-march=armv8-a+crypto"
6071 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
6072 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
6076 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6079 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6082 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6085 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6088 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6091 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
6100 AC_MSG_ERROR(Invalid BTLS platform)
6103 if test "x$platform_android" = "xyes"; then
6104 if test "x$with_btls_android_cmake_toolchain" = "x"; then
6105 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
6108 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
6109 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
6113 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
6114 if test "x$with_btls_android_ndk" != "x"; then
6115 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
6117 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
6121 if test "x$btls_arch" != "x"; then
6122 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
6125 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
6127 AC_SUBST(BTLS_CFLAGS)
6128 AC_SUBST(BTLS_PLATFORM)
6129 AC_SUBST(BTLS_CMAKE_ARGS)
6131 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
6136 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
6138 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
6139 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
6140 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
6142 libmono_ldflags="$libmono_ldflags $LIBS"
6144 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
6145 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
6146 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
6147 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
6148 AM_CONDITIONAL(X86, test x$TARGET = xX86)
6149 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
6150 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
6151 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
6152 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
6153 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
6154 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
6155 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
6156 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
6157 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
6158 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
6159 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
6160 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
6161 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
6162 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
6163 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
6164 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
6165 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
6166 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
6167 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
6169 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
6180 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
6181 AC_SUBST(arch_target)
6183 #This must always be defined when building the runtime
6184 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
6186 mono_build_root=`pwd`
6187 AC_SUBST(mono_build_root)
6189 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)
6190 if test x$host_win32 = xno; then
6191 if test x$enable_msvc_only = xyes; then
6192 echo "Error, --enable-msvc-only only supported for Windows builds."
6196 AM_CONDITIONAL(ENABLE_MSVC_ONLY, test x$enable_msvc_only = xyes)
6198 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
6199 if test x$host_win32 = xno; then
6200 if test x$enable_msvc = xyes; then
6201 echo "Error, --enable-msvc only supported for Windows builds."
6205 if test x$enable_msvc_only = xyes; then
6208 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
6210 if test "x$enable_msvc" = "xyes"; then
6211 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
6212 if test "x$host_cpu" = "xi686"; then
6213 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
6214 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
6215 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
6216 mono_runtime_wrapper=$mono_runtime
6218 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
6219 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
6220 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
6221 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
6223 AC_SUBST(mono_msvc_build_dir)
6224 AC_SUBST(mono_msvc_build_lib_dir)
6225 AC_SUBST(mono_msvc_build_bin_dir)
6227 mono_runtime=mono/mini/mono
6228 mono_runtime_wrapper=$mono_runtime
6231 AC_SUBST(mono_runtime)
6232 AC_SUBST(mono_runtime_wrapper)
6234 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/csc.exe
6235 VBCS_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/3.7.0/VBCSCompiler.exe
6237 if test $csc_compiler = mcs; then
6238 CSC=$mcs_topdir/class/lib/build/mcs.exe
6243 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
6245 mono_cfg_root=$mono_build_root/runtime
6246 if test x$host_win32 = xyes; then
6247 if test "x$cross_compiling" = "xno"; then
6248 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
6249 CSC=`cygpath -m -a $CSC`
6250 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
6251 VBCS_LOCATION=`cygpath -m -a $VBCS_LOCATION`
6253 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
6256 mono_cfg_dir=$mono_cfg_root/etc
6259 if test "x$platform_android" = "xyes"; then
6263 AC_SUBST(mono_cfg_dir)
6267 if test "x$with_core" != "xonly"; then
6269 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
6272 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6274 *) reldir=$depth/$srcdir ;;
6276 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
6277 cd runtime/etc/mono/1.0
6278 rm -f machine.config
6279 $LN_S $reldir/data/net_1_1/machine.config machine.config
6283 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
6286 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6288 *) reldir=$depth/$srcdir ;;
6290 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6291 cd runtime/etc/mono/2.0
6292 rm -f machine.config
6293 $LN_S $reldir/data/net_2_0/machine.config machine.config
6297 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
6300 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6302 *) reldir=$depth/$srcdir ;;
6304 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
6305 cd runtime/etc/mono/2.0
6307 $LN_S $reldir/data/net_2_0/web.config web.config
6311 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
6314 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6316 *) reldir=$depth/$srcdir ;;
6318 $ac_aux_dir/install-sh -d runtime/etc/mono/
6319 cd runtime/etc/mono/
6321 $LN_S $reldir/data/browscap.ini browscap.ini
6325 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
6326 [ depth=../../../../..
6328 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6330 *) reldir=$depth/$srcdir ;;
6332 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
6333 cd runtime/etc/mono/2.0/Browsers
6334 rm -f Compat.browser
6335 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6339 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
6340 [ depth=../../../../..
6342 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6344 *) reldir=$depth/$srcdir ;;
6346 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
6347 cd runtime/etc/mono/4.0/Browsers
6348 rm -f Compat.browser
6349 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6353 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
6354 [ depth=../../../../..
6356 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6358 *) reldir=$depth/$srcdir ;;
6360 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
6361 cd runtime/etc/mono/4.5/Browsers
6362 rm -f Compat.browser
6363 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
6367 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
6370 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6372 *) reldir=$depth/$srcdir ;;
6374 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6375 cd runtime/etc/mono/4.0
6376 rm -f machine.config
6377 $LN_S $reldir/data/net_4_0/machine.config machine.config
6381 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
6384 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6386 *) reldir=$depth/$srcdir ;;
6388 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
6389 cd runtime/etc/mono/4.0
6391 $LN_S $reldir/data/net_4_0/web.config web.config
6395 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
6398 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6400 *) reldir=$depth/$srcdir ;;
6402 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6403 cd runtime/etc/mono/4.5
6404 rm -f machine.config
6405 $LN_S $reldir/data/net_4_5/machine.config machine.config
6409 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
6412 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
6414 *) reldir=$depth/$srcdir ;;
6416 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
6417 cd runtime/etc/mono/4.5
6419 $LN_S $reldir/data/net_4_5/web.config web.config
6424 # Top level Makefile.am subdirs
6425 if test "x$with_core" = "xonly"; then
6426 MONO_SUBDIRS="llvm mono"
6428 if test "x$support_boehm" = "xyes" -a "x$libgc" = "xincluded"; then
6429 mono_subdirs_libgc=external/bdwgc
6432 if test x$enable_support_build != xno; then
6433 mono_subdirs_support=support
6436 if test x$cross_compiling = xno; then
6437 # Some tools might not build when cross-compiling
6438 mono_subdirs_tools=tools
6441 if test x$DISABLE_MCS_DOCS != xyes; then
6442 mono_subdirs_docs=docs
6445 if test x$with_ikvm_native = xyes; then
6446 mono_subdirs_ikvm_native=ikvm-native
6449 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"
6450 MONO_NOINST_SUBDIRS="$mono_subdirs_libgc"
6453 AC_SUBST(MONO_SUBDIRS)
6454 AC_SUBST(MONO_NOINST_SUBDIRS)
6456 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])
6457 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])
6458 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
6461 # Mono.Native Support
6462 # -------------------
6463 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
6464 # It is built as a stand-alone shared library and not bundled with the runtime because we
6465 # may need to build two different versions of it.
6467 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
6468 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
6470 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
6471 # implementation accordingly. We build a single `libmono-native` shared library.
6473 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
6475 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
6476 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
6477 # depending on platform.
6479 # We build two versions of the shared library:
6480 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
6481 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
6483 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
6484 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
6485 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
6487 # This can be called by automated tests both to ensure that the library has been correctly installed and also
6488 # to verify that it's the correct version of it.
6491 AC_MSG_CHECKING([Mono.Native support])
6492 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
6493 if test x$disable_mono_native = xyes; then
6495 elif test x$target_osx = xyes; then
6497 MONO_NATIVE_CXX=$CXX
6498 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6499 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6500 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6501 MONO_NATIVE_CFLAGS=$CFLAGS
6502 MONO_NATIVE_LDFLAGS=$LDFLAGS
6505 MONO_NATIVE_PLATFORM=macos
6506 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
6508 if test x$enable_gss = xyes; then
6509 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -framework GSS"
6512 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
6513 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6515 if test x$mono_native_compat = xyes; then
6516 mono_native_compat=yes
6517 mono_native_text="Mac OSX (compat + unified v10.12)"
6518 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6519 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6520 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6521 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6522 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6524 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6525 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6526 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6527 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6528 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6529 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6531 mono_native_compat=no
6532 mono_native_text="Mac OSX"
6534 elif test x$mono_native_platform_ios = xyes; then
6535 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6537 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6538 if test x$mono_native_ios_sim = xyes; then
6539 mono_native_ios_target=ios-simulator
6540 mono_native_text="iOS Simulator"
6541 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6543 mono_native_ios_target=iphoneos
6544 mono_native_text="iOS Device"
6545 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6547 mono_native_unified_version="10.0"
6548 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6550 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6551 if test x$mono_native_ios_sim = xyes; then
6552 mono_native_ios_target=tvos-simulator
6553 mono_native_text="AppleTV Simulator"
6554 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6556 mono_native_ios_target=tvos
6557 mono_native_text="AppleTV Device"
6558 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6560 mono_native_unified_version="10.0"
6561 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6563 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6564 if test x$mono_native_ios_sim = xyes; then
6565 mono_native_ios_target=watchos-simulator
6566 mono_native_text="Apple Watch Simulator"
6567 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6569 mono_native_ios_target=watchos
6570 mono_native_text="Apple Watch Device"
6571 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6573 mono_native_unified_version="5.0"
6574 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6576 AC_MSG_ERROR([Unknown iOS Target])
6581 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6583 if test x$with_bitcode = xyes; then
6584 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6585 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6587 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6590 if test x$enable_gss = xyes; then
6591 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6595 MONO_NATIVE_CXX=$CXX
6596 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6597 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6598 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6599 MONO_NATIVE_CFLAGS=$CFLAGS
6600 MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6602 if test x$mono_native_compat = xyes; then
6603 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6604 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6605 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6606 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6607 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6608 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6610 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6611 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6612 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6613 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6614 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6615 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"
6619 MONO_NATIVE_PLATFORM=ios
6620 elif test x$host_linux = xyes; then
6621 mono_native_text="Linux"
6623 MONO_NATIVE_CXX=$CXX
6624 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6625 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6626 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6627 MONO_NATIVE_CFLAGS=$CFLAGS
6628 MONO_NATIVE_LDFLAGS=$LDFLAGS
6629 if test x$enable_gss = xyes; then
6630 MONO_NATIVE_LDFLAGS="$MONO_NATIVE_LDFLAGS -lgssapi_krb5"
6632 AC_MSG_WARN([GSS is not enabled, it requires libkrb5-dev package])
6635 mono_native_compat=no
6636 MONO_NATIVE_PLATFORM=linux
6638 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6639 elif test x$target_wasm = xyes; then
6640 mono_native_text="wasm"
6642 MONO_NATIVE_CXX=$CXX
6643 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6644 # The system.native code uses _WASM_ to check for wasm
6645 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6646 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6647 MONO_NATIVE_CFLAGS=$CFLAGS
6648 MONO_NATIVE_LDFLAGS=$LDFLAGS
6651 mono_native_compat=no
6652 MONO_NATIVE_PLATFORM=linux
6654 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6655 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6656 mono_native_text="AIX"
6658 MONO_NATIVE_CXX=$CXX
6659 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6660 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6661 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6662 MONO_NATIVE_CFLAGS=$CFLAGS
6663 dnl nosymbolic- is a hack in case -G for linking is used, as -G seems
6664 dnl to change the way unresolved symbols work on library load in an
6665 dnl incompatible manner. (as references to runtime functions are
6666 dnl resolved later) Default params otherwise are that, so seems OK.
6667 dnl Likewise, we don't seem to need to cover the entire runtime with
6668 dnl it either, on both AIX and PASE. -brtl from -G does seem to spew
6669 dnl Big Scary TOC Warnings (tm) from the linker, but it doesn't seem
6670 dnl problematic with gcc's -mminimal-toc.
6672 dnl flock in AIX exists in libbsd (not the same as freedesktop.org
6673 dnl libbsd) which Mono.Native needs.
6674 dnl Because of the way that the library is built by default, unresolved
6675 dnl references are kept and resolved at runtime. Often, the dependency
6676 dnl chain means libbsd is loaded anyways, but not necessarily. It's
6677 dnl better to explicitly link it, even though it has it shadows libc's
6678 dnl ioctl with its own. (As for the other unresolved imports, those
6679 dnl should be provided by the Mono runtime loaded.)
6680 MONO_NATIVE_LDFLAGS="$LDFLAGS -lbsd -Wl,-bnosymbolic-"
6683 mono_native_compat=no
6684 MONO_NATIVE_PLATFORM=aix
6686 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6687 elif case $host_os in freebsd*) true;; *) false;; esac; then
6688 mono_native_text="FreeBSD"
6690 MONO_NATIVE_CXX=$CXX
6691 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6692 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6693 MONO_NATIVE_CFLAGS="$CFLAGS -I/usr/local/include"
6694 MONO_NATIVE_LDFLAGS=$LDFLAGS
6697 mono_native_compat=no
6698 MONO_NATIVE_PLATFORM=freebsd
6699 AC_MSG_CHECKING([Mono.Native support])
6700 AC_MSG_RESULT(freebsd)
6702 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_FREEBSD"
6703 elif case $host_os in netbsd*) true;; *) false;; esac; then
6704 mono_native_text="NetBSD"
6706 MONO_NATIVE_CXX=$CXX
6707 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6708 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6709 MONO_NATIVE_CFLAGS=$CFLAGS
6710 MONO_NATIVE_LDFLAGS=$LDFLAGS
6713 mono_native_compat=no
6714 MONO_NATIVE_PLATFORM=netbsd
6715 AC_MSG_CHECKING([Mono.Native support])
6716 AC_MSG_RESULT(netbsd)
6718 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_NETBSD"
6719 elif case $host_os in haiku*) true;; *) false;; esac; then
6720 mono_native_text="Haiku"
6722 MONO_NATIVE_CXX=$CXX
6723 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6724 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6725 MONO_NATIVE_CFLAGS=$CFLAGS
6726 MONO_NATIVE_LDFLAGS=$LDFLAGS
6729 mono_native_compat=no
6730 MONO_NATIVE_PLATFORM=haiku
6731 AC_MSG_CHECKING([Mono.Native support])
6732 AC_MSG_RESULT(haiku)
6734 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_HAIKU"
6735 elif test x$platform_android = xyes; then
6736 mono_native_text="Android"
6738 MONO_NATIVE_CXX=$CXX
6739 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6740 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6741 MONO_NATIVE_CFLAGS=$CFLAGS
6742 MONO_NATIVE_LDFLAGS=$LDFLAGS
6743 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6746 mono_native_compat=no
6747 MONO_NATIVE_PLATFORM=android
6749 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6752 mono_native_text="no"
6755 AC_MSG_RESULT($mono_native_text)
6757 if test x$mono_native_compat = xyes; then
6758 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6760 MONO_NATIVE_LIBRARY_NAME=libmono-native
6763 AC_SUBST(MONO_NATIVE_PLATFORM)
6764 AC_SUBST(MONO_NATIVE_CC)
6765 AC_SUBST(MONO_NATIVE_CXX)
6766 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6767 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6768 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6769 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6770 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6771 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6772 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6773 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6774 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6775 AC_SUBST(MONO_NATIVE_CFLAGS)
6776 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6777 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6778 AC_SUBST(MONO_NATIVE_LDFLAGS)
6779 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6780 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6781 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6782 AC_SUBST(MONO_NATIVE_LIBADD)
6784 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6785 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6786 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6787 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6788 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6789 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6790 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6791 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_FREEBSD, test x$MONO_NATIVE_PLATFORM = xfreebsd)
6792 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_NETBSD, test x$MONO_NATIVE_PLATFORM = xnetbsd)
6793 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_HAIKU, test x$MONO_NATIVE_PLATFORM = xhaiku)
6795 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6796 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6797 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6798 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6799 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6801 ### C++ Linker selection
6803 # We have to lie to autotools, sometimes.
6805 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6806 # otherwise to CC. We want C linking even if we're compiling with C++ enabled
6807 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6808 # except if we're linking with LLVM which relies on it.
6810 # Explanation of the hack:
6813 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6814 # automake chooses the linker that it used to compile a target based on the
6815 # _SOURCES for that target. If the target is comprised of only C code, it
6816 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6817 # linker arguments and a -o). If the target _SOURCES include at least one C++ file,
6818 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6820 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6821 # or libc++) linked in - even when Mono is written in C++, we take care not to
6822 # require the runtime library. As a result, we don't want g++ or clang++ to do
6823 # the linking. On the other hand if LLVM is enabled, then we _must_ use the
6824 # C++ linker - LLVM doesn't have the same restrictions.
6826 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6827 # mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6828 # automake's autodetection and lets us use the linker that we want.
6830 if test "x$enable_llvm_runtime" = "xyes"; then
6831 AC_SUBST(MONO_CXXLD, [$CXX])
6832 AC_SUBST(MONO_LIBTOOL_TAG, '--tag=CXX')
6834 AC_SUBST(MONO_CXXLD, [$CC])
6835 AC_SUBST(MONO_LIBTOOL_TAG, '')
6838 ### Set -Werror options
6840 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6842 if test x"$GCC" = xyes; then
6844 if test "x$with_jemalloc" != "xyes"; then
6846 # incompatible-pointer-types requires gcc circa 5.x
6849 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6850 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6854 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6860 CFLAGS="$CFLAGS -Werror=return-type"
6863 # Implicit function declarations are not 64 bit safe
6864 # Do this late, since this causes lots of configure tests to fail
6865 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6866 # jay has a lot of implicit declarations
6867 JAY_CFLAGS="-Wno-implicit-function-declaration"
6870 CFLAGS="$CFLAGS -Wsometimes-uninitialized -Werror"
6871 AC_MSG_CHECKING(for -Wsometimes-uninitialized option to gcc)
6875 CFLAGS="$ORIG_CFLAGS -Werror=sometimes-uninitialized"
6882 # zlib/configure checks if this program compiles and if so
6883 # defines _LARGEFILE64_SOURCE on the compiler command line (not config.h).
6885 AC_MSG_CHECKING([for large file support])
6888 #include <sys/types.h>
6892 # FIXME The ramifications of _LARGEFILE64_SOURCE are not understood.
6893 # ZLIB_CFLAGS="$ZLIB_CFLAGS -D_LARGEFILE64_SOURCE=1"
6900 if test x$with_core = xonly; then
6901 if test x$cross_compiling = xno; then
6902 AC_CHECK_FILE($srcdir/../libraries/Native/Unix/System.Globalization.Native/pal_icushim.h, [have_shim_globalization=yes], [have_shim_globalization=no])
6904 if test x$have_shim_globalization = xyes || test x$cross_compiling = xyes; then
6905 ICU_SHIM_PATH=../../../libraries/Native/Unix/System.Globalization.Native
6906 if test x$target_wasm = xyes && test x$with_static_icu = xyes; then
6907 ICU_CFLAGS="-DTARGET_UNIX -DU_DISABLE_RENAMING -DHAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS -DHAVE_SET_MAX_VARIABLE"
6909 elif test x$target_osx = xyes; then
6910 ORIG_CPPFLAGS=$CPPFLAGS
6911 # adding icu path to pkg_config_path
6912 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig
6913 export PKG_CONFIG_PATH
6914 CPPFLAGS="`pkg-config --cflags-only-I icu-uc`"
6915 AC_CHECK_LIB(icucore, ucol_open, LIBS=$LIBS,
6916 [AC_MSG_ERROR([Cannot find libicucore, skipping build for System.Globalization.Native. .NET globalization is not expected to function.])])
6917 AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6918 if test x$have_sys_icu = xyes; then
6919 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"
6921 CPPFLAGS=$ORIG_CPPFLAGS
6922 elif test x$platform_android = xyes; then
6923 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"
6925 elif test x$host_linux = xyes; then
6926 AC_CHECK_LIB(icuuc, main, LIBS=$LIBS,
6927 [AC_MSG_ERROR([Cannot find libicuuc, try installing libicu-dev (or the appropriate package for your platform).])])
6928 AC_CHECK_LIB(icui18n, main, LIBS=$LIBS,
6929 [AC_MSG_ERROR([Cannot find libicui18n, try installing libicu-dev (or the appropriate package for your platform).])])
6930 AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
6931 if test x$have_sys_icu = xyes; then
6932 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"
6934 elif test x$host_sunos = xyes; then
6935 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"
6937 elif test x$host_wasm = xyes; then
6938 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"
6941 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6943 AC_SUBST(ICU_CFLAGS)
6945 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6948 GLOBALIZATION_SHIM_DEFINES="-DNO_GLOBALIZATION_SHIM"
6951 AC_SUBST(GLOBALIZATION_SHIM_DEFINES)
6952 AC_SUBST(ICU_SHIM_PATH)
6953 AM_CONDITIONAL(HAVE_SYS_ICU, test x$have_sys_icu = xyes)
6959 AC_SUBST(ZLIB_CFLAGS)
6961 # Update all submodules recursively to ensure everything is checked out
6962 if test "x$with_core" != "xonly"; then
6963 (cd $srcdir && scripts/update_submodules.sh)
6968 if test x$host_win32 = xyes; then
6969 # Get rid of 'cyg' prefixes in library names
6970 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6971 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6972 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6973 # executable doesn't work...
6974 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6977 if test x$host_darwin = xyes; then
6978 # This doesn't seem to be required and it slows down parallel builds
6979 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6984 NONE) prefix=$ac_default_prefix ;;
6986 case $exec_prefix in
6987 NONE) exec_prefix='${prefix}' ;;
6991 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6992 # any existing config.make. This allows people to share the same source tree
6993 # with different build directories, one native and one cross
6995 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6997 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6999 echo "prefix=$prefix" > $mcs_topdir/build/config.make
7000 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
7001 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
7002 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
7003 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
7004 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
7005 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
7006 echo "VERSION = $VERSION" >> $mcs_topdir/build/config.make
7009 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
7010 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
7013 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
7016 [myver=$($AWK 'BEGIN {
7017 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
7018 if(length(vsplit [1]) > 4) {
7019 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
7021 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
7024 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
7025 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
7027 if test x$host_darwin = xyes; then
7028 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
7029 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
7030 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
7031 elif test x$host_win32 = xyes; then
7032 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
7033 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
7034 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
7035 elif test x$host_linux = xyes; then
7036 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
7037 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
7038 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
7040 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
7041 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
7042 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
7045 echo "PLATFORM_AOT_PREFIX = $PLATFORM_AOT_PREFIX" >> $mcs_topdir/build/config.make
7046 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
7047 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
7050 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
7051 enable_system_aot=yes
7054 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
7055 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
7058 if test x$DISABLE_MCS_DOCS = xyes; then
7059 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
7062 if test x$has_extension_module != xno; then
7063 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
7066 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
7068 if test "x$test_bcl_opt" = "xyes"; then
7069 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
7072 echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7073 echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
7074 echo "VBCS_LOCATION?=$VBCS_LOCATION" >> $srcdir/$mcsdir/build/config.make
7076 if test $csc_compiler = mcs; then
7077 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
7080 if test "x$AOT_BUILD_FLAGS" != "x" ; then
7081 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
7082 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
7084 if test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" = "xno"; then
7085 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS,$MONO_LLVM_PATH_OPTION" >> $srcdir/$mcsdir/build/config.make
7087 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
7091 if test "x$AOT_MODE" != "x" ; then
7092 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
7095 if test "x$enable_btls" = "xyes"; then
7096 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
7099 if test "x$mono_native" = "xyes"; then
7100 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
7102 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
7105 if test x$mono_native_compat = xyes; then
7106 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
7108 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
7111 force_enable_compiler_server=no;
7113 AC_MSG_CHECKING([compiler server])
7114 AC_ARG_WITH(compiler-server, [ --with-compiler-server=yes,no,default,force Enables or disables compiler server],[
7115 if test x$withval = xyes; then
7116 enable_compiler_server=yes;
7117 # force will bypass any automatic disables to allow you to test the compiler server
7118 # in scenarios where it is disabled
7119 elif test x$withval = xforce; then
7120 enable_compiler_server=yes;
7121 force_enable_compiler_server=yes;
7122 elif test x$withval = xno; then
7123 enable_compiler_server=no;
7124 elif test x$withval = xdefault; then
7125 enable_compiler_server=yes;
7127 AC_MSG_ERROR([You must supply one of "yes", "no", "default" or "force" to the --with-compiler-server option])
7129 ],[enable_compiler_server=yes])
7131 AC_MSG_RESULT($enable_compiler_server)
7133 if test x$enable_compiler_server = xyes; then
7134 if test x$force_enable_compiler_server = xyes; then
7135 AC_MSG_WARN([forcing compiler server to stay enabled])
7136 elif test x$host_darwin = xyes || test x$host_win32 = xyes; then
7137 AC_MSG_WARN([compiler server temporarily disabled on darwin and win32])
7138 enable_compiler_server=no;
7139 elif test x$csc_compiler = xmcs; then
7140 AC_MSG_WARN([mcs does not support the compiler server])
7141 enable_compiler_server=no;
7145 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
7146 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
7147 if test x$enable_compiler_server = xyes; then
7148 echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
7150 echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
7152 echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
7154 if test x$enable_msvc_only = xyes; then
7155 echo "ENABLE_MSVC_ONLY=1" >> $srcdir/$mcsdir/build/config.make
7162 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
7164 btls_platform_string=
7165 if test x$enable_btls = xyes; then
7166 if test x$btls_android = xyes; then
7167 btls_platform_string=" (android:$BTLS_PLATFORM)"
7169 btls_platform_string=" ($BTLS_PLATFORM)"
7174 if test x$buildsgen = xyes; then
7175 if test x$enable_cooperative_suspend != xno; then
7176 thread_suspend_msg="Suspend: Cooperative"
7177 elif test x$enable_hybrid_suspend != xno; then
7178 thread_suspend_msg="Suspend: Hybrid"
7180 thread_suspend_msg="Suspend: Preemptive"
7184 if test "x$with_core" = "xonly"; then
7185 if test ! -e netcore/Makefile; then
7186 # Out of tree builds
7188 echo "all:" > netcore/Makefile
7190 echo "VERSION = $VERSION" > netcore/config.make
7191 echo "RID = $RID" >> netcore/config.make
7192 echo "COREARCH = $COREARCH" >> netcore/config.make
7193 echo "CORETARGETS = $CORETARGETS" >> netcore/config.make
7194 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> netcore/config.make
7196 if test x$build_darwin = xyes; then
7197 echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7198 elif test x$host_darwin = xyes; then
7199 echo "HOST_PLATFORM ?= macos" >> netcore/config.make
7200 elif test x$host_win32 = xyes; then
7201 echo "HOST_PLATFORM ?= win32" >> netcore/config.make
7202 elif test x$host_linux = xyes; then
7203 echo "HOST_PLATFORM ?= linux" >> netcore/config.make
7205 echo "HOST_PLATFORM ?= unix" >> netcore/config.make
7212 C# Compiler: $csc_compiler
7213 CompilerServer:$enable_compiler_server
7221 SIGALTSTACK: $with_sigaltstack
7223 BigArrays: $enable_big_arrays
7224 DTrace: $enable_dtrace
7225 LLVM Back End: $enable_llvm (built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
7226 Spectre: $spectre_mitigation_status
7227 Mono.Native: $mono_native_text
7230 .NET 4.x: $with_profile4_x
7231 Xamarin.Android: $with_monodroid
7232 Xamarin.iOS: $with_monotouch
7233 Xamarin.WatchOS: $with_monotouch_watch
7234 Xamarin.TVOS: $with_monotouch_tv
7235 Xamarin.Mac: $with_xammac
7236 Windows AOT: $with_winaot
7238 Unreal: $with_unreal
7239 WebAssembly: $with_wasm
7240 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)
7241 JNI support: $jdk_headers_found
7242 libgdiplus: $libgdiplus_msg
7244 BTLS: $enable_btls$btls_platform_string
7245 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
7246 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
7247 .NET Core: $with_core
7250 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
7251 AC_MSG_WARN([Turning off static Mono is a risk, you might run into unexpected bugs])