1 # Process this file with autoconf to produce a configure script.
5 [https://github.com/mono/mono/issues/new])
7 AC_CONFIG_SRCDIR([README.md])
8 AC_CONFIG_MACRO_DIR([m4])
12 # Gross hack to enable 'make dist' on automake 1.9+tar 1.14.
13 # The extra brackets are to foil regex-based scans.
14 m4_ifdef([_A][M_PROG_TAR],[_A][M_SET_OPTION([tar-ustar])])
16 AM_INIT_AUTOMAKE([1.9 dist-xz tar-ustar no-dist-gzip foreign subdir-objects]
17 m4_esyscmd([case `automake --version | head -n 1` in # parallel-tests is default in automake 1.13+, we need to explicitly enable it
18 *1.11*|*1.12*) echo parallel-tests;; # for 1.11 and 1.12 but not below as those versions don't recognize the flag
19 esac])) # TODO: remove this hack once we require automake 1.11+
21 AC_CONFIG_HEADERS([config.h])
23 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test]))
24 m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], AM_EXTRA_RECURSIVE_TARGETS([test-bundle]))
31 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
33 MONO_VERSION_MAJOR=`echo $VERSION | cut -d . -f 1`
34 MONO_VERSION_MINOR=`echo $VERSION | cut -d . -f 2`
35 MONO_VERSION_BUILD=`echo $VERSION | cut -d . -f 3`
38 # This is the version of the corlib-runtime interface. When
39 # making changes to this interface (by changing the layout
40 # of classes the runtime knows about, changing icall signature or
41 # semantics etc), change this variable.
43 # This must be unique relative to corlib interface/semantics.
45 # Generate it with uuidgen. For example:
46 # perl -pi.bak -e "s/^MONO_CORLIB_VERSION=\S+/MONO_CORLIB_VERSION=`uuidgen`/" configure.ac
48 # There is no ordering of corlib versions, no old or new,
49 # the runtime expects an exact match.
51 MONO_CORLIB_VERSION=9032116E-BB4E-4ED5-9C71-9E5E0B0230CA
54 # Put a quoted #define in config.h.
55 # Substitute @MONO_CORLIB_VERSION@ unquoted.
57 AC_DEFINE_UNQUOTED(MONO_CORLIB_VERSION,"$MONO_CORLIB_VERSION",[Version of the corlib-runtime interface])
58 AC_SUBST(MONO_CORLIB_VERSION)
62 echo "Run configure using ./configure --host=i686-w64-mingw32 or --host=x86_64-w64-mingw32"
66 # In case of cygwin, override LN_S, irrespective of what it determines.
67 # The build uses cygwin, but the actual runtime doesn't.
69 *cygwin* ) LN_S='cp -p';;
77 # These variables are the CPPFLAGS/CFLAGS passed to libgc's configure
78 # libgc should inherit the original CFLAGS/CPPFLAGS passed to configure, i.e. -O0
79 CPPFLAGS_FOR_LIBGC=$CPPFLAGS
80 CFLAGS_FOR_LIBGC=$CFLAGS
81 CPPFLAGS_FOR_BTLS=$CPPFLAGS
82 CFLAGS_FOR_BTLS=$CFLAGS
84 # libgc uses some deprecated APIs
85 CFLAGS_FOR_LIBGC="$CFLAGS -Wno-deprecated-declarations"
88 # These are the flags that need to be stored in the mono.pc file for
89 # compiling code that will embed Mono
93 AC_SUBST(libmono_cflags)
94 AC_SUBST(libmono_ldflags)
96 # Variable to have relocatable .pc files (lib, or lib64)
97 # realpath isn't always available, and requires that all but the tip of the provided
98 # path exists. Fall back to the old behaviour, but realpath allows depth >1
99 # e.g. Debian puts Mono in /usr/bin and libs in /usr/lib/x86_64-linux-gnu/ which is
100 # too deep for the old method to work
101 reloc_libdir=`realpath --relative-to=${prefix} ${libdir} 2> /dev/null || basename ${libdir}`
102 AC_SUBST(reloc_libdir)
104 # Set to yes if Unix sockets cannot be created in an anonymous namespace
107 #Set to extra linker flags to be passed to the runtime binaries (mono /mono-sgen)
108 extra_runtime_ldflags=""
110 # Thread configuration inspired by sleepycat's db
111 AC_MSG_CHECKING([host platform characteristics])
129 CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -s WASM=1"
130 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DUSE_MMAP -s WASM=1"
132 libgc_threads=pthreads
135 *-mingw*|*-*-cygwin*)
136 AC_DEFINE(DISABLE_PORTABILITY,1,[Disable the io-portability layer])
137 AC_DEFINE(HOST_NO_SYMLINKS,1,[This platform does not support symlinks])
140 if test "x$cross_compiling" = "xno"; then
141 if test "x$host" = "x$build" -a "x$host" = "x$target"; then
145 if test "x$host" = "x$target"; then
151 # Windows 7 or later is required
152 WIN32_CPPFLAGS="-DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -D_UNICODE -DUNICODE -DWIN32_THREADS -DFD_SETSIZE=1024"
153 CPPFLAGS="$CPPFLAGS $WIN32_CPPFLAGS"
154 WIN32_LDFLAGS="-lbcrypt -lmswsock -lws2_32 -lole32 -loleaut32 -lpsapi -lversion -ladvapi32 -lwinmm -lkernel32 -liphlpapi"
155 LDFLAGS="$LDFLAGS $WIN32_LDFLAGS"
156 libmono_cflags="-mms-bitfields -mwindows"
157 libmono_ldflags="-mms-bitfields -mwindows"
162 with_sgen_default_concurrent=yes
164 # This forces libgc to use the DllMain based thread registration code on win32
165 libgc_configure_args="$libgc_configure_args --enable-win32-dllmain=yes"
168 CPPFLAGS="$CPPFLAGS -D_REENTRANT -DGC_NETBSD_THREADS -D_GNU_SOURCE"
169 libmono_cflags="-D_REENTRANT"
170 LDFLAGS="$LDFLAGS -pthread"
171 CPPFLAGS="$CPPFLAGS -DHOST_BSD"
172 libmono_ldflags="-pthread"
175 libgc_threads=pthreads
178 with_sgen_default_concurrent=yes
181 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DTHREAD_LOCAL_ALLOC -pthread"
182 libmono_cflags="-D_REENTRANT -DTHREAD_LOCAL_ALLOC -pthread"
183 libmono_ldflags="-lpthread -pthread"
185 libgc_threads=pthreads
189 with_sgen_default_concurrent=yes
193 LDFLAGS="$LDFLAGS -lutil"
194 if test "x$PTHREAD_CFLAGS" = "x"; then
195 CPPFLAGS="$CPPFLAGS -DGC_FREEBSD_THREADS"
198 CPPFLAGS="$CPPFLAGS $PTHREAD_CFLAGS -DGC_FREEBSD_THREADS"
199 libmono_cflags="$PTHREAD_CFLAGS"
201 if test "x$PTHREAD_LIBS" = "x"; then
202 LDFLAGS="$LDFLAGS -pthread -L/usr/local/lib"
203 libmono_ldflags="-pthread"
205 LDFLAGS="$LDFLAGS $PTHREAD_LIBS -L/usr/local/lib"
206 libmono_ldflags="$PTHREAD_LIBS"
208 CPPFLAGS="$CPPFLAGS -DHOST_BSD -D_WITH_GETLINE"
210 AC_DEFINE(PTHREAD_POINTER_ID, 1, [pthread is a pointer])
212 libgc_threads=pthreads
225 with_sgen_default_concurrent=yes
228 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_OPENBSD_THREADS -DHOST_BSD -D_REENTRANT -DUSE_MMAP"
229 LDFLAGS="${LDFLAGS} -Wl,-zwxneeded"
230 if test "x$disable_munmap" != "xyes"; then
231 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
233 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
234 LDFLAGS="$LDFLAGS -pthread"
236 AC_DEFINE(PTHREAD_POINTER_ID)
238 libgc_threads=pthreads
242 with_sgen_default_concurrent=yes
246 AC_DEFINE(HOST_ANDROID,1,[Targeting the Android platform])
247 AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
249 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
250 if test "x$disable_munmap" != "xyes"; then
251 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
253 libmono_cflags="-D_REENTRANT"
255 libgc_threads=pthreads
262 # Android doesn't support boehm, as it's missing <link.h>
266 # isinf(3) requires -lm
267 LDFLAGS="$LDFLAGS -lm"
269 # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
270 # PAGE_SIZE; breaks mono/io-layer/collection.c
271 # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
272 CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
273 CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
275 # to bypass the underscore linker check, can't work when cross-compiling
281 CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
282 if test "x$disable_munmap" != "xyes"; then
283 CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
285 libmono_cflags="-D_REENTRANT"
287 libgc_threads=pthreads
289 if test "x$cross_compiling" != "xno"; then
290 # to bypass the underscore linker check, not
291 # available during cross-compilation
305 # https://bugzilla.novell.com/show_bug.cgi?id=504411
313 with_sgen_default_concurrent=yes
316 echo "nacl no longer supported."
320 CPPFLAGS="$CPPFLAGS -DGC_HPUX_THREADS -D_HPUX_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_REENTRANT"
321 # +ESdbgasm only valid on bundled cc on RISC
322 # silently ignored for ia64
323 if test $GCC != "yes"; then
324 CFLAGS="$CFLAGS +ESdbgasm"
325 # Arrange for run-time dereferencing of null
326 # pointers to produce a SIGSEGV signal.
327 LDFLAGS="$LDFLAGS -z"
329 CFLAGS="$CFLAGS +ESdbgasm"
330 LDFLAGS="$LDFLAGS -z"
331 libmono_cflags="-D_REENTRANT"
332 libmono_ldflags="-lpthread"
333 libgc_threads=pthreads
338 CPPFLAGS="$CPPFLAGS -DGC_SOLARIS_THREADS -DGC_SOLARIS_PTHREADS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_MMAP -DUSE_MUNMAP -DHOST_SOLARIS"
340 libmono_cflags="-D_REENTRANT"
341 libgc_threads=pthreads
344 enable_solaris_tar_check=yes
347 parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
350 CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DGC_MACOSX_THREADS -DUSE_MMAP -DUSE_MUNMAP"
351 libmono_cflags="-D_THREAD_SAFE"
353 AC_DEFINE(PTHREAD_POINTER_ID)
354 AC_DEFINE(USE_MACH_SEMA, 1, [...])
356 libgc_threads=pthreads
358 if test "x$cross_compiling" = "xyes"; then
359 has_broken_apple_cpp=yes
361 dnl Snow Leopard is horribly broken -- it reports itself as i386-apple-darwin*, but
362 dnl its gcc defaults to 64-bit mode. They have also deprecated the usage of ucontext
363 dnl we need to set some flags to build our 32-bit binaries on 10.6 properly
365 dnl Snow Leopard and newer config.guess reports as this
367 BROKEN_DARWIN_FLAGS="-arch i386"
368 BROKEN_DARWIN_CPPFLAGS=""
369 CPPFLAGS="$CPPFLAGS $BROKEN_DARWIN_CPPFLAGS"
370 CFLAGS="$CFLAGS $BROKEN_DARWIN_FLAGS"
371 CXXFLAGS="$CXXFLAGS $BROKEN_DARWIN_FLAGS"
372 CCASFLAGS="$CCASFLAGS $BROKEN_DARWIN_FLAGS"
373 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC $BROKEN_DARWIN_CPPFLAGS"
374 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC $BROKEN_DARWIN_FLAGS"
375 with_sgen_default_concurrent=yes
378 with_sgen_default_concurrent=yes
390 dnl BSD_SOURCE is for getifaddrs
391 CPPFLAGS="$CPPFLAGS -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE"
392 libmono_cflags="-D_REENTRANT -D_THREAD_SAFE"
394 LIBS="$LIBS -lnetwork -ltextencoding"
396 AC_DEFINE(PTHREAD_POINTER_ID)
397 dnl Haiku does not support static TLS with __thread
399 libgc_threads=pthreads
404 dnl Set up a 64-bit build
405 CPPFLAGS="$CPPFLAGS -maix64 -DGC_AIX_THREADS -D_ALL_SOURCE -D_THREAD_SAFE -D_LARGE_FILES -D_REENTRANT"
407 libmono_cflags="-D_THREAD_SAFE -D_REENTRANT"
408 dnl Would you believe GNU nm doesn't know how to process AIX libraries?
409 dnl Hardcode IBM binutils in case GNU ones end up on our path. Also
410 dnl specifiy 64-bit mode for tools.
411 AR="/usr/bin/ar -X64"
412 NM="/usr/bin/nm -X64"
413 dnl SGen is the future (changes to Boehm support code would be
414 dnl required if you wish to re-enable Boehm)
419 dnl the valloc call to alloc the guard page bombs out, even with extending the data area
421 dnl use pthread TLS, __thread has issues with the compiler flags we use
423 dnl ppc Linux is the same? test further
427 AC_MSG_WARN([*** Please add $host to configure.ac checks!])
434 if test x$need_link_unlink = xyes; then
435 AC_DEFINE(NEED_LINK_UNLINK, 1, [Define if Unix sockets cannot be created in an anonymous namespace])
438 if test x$host_win32 = xyes; then
439 AC_DEFINE(HOST_WIN32, 1, [Host Platform is Win32])
442 if test x$target_win32 = xyes; then
443 AC_DEFINE(TARGET_WIN32, 1, [Target Platform is Win32])
446 if test x$host_darwin = xyes; then
447 AC_DEFINE(HOST_DARWIN, 1, [Host Platform is Darwin])
450 # Defined for all targets/platforms using classic Windows API support.
451 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
452 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
454 AC_SUBST(extra_runtime_ldflags)
455 AM_CONDITIONAL(HOST_WIN32, test x$host_win32 = xyes)
456 AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
457 AM_CONDITIONAL(HOST_LINUX, echo x$target_os | grep -q linux)
458 AM_CONDITIONAL(HOST_DARWIN, test x$host_darwin = xyes)
459 AM_CONDITIONAL(HOST_SIGPOSIX, test x$use_sigposix = xyes)
460 AM_CONDITIONAL(HOST_ANDROID, test x$platform_android = xyes)
461 AM_CONDITIONAL(HOST_TIZEN, test x$platform_tizen = xyes)
462 AM_CONDITIONAL(HOST_IOS, test x$platform_ios = xyes)
463 AM_CONDITIONAL(HOST_WASM, test x$platform_wasm = xyes)
465 if test -z "$HOST_DARWIN_TRUE"; then :
466 PLATFORM_AOT_SUFFIX=.dylib
469 if test -z "$HOST_LINUX_TRUE"; then :
470 PLATFORM_AOT_SUFFIX=.so
473 if test -z "$HOST_WIN32_TRUE"; then :
474 PLATFORM_AOT_SUFFIX=.dll
477 AC_SUBST(PLATFORM_AOT_SUFFIX)
479 if test -z "$HOST_WASM_TRUE"; then :
480 AC_DEFINE(HAVE_UTIME)
481 AC_DEFINE(HAVE_UTIMES)
484 ## PLATFORM_AOT_SUFFIX not so simple for windows :-)
486 AC_CHECK_TOOL(CC, gcc, gcc)
488 AC_CHECK_TOOL(CXX, g++, g++)
494 dnl We should use AM_PROG_AS, but it's not available on automake/aclocal 1.4
496 # Set ASFLAGS if not already set.
497 : ${CCASFLAGS='$(CFLAGS)'}
501 # AC_PROG_CXX helpfully sets CXX to g++ even if no c++ compiler is found so check
502 # GXX instead. See http://lists.gnu.org/archive/html/bug-autoconf/2002-04/msg00056.html
503 if test "x$CXX" = "xg++"; then
504 if test "x$GXX" != "xyes"; then
505 # automake/libtool is so broken, it requires g++ even if the c++ sources
506 # are inside automake conditionals
507 AC_MSG_ERROR([You need to install g++])
511 dnl may require a specific autoconf version
512 dnl AC_PROG_CC_FOR_BUILD
513 dnl CC_FOR_BUILD not automatically detected
515 CFLAGS_FOR_BUILD=$CFLAGS
517 if test "x$cross_compiling" = "xyes"; then
522 AC_SUBST(CC_FOR_BUILD)
523 AC_SUBST(CFLAGS_FOR_BUILD)
525 AC_SUBST(BUILD_EXEEXT)
527 AM_CONDITIONAL(CROSS_COMPILING, [test x$cross_compiling = xyes])
528 AM_CONDITIONAL(USE_BATCH_FILES, [test x$host_win32 = xyes -a x$cross_compiling = xyes])
533 # This causes monodis to not link correctly
534 #AC_DISABLE_FAST_INSTALL
536 #lookup makedev() header
540 # Use dolt (http://dolt.freedesktop.org/) instead of libtool for building.
543 export_ldflags=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
544 AC_SUBST(export_ldflags)
546 # Test whenever ld supports -version-script
550 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)
551 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)
552 AC_CHECK_HEADER(unistd.h, [HAVE_UNISTD_H=1], [HAVE_UNISTD_H=0])
553 AC_SUBST(HAVE_UNISTD_H)
554 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
555 [], [], [#include <stddef.h>
556 #include <sys/socket.h>
557 #include <linux/socket.h>])
559 AC_CHECK_HEADERS(sys/user.h, [], [],
561 #ifdef HAVE_SYS_PARAM_H
562 # include <sys/param.h>
566 AC_CHECK_HEADERS(linux/serial.h)
568 AC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])
569 if test x$have_zlib = xyes; then
570 AC_TRY_COMPILE([#include <zlib.h>], [
571 #if defined(ZLIB_VERNUM) && (ZLIB_VERNUM >= 0x1230)
573 #error No good zlib found
576 AC_MSG_RESULT(Using system zlib)
577 zlib_msg="system zlib"
578 AC_DEFINE(HAVE_SYS_ZLIB,1,[Have system zlib])
580 AC_MSG_RESULT(Using embedded zlib)
582 zlib_msg="bundled zlib"
586 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=])
587 if test "x$STATIC_ZLIB_PATH" != "x"; then
589 AC_SUBST(STATIC_ZLIB_PATH)
592 AM_CONDITIONAL(HAVE_STATIC_ZLIB, test x$have_static_zlib = xyes)
593 AM_CONDITIONAL(HAVE_ZLIB, test x$have_zlib = xyes)
594 AC_DEFINE(HAVE_ZLIB,1,[Have system zlib])
596 # for mono/metadata/debug-symfile.c
597 AC_CHECK_HEADERS(elf.h)
600 AC_CHECK_HEADERS(poll.h)
601 AC_CHECK_HEADERS(sys/poll.h)
602 AC_CHECK_HEADERS(sys/wait.h)
603 AC_CHECK_HEADERS(grp.h)
604 AC_CHECK_HEADERS(syslog.h)
605 AC_CHECK_FUNCS(vsyslog)
608 AC_CHECK_HEADERS(wchar.h)
610 # for Linux statfs support
611 AC_CHECK_HEADERS(linux/magic.h)
613 # For Android NDK unified headers
614 if test x$platform_android = xyes; then
615 AC_CHECK_HEADERS(machine/endian.h sys/endian.h)
616 AC_CHECK_HEADERS(android/legacy_signal_inlines.h, [have_android_signal_inlines=yes], [have_android_signal_inlines=no])
617 AC_CHECK_HEADERS(android/ndk-version.h)
619 # Make sure SIGRT{MIN,MAX} work - they will fail to work with unified headers if building for
620 # API level < 21 *and* android/legacy_signal_inlines.h doesn't declare (and define) the required
621 # libc APIs to obtain values for SIGRT{MIN,MAX}. We perform the check only if android/legacy_signal_inlines.h
622 # is found because in other cases the macros will either work (for NDK < 14) or fail if the legacy header
623 # doesn't contain the required definitions (NDK 14)
624 if test x$have_android_signal_inlines = xyes; then
625 AC_MSG_CHECKING([Whether Android SIGRTMIN/SGRTMAX macros are valid])
627 AC_LANG_PROGRAM([#include <signal.h>
628 #include <android/legacy_signal_inlines.h>],[
630 for (i = SIGRTMIN + 1; i < SIGRTMAX; ++i) {
634 android_sigrtminmax_work=yes
637 android_sigrtminmax_work=no
641 if test x$android_sigrtminmax_work = xno; then
642 AC_MSG_ERROR([Android SIGRTMIN/SIGRTMAX macros don't work in this NDK])
646 # Attempt to detect whether we're using Android NDK unified headers
647 AC_CHECK_HEADERS(android/api-level.h, [have_android_api_level=yes], [have_android_api_level=no])
648 AC_CHECK_HEADERS(android/versioning.h, [have_android_versioning=yes], [have_android_versioning=no])
650 android_unified_headers=no
651 if test x$have_android_api_level = xyes; then
652 if test x$have_android_versioning = xyes; then
653 AC_MSG_CHECKING([whether using Android NDK unified headers])
655 # Both macros are defined only in the NDK unified headers
658 #include <android/api-level.h>
659 #include <android/versioning.h>
661 #if __ANDROID_API_O__ == 26 && defined(__INTRODUCED_IN)
663 #error __ANDROID_API_O__ != 26 or the __INTRODUCED_IN macro not defined
667 android_unified_headers=yes
670 android_unified_headers=no
676 if test x$android_unified_headers = xyes; then
677 AC_DEFINE(ANDROID_UNIFIED_HEADERS, 1, [Whether Android NDK unified headers are used])
681 # not 64 bit clean in cross-compile
682 AC_CHECK_SIZEOF(void *)
683 AC_CHECK_SIZEOF(long)
686 AC_CHECK_SIZEOF(long long)
688 AC_CACHE_CHECK([for clang],
701 AC_ARG_ENABLE(visibility-hidden,
702 [ --disable-visibility-hidden disable usage of -fvisiblity=hidden],
703 disable_visibility_hidden=yes, disable_visibility_hidden=no)
706 if test x"$GCC" = xyes; then
707 WARN='-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes'
708 CFLAGS="$CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length"
710 # We require C99 with some GNU extensions, e.g. `linux` macro
711 CFLAGS="$CFLAGS -std=gnu99"
713 # The runtime code does not respect ANSI C strict aliasing rules
714 CFLAGS="$CFLAGS -fno-strict-aliasing"
716 # We rely on signed overflow to behave
717 CFLAGS="$CFLAGS -fwrapv"
719 CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
720 if test x"$disable_visibility_hidden" = xno; then
721 # Don't export any symbols by default
722 SHARED_CFLAGS="-fvisibility=hidden"
723 CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
727 # Check for the normal version, since gcc ignores unknown -Wno options
728 CFLAGS="$CFLAGS -Wunused-but-set-variable -Werror"
729 AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
733 CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
739 if test "x$mono_cv_clang" = "xyes"; then
740 # https://bugzilla.samba.org/show_bug.cgi?id=8118
741 WARN="$WARN -Qunused-arguments"
742 WARN="$WARN -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand"
743 # We rely on zero length arrays in structs
744 WARN="$WARN -Wno-zero-length-array"
747 # The Sun Forte compiler complains about inline functions that access static variables
748 # so disable all inlining.
751 CFLAGS="$CFLAGS -Dinline="
755 CFLAGS="$WARN $CFLAGS -g"
756 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -g"
757 CPPFLAGS="$WARN $CPPFLAGS -g"
759 # Where's the 'mcs' source tree?
760 if test -d $srcdir/mcs; then
766 AC_ARG_WITH(mcs-path, [ --with-mcs-path=/path/to/mcs Specify an alternate mcs source tree],
767 if test x$with_mcs_path != "x" -a -d $with_mcs_path ; then
768 mcsdir=$with_mcs_path
772 AC_ARG_WITH(jumptables, [ --with-jumptables=yes,no enable/disable support for jumptables (ARM-only for now) (defaults to no)],[],[with_jumptables=no])
774 AC_ARG_WITH(core, [ --with-core=only controls whether to build Mono as a .NET Core runtime (defaults to no)],[],[with_core=no])
775 if test x$with_core = xonly; then
776 AC_DEFINE(ENABLE_NETCORE,1,[Enables the support for .NET Core Features in the MonoVM])
777 with_runtime_preset=netcore
779 AM_CONDITIONAL(ENABLE_NETCORE, test x$with_core = xonly)
782 # A sanity check to catch cases where the package was unpacked
783 # with an ancient tar program (Solaris)
785 AC_ARG_ENABLE(solaris-tar-check,
786 [ --disable-solaris-tar-check disable solaris tar check],
787 do_solaris_tar_check=no, do_solaris_tar_check=yes)
789 if test x"$do_solaris_tar_check" = xyes -a x"$enable_solaris_tar_check" = xyes; then
790 AC_MSG_CHECKING(integrity of package)
791 if test -f $mcsdir/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapTypeMapper.cs
795 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"
796 AC_MSG_ERROR([$errorm])
800 if test "x$with_mcs_path" != "x"; then
801 mcs_topdir=$(cd "$mcsdir" && pwd)
802 mcs_topdir_from_srcdir=$mcs_topdir
804 mcs_topdir=$(cd "$srcdir/$mcsdir" && pwd)
805 mcs_topdir_from_srcdir='$(top_builddir)'/$mcsdir
808 # Convert mcs_topdir* paths to Windows syntax.
809 if test x$cross_compiling$host_win32 = xnoyes; then
810 mcs_topdir=$(cygpath -m $mcs_topdir)
811 case $mcs_topdir_from_srcdir in
813 mcs_topdir_from_srcdir=$(cygpath -m $mcs_topdir_from_srcdir)
818 AC_SUBST([mcs_topdir])
819 AC_SUBST([mcs_topdir_from_srcdir])
821 # gettext: prepare the translation directories.
822 # we do not configure the full gettext, as we consume it dynamically from C#
825 if test "x$USE_NLS" = "xyes"; then
826 AC_CHECK_PROG(HAVE_MSGFMT, msgfmt,yes,no)
828 if test "x$HAVE_MSGFMT" = "xno"; then
829 AC_MSG_ERROR([msgfmt not found. You need to install the 'gettext' package, or pass --enable-nls=no to configure.])
833 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
836 AC_ARG_WITH(crosspkgdir, [ --with-crosspkgdir=/path/to/pkg-config/dir Change pkg-config dir to custom dir],
837 if test x$with_crosspkgdir = "x"; then
838 if test -s $PKG_CONFIG_PATH; then
839 pkg_config_path=$PKG_CONFIG_PATH
842 pkg_config_path=$with_crosspkgdir
843 PKG_CONFIG_PATH=$pkg_config_path
844 export PKG_CONFIG_PATH
848 AC_ARG_ENABLE(ninja,[ --enable-ninja Enable using ninja where available], enable_ninja=$enableval)
849 AC_CHECK_PROG(HAVE_NINJA, ninja, yes, no)
850 AM_CONDITIONAL(NINJA, test x$enable_ninja = xyes -a x$HAVE_NINJA != xno)
852 AC_ARG_ENABLE(werror, [ --enable-werror Pass -Werror to the C compiler], werror_flag=$enableval, werror_flag=no)
853 if test x$werror_flag = xyes; then
854 WERROR_CFLAGS="-Werror"
856 AC_SUBST([WERROR_CFLAGS])
857 AC_SUBST([SHARED_CFLAGS])
859 GLIB_CFLAGS='-I$(top_srcdir)/mono/eglib -I$(top_builddir)/mono/eglib'
861 AC_SUBST(GLIB_CFLAGS)
863 # Enable support for fast thread-local storage
864 # Some systems have broken support, so we allow to disable it.
865 AC_ARG_WITH(tls, [ --with-tls=__thread,pthread select Thread Local Storage implementation (defaults to __thread)],[],[with_tls=__thread])
867 # Enable support for using sigaltstack for SIGSEGV and stack overflow handling
868 # This does not work on some platforms (bug #55253)
869 AC_ARG_WITH(sigaltstack, [ --with-sigaltstack=yes,no enable/disable support for sigaltstack (defaults to yes)],[],[with_sigaltstack=yes])
871 AC_ARG_WITH(static_mono, [ --with-static_mono=yes,no link mono statically to libmono (faster) (defaults to yes)],[],[with_static_mono=yes])
872 AC_ARG_WITH(shared_mono, [ --with-shared_mono=yes,no build a shared libmono library (defaults to yes)],[],[with_shared_mono=yes])
873 # Same as --with-shared_mono=no
874 AC_ARG_ENABLE(libraries, [ --disable-libraries disable the build of libmono], enable_libraries=$enableval, enable_libraries=yes)
876 if test "x$enable_static" = "xno"; then
880 if test "x$enable_shared" = "xno"; then
884 if test "x$enable_libraries" = "xno"; then
888 AM_CONDITIONAL(DISABLE_LIBRARIES, test x$enable_libraries = xno)
890 if test "x$host_win32" = "xyes"; then
891 # Boehm GC requires the runtime to be in its own dll
895 AM_CONDITIONAL(STATIC_MONO, test x$with_static_mono != xno)
896 AM_CONDITIONAL(SHARED_MONO, test x$with_shared_mono != xno)
897 AC_ARG_ENABLE(mcs-build, [ --disable-mcs-build disable the build of the mcs directory], try_mcs_build=$enableval, enable_mcs_build=yes)
898 AC_ARG_ENABLE(support-build, [ --disable-support-build disable the build of the support directory], try_support_build=$enableval, enable_support_build=yes)
900 AC_ARG_WITH(xen_opt, [ --with-xen_opt=yes,no Enable Xen-specific behaviour (defaults to yes)],[],[with_xen_opt=yes])
901 if test "x$with_xen_opt" = "xyes" -a "x$mono_cv_clang" = "xno"; then
902 AC_DEFINE(MONO_XEN_OPT, 1, [Xen-specific behaviour])
904 CFLAGS="$CFLAGS -mno-tls-direct-seg-refs"
905 AC_MSG_CHECKING(for -mno-tls-direct-seg-refs option to gcc)
909 # Pass it to libgc as well
910 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -mno-tls-direct-seg-refs"
917 AC_ARG_ENABLE(small-config, [ --enable-small-config Enable tweaks to reduce requirements (and capabilities)], enable_small_config=$enableval, enable_small_config=no)
919 if test x$enable_small_config = xyes; then
920 AC_DEFINE(MONO_SMALL_CONFIG,1,[Reduce runtime requirements (and capabilities)])
921 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DSMALL_CONFIG"
924 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)
926 DISABLED_FEATURES=none
929 AC_C_BIGENDIAN([endian=big],[endian=little],[endian=unknown])
930 AC_MSG_CHECKING([CSharp compiler to use])
931 AC_ARG_WITH(csc, [ --with-csc=mcs,roslyn,default Configures the CSharp compiler to use],[
932 if test x$withval = xmcs; then
934 elif test x$withval = xroslyn; then
936 elif test x$withval = xdefault; then
939 AC_MSG_ERROR([You must supply one of "mcs", "roslyn" or "default" to the --with-csc option])
941 ],[csc_compiler=default])
943 if test $csc_compiler = default; then
944 if test $endian = big; then
946 elif test $endian = little; then
948 powerpc*) csc_compiler=mcs ;;
949 *) csc_compiler=roslyn ;;
955 AC_MSG_RESULT($csc_compiler)
957 AC_ARG_WITH(jemalloc, [ --with-jemalloc=yes,no If jemalloc is enabled (defaults to no)], [], [with_jemalloc=no])
958 AC_ARG_WITH(jemalloc-always, [ --with-jemalloc_always=yes,no If jemalloc is enabled and always used (defaults to yes)], [], [with_jemalloc_always=no])
959 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])
962 if test x$target_win32 = xyes; then
964 with_jemalloc_assert=no
965 with_jemalloc_always=no
968 AM_CONDITIONAL(MONO_JEMALLOC_ASSERT, [test "x$with_jemalloc_assert" = "xyes"])
969 if test "x$with_jemalloc_assert" = "xyes"; then
970 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ASSERT"
971 AC_DEFINE(MONO_JEMALLOC_ASSERT, 1, [Make jemalloc assert for mono])
972 AC_SUBST(MONO_JEMALLOC_ASSERT, 1)
975 AM_CONDITIONAL(MONO_JEMALLOC_DEFAULT, [test "x$with_jemalloc_always" = "xyes"])
976 if test "x$with_jemalloc_always" = "xyes"; then
978 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_DEFAULT"
979 AC_DEFINE(MONO_JEMALLOC_DEFAULT, 1, [Make jemalloc default for mono])
980 AC_SUBST(MONO_JEMALLOC_DEFAULT, 1)
983 AM_CONDITIONAL(MONO_JEMALLOC_ENABLED, [test "x$with_jemalloc" = "xyes"])
984 if test "x$with_jemalloc" = "xyes"; then
985 JEMALLOC_LDFLAGS="-L`pwd`/mono/utils/jemalloc/jemalloc/lib -ljemalloc_pic"
986 JEMALLOC_CFLAGS+=" -DMONO_JEMALLOC_ENABLED -I `pwd`/mono/utils/jemalloc/jemalloc/include"
987 JEMALLOC_AUTOCONF_FLAGS=" --build=$target --host=$host"
989 if test "x$target_mach" = "xyes"; then
990 JEMALLOC_CPPFLAGS=" -stdlib=libc++ "
993 AC_DEFINE(MONO_JEMALLOC_ENABLED, 1, [Enable jemalloc usage for mono])
994 AC_SUBST(MONO_JEMALLOC_ENABLED, 1)
996 AC_SUBST(JEMALLOC_CFLAGS)
997 AC_SUBST(JEMALLOC_CPPFLAGS)
998 AC_SUBST(JEMALLOC_LDFLAGS)
999 AC_SUBST(JEMALLOC_AUTOCONF_FLAGS)
1003 # Crash privacy - Attempts to not send identifying information in the crash dump / to protect the obscurity of the program control flow
1004 # MERP - The MS telemetry profile. Not for general use.
1005 # Structured crashes - crashes at runtime that trigger a stack walk by mono that happens cooperatively
1007 # 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.
1009 #--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.
1010 #--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.
1011 #--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.
1012 #--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.
1014 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])
1015 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])
1016 AC_ARG_ENABLE(crash-reporting, [ --disable-crash-reporting Enable or Disable crash reporting subsystem], [crash_reporting=$enableval], [crash_reporting=yes])
1018 if test "x$with_crash_privacy" = "xyes"; then
1019 AC_DEFINE(MONO_PRIVATE_CRASHES,1,[Do not include names of unmanaged functions in the crash dump])
1022 if test "x$with_structured_crashes" = "xno"; then
1023 AC_DEFINE(DISABLE_STRUCTURED_CRASH,1,[Do not create structured crash files during unmanaged crashes])
1027 *-mingw*|*-*-cygwin*|*-*-aix*|*-*-os400*)
1032 if test "x$crash_reporting" != "xyes"; then
1033 CFLAGS="$CFLAGS -DDISABLE_CRASH_REPORTING=1"
1034 CXXFLAGS="$CXXFLAGS -DDISABLE_CRASH_REPORTING=1"
1037 AC_ARG_ENABLE(monodroid, [ --enable-monodroid Enable runtime support for Monodroid (Xamarin.Android)], enable_monodroid=$enableval, enable_monodroid=no)
1038 AM_CONDITIONAL(ENABLE_MONODROID, test x$enable_monodroid = xyes)
1040 AC_ARG_ENABLE(monotouch, [ --enable-monotouch Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)], enable_monotouch=$enableval, enable_monotouch=no)
1041 AM_CONDITIONAL(ENABLE_MONOTOUCH, test x$enable_monotouch = xyes)
1043 if test x$enable_monodroid = xyes; then
1044 AC_DEFINE(ENABLE_MONODROID, 1, [Enable runtime support for Monodroid (Xamarin.Android)])
1047 if test x$enable_monotouch = xyes; then
1048 AC_DEFINE(ENABLE_MONOTOUCH, 1, [Enable runtime support for Monotouch (Xamarin.iOS and Xamarin.Mac)])
1051 AC_ARG_ENABLE(cxx, [ --enable-cxx compile some code as C++])
1053 # mono/corefx/native has a lot of invalid C++98 in its headers
1054 # dotnet/corefx/native looks a lot better, i.e. 44e5bdafb8d989a220c9cf1b94f31a64a6e4f052
1055 #CXXFLAGS_COMMON=' -std=gnu++98 -fno-exceptions -fno-rtti '
1056 CXXFLAGS_COMMON=' -std=gnu++0x -fno-exceptions -fno-rtti '
1057 # "c++0x" instead of C++11, for compat with Centos6/gcc4.4
1059 # -stdlib=libc++ is needed by clang for iOS 6.0 (-miphoneos-version-min=6.0)
1060 # to support C++11 headers but it does not seem to harm elsewhere, so over-approximate
1061 # and add it whenever we're running clang on Darwin.
1062 if test "x$mono_cv_clang" = xyes -a x$host_darwin = xyes; then
1063 CXXFLAGS_COMMON="$CXXFLAGS_COMMON -stdlib=libc++"
1066 AC_SUBST(CXXFLAGS_COMMON)
1068 if test "x$enable_cxx" = "xyes"; then
1070 CXX_ADD_CFLAGS=" -xc++ $CXXFLAGS_COMMON "
1072 # -std=gnu99 -xc++ is not allowed and errors.
1073 CXX_REMOVE_CFLAGS=-std=gnu99
1074 # These give warnings and should be removed. They are C-only.
1075 # i.e. C++ never allows these, they are always errors and their warningness is not controllable.
1076 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs"
1077 # Likewise with CentOS 6 gcc 4.4.
1078 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Werror-implicit-function-declaration"
1080 # The C-only-ness of -Wno-format-zero-length varies with gcc version.
1081 # It is C-only prior to 4.7. Using it with C++ prior to 4.7
1082 # generates a warning every time we run gcc which is very unsightly.
1083 # The warning is for e.g. sprintf(foo, "") which can just be
1084 # foo[0] = 0 but Mono's use is more elaborate, not as easy to "fix",
1085 # and completely legal and valid.
1086 # We have to switch to C++ and not just use -xc++ because of -std=gnu99 (error when combined with -xc++).
1087 # Alternatively, just run $CXX -xc++ -c /dev/null.
1089 ORIG_CXXFLAGS=$CXXFLAGS
1090 CXXFLAGS="$CXXFLAGS -Werror -Wno-format-zero-length -xc++ "
1091 AC_MSG_CHECKING(or C-only-ness of -Wno-format-zero-length)
1092 AC_TRY_COMPILE([ ], [ ], [ AC_MSG_RESULT(yes) ],
1094 CXX_REMOVE_CFLAGS="$CXX_REMOVE_CFLAGS -Wno-format-zero-length" ])
1095 CXXFLAGS=$ORIG_CXXFLAGS
1098 AC_SUBST(CXX_ADD_CFLAGS)
1099 AC_SUBST(CXX_REMOVE_CFLAGS)
1102 # Set the build profiles and options before things which use them
1105 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])
1106 AC_ARG_WITH(monodroid, [ --with-monodroid=yes,no If you want to build the MonoDroid assemblies (defaults to no)], [], [with_monodroid=default])
1107 AC_ARG_WITH(monotouch, [ --with-monotouch=yes,no If you want to build the Xamarin.iOS assemblies (defaults to no)], [], [with_monotouch=default])
1108 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])
1109 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])
1110 AC_ARG_WITH(bitcode, [ --with-bitcode=yes,no If bitcode is enabled (defaults to no)], [], [with_bitcode=default])
1111 AC_ARG_WITH(xammac, [ --with-xammac=yes,no If you want to build the Xamarin.Mac assemblies (defaults to no)], [], [with_xammac=default])
1112 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])
1113 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])
1114 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])
1115 AC_ARG_WITH(winaot, [ --with-winaot=yes,no If you want to build the Windows friendly AOT assemblies (defaults to no)], [], [with_winaot=default])
1116 AC_ARG_WITH(orbis, [ --with-orbis=yes,no If you want to build the Orbis assemblies (defaults to no)], [], [with_orbis=default])
1117 AC_ARG_WITH(unreal, [ --with-unreal=yes,no If you want to build the Unreal assemblies (defaults to no)], [], [with_unreal=default])
1118 AC_ARG_WITH(wasm, [ --with-wasm=yes,no If you want to build the WebAssembly (defaults to no)], [], [with_wasm=default])
1121 AC_ARG_WITH(runtime-preset, [ --with-runtime-preset=net_4_x,all,aot,aot_llvm,hybridaot,hybridaot_llvm,fullaot,fullaot_llvm,winaot,winaot_llvm,bitcode,bitcodeinterp,unreal,fullaotinterp,fullaotinterp_llvm Which default profile to build (defaults to net_4_x)], [], [with_runtime_preset=net_4_x])
1122 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])
1123 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])
1124 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])
1127 dnl Spectre compiler mitigation flag checks
1129 if test "x$with_spectre_mitigation" = "xyes"; then
1130 AC_MSG_NOTICE([Compiler Spectre mitigation support checks])
1132 SPECTRE_INDIRECT_BRANCH_KIND=
1133 case "x$with_spectre_indirect_branch_choice" in
1134 xkeep) SPECTRE_INDIRECT_BRANCH_KIND=keep ;;
1135 xthunk) SPECTRE_INDIRECT_BRANCH_KIND=thunk ;;
1136 xinline) SPECTRE_INDIRECT_BRANCH_KIND=thunk-inline ;;
1137 xextern) SPECTRE_INDIRECT_BRANCH_KIND=thunk-extern ;;
1138 *) AC_MSG_ERROR([Invalid indirect jump thunk kind ($with_spectre_indirect_branch_choice)]) ;;
1141 SPECTRE_FUNCTION_RETURN_KIND=""
1142 case "x$with_spectre_function_return_choice" in
1143 xkeep) SPECTRE_FUNCTION_RETURN_KIND=keep ;;
1144 xthunk) SPECTRE_FUNCTION_RETURN_KIND=thunk ;;
1145 xinline) SPECTRE_FUNCTION_RETURN_KIND=thunk-inline ;;
1146 xextern) SPECTRE_FUNCTION_RETURN_KIND=thunk-extern ;;
1147 *) AC_MSG_ERROR([Invalid function return thunk kind ($with_spectre_function_return_choice)]) ;;
1150 AX_CHECK_COMPILE_FLAG(
1151 [ -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND ],
1152 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mindirect-branch=$SPECTRE_INDIRECT_BRANCH_KIND" ]
1155 AX_CHECK_COMPILE_FLAG(
1156 [ -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND ],
1157 [ SPECTRE_CFLAGS="$SPECTRE_CFLAGS -mfunction-return=$SPECTRE_FUNCTION_RETURN_KIND" ]
1160 if test "x$SPECTRE_CFLAGS" != "x" ; then
1161 CFLAGS="$CFLAGS $SPECTRE_CFLAGS"
1162 CXXFLAGS="$CXXFLAGS $SPECTRE_CFLAGS"
1163 spectre_mitigation_status="mitigation enabled"
1166 spectre_mitigation_status="no mitigation"
1170 dnl Profile defaults
1172 TEST_PROFILE=default
1173 enable_llvm_default=no
1175 with_profile4_x_default=no
1176 with_monodroid_default=no
1177 with_monotouch_default=no
1178 with_monotouch_watch_default=no
1179 with_monotouch_tv_default=no
1180 with_xammac_default=no
1181 with_testing_aot_full_interp_default=no
1182 with_testing_aot_hybrid_default=no
1183 with_testing_aot_full_default=no
1184 with_winaot_default=no
1185 with_orbis_default=no
1186 with_unreal_default=no
1187 with_wasm_default=no
1189 with_bitcode_default=no
1190 enable_cooperative_suspend_default=no
1191 enable_hybrid_suspend_default=no
1193 INVARIANT_AOT_OPTIONS=nimt-trampolines=2000,ntrampolines=10000,nrgctx-fetch-trampolines=256,ngsharedvt-trampolines=4000,nftnptr-arg-trampolines=4000
1195 AOT_BUILD_ATTRS=$INVARIANT_AOT_OPTIONS
1197 if test x$cross_compiling = xyes -o x$enable_mcs_build = xno; then
1198 DISABLE_MCS_DOCS_default=yes
1199 elif test x$with_runtime_preset = xnetcore; then
1200 DISABLE_MCS_DOCS_default=yes
1202 mono_feature_disable_remoting='yes'
1203 mono_feature_disable_reflection_emit_save='yes'
1204 mono_feature_disable_appdomains='yes'
1205 disable_mono_native=yes
1206 elif test x$with_runtime_preset = xnet_4_x; then
1207 with_profile4_x_default=yes
1208 TEST_PROFILE=net_4_x
1209 elif test x$with_runtime_preset = xall; then
1210 with_profile4_x_default=yes
1211 with_monodroid_default=yes
1212 with_monotouch_default=yes
1213 with_monotouch_watch_default=yes
1214 with_monotouch_tv_default=yes
1215 with_xammac_default=yes
1216 with_winaot_default=yes
1217 with_orbis_default=yes
1218 with_unreal_default=yes
1219 with_wasm_default=yes
1220 with_testing_aot_full_interp_default=yes
1221 with_testing_aot_hybrid_default=yes
1222 with_testing_aot_full_default=yes
1223 TEST_PROFILE=net_4_x
1224 elif test x$with_runtime_preset = xbitcode; then
1225 DISABLE_MCS_DOCS_default=yes
1226 with_testing_aot_full_default=yes
1227 with_bitcode_default=yes
1228 enable_cooperative_suspend_default=yes
1229 # FIXME: use TEST_PROFILE=testing_aot_full
1230 TEST_PROFILE=testing_aot_bitcode
1231 enable_llvm_default=yes
1233 mono_feature_disable_com='yes'
1234 mono_feature_disable_remoting='yes'
1235 mono_feature_disable_reflection_emit_save='yes'
1236 mono_feature_disable_reflection_emit='yes'
1237 mono_feature_disable_appdomains='yes'
1239 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1240 AOT_BUILD_FLAGS="--runtime=mobile --aot=llvmonly,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1241 AOT_RUN_FLAGS="--runtime=mobile --llvmonly"
1243 elif test x$with_runtime_preset = xbitcodeinterp; then
1244 with_testing_aot_full_interp_default=yes
1245 with_bitcode_default=yes
1246 enable_cooperative_suspend_default=yes
1247 # FIXME: use TEST_PROFILE=testing_aot_full_interp
1248 TEST_PROFILE=testing_aot_bitcode_interp
1249 enable_llvm_default=yes
1251 # mscorlib.dll aot compilation crashes
1252 mono_feature_disable_com='yes'
1254 # We need at least clang++-6.0 to read the LLVM IR produced by the runtime
1255 AOT_BUILD_FLAGS="--aot=llvmonly,interp,clangxx=clang++-6.0,$INVARIANT_AOT_OPTIONS"
1256 AOT_RUN_FLAGS="--llvmonly-interp"
1257 elif test x$with_runtime_preset = xfullaot; then
1258 DISABLE_MCS_DOCS_default=yes
1259 with_testing_aot_full_default=yes
1260 TEST_PROFILE=testing_aot_full
1262 mono_feature_disable_com='yes'
1263 mono_feature_disable_remoting='yes'
1264 mono_feature_disable_reflection_emit_save='yes'
1265 mono_feature_disable_reflection_emit='yes'
1266 mono_feature_disable_appdomains='yes'
1268 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1269 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1271 elif test x$with_runtime_preset = xfullaot_llvm; then
1272 DISABLE_MCS_DOCS_default=yes
1273 with_testing_aot_full_default=yes
1274 TEST_PROFILE=testing_aot_full
1276 mono_feature_disable_com='yes'
1277 mono_feature_disable_remoting='yes'
1278 mono_feature_disable_reflection_emit_save='yes'
1279 mono_feature_disable_reflection_emit='yes'
1280 mono_feature_disable_appdomains='yes'
1282 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1283 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1285 elif test x$with_runtime_preset = xhybridaot; then
1286 DISABLE_MCS_DOCS_default=yes
1287 with_testing_aot_hybrid_default=yes
1288 TEST_PROFILE=testing_aot_hybrid
1290 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1291 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1292 elif test x$with_runtime_preset = xhybridaot_llvm; then
1293 DISABLE_MCS_DOCS_default=yes
1294 with_testing_aot_hybrid_default=yes
1295 TEST_PROFILE=testing_aot_hybrid
1297 AOT_BUILD_FLAGS="--runtime=mobile --llvm --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1298 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1299 elif test x$with_runtime_preset = xfullaotinterp; then
1300 with_testing_aot_full_interp_default=yes
1301 TEST_PROFILE=testing_aot_full_interp
1303 # mscorlib.dll aot compilation crashes
1304 mono_feature_disable_com='yes'
1306 AOT_BUILD_FLAGS="--aot=full,interp,$INVARIANT_AOT_OPTIONS"
1307 AOT_RUN_FLAGS="--full-aot-interp"
1308 elif test x$with_runtime_preset = xfullaotinterp_llvm; then
1309 with_testing_aot_full_interp_default=yes
1310 TEST_PROFILE=testing_aot_full_interp_llvm
1312 # mscorlib.dll aot compilation crashes
1313 mono_feature_disable_com='yes'
1315 AOT_BUILD_FLAGS="-O=gsharedvt --llvm --aot=full,interp,$INVARIANT_AOT_OPTIONS"
1316 AOT_RUN_FLAGS="--full-aot-interp"
1317 elif test x$with_runtime_preset = xaot; then
1318 with_profile4_x_default=yes
1320 AOT_BUILD_FLAGS="--aot=$INVARIANT_AOT_OPTIONS"
1323 DISABLE_MCS_DOCS_default=yes
1324 elif test x$with_runtime_preset = xaot_llvm; then
1325 with_profile4_x_default=yes
1327 AOT_BUILD_FLAGS="--llvm --aot=$INVARIANT_AOT_OPTIONS"
1330 DISABLE_MCS_DOCS_default=yes
1331 elif test x$with_runtime_preset = xwinaot; then
1332 DISABLE_MCS_DOCS_default=yes
1333 with_winaot_default=yes
1336 mono_feature_disable_com='yes'
1337 mono_feature_disable_remoting='yes'
1338 mono_feature_disable_reflection_emit_save='yes'
1339 mono_feature_disable_reflection_emit='yes'
1340 mono_feature_disable_appdomains='yes'
1342 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --aot=full,$INVARIANT_AOT_OPTIONS"
1343 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1345 elif test x$with_runtime_preset = xwinaot_llvm; then
1346 DISABLE_MCS_DOCS_default=yes
1347 with_winaot_default=yes
1350 mono_feature_disable_com='yes'
1351 mono_feature_disable_remoting='yes'
1352 mono_feature_disable_reflection_emit_save='yes'
1353 mono_feature_disable_reflection_emit='yes'
1354 mono_feature_disable_appdomains='yes'
1356 AOT_BUILD_FLAGS="--runtime=mobile -O=gsharedvt --llvm --aot=full,$INVARIANT_AOT_OPTIONS"
1357 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1359 elif test x$with_runtime_preset = xorbis; then
1360 DISABLE_MCS_DOCS_default=yes
1361 with_orbis_default=yes
1364 mono_feature_disable_com='yes'
1365 mono_feature_disable_remoting='yes'
1366 mono_feature_disable_reflection_emit_save='yes'
1367 mono_feature_disable_reflection_emit='yes'
1368 mono_feature_disable_appdomains='yes'
1370 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1371 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1373 elif test x$with_runtime_preset = xunreal; then
1374 DISABLE_MCS_DOCS_default=yes
1375 with_unreal_default=yes
1378 mono_feature_disable_com='yes'
1379 mono_feature_disable_remoting='yes'
1380 mono_feature_disable_appdomains='no'
1382 AOT_BUILD_FLAGS="--runtime=mobile --aot=hybrid,$INVARIANT_AOT_OPTIONS"
1383 AOT_RUN_FLAGS="--runtime=mobile --hybrid-aot"
1384 elif test x$with_runtime_preset = xwasm; then
1385 DISABLE_MCS_DOCS_default=yes
1386 with_wasm_default=yes
1389 mono_feature_disable_com='yes'
1390 mono_feature_disable_remoting='yes'
1391 mono_feature_disable_reflection_emit_save='yes'
1392 mono_feature_disable_reflection_emit='yes'
1393 mono_feature_disable_appdomains='yes'
1395 AOT_BUILD_FLAGS="--runtime=mobile --aot=full,$INVARIANT_AOT_OPTIONS"
1396 AOT_RUN_FLAGS="--runtime=mobile --full-aot"
1398 TEST_PROFILE=net_4_x
1399 with_profile4_x_default=yes
1402 if test "x$AOT_BUILD_FLAGS" != "x"; then :
1403 AC_SUBST(AOT_BUILD_FLAGS)
1404 AC_SUBST(AOT_RUN_FLAGS)
1405 # For llvmonlycheck + fullaotcheck
1406 AC_SUBST(INVARIANT_AOT_OPTIONS)
1409 AC_SUBST(TEST_PROFILE)
1411 if test "x$with_profile4_x" = "xdefault"; then
1412 with_profile4_x=$with_profile4_x_default
1414 if test "x$with_monodroid" = "xdefault"; then
1415 with_monodroid=$with_monodroid_default
1417 if test "x$with_monotouch" = "xdefault"; then
1418 with_monotouch=$with_monotouch_default
1420 if test "x$with_monotouch_watch" = "xdefault"; then
1421 with_monotouch_watch=$with_monotouch_watch_default
1423 if test "x$with_monotouch_tv" = "xdefault"; then
1424 with_monotouch_tv=$with_monotouch_tv_default
1426 if test "x$with_bitcode" = "xdefault"; then
1427 with_bitcode=$with_bitcode_default
1429 if test "x$with_xammac" = "xdefault"; then
1430 with_xammac=$with_xammac_default
1432 if test "x$with_testing_aot_full_interp" = "xdefault"; then
1433 with_testing_aot_full_interp=$with_testing_aot_full_interp_default
1435 if test "x$with_testing_aot_hybrid" = "xdefault"; then
1436 with_testing_aot_hybrid=$with_testing_aot_hybrid_default
1438 if test "x$with_testing_aot_full" = "xdefault"; then
1439 with_testing_aot_full=$with_testing_aot_full_default
1441 if test "x$with_winaot" = "xdefault"; then
1442 with_winaot=$with_winaot_default
1444 if test "x$with_orbis" = "xdefault"; then
1445 with_orbis=$with_orbis_default
1447 if test "x$with_unreal" = "xdefault"; then
1448 with_unreal=$with_unreal_default
1450 if test "x$with_wasm" = "xdefault"; then
1451 with_wasm=$with_wasm_default
1455 AM_CONDITIONAL(INSTALL_4_x, [test "x$with_profile4_x" = "xyes"])
1456 AM_CONDITIONAL(INSTALL_MONODROID, [test "x$with_monodroid" != "xno"])
1457 AM_CONDITIONAL(INSTALL_MONOTOUCH, [test "x$with_monotouch" != "xno"])
1458 AM_CONDITIONAL(INSTALL_MONOTOUCH_WATCH, [test "x$with_monotouch_watch" != "xno"])
1459 AM_CONDITIONAL(INSTALL_MONOTOUCH_TV, [test "x$with_monotouch_tv" != "xno"])
1460 AM_CONDITIONAL(BITCODE, test "x$with_bitcode" = "xyes")
1461 AM_CONDITIONAL(INSTALL_XAMMAC, [test "x$with_xammac" != "xno"])
1462 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL_INTERP, [test "x$with_testing_aot_full_interp" != "xno"])
1463 AM_CONDITIONAL(INSTALL_TESTING_AOT_HYBRID, [test "x$with_testing_aot_hybrid" != "xno"])
1464 AM_CONDITIONAL(INSTALL_TESTING_AOT_FULL, [test "x$with_testing_aot_full" != "xno"])
1465 AM_CONDITIONAL(INSTALL_WINAOT, [test "x$with_winaot" != "xno"])
1466 AM_CONDITIONAL(INSTALL_ORBIS, [test "x$with_orbis" != "xno"])
1467 AM_CONDITIONAL(INSTALL_UNREAL, [test "x$with_unreal" != "xno"])
1468 AM_CONDITIONAL(INSTALL_WASM, [test "x$with_wasm" != "xno"])
1469 AM_CONDITIONAL(INSTALL_NETCORE, [test "x$with_core" != "xno"])
1470 AM_CONDITIONAL(FULL_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full"] || [test "x$TEST_PROFILE" = "xwinaot"] || [test "x$TEST_PROFILE" = "xorbis"] || [test "x$TEST_PROFILE" = "xwasm"])
1471 AM_CONDITIONAL(HYBRID_AOT_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_hybrid"] || [test "x$TEST_PROFILE" = "xunreal"])
1472 AM_CONDITIONAL(AOT_FULL_INTERP_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp"])
1473 AM_CONDITIONAL(AOT_FULL_INTERP_LLVM_TESTS, [test "x$TEST_PROFILE" = "xtesting_aot_full_interp_llvm"])
1474 AM_CONDITIONAL(DEFAULT_TESTS, [test "x$TEST_PROFILE" = "xnet_4_x"])
1476 default_profile=net_4_x
1477 if test -z "$INSTALL_MONODROID_TRUE"; then :
1478 default_profile=monodroid
1480 if test -z "$INSTALL_MONOTOUCH_TRUE"; then :
1481 default_profile=monotouch
1483 if test -z "$INSTALL_XAMMAC_TRUE"; then :
1484 default_profile=xammac
1486 if test -z "$INSTALL_TESTING_AOT_FULL_INTERP_TRUE"; then :
1487 default_profile=testing_aot_full_interp
1489 if test -z "$INSTALL_TESTING_AOT_HYBRID_TRUE"; then :
1490 default_profile=testing_aot_hybrid
1492 if test -z "$INSTALL_TESTING_AOT_FULL_TRUE"; then :
1493 default_profile=testing_aot_full
1495 if test -z "$INSTALL_WINAOT_TRUE"; then :
1496 default_profile=winaot
1498 if test -z "$INSTALL_ORBIS_TRUE"; then :
1499 default_profile=orbis
1501 if test -z "$INSTALL_UNREAL_TRUE"; then :
1502 default_profile=unreal
1504 if test -z "$INSTALL_WASM_TRUE"; then :
1505 default_profile=wasm
1507 if test -z "$INSTALL_4_x_TRUE"; then :
1508 default_profile=net_4_x
1510 DEFAULT_PROFILE=$default_profile
1511 AC_SUBST(DEFAULT_PROFILE)
1514 # End build profile configuration
1517 if test x$USE_NLS = xprofile_default; then
1519 AC_MSG_CHECKING([NLS used])
1521 # We make the default value for USE_NLS
1522 # "no" on OSX because it isn't available on most
1523 # default OSX installs. The most common configurations will
1524 # all disable it, so this saves us typing.
1525 if test x$host_darwin = xyes; then
1532 AC_MSG_RESULT([$USE_NLS])
1535 AC_ARG_ENABLE(minimal, [ --enable-minimal=LIST drop support for LIST subsystems.
1536 LIST is a comma-separated list from: aot, profiler, decimal, pinvoke, debug, appdomains, verifier,
1537 reflection_emit, reflection_emit_save, large_code, logging, com, ssa, generics, attach, jit, interpreter, simd, soft_debug, perfcounters, normalization, desktop_loader, shared_perfcounters, remoting,
1538 security, lldb, mdb, assert_messages, cleanup, sgen_marksweep_conc, sgen_split_nursery, sgen_gc_bridge, sgen_debug_helpers, sockets.],
1540 for feature in `echo "$enable_minimal" | sed -e "s/,/ /g"`; do
1541 eval "mono_feature_disable_$feature='yes'"
1543 DISABLED_FEATURES=$enable_minimal
1544 disabled="Disabled: $enable_minimal"
1547 AC_DEFINE_UNQUOTED(DISABLED_FEATURES, "$DISABLED_FEATURES", [String of disabled features])
1549 if test "x$mono_feature_disable_aot" = "xyes"; then
1550 AC_DEFINE(DISABLE_AOT, 1, [Disable AOT Compiler])
1551 enable_system_aot=no
1552 AC_MSG_NOTICE([Disabled AOT compiler])
1555 if test "x$mono_feature_disable_profiler" = "xyes"; then
1556 AC_DEFINE(DISABLE_PROFILER, 1, [Disable default profiler support])
1557 AC_MSG_NOTICE([Disabled support for the profiler])
1559 AM_CONDITIONAL(DISABLE_PROFILER, test x$mono_feature_disable_profiler = xyes)
1561 if test "x$mono_feature_disable_decimal" = "xyes"; then
1562 AC_DEFINE(DISABLE_DECIMAL, 1, [Disable System.Decimal support])
1563 AC_MSG_NOTICE([Disabled support for decimal])
1566 if test "x$mono_feature_disable_pinvoke" = "xyes"; then
1567 AC_DEFINE(DISABLE_PINVOKE, 1, [Disable P/Invoke support])
1568 AC_MSG_NOTICE([Disabled support for P/Invoke])
1571 if test "x$mono_feature_disable_debug" = "xyes"; then
1572 AC_DEFINE(DISABLE_DEBUG, 1, [Disable runtime debugging support])
1573 AC_MSG_NOTICE([Disabled support for runtime debugging])
1576 if test "x$mono_feature_disable_reflection_emit" = "xyes"; then
1577 AC_DEFINE(DISABLE_REFLECTION_EMIT, 1, [Disable reflection emit support])
1578 mono_feature_disable_reflection_emit_save=yes
1579 AC_MSG_NOTICE([Disabled support for Reflection.Emit])
1582 if test "x$mono_feature_disable_reflection_emit_save" = "xyes"; then
1583 AC_DEFINE(DISABLE_REFLECTION_EMIT_SAVE, 1, [Disable assembly saving support in reflection emit])
1584 AC_MSG_NOTICE([Disabled support for Reflection.Emit.Save])
1587 if test "x$mono_feature_disable_large_code" = "xyes"; then
1588 AC_DEFINE(DISABLE_LARGE_CODE, 1, [Disable support for huge assemblies])
1589 AC_MSG_NOTICE([Disabled support for large assemblies])
1592 if test "x$mono_feature_disable_logging" = "xyes"; then
1593 AC_DEFINE(DISABLE_LOGGING, 1, [Disable support debug logging])
1594 AC_MSG_NOTICE([Disabled support for logging])
1597 if test "x$mono_feature_disable_com" = "xyes"; then
1598 AC_DEFINE(DISABLE_COM, 1, [Disable COM support])
1599 AC_MSG_NOTICE([Disabled COM support])
1602 if test "x$mono_feature_disable_ssa" = "xyes"; then
1603 AC_DEFINE(DISABLE_SSA, 1, [Disable advanced SSA JIT optimizations])
1604 AC_MSG_NOTICE([Disabled SSA JIT optimizations])
1607 if test "x$mono_feature_disable_generics" = "xyes"; then
1608 AC_DEFINE(DISABLE_GENERICS, 1, [Disable generics support])
1609 AC_MSG_NOTICE([Disabled Generics Support])
1612 if test "x$mono_feature_disable_shadowcopy" = "xyes"; then
1613 AC_DEFINE(DISABLE_SHADOW_COPY, 1, [Disable Shadow Copy for AppDomains])
1614 AC_MSG_NOTICE([Disabled Shadow copy for AppDomains])
1617 if test "x$mono_feature_disable_portability" = "xyes"; then
1618 AC_DEFINE(DISABLE_PORTABILITY, 1, [Disables the IO portability layer])
1619 AC_MSG_NOTICE([Disabled IO Portability layer])
1622 if test "x$mono_feature_disable_attach" = "xyes"; then
1623 AC_DEFINE(DISABLE_ATTACH, 1, [Disable agent attach support])
1624 AC_MSG_NOTICE([Disabled agent attach])
1627 if test "x$mono_feature_disable_verifier" = "xyes"; then
1628 AC_DEFINE(DISABLE_VERIFIER, 1, [Disables the verifier])
1629 AC_MSG_NOTICE([Disabled the metadata and IL verifiers])
1632 if test "x$mono_feature_disable_jit" = "xyes"; then
1633 AC_DEFINE(DISABLE_JIT, 1, [Disable the JIT, only full-aot mode or interpreter will be supported by the runtime.])
1634 AC_MSG_NOTICE([Disabled the JIT engine, only full AOT or interpreter will be supported])
1637 AM_CONDITIONAL(DISABLE_JIT, test x$mono_feature_disable_jit = xyes)
1639 if test "x$mono_feature_disable_interpreter" = "xyes"; then
1640 AC_DEFINE(DISABLE_INTERPRETER, 1, [Disable the interpreter.])
1641 AC_MSG_NOTICE([Disabled the interpreter])
1644 AM_CONDITIONAL(DISABLE_INTERPRETER, test x$mono_feature_disable_interpreter = xyes)
1646 if test "x$mono_feature_disable_interpreter" != "xyes" -o "x$mono_feature_disable_jit" != "xyes"; then
1647 AC_DEFINE(ENABLE_ILGEN, 1, [Some VES is available at runtime])
1650 AM_CONDITIONAL(ENABLE_ILGEN, test x$mono_feature_disable_interpreter != xyes -o x$mono_feature_disable_jit != xyes)
1652 if test "x$mono_feature_disable_simd" = "xyes"; then
1653 AC_DEFINE(DISABLE_SIMD, 1, [Disable SIMD intrinsics related optimizations.])
1654 AC_MSG_NOTICE([Disabled SIMD support])
1657 if test "x$mono_feature_disable_soft_debug" = "xyes"; then
1658 AC_DEFINE(DISABLE_DEBUGGER_AGENT, 1, [Disable Soft Debugger Agent.])
1659 AC_MSG_NOTICE([Disabled Soft Debugger.])
1662 AM_CONDITIONAL(DISABLE_DEBUGGER_AGENT, test x$mono_feature_disable_debugger_agent = xyes)
1664 if test "x$mono_feature_disable_perfcounters" = "xyes"; then
1665 AC_DEFINE(DISABLE_PERFCOUNTERS, 1, [Disable Performance Counters.])
1666 AC_MSG_NOTICE([Disabled Performance Counters.])
1668 if test "x$mono_feature_disable_normalization" = "xyes"; then
1669 AC_DEFINE(DISABLE_NORMALIZATION, 1, [Disable String normalization support.])
1670 AC_MSG_NOTICE([Disabled String normalization support.])
1673 #TODO: remove assembly_remapping feature name once everyone is using desktop_loader
1674 if test "x$mono_feature_disable_assembly_remapping" = "xyes" || test "x$mono_feature_disable_desktop_loader" = "xyes"; then
1675 AC_DEFINE(DISABLE_DESKTOP_LOADER, 1, [Disable desktop assembly loader semantics.])
1676 AC_MSG_NOTICE([Disabled desktop assembly loader semantics.])
1679 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
1680 AC_DEFINE(DISABLE_SHARED_PERFCOUNTERS, 1, [Disable shared perfcounters.])
1681 AC_MSG_NOTICE([Disabled Shared perfcounters.])
1684 if test "x$mono_feature_disable_appdomains" = "xyes"; then
1685 AC_DEFINE(DISABLE_APPDOMAINS, 1, [Disable support for multiple appdomains.])
1686 AC_MSG_NOTICE([Disabled support for multiple appdomains.])
1689 if test "x$mono_feature_disable_remoting" = "xyes"; then
1690 AC_DEFINE(DISABLE_REMOTING, 1, [Disable remoting support (This disables type proxies and make com non-functional)])
1691 AC_MSG_NOTICE([Disabled remoting])
1694 if test "x$mono_feature_disable_security" = "xyes"; then
1695 AC_DEFINE(DISABLE_SECURITY, 1, [Disable CAS/CoreCLR security])
1696 AC_MSG_NOTICE([Disabled CAS/CoreCLR security manager (used e.g. for Moonlight)])
1699 if test "x$mono_feature_disable_lldb" = "xyes"; then
1700 AC_DEFINE(DISABLE_LLDB, 1, [Disable support code for the LLDB plugin.])
1701 AC_MSG_NOTICE([Disabled LLDB plugin support code.])
1704 if test "x$mono_feature_disable_mdb" = "xyes"; then
1705 AC_DEFINE(DISABLE_MDB, 1, [Disable support for .mdb symbol files.])
1706 AC_MSG_NOTICE([Disabled support for .mdb symbol files.])
1709 if test "x$mono_feature_disable_assert_messages" = "xyes"; then
1710 AC_DEFINE(DISABLE_ASSERT_MESSAGES, 1, [Disable assertion messages.])
1711 AC_MSG_NOTICE([Disabled assertion messages.])
1714 if test "x$mono_feature_disable_cleanup" = "xyes"; then
1715 AC_DEFINE(DISABLE_CLEANUP, 1, [Disable runtime cleanup.])
1716 AC_MSG_NOTICE([Disabled runtime cleanup.])
1719 if test "x$mono_feature_disable_sgen_marksweep_conc" = "xyes"; then
1720 AC_DEFINE(DISABLE_SGEN_MAJOR_MARKSWEEP_CONC, 1, [Disable concurrent gc support in SGEN.])
1721 AC_MSG_NOTICE([Disabled concurrent gc support in SGEN.])
1725 if test "x$mono_feature_disable_sgen_split_nursery" = "xyes"; then
1726 AC_DEFINE(DISABLE_SGEN_SPLIT_NURSERY, 1, [Disable minor=split support in SGEN.])
1727 AC_MSG_NOTICE([Disabled minor=split support in SGEN.])
1730 if test "x$mono_feature_disable_sgen_gc_bridge" = "xyes"; then
1731 AC_DEFINE(DISABLE_SGEN_GC_BRIDGE, 1, [Disable gc bridge support in SGEN.])
1732 AC_MSG_NOTICE([Disabled gc bridge support in SGEN.])
1735 if test "x$mono_feature_disable_sgen_debug_helpers" = "xyes"; then
1736 AC_DEFINE(DISABLE_SGEN_DEBUG_HELPERS, 1, [Disable debug helpers in SGEN.])
1737 AC_MSG_NOTICE([Disabled debug helpers in SGEN.])
1740 if test "x$mono_feature_disable_sockets" = "xyes"; then
1741 AC_DEFINE(DISABLE_SOCKETS, 1, [Disable sockets])
1742 AC_MSG_NOTICE([Disabled sockets])
1745 AC_ARG_ENABLE(executables, [ --disable-executables disable the build of the runtime executables], enable_executables=$enableval, enable_executables=yes)
1746 AM_CONDITIONAL(DISABLE_EXECUTABLES, test x$enable_executables = xno)
1748 has_extension_module=no
1749 AC_ARG_ENABLE(extension-module, [ --enable-extension-module=LIST enable the core-extensions from LIST],
1751 for extension in `echo "$enable_extension_module" | sed -e "s/,/ /g"`; do
1752 if test x$extension = xdefault ; then
1753 has_extension_module=yes;
1756 if test x$enable_extension_module = xyes; then
1757 has_extension_module=yes;
1761 AM_CONDITIONAL([HAS_EXTENSION_MODULE], [test x$has_extension_module != xno])
1763 if test x$has_extension_module != xno ; then
1764 AC_DEFINE([ENABLE_EXTENSION_MODULE], 1, [Extension module enabled])
1765 AC_MSG_NOTICE([Enabling mono extension module.])
1769 AC_ARG_ENABLE(gsharedvt, [ --enable-gsharedvt Enable generic valuetype sharing (Deprecated)], enable_gsharedvt=$enableval, enable_gsharedvt=no)
1771 AC_MSG_CHECKING(for visibility __attribute__)
1774 void __attribute__ ((visibility ("hidden"))) doit (void) {}
1775 int main () { doit (); return 0; }
1778 have_visibility_hidden=yes
1781 have_visibility_hidden=no
1786 dnl Boehm GC configuration
1789 AC_ARG_WITH(libgc, [ --with-libgc=included,none Controls the Boehm GC config, default=included],[libgc=$with_libgc],[libgc=included])
1791 AC_ARG_ENABLE(boehm, [ --disable-boehm Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
1792 AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
1794 if test "x$support_boehm" = "xyes"; then
1796 AC_ARG_ENABLE(parallel-mark, [ --enable-parallel-mark Enables Boehm GC Parallel Marking], enable_parallel_mark=$enableval, enable_parallel_mark=$parallel_mark)
1797 if test x$enable_parallel_mark = xyes; then
1798 libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
1808 if test "x$support_boehm" = "xyes"; then
1812 LIBGC_CPPFLAGS='-I$(top_srcdir)/libgc/include'
1813 LIBGC_LIBS='$(top_builddir)/libgc/libmonogc.la'
1814 LIBGC_STATIC_LIBS='$(top_builddir)/libgc/libmonogc-static.la'
1816 BOEHM_DEFINES="-DHAVE_BOEHM_GC"
1818 if test x$target_win32 = xyes; then
1819 BOEHM_DEFINES="$BOEHM_DEFINES -DGC_NOT_DLL"
1820 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DGC_BUILD -DGC_NOT_DLL"
1823 gc_msg="Included Boehm GC with typed GC"
1824 if test x$enable_parallel_mark = xyes; then
1825 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC and Parallel Mark)", [GC description])
1826 gc_msg="$gc_msg and parallel mark"
1828 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "Included Boehm (with typed GC)", [GC description])
1833 AC_MSG_WARN("External Boehm is no longer supported")
1837 AC_MSG_WARN("Use --with-sgen instead, --with-libgc= controls Boehm configuration")
1841 AC_MSG_WARN("Compiling mono without GC.")
1842 AC_DEFINE_UNQUOTED(DEFAULT_GC_NAME, "none", [GC description])
1843 AC_DEFINE(HAVE_NULL_GC,1,[No GC support.])
1847 AC_MSG_ERROR([Invalid argument $libgc to --with-libgc.])
1851 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])
1852 if test "x$large_heap" = "xyes"; then
1853 CPPFLAGS="$CPPFLAGS -DLARGE_CONFIG"
1856 AC_SUBST(LIBGC_CPPFLAGS)
1857 AC_SUBST(LIBGC_LIBS)
1858 AC_SUBST(LIBGC_STATIC_LIBS)
1860 AC_SUBST(BOEHM_DEFINES)
1863 AM_CONDITIONAL(SUPPORT_NULLGC, test "x$libgc" = "xnone")
1866 dnl End of Boehm GC Configuration
1869 dnl *************************************
1870 dnl *** Checks for zero length arrays ***
1871 dnl *************************************
1872 AC_MSG_CHECKING(whether $CC supports zero length arrays)
1880 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 0, [Length of zero length arrays])
1883 AC_DEFINE_UNQUOTED(MONO_ZERO_LEN_ARRAY, 1, [Length of zero length arrays])
1886 dnl ***********************************
1887 dnl *** Checks for signals
1888 dnl ***********************************
1889 AC_CHECK_HEADERS(signal.h)
1890 AC_CHECK_FUNCS(sigaction)
1891 AC_CHECK_FUNCS(kill)
1892 AC_CHECK_FUNCS(signal)
1894 # signal() is declared inline in Android headers
1895 # so we need to workaround it by overriding the check.
1896 if test x$platform_android = xyes; then
1897 AC_DEFINE(HAVE_SIGNAL,1)
1900 # `target_ios=yes` does not detect watch devices and fails when cross-compiling
1901 AC_MONO_APPLE_TARGET(TARGET_OS_IPHONE, [mono_native_platform_ios=yes])
1903 if test x$host_win32 = xno; then
1904 dnl *************************************
1905 dnl *** Checks for time capabilities ***
1906 dnl *************************************
1908 AC_MSG_CHECKING(for CLOCK_MONOTONIC)
1909 AC_TRY_COMPILE([#include <time.h>], [
1910 const int foo = CLOCK_MONOTONIC;
1913 AC_DEFINE(HAVE_CLOCK_MONOTONIC, 1, [CLOCK_MONOTONIC])
1918 AC_MSG_CHECKING(for CLOCK_MONOTONIC_COARSE)
1919 AC_TRY_COMPILE([#include <time.h>], [
1920 const int foo = CLOCK_MONOTONIC_COARSE;
1923 AC_DEFINE(HAVE_CLOCK_MONOTONIC_COARSE, 1, [CLOCK_MONOTONIC_COARSE])
1928 AC_MSG_CHECKING(for CLOCK_REALTIME)
1929 AC_TRY_COMPILE([#include <time.h>], [
1930 const int foo = CLOCK_REALTIME;
1933 AC_DEFINE(HAVE_CLOCK_REALTIME, 1, [CLOCK_REALTIME])
1938 AC_CHECK_FUNC(mach_absolute_time, [AC_DEFINE(HAVE_MACH_ABSOLUTE_TIME, 1, [mach_absolute_time])])
1939 AC_CHECK_FUNC(gethrtime, [AC_DEFINE(HAVE_GETHRTIME, 1, [gethrtime])])
1940 AC_CHECK_FUNC(read_real_time, [AC_DEFINE(HAVE_READ_REAL_TIME, 1, [read_real_time])])
1941 AC_CHECK_FUNC(mach_timebase_info, [AC_DEFINE(HAVE_MACH_TIMEBASE_INFO, 1, [mach_timebase_info])])
1942 AC_CHECK_FUNC(futimes, [AC_DEFINE(HAVE_FUTIMES, 1, [futimes])])
1943 AC_CHECK_FUNC(futimens, [AC_DEFINE(HAVE_FUTIMENS, 1, [futimens])])
1945 dnl hires monotonic clock support
1946 AC_SEARCH_LIBS(clock_gettime, rt)
1947 AC_CHECK_FUNCS(clock_nanosleep)
1949 dnl dynamic loader support
1950 AC_CHECK_FUNC(dlopen, DL_LIB="",
1951 AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", dl_support=no)
1953 if test x$dl_support = xno; then
1954 AC_MSG_WARN([No dynamic loading support available])
1956 LIBS="$LIBS $DL_LIB"
1957 AC_DEFINE(HAVE_DL_LOADER,1,[dlopen-based dynamic loader available])
1958 dnl from glib's configure.ac
1959 AC_CACHE_CHECK([for preceeding underscore in symbols],
1961 AC_TRY_RUN([#include <dlfcn.h>
1962 int mono_underscore_test (void) { return 42; }
1964 void *f1 = (void*)0, *f2 = (void*)0, *handle;
1965 handle = dlopen ((void*)0, 0);
1967 f1 = dlsym (handle, "mono_underscore_test");
1968 f2 = dlsym (handle, "_mono_underscore_test");
1969 } return (!f2 || f1);
1971 [mono_cv_uscore=yes],
1972 [mono_cv_uscore=no],
1975 if test "x$mono_cv_uscore" = "xyes"; then
1976 MONO_DL_NEED_USCORE=1
1978 MONO_DL_NEED_USCORE=0
1980 AC_SUBST(MONO_DL_NEED_USCORE)
1981 AC_CHECK_FUNC(dlerror)
1984 dnl ******************************************************************
1985 dnl *** Checks for the IKVM JNI interface library ***
1986 dnl ******************************************************************
1987 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])
1990 if test x$with_ikvm_native = xyes; then
1991 ikvm_native_dir=ikvm-native
1992 jdk_headers_found="IKVM Native"
1995 AC_SUBST(ikvm_native_dir)
1997 AC_CHECK_HEADERS(execinfo.h)
1999 AC_CHECK_HEADERS(sys/auxv.h sys/resource.h)
2001 AC_CHECK_FUNCS(getgrgid_r)
2002 AC_CHECK_FUNCS(getgrnam_r)
2003 AC_CHECK_FUNCS(getresuid)
2004 AC_CHECK_FUNCS(setresuid)
2005 AC_CHECK_FUNCS(kqueue)
2006 AC_CHECK_FUNCS(backtrace_symbols)
2007 AC_CHECK_FUNCS(mkstemp)
2008 AC_CHECK_FUNCS(mmap)
2009 AC_CHECK_FUNCS(madvise)
2010 AC_CHECK_FUNCS(getrusage)
2011 AC_CHECK_FUNCS(getpriority)
2012 AC_CHECK_FUNCS(setpriority)
2013 AC_CHECK_FUNCS(dl_iterate_phdr)
2014 AC_CHECK_FUNCS(dladdr)
2015 AC_CHECK_FUNCS(sysconf)
2016 AC_CHECK_FUNCS(getrlimit)
2017 AC_CHECK_FUNCS(prctl)
2018 AC_CHECK_FUNCS(arc4random)
2019 AC_CHECK_FUNCS(nl_langinfo)
2021 AC_CHECK_FUNCS(sched_getaffinity)
2022 AC_CHECK_FUNCS(sched_setaffinity)
2023 AC_CHECK_FUNCS(sched_getcpu)
2025 if test x$platform_android != xyes; then
2026 AC_CHECK_FUNCS(getpwnam_r)
2027 AC_CHECK_FUNCS(getpwuid_r)
2030 AC_CHECK_FUNCS(readlink)
2031 AC_CHECK_FUNCS(chmod)
2032 AC_CHECK_FUNCS(lstat)
2033 AC_CHECK_FUNCS(getdtablesize)
2035 AC_CHECK_FUNCS(ftruncate)
2036 AC_CHECK_FUNCS(msync)
2038 AC_CHECK_FUNCS(gethostname getpeername)
2039 AC_CHECK_FUNCS(utime utimes)
2041 AC_CHECK_FUNCS(openlog closelog)
2042 AC_CHECK_FUNCS(atexit)
2044 AC_FUNC_STRERROR_R()
2046 dnl ****************************************************************
2047 dnl *** Check for sched_setaffinity from glibc versions before ***
2048 dnl *** 2.3.4. The older versions of the function only take 2 ***
2049 dnl *** parameters, not 3. ***
2051 dnl *** Because the interface change was not made in a minor ***
2052 dnl *** version rev, the __GLIBC__ and __GLIBC_MINOR__ macros ***
2053 dnl *** won't always indicate the interface sched_affinity has. ***
2054 dnl ****************************************************************
2055 AC_MSG_CHECKING(for sched_setaffinity from glibc < 2.3.4)
2056 AC_TRY_COMPILE([#include <sched.h>], [
2058 sched_setaffinity(0, &mask);
2060 # Yes, we have it...
2062 AC_DEFINE(GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY, 1, [Have GLIBC_BEFORE_2_3_4_SCHED_SETAFFINITY])
2064 # We have the new, three-parameter version
2067 AC_TRY_COMPILE([#include <sched.h>], [
2068 CPU_COUNT((void *) 0);
2071 AC_DEFINE(GLIBC_HAS_CPU_COUNT, 1, [GLIBC has CPU_COUNT macro in sched.h])
2073 # We have the new, three-parameter version
2077 dnl ******************************************************************
2078 dnl *** Check for large file support ***
2079 dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
2080 dnl ******************************************************************
2082 # Check that off_t can represent 2**63 - 1 correctly, working around
2083 # potential compiler bugs. Defines LARGE_FILE_SUPPORT, adds $1 to
2084 # CPPFLAGS and sets $large_offt to yes if the test succeeds
2086 AC_DEFUN([LARGE_FILES], [
2087 large_CPPFLAGS=$CPPFLAGS
2088 CPPFLAGS="$CPPFLAGS $1"
2090 #include <sys/types.h>
2093 /* Lifted this compile time assert method from: http://www.jaggersoft.com/pubs/CVu11_3.html */
2094 #define COMPILE_TIME_ASSERT(pred) \
2095 switch(0){case 0:case pred:;}
2096 COMPILE_TIME_ASSERT(sizeof(off_t) * CHAR_BIT == 64);
2099 AC_DEFINE(HAVE_LARGE_FILE_SUPPORT, 1, [Have large file support])
2100 large_CPPFLAGS="$large_CPPFLAGS $1"
2105 CPPFLAGS=$large_CPPFLAGS
2108 AC_MSG_CHECKING(if off_t is 64 bits wide)
2110 if test $large_offt = no; then
2111 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
2112 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
2114 if test $large_offt = no; then
2115 AC_MSG_WARN([No 64 bit file size support available])
2118 dnl *****************************
2119 dnl *** Checks for libsocket ***
2120 dnl *****************************
2121 AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
2125 dnl *****************************
2126 dnl *** Checks for libinotify ***
2127 dnl *****************************
2128 AC_CHECK_LIB(inotify, inotify_init, LIBS="$LIBS -linotify")
2131 dnl *******************************
2132 dnl *** Checks for MSG_NOSIGNAL ***
2133 dnl *******************************
2134 AC_MSG_CHECKING(for MSG_NOSIGNAL)
2135 AC_TRY_COMPILE([#include <sys/socket.h>], [
2136 int f = MSG_NOSIGNAL;
2138 # Yes, we have it...
2140 AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Have MSG_NOSIGNAL])
2142 # We'll have to use signals
2146 dnl *****************************
2147 dnl *** Checks for IPPROTO_IP ***
2148 dnl *****************************
2149 AC_MSG_CHECKING(for IPPROTO_IP)
2150 AC_TRY_COMPILE([#include <netinet/in.h>], [
2151 int level = IPPROTO_IP;
2153 # Yes, we have it...
2155 AC_DEFINE(HAVE_IPPROTO_IP, 1, [Have IPPROTO_IP])
2157 # We'll have to use getprotobyname
2161 dnl *******************************
2162 dnl *** Checks for IPPROTO_IPV6 ***
2163 dnl *******************************
2164 AC_MSG_CHECKING(for IPPROTO_IPV6)
2165 AC_TRY_COMPILE([#include <netinet/in.h>], [
2166 int level = IPPROTO_IPV6;
2168 # Yes, we have it...
2170 AC_DEFINE(HAVE_IPPROTO_IPV6, 1, [Have IPPROTO_IPV6])
2172 # We'll have to use getprotobyname
2176 dnl ******************************
2177 dnl *** Checks for IPPROTO_TCP ***
2178 dnl ******************************
2179 AC_MSG_CHECKING(for IPPROTO_TCP)
2180 AC_TRY_COMPILE([#include <netinet/in.h>], [
2181 int level = IPPROTO_TCP;
2183 # Yes, we have it...
2185 AC_DEFINE(HAVE_IPPROTO_TCP, 1, [Have IPPROTO_TCP])
2187 # We'll have to use getprotobyname
2191 dnl *****************************
2192 dnl *** Checks for SOL_IP ***
2193 dnl *****************************
2194 AC_MSG_CHECKING(for SOL_IP)
2195 AC_TRY_COMPILE([#include <netdb.h>], [
2198 # Yes, we have it...
2200 AC_DEFINE(HAVE_SOL_IP, 1, [Have SOL_IP])
2202 # We'll have to use getprotobyname
2206 dnl *****************************
2207 dnl *** Checks for SOL_IPV6 ***
2208 dnl *****************************
2209 AC_MSG_CHECKING(for SOL_IPV6)
2210 AC_TRY_COMPILE([#include <netdb.h>], [
2211 int level = SOL_IPV6;
2213 # Yes, we have it...
2215 AC_DEFINE(HAVE_SOL_IPV6, 1, [Have SOL_IPV6])
2217 # We'll have to use getprotobyname
2221 dnl *****************************
2222 dnl *** Checks for SOL_TCP ***
2223 dnl *****************************
2224 AC_MSG_CHECKING(for SOL_TCP)
2225 AC_TRY_COMPILE([#include <netdb.h>], [
2226 int level = SOL_TCP;
2228 # Yes, we have it...
2230 AC_DEFINE(HAVE_SOL_TCP, 1, [Have SOL_TCP])
2232 # We'll have to use getprotobyname
2236 dnl *****************************
2237 dnl *** Checks for IP_PKTINFO ***
2238 dnl *****************************
2239 AC_MSG_CHECKING(for IP_PKTINFO)
2240 AC_TRY_COMPILE([#include <linux/in.h>], [
2241 int level = IP_PKTINFO;
2243 # Yes, we have it...
2245 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
2250 dnl *****************************
2251 dnl *** Checks for IPV6_PKTINFO ***
2252 dnl *****************************
2253 AC_MSG_CHECKING(for IPV6_PKTINFO)
2254 AC_TRY_COMPILE([#include <netdb.h>], [
2255 int level = IPV6_PKTINFO;
2257 # Yes, we have it...
2259 AC_DEFINE(HAVE_IPV6_PKTINFO, 1, [Have IPV6_PKTINFO])
2264 dnl **********************************
2265 dnl *** Checks for IP_DONTFRAG ***
2266 dnl **********************************
2267 AC_MSG_CHECKING(for IP_DONTFRAG)
2268 AC_TRY_COMPILE([#include <netinet/in.h>], [
2269 int level = IP_DONTFRAG;
2271 # Yes, we have it...
2273 AC_DEFINE(HAVE_IP_DONTFRAG, 1, [Have IP_DONTFRAG])
2278 dnl **********************************
2279 dnl *** Checks for IP_DONTFRAGMENT ***
2280 dnl **********************************
2281 AC_MSG_CHECKING(for IP_DONTFRAGMENT)
2282 AC_TRY_COMPILE([#include <Ws2ipdef.h>], [
2283 int level = IP_DONTFRAGMENT;
2285 # Yes, we have it...
2287 AC_DEFINE(HAVE_IP_DONTFRAGMENT, 1, [Have IP_DONTFRAGMENT])
2292 dnl **********************************
2293 dnl *** Checks for IP_MTU_DISCOVER ***
2294 dnl **********************************
2295 AC_MSG_CHECKING(for IP_MTU_DISCOVER)
2296 AC_TRY_COMPILE([#include <linux/in.h>], [
2297 int level = IP_MTU_DISCOVER;
2299 # Yes, we have it...
2301 AC_DEFINE(HAVE_IP_MTU_DISCOVER, 1, [Have IP_MTU_DISCOVER])
2306 dnl **********************************
2307 dnl *** Checks for IP_PMTUDISC_DO ***
2308 dnl **********************************
2309 AC_MSG_CHECKING(for IP_PMTUDISC_DO)
2310 AC_TRY_COMPILE([#include <linux/in.h>], [
2311 int level = IP_PMTUDISC_DO;
2313 # Yes, we have it...
2315 AC_DEFINE(HAVE_IP_PMTUDISC_DO, 1, [Have IP_PMTUDISC_DO])
2320 dnl *********************************
2321 dnl *** Check for struct ip_mreqn ***
2322 dnl *********************************
2323 AC_MSG_CHECKING(for struct ip_mreqn)
2324 AC_TRY_COMPILE([#include <netinet/in.h>], [
2325 struct ip_mreqn mreq;
2326 mreq.imr_address.s_addr = 0;
2328 # Yes, we have it...
2330 AC_DEFINE(HAVE_STRUCT_IP_MREQN, 1, [Have struct ip_mreqn])
2332 # We'll just have to try and use struct ip_mreq
2334 AC_MSG_CHECKING(for struct ip_mreq)
2335 AC_TRY_COMPILE([#include <netinet/in.h>], [
2336 struct ip_mreq mreq;
2337 mreq.imr_interface.s_addr = 0;
2339 # Yes, we have it...
2341 AC_DEFINE(HAVE_STRUCT_IP_MREQ, 1, [Have struct ip_mreq])
2343 # No multicast support
2348 dnl **********************************
2349 dnl *** Check for getaddrinfo ***
2350 dnl **********************************
2351 AC_MSG_CHECKING(for getaddrinfo)
2356 getaddrinfo(NULL,NULL,NULL,NULL);
2358 # Yes, we have it...
2360 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
2365 dnl **********************************
2366 dnl *** Check for gethostbyname2_r ***
2367 dnl **********************************
2368 AC_MSG_CHECKING(for gethostbyname2_r)
2374 gethostbyname2_r(NULL,0,NULL,NULL,0,NULL,NULL);
2376 # Yes, we have it...
2378 AC_DEFINE(HAVE_GETHOSTBYNAME2_R, 1, [Have gethostbyname2_r])
2383 dnl **********************************
2384 dnl *** Check for gethostbyname2 ***
2385 dnl **********************************
2386 AC_MSG_CHECKING(for gethostbyname2)
2391 gethostbyname2(NULL,0);
2393 # Yes, we have it...
2395 AC_DEFINE(HAVE_GETHOSTBYNAME2, 1, [Have gethostbyname2])
2400 dnl **********************************
2401 dnl *** Check for gethostbyname ***
2402 dnl **********************************
2403 AC_MSG_CHECKING(for gethostbyname)
2408 gethostbyname(NULL);
2410 # Yes, we have it...
2412 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
2417 dnl **********************************
2418 dnl *** Check for getprotobyname ***
2419 dnl **********************************
2420 AC_MSG_CHECKING(for getprotobyname)
2425 getprotobyname(NULL);
2427 # Yes, we have it...
2429 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
2434 dnl **********************************
2435 dnl *** Check for getprotobyname_r ***
2436 dnl **********************************
2437 AC_MSG_CHECKING(for getprotobyname_r)
2442 getprotobyname_r(NULL, NULL, NULL, 0, NULL);
2444 # Yes, we have it...
2446 AC_DEFINE(HAVE_GETPROTOBYNAME_R, 1, [Have getprotobyname_r])
2451 dnl **********************************
2452 dnl *** Check for getnameinfo ***
2453 dnl **********************************
2454 AC_MSG_CHECKING(for getnameinfo)
2459 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
2461 # Yes, we have it...
2463 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
2469 dnl **********************************
2470 dnl *** Check for inet_ntop ***
2471 dnl **********************************
2472 AC_MSG_CHECKING(for inet_ntop)
2475 #include <arpa/inet.h>
2477 inet_ntop (0, NULL, NULL, 0);
2479 # Yes, we have it...
2481 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
2486 dnl *****************************
2487 dnl *** Checks for libnsl ***
2488 dnl *****************************
2489 AC_CHECK_FUNC(gethostbyaddr, , AC_CHECK_LIB(nsl, gethostbyaddr, LIBS="$LIBS -lnsl"))
2491 AC_CHECK_FUNCS(inet_pton inet_aton)
2493 dnl *****************************
2494 dnl *** Checks for libxnet ***
2495 dnl *****************************
2498 AC_MSG_CHECKING(for Solaris XPG4 support)
2499 if test -f /usr/lib/libxnet.so; then
2500 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500"
2501 CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
2502 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED=1"
2509 if test "$GCC" = "yes"; then
2510 CFLAGS="$CFLAGS -Wno-char-subscripts"
2515 dnl *****************************
2516 dnl *** Checks for libpthread ***
2517 dnl *****************************
2518 # on FreeBSD -STABLE, the pthreads functions all reside in libc_r
2519 # and libpthread does not exist
2523 dnl Haiku has pthread in libroot (libc equiv)
2524 AC_CHECK_LIB(pthread, main, LIBS="$LIBS")
2527 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2530 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -pthread")
2533 AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
2536 AC_CHECK_HEADERS(pthread.h)
2537 AC_CHECK_HEADERS(pthread_np.h)
2538 AC_CHECK_FUNCS(pthread_mutex_timedlock)
2539 AC_CHECK_FUNCS(pthread_getattr_np pthread_attr_get_np pthread_getname_np pthread_setname_np pthread_cond_timedwait_relative_np)
2540 AC_CHECK_FUNCS(pthread_kill)
2541 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
2542 AC_TRY_COMPILE([ #include <pthread.h>], [
2543 pthread_mutexattr_t attr;
2544 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
2549 AC_ERROR(Posix system lacks support for recursive mutexes)
2551 AC_CHECK_FUNCS(pthread_attr_setstacksize)
2552 AC_CHECK_FUNCS(pthread_attr_getstack pthread_attr_getstacksize)
2553 AC_CHECK_FUNCS(pthread_get_stacksize_np pthread_get_stackaddr_np)
2554 AC_CHECK_FUNCS(mincore mlock munlock)
2556 dnl ***********************************
2557 dnl *** Checks for working __thread ***
2558 dnl ***********************************
2559 AC_MSG_CHECKING(for working __thread)
2560 if test "x$with_tls" != "x__thread"; then
2561 AC_MSG_RESULT(disabled)
2562 elif test "x$cross_compiling" = "xyes"; then
2563 AC_MSG_RESULT(cross compiling, assuming yes)
2566 #if defined(__APPLE__) && defined(__clang__)
2567 #error "__thread does not currently work with clang on Mac OS X"
2571 #include <pthread.h>
2573 static int res1, res2;
2575 void thread_main (void *arg)
2590 pthread_create (&t1, NULL, thread_main, 1);
2591 pthread_create (&t2, NULL, thread_main, 2);
2593 pthread_join (t1, NULL);
2594 pthread_join (t2, NULL);
2596 return !(res1 + res2 == 2);
2606 dnl **************************************
2607 dnl *** Checks for working sigaltstack ***
2608 dnl **************************************
2609 AC_MSG_CHECKING(for working sigaltstack)
2610 if test "x$with_sigaltstack" != "xyes"; then
2611 AC_MSG_RESULT(disabled)
2612 elif test "x$cross_compiling" = "xyes"; then
2613 AC_MSG_RESULT(cross compiling, assuming no)
2621 #include <pthread.h>
2622 #include <sys/wait.h>
2623 #if defined(__FreeBSD__) || defined(__NetBSD__)
2624 #define SA_STACK SA_ONSTACK
2627 sigsegv_signal_handler (int _dummy, siginfo_t *info, void *context)
2632 volatile char*__ptr = NULL;
2634 loop (void *ignored)
2643 struct sigaction sa;
2646 pthread_attr_t attr;
2648 sa.sa_sigaction = sigsegv_signal_handler;
2649 sigemptyset (&sa.sa_mask);
2650 sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
2651 if (sigaction (SIGSEGV, &sa, NULL) == -1) {
2652 perror ("sigaction");
2656 /* x86 darwin deliver segfaults using SIGBUS */
2657 if (sigaction (SIGBUS, &sa, NULL) == -1) {
2658 perror ("sigaction");
2661 sas.ss_sp = malloc (SIGSTKSZ);
2662 sas.ss_size = SIGSTKSZ;
2664 if (sigaltstack (&sas, NULL) == -1) {
2665 perror ("sigaltstack");
2669 pthread_attr_init (&attr);
2670 if (pthread_create(&id, &attr, loop, &attr) != 0) {
2671 printf ("pthread_create\n");
2695 for (i = 0; i < 300; ++i) {
2696 waitpid (son, &status, WNOHANG);
2697 if (WIFEXITED (status) && WEXITSTATUS (status) == 0)
2702 kill (son, SIGKILL);
2708 AC_DEFINE(HAVE_WORKING_SIGALTSTACK, 1, [Have a working sigaltstack])
2715 dnl ********************************
2716 dnl *** Checks for semaphore lib ***
2717 dnl ********************************
2718 # 'Real Time' functions on Solaris
2719 # posix4 on Solaris 2.6
2720 # pthread (first!) on Linux
2721 AC_SEARCH_LIBS(sem_init, pthread rt posix4)
2723 AC_SEARCH_LIBS(shm_open, pthread rt posix4)
2724 AC_CHECK_FUNCS(shm_open)
2726 dnl ********************************
2727 dnl *** Checks for timezone stuff **
2728 dnl ********************************
2729 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
2735 ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no))
2736 if test $ac_cv_struct_tm_gmtoff = yes; then
2737 AC_DEFINE(HAVE_TM_GMTOFF, 1, [Have tm_gmtoff])
2739 AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone,
2744 ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no))
2745 if test $ac_cv_var_timezone = yes; then
2746 AC_DEFINE(HAVE_TIMEZONE, 1, [Have timezone variable])
2748 AC_ERROR(unable to find a way to determine timezone)
2752 dnl *********************************
2753 dnl *** Checks for math functions ***
2754 dnl *********************************
2755 AC_SEARCH_LIBS(sqrtf, m)
2757 dnl ****************************************************************
2758 dnl *** Checks for working poll() (macosx defines it but doesn't ***
2759 dnl *** have it in the library (duh)) ***
2760 dnl ****************************************************************
2761 AC_CHECK_FUNCS(poll)
2763 dnl **********************************
2765 dnl **********************************
2766 AC_CHECK_HEADERS(sys/epoll.h)
2768 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], )
2769 if test "x$haveepoll" = "xyes" -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then
2770 AC_DEFINE(HAVE_EPOLL, 1, [epoll supported])
2775 AC_CHECK_HEADERS(sys/event.h)
2776 AC_CHECK_FUNCS(kqueue, [havekqueue=yes], )
2778 dnl **************************************
2779 dnl * Darwin has a race that prevents us from using reliably:
2780 dnl * http://lists.apple.com/archives/darwin-dev/2011/Jun/msg00016.html
2781 dnl * Since kqueue is mostly used for scaling large web servers,
2782 dnl * and very few folks run Mono on large web servers on OSX, falling
2784 dnl **************************************
2785 if test "x$havekqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"; then
2786 if test "x$host_darwin" = "xno"; then
2787 AC_DEFINE(USE_KQUEUE_FOR_THREADPOOL, 1, [Use kqueue for the threadpool])
2791 dnl ******************************
2792 dnl *** Checks for SIOCGIFCONF ***
2793 dnl ******************************
2794 AC_CHECK_HEADERS(sys/ioctl.h)
2795 AC_CHECK_HEADERS(net/if.h, [], [],
2797 #ifdef HAVE_SYS_TYPES_H
2798 # include <sys/types.h>
2800 #ifdef HAVE_SYS_SOCKET_H
2801 # include <sys/socket.h>
2804 AC_MSG_CHECKING(for ifreq)
2807 #include <sys/ioctl.h>
2815 x = (void *) &ifr->ifr_addr;
2818 AC_DEFINE(HAVE_SIOCGIFCONF, 1, [Can get interface list])
2822 dnl **********************************
2823 dnl *** Checks for sin_len ***
2824 dnl **********************************
2825 AC_MSG_CHECKING(for sockaddr_in.sin_len)
2827 #include <netinet/in.h>
2829 struct sockaddr_in saddr;
2830 saddr.sin_len = sizeof (saddr);
2833 AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [sockaddr_in has sin_len])
2837 dnl **********************************
2838 dnl *** Checks for sin6_len ***
2839 dnl **********************************
2840 AC_MSG_CHECKING(for sockaddr_in6.sin6_len)
2842 #include <netinet/in.h>
2844 struct sockaddr_in6 saddr6;
2845 saddr6.sin6_len = sizeof (saddr6);
2848 AC_DEFINE(HAVE_SOCKADDR_IN6_SIN_LEN, 1, [sockaddr_in6 has sin6_len])
2852 dnl **********************************
2853 dnl *** Check for getifaddrs ***
2854 dnl **********************************
2855 AC_MSG_CHECKING(for getifaddrs)
2858 #include <sys/types.h>
2859 #include <sys/socket.h>
2860 #ifdef HAVE_NET_IF_H
2863 #include <ifaddrs.h>
2867 # Yes, we have it...
2869 AC_DEFINE(HAVE_GETIFADDRS, 1, [Have getifaddrs])
2873 dnl **********************************
2874 dnl *** Check for if_nametoindex ***
2875 dnl **********************************
2876 AC_MSG_CHECKING(for if_nametoindex)
2879 #include <sys/types.h>
2880 #include <sys/socket.h>
2883 if_nametoindex(NULL);
2885 # Yes, we have it...
2887 AC_DEFINE(HAVE_IF_NAMETOINDEX, 1, [Have if_nametoindex])
2891 dnl **********************************
2892 dnl *** Check for access ***
2893 dnl **********************************
2894 AC_MSG_CHECKING(for access)
2900 # Yes, we have it...
2902 AC_DEFINE(HAVE_ACCESS, 1, [Have access])
2907 dnl **********************************
2908 dnl *** Checks for proclib ***
2909 dnl **********************************
2910 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.)])
2911 dnl **********************************
2912 dnl *** Checks for MonoPosixHelper ***
2913 dnl **********************************
2914 AC_CHECK_HEADERS(checklist.h)
2915 AC_CHECK_HEADERS(pathconf.h)
2916 AC_CHECK_HEADERS(fstab.h)
2917 AC_CHECK_HEADERS(attr/xattr.h)
2918 AC_CHECK_HEADERS(sys/extattr.h)
2919 AC_CHECK_HEADERS(sys/sendfile.h)
2920 AC_CHECK_HEADERS(sys/statvfs.h)
2921 AC_CHECK_HEADERS(sys/statfs.h)
2922 AC_CHECK_HEADERS(sys/vfstab.h)
2923 AC_CHECK_HEADERS(sys/xattr.h)
2924 AC_CHECK_HEADERS(sys/mman.h)
2925 AC_CHECK_HEADERS(sys/param.h)
2926 AC_CHECK_HEADERS(sys/mount.h, [], [],
2928 #ifdef HAVE_SYS_PARAM_H
2929 # include <sys/param.h>
2932 AC_CHECK_HEADERS(sys/mount.h)
2933 AC_CHECK_FUNCS(confstr)
2934 AC_CHECK_FUNCS(seekdir telldir)
2935 AC_CHECK_FUNCS(getdomainname)
2936 AC_CHECK_FUNCS(setdomainname)
2937 AC_CHECK_FUNCS(endgrent getgrent fgetgrent setgrent)
2938 AC_CHECK_FUNCS(setgroups)
2939 AC_CHECK_FUNCS(endpwent getpwent fgetpwent setpwent)
2940 AC_CHECK_FUNCS(getfsstat)
2941 AC_CHECK_FUNCS(lutimes futimes)
2942 AC_CHECK_FUNCS(mremap)
2943 AC_CHECK_FUNCS(remap_file_pages)
2944 AC_CHECK_FUNCS(posix_fadvise)
2945 AC_CHECK_FUNCS(posix_fallocate)
2946 AC_CHECK_FUNCS(posix_madvise)
2947 AC_CHECK_FUNCS(vsnprintf)
2948 AC_CHECK_FUNCS(sendfile)
2949 AC_CHECK_FUNCS(gethostid sethostid)
2950 AC_CHECK_FUNCS(sethostname)
2951 AC_CHECK_FUNCS(statfs)
2952 AC_CHECK_FUNCS(fstatfs)
2953 AC_CHECK_FUNCS(statvfs)
2954 AC_CHECK_FUNCS(fstatvfs)
2955 AC_CHECK_FUNCS(stime)
2956 AC_CHECK_FUNCS(ttyname_r)
2957 AC_CHECK_FUNCS(psignal)
2958 AC_CHECK_FUNCS(getlogin_r)
2959 AC_CHECK_FUNCS(lockf)
2960 AC_CHECK_FUNCS(swab)
2961 AC_CHECK_FUNCS(setusershell endusershell)
2962 AC_CHECK_FUNCS(futimens utimensat)
2963 AC_CHECK_FUNCS(fstatat mknodat readlinkat)
2964 AC_CHECK_FUNCS(readv writev preadv pwritev)
2965 AC_CHECK_FUNCS(setpgid)
2966 AC_CHECK_FUNCS(system)
2967 AC_CHECK_FUNCS(fork execv execve)
2968 AC_CHECK_FUNCS(waitpid)
2969 AC_CHECK_FUNCS(accept4)
2970 AC_CHECK_FUNCS(localtime_r)
2971 AC_CHECK_FUNCS(mkdtemp)
2972 AC_CHECK_SIZEOF(size_t)
2973 AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], ,
2974 [#include <sys/types.h>
2975 #include <sys/stat.h>
2976 #include <unistd.h>])
2977 AC_CHECK_TYPES([blkcnt_t], [AC_DEFINE(HAVE_BLKCNT_T)], ,
2978 [#include <sys/types.h>
2979 #include <sys/stat.h>
2980 #include <unistd.h>])
2981 AC_CHECK_TYPES([suseconds_t], [AC_DEFINE(HAVE_SUSECONDS_T)], ,
2982 [#include <sys/time.h>])
2983 AC_CHECK_TYPES([struct cmsghdr], [AC_DEFINE(HAVE_STRUCT_CMSGHDR)], ,
2984 [#include <sys/socket.h>])
2985 AC_CHECK_TYPES([struct flock], [AC_DEFINE(HAVE_STRUCT_FLOCK)], ,
2986 [#include <unistd.h>
2987 #include <fcntl.h>])
2988 AC_CHECK_TYPES([struct iovec], [AC_DEFINE(HAVE_STRUCT_IOVEC)], ,
2989 [#include <sys/uio.h>])
2990 AC_CHECK_TYPES([struct linger], [AC_DEFINE(HAVE_STRUCT_LINGER)], ,
2991 [#include <sys/socket.h>])
2992 AC_CHECK_TYPES([struct pollfd], [AC_DEFINE(HAVE_STRUCT_POLLFD)], ,
2993 [#include <sys/poll.h>])
2994 AC_CHECK_TYPES([struct sockaddr], [AC_DEFINE(HAVE_STRUCT_SOCKADDR)], ,
2995 [#include <sys/socket.h>])
2996 AC_CHECK_TYPES([struct sockaddr_storage], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)], ,
2997 [#include <sys/socket.h>])
2998 AC_CHECK_TYPES([struct sockaddr_in], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN)], ,
2999 [#include <netinet/in.h>])
3000 AC_CHECK_TYPES([struct sockaddr_in6], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)], ,
3001 [#include <netinet/in.h>])
3002 AC_CHECK_TYPES([struct sockaddr_un], [AC_DEFINE(HAVE_STRUCT_SOCKADDR_UN)], ,
3003 [#include <sys/un.h>])
3004 AC_CHECK_TYPES([struct stat], [AC_DEFINE(HAVE_STRUCT_STAT)], ,
3005 [#include <sys/types.h>
3006 #include <sys/stat.h>
3007 #include <unistd.h>])
3008 AC_CHECK_TYPES([struct timespec], [AC_DEFINE(HAVE_STRUCT_TIMESPEC)], ,
3009 [#include <time.h>])
3010 AC_CHECK_TYPES([struct timeval], [AC_DEFINE(HAVE_STRUCT_TIMEVAL)], ,
3011 [#include <sys/time.h>
3012 #include <sys/types.h>
3013 #include <utime.h>])
3014 AC_CHECK_TYPES([struct timezone], [AC_DEFINE(HAVE_STRUCT_TIMEZONE)], ,
3015 [#include <sys/time.h>])
3016 AC_CHECK_TYPES([struct utimbuf], [AC_DEFINE(HAVE_STRUCT_UTIMBUF)], ,
3017 [#include <sys/types.h>
3018 #include <utime.h>])
3020 [struct dirent.d_off, struct dirent.d_reclen, struct dirent.d_type],,,
3021 [#include <sys/types.h>
3022 #include <dirent.h>])
3024 [struct passwd.pw_gecos],,,
3025 [#include <sys/types.h>
3028 [struct statfs.f_flags],,,
3029 [#include <sys/types.h>
3030 #include <sys/vfs.h>])
3032 [struct stat.st_atim, struct stat.st_mtim, struct stat.st_atimespec, struct stat.st_ctim],,,
3033 [#include <sys/types.h>
3034 #include <sys/stat.h>
3035 #include <unistd.h>])
3037 dnl Favour xattr through glibc, but use libattr if we have to
3038 AC_CHECK_FUNC(lsetxattr, ,
3039 AC_CHECK_LIB(attr, lsetxattr, XATTR_LIB="-lattr",)
3043 dnl kinfo_proc.kp_proc works on darwin but fails on other simil-bsds
3045 [struct kinfo_proc.kp_proc],,,
3046 [#include <sys/types.h>
3047 #include <sys/param.h>
3048 #include <sys/sysctl.h>
3049 #include <sys/proc.h>
3052 dnl *********************************
3053 dnl *** Checks for Windows compilation ***
3054 dnl *********************************
3055 AC_CHECK_HEADERS(sys/time.h)
3056 AC_CHECK_HEADERS(sys/param.h)
3057 AC_CHECK_HEADERS(dirent.h)
3059 dnl ******************************************
3060 dnl *** Checks for OSX and iOS compilation ***
3061 dnl ******************************************
3062 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
3064 dnl *********************************
3065 dnl *** Check for Console 2.0 I/O ***
3066 dnl *********************************
3067 AC_CHECK_HEADERS([curses.h])
3068 AC_CHECK_HEADERS([term.h], [], [],
3073 AC_CHECK_HEADERS([termios.h])
3075 dnl *********************************
3076 dnl *** Checks for random ***
3077 dnl *********************************
3078 if test x$host_darwin = xno; then
3079 AC_CHECK_HEADERS(sys/random.h)
3080 AC_CHECK_FUNCS(getrandom getentropy)
3083 dnl *********************************
3084 dnl *** Checks for Mono.Native ***
3085 dnl *********************************
3087 # Translated from CMake in external/corefx/src/Native/Unix/configure.cmake, keep in sync!
3088 # Note: check_c_source_compiles in CMake is AC_TRY_LINK in autoconf
3090 AC_MSG_CHECKING(for linux/in.h)
3092 #include <sys/socket.h>
3093 #include <linux/in.h>
3097 AC_DEFINE(HAVE_LINUX_IN_H, 1, [linux/in.h])
3102 AC_CHECK_HEADERS([linux/if_packet.h])
3104 AC_MSG_CHECKING(for struct in_pktinfo)
3106 #ifdef HAVE_LINUX_IN_H
3107 #include <sys/socket.h>
3108 #include <linux/in.h>
3110 #include <netinet/in.h>
3113 struct in_pktinfo pktinfo;
3116 AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo])
3121 AC_MSG_CHECKING(for struct ip_mreqn)
3124 #include <sys/socket.h>
3125 #include <linux/in.h>
3127 #include <netinet/in.h>
3130 struct ip_mreqn mreqn;
3133 AC_DEFINE(HAVE_IP_MREQN, 1, struct ip_mreqn)
3138 if test x$host_darwin = xno; then
3139 AC_CHECK_TYPES([struct flock64], [AC_DEFINE(HAVE_FLOCK64, 1, struct flock64)], , [#include <fcntl.h>])
3142 AC_CHECK_DECL(O_CLOEXEC, [AC_DEFINE(HAVE_O_CLOEXEC, 1, [O_CLOEXEC])], [], [[#include <fcntl.h>]])
3143 AC_CHECK_DECL(F_DUPFD_CLOEXEC, [AC_DEFINE(HAVE_F_DUPFD_CLOEXEC, 1, [F_DUPFD_CLOEXEC])], [], [[#include <fcntl.h>]])
3145 # AC_CHECK_FUNC(getifaddrs, [AC_DEFINE(HAVE_GETIFADDRS, 1, [getifaddrs])]) # already done above
3147 AC_CHECK_FUNC(lseek64, [AC_DEFINE(HAVE_LSEEK64, 1, [lseek64])])
3148 AC_CHECK_FUNC(mmap64, [AC_DEFINE(HAVE_MMAP64, 1, [mmap64])])
3149 AC_CHECK_FUNC(ftruncate64, [AC_DEFINE(HAVE_FTRUNCATE64, 1, [ftruncate64])])
3150 AC_CHECK_FUNC(posix_fadvise64, [AC_DEFINE(HAVE_POSIX_FADVISE64, 1, [posix_fadvise64])])
3152 if test "x$mono_native_platform_ios" = "xno"; then
3153 # On iOS, `stat64()` is deprecated and there is no `struct stat64` and `stat()`
3154 # is either 32-bit or 64-bit based on the device / simulator that you're running on.
3155 AC_CHECK_FUNC(stat64, [AC_DEFINE(HAVE_STAT64, 1, [stat64])])
3158 AC_CHECK_DECL(pipe2, [AC_DEFINE(HAVE_PIPE2, 1, [pipe2])])
3159 AC_CHECK_FUNC(getmntinfo, [AC_DEFINE(HAVE_GETMNTINFO, 1, [getmntinfo])], [], [[#include <unistd.h>]])
3160 AC_CHECK_FUNC(strcpy_s, [AC_DEFINE(HAVE_STRCPY_S, 1, [strcpy_s])])
3161 AC_CHECK_FUNC(strlcpy, [AC_DEFINE(HAVE_STRLCPY, 1, [strlcpy])])
3162 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
3163 AC_CHECK_FUNC(ioctl, [AC_DEFINE(HAVE_IOCTL, 1, [ioctl])])
3164 AC_CHECK_FUNC(sched_getaffinity, [AC_DEFINE(HAVE_SCHED_GETAFFINITY, 1, [sched_getaffinity])])
3165 AC_CHECK_FUNC(sched_setaffinity, [AC_DEFINE(HAVE_SCHED_SETAFFINITY, 1, [sched_setaffinity])])
3167 if test "x$platform_android" != "xyes"; then
3168 AC_CHECK_FUNC(arc4random_buf, [AC_DEFINE(HAVE_ARC4RANDOM_BUF, 1, [arc4random_buf])])
3171 AC_CHECK_DECL(TIOCGWINSZ, [AC_DEFINE(HAVE_TIOCGWINSZ, 1, [TIOCGWINSZ])], [], [[#include <sys/ioctl.h>]])
3172 AC_CHECK_FUNC(tcgetattr, [AC_DEFINE(HAVE_TCGETATTR, 1, [tcgetattr])])
3173 AC_CHECK_FUNC(tcsetattr, [AC_DEFINE(HAVE_TCSETATTR, 1, [tcsetattr])])
3174 AC_CHECK_DECL(ECHO, [AC_DEFINE(HAVE_ECHO, 1, [ECHO])], [], [[#include <termios.h>]])
3175 AC_CHECK_DECL(ICANON, [AC_DEFINE(HAVE_ICANON, 1, [ICANON])], [], [[#include <termios.h>]])
3176 AC_CHECK_DECL(TCSANOW, [AC_DEFINE(HAVE_TCSANOW, 1, [TCSANOW])], [], [[#include <termios.h>]])
3178 AC_CHECK_MEMBER(struct stat.st_birthtimespec, [AC_DEFINE(HAVE_STAT_BIRTHTIME, 1, [struct stat.st_birthtime])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3179 AC_CHECK_MEMBER(struct stat.st_atimespec, [AC_DEFINE(HAVE_STAT_TIMESPEC, 1, [struct stat.st_atimespec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3180 AC_CHECK_MEMBER(struct stat.st_atim, [AC_DEFINE(HAVE_STAT_TIM, 1, [struct stat.st_atim])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3181 AC_CHECK_MEMBER(struct stat.st_atimensec, [AC_DEFINE(HAVE_STAT_NSEC, 1, [struct stat.st_atimensec])], [], [[#include <sys/types.h>], [#include <sys/stat.h>]])
3182 AC_CHECK_MEMBER(struct dirent.d_namlen, [AC_DEFINE(HAVE_DIRENT_NAME_LEN, 1, [struct dirent.d_namlen])], [], [[#include <dirent.h>]])
3183 AC_CHECK_MEMBER(struct statfs.f_fstypename, [AC_DEFINE(HAVE_STATFS_FSTYPENAME, 1, [struct statfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3184 AC_CHECK_MEMBER(struct statvfs.f_fstypename, [AC_DEFINE(HAVE_STATVFS_FSTYPENAME, 1, [struct statvfs.f_fstypename])], [], [[#include <sys/mount.h>]])
3186 AC_MSG_CHECKING(for struct statfs)
3188 #if defined(HAVE_STATFS_FSTYPENAME) || defined(HAVE_STATVFS_FSTYPENAME)
3189 #include <sys/mount.h>
3191 #include <sys/statfs.h>
3197 AC_DEFINE(HAVE_STATFS, 1, [struct statfs])
3202 if test "x$ac_cv_func_strerror_r_char_p" = "xyes" ; then
3203 AC_DEFINE(HAVE_GNU_STRERROR_R, 1, [char* strerror(int errnum, char *buf, size_t buflen)])
3206 AC_MSG_CHECKING(for readdir_r)
3211 struct dirent* entry;
3212 struct dirent* result;
3213 readdir_r(dir, entry, &result);
3216 AC_DEFINE(HAVE_READDIR_R, 1, [readdir_r])
3221 AC_MSG_CHECKING(for kevent with void *data)
3223 #include <sys/types.h>
3224 #include <sys/event.h>
3226 struct kevent event;
3228 EV_SET(&event, 0, EVFILT_READ, 0, 0, 0, data);
3231 AC_DEFINE(KEVENT_HAS_VOID_UDATA, 1, [kevent with void *data])
3236 AC_CHECK_MEMBER(struct fd_set.fds_bits, [AC_DEFINE(HAVE_FDS_BITS, 1, [struct fd_set.fds_bits])], [], [[#include <sys/select.h>]])
3237 AC_CHECK_MEMBER(struct fd_set.__fds_bits, [AC_DEFINE(HAVE_PRIVATE_FDS_BITS, 1, [struct fd_set.__fds_bits])], [], [[#include <sys/select.h>]])
3239 AC_MSG_CHECKING(for sendfile with 4 arguments)
3241 #include <sys/sendfile.h>
3243 #if defined(TARGET_ANDROID)
3244 #if !defined(__ANDROID_API__)
3245 #error No definition for __ANDROID_API__ even though we're targeting TARGET_ANDROID
3246 #elif __ANDROID_API__ < 21
3247 #error sendfile is not supported on this Android API level
3251 int result = sendfile(0, 0, 0, 0);
3254 AC_DEFINE(HAVE_SENDFILE_4, 1, [sendfile with 4 arguments])
3259 ORIG_CFLAGS="$CFLAGS"
3260 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3262 AC_MSG_CHECKING(for sendfile with 6 arguments)
3265 #include <sys/types.h>
3266 #include <sys/socket.h>
3267 #include <sys/uio.h>
3269 int result = sendfile(0, 0, 0, NULL, NULL, 0);
3272 AC_DEFINE(HAVE_SENDFILE_6, 1, [sendfile with 6 arguments])
3277 CFLAGS="$ORIG_CFLAGS"
3279 AC_CHECK_FUNC(fcopyfile, [AC_DEFINE(HAVE_FCOPYFILE, 1, [fcopyfile])])
3280 AC_CHECK_FUNC(epoll_create1, [AC_DEFINE(HAVE_EPOLL, 1, [epoll_create1])])
3281 AC_CHECK_FUNC(accept4, [AC_DEFINE(HAVE_ACCEPT4, 1, [accept4])])
3282 AC_CHECK_FUNC(kqueue, [AC_DEFINE(HAVE_KQUEUE, 1, [kqueue])])
3284 ORIG_CFLAGS="$CFLAGS"
3285 CFLAGS="$CFLAGS -Werror=sign-conversion"
3287 AC_MSG_CHECKING(for getnameinfo with signed flags)
3289 #include <sys/types.h>
3292 const struct sockaddr *addr;
3299 int result = getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3302 AC_DEFINE(HAVE_GETNAMEINFO_SIGNED_FLAGS, 1, [getnameinfo with signed flags])
3307 CFLAGS="$ORIG_CFLAGS"
3309 if test "x$host_linux" = "xyes"; then
3310 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 1, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3312 AC_DEFINE(HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO, 0, [HAVE_SUPPORT_FOR_DUAL_MODE_IPV4_PACKET_INFO])
3315 # HAVE_CLOCK_MONOTONIC check already done above
3316 # HAVE_CLOCK_REALTIME check already done above
3317 # HAVE_MACH_ABSOLUTE_TIME check already done above
3318 # HAVE_MACH_TIMEBASE_INFO check already done above
3319 # HAVE_FUTIMES check already done above
3320 # HAVE_FUTIMENS check already done above
3322 ORIG_CFLAGS="$CFLAGS"
3323 CFLAGS="$CFLAGS -Werror=sign-conversion"
3325 AC_MSG_CHECKING(for bind with unsigned addrlen)
3327 #include <sys/socket.h>
3330 struct sockaddr* addr;
3332 bind(fd, addr, addrLen);
3335 AC_DEFINE(BIND_ADDRLEN_UNSIGNED, 1, [bind with unsigned addrlen])
3340 AC_MSG_CHECKING(for struct ipv6_mreq with unsigned ipv6mr_interface)
3342 #include <netinet/in.h>
3343 #include <netinet/tcp.h>
3345 struct ipv6_mreq opt;
3346 unsigned int index = 0;
3347 opt.ipv6mr_interface = index;
3350 AC_DEFINE(IPV6MR_INTERFACE_UNSIGNED, 1, [struct ipv6_mreq with unsigned ipv6mr_interface])
3355 AC_MSG_CHECKING(for inotify_rm_watch with unsigned wd)
3357 #include <sys/inotify.h>
3361 int result = inotify_rm_watch(fd, wd);
3364 AC_DEFINE(INOTIFY_RM_WATCH_WD_UNSIGNED, 1, [inotify_rm_watch with unsigned wd])
3369 CFLAGS="$ORIG_CFLAGS"
3371 AC_MSG_CHECKING(for shm_open that works well enough with mmap)
3372 if test "x$ac_cv_func_shm_open" = "xno" -o "x$ac_cv_func_shm_open_working_with_mmap" = "xno" ; then
3374 elif test "x$cross_compiling" = "xyes"; then
3375 AC_MSG_RESULT(cross compiling, assuming yes)
3376 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3379 #include <sys/mman.h>
3385 int fd = shm_open("/mono_configure_shm_open", O_CREAT | O_RDWR, 0777);
3389 shm_unlink("/mono_configure_shm_open");
3391 // NOTE: PROT_EXEC and MAP_PRIVATE don't work well with shm_open
3392 // on at least the current version of Mac OS X
3394 if (mmap(NULL, 1, PROT_EXEC, MAP_PRIVATE, fd, 0) == MAP_FAILED)
3401 AC_DEFINE(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP, 1, [shm_open that works well enough with mmap])
3407 AC_MSG_CHECKING(for getpriority with int who)
3409 #include <sys/resource.h>
3413 int result = getpriority(which, who);
3416 AC_DEFINE(PRIORITY_REQUIRES_INT_WHO, 1, [getpriority with int who])
3421 AC_MSG_CHECKING(for kevent with int parameters)
3423 #include <sys/types.h>
3424 #include <sys/event.h>
3427 const struct kevent* chagelist;
3429 struct kevent* eventlist;
3431 const struct timespec* timeout;
3432 int result = kevent(kg, chagelist, nchanges, eventlist, nevents, timeout);
3435 AC_DEFINE(KEVENT_REQUIRES_INT_PARAMS, 1, [kevent with int parameters])
3440 AC_CHECK_FUNCS(mkstemps)
3441 # AC_CHECK_FUNCS(mkstemp) # already done above
3443 if test "x$ac_cv_func_mkstemps" != "xyes" -a "x$ac_cv_func_mkstemp" != "xyes"; then
3444 AC_MSG_ERROR([Cannot find mkstemps or mkstemp on this platform])
3447 AC_MSG_CHECKING(for tcp/var.h)
3449 #include <sys/types.h>
3450 #include <sys/socketvar.h>
3451 #include <netinet/ip.h>
3452 #include <netinet/tcp.h>
3453 #include <netinet/tcp_var.h>
3457 AC_DEFINE(HAVE_TCP_VAR_H, 1, [tcp/var.h])
3462 AC_CHECK_HEADERS([sys/cdefs.h])
3464 AC_MSG_CHECKING(for TCPSTATE enum in netinet/tcp.h)
3466 #ifdef HAVE_SYS_CDEFS_H
3467 #include <sys/cdefs.h>
3469 #include <netinet/tcp.h>
3471 int result = TCP_ESTABLISHED;
3474 AC_DEFINE(HAVE_TCP_H_TCPSTATE_ENUM, 1, [TCPSTATE enum in netinet/tcp.h])
3479 AC_CHECK_DECL(TCPS_ESTABLISHED, [AC_DEFINE(HAVE_TCP_FSM_H, 1, [HAVE_TCP_FSM_H])], [], [[#include <netinet/tcp_fsm.h>]])
3481 AC_MSG_CHECKING(for struct rt_msghdr)
3483 #include <sys/types.h>
3484 #include <net/route.h>
3489 AC_DEFINE(HAVE_RT_MSGHDR, 1, [struct rt_msghdr])
3494 AC_CHECK_HEADERS([sys/sysctl.h])
3495 AC_CHECK_HEADERS([linux/rtnetlink.h])
3497 AC_CHECK_FUNC(getpeereid, [AC_DEFINE(HAVE_GETPEEREID, 1, [getpeereid])])
3498 #AC_CHECK_FUNC(getdomainname, [AC_DEFINE(HAVE_GETDOMAINNAME, 1, [getdomainname])]) # already done above
3499 AC_CHECK_FUNC(uname, [AC_DEFINE(HAVE_UNAME, 1, [uname])])
3501 ORIG_CFLAGS="$CFLAGS"
3502 CFLAGS="$CFLAGS -Werror=shorten-64-to-32"
3504 AC_MSG_CHECKING(for getdomainname with size_t namelen)
3508 size_t namelen = 20;
3510 int result = getdomainname(name, namelen);
3513 AC_DEFINE(HAVE_GETDOMAINNAME_SIZET, 1, [getdomainname with size_t namelen])
3518 CFLAGS="$ORIG_CFLAGS"
3520 AC_CHECK_FUNC(inotify_init, [AC_DEFINE(HAVE_INOTIFY_INIT, 1, [inotify_init])])
3521 AC_CHECK_FUNC(inotify_add_watch, [AC_DEFINE(HAVE_INOTIFY_ADD_WATCH, 1, [inotify_add_watch])])
3522 AC_CHECK_FUNC(inotify_rm_watch, [AC_DEFINE(HAVE_INOTIFY_RM_WATCH, 1, [inotify_rm_watch])])
3524 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
3525 AC_DEFINE(HAVE_INOTIFY, 1, [HAVE_INOTIFY])
3526 elif test "x$host_linux" = "xyes"; then
3527 AC_MSG_ERROR([Cannot find inotify functions on a Linux platform.])
3530 # HAVE_CURLM_ADDED_ALREADY check skipped because we don't use libcurl in mono
3531 # HAVE_CURL_HTTP_VERSION_2TLS check skipped because we don't use libcurl in mono
3532 # HAVE_CURLPIPE_MULTIPLEX check skipped because we don't use libcurl in mono
3533 # HAVE_CURL_SSLVERSION_TLSv1_012 check skipped because we don't use libcurl in mono
3536 AC_MSG_CHECKING(for GSS/GSS.h)
3538 #include <GSS/GSS.h>
3542 AC_DEFINE(HAVE_GSSFW_HEADERS, 1, [GSS/GSS.h])
3543 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3549 AC_MSG_CHECKING(for gssapi/gssapi_ext.h)
3551 #include <gssapi/gssapi_ext.h>
3560 AC_MSG_CHECKING(for GSS_SPNEGO_MECHANISM)
3562 #include <gssapi/gssapi_ext.h>
3563 #include <gssapi/gssapi_krb5.h>
3564 gss_OID_set_desc gss_mech_spnego_OID_set_desc = {.count = 1, .elements = GSS_SPNEGO_MECHANISM};
3568 AC_DEFINE(HAVE_GSS_SPNEGO_MECHANISM, 1, [GSS_SPNEGO_MECHANISM])
3573 AM_CONDITIONAL(ENABLE_GSS, test x$enable_gss = xyes)
3575 AC_CHECK_HEADERS([crt_externs.h])
3577 AC_MSG_CHECKING(for _NSGetEnviron)
3579 #include <crt_externs.h>
3581 char **result = *(_NSGetEnviron());
3584 AC_DEFINE(HAVE_NSGETENVIRON, 1, [_NSGetEnviron])
3589 AC_CHECK_DECL(IN_EXCL_UNLINK, [AC_DEFINE(HAVE_IN_EXCL_UNLINK, 1, [IN_EXCL_UNLINK])], [], [[#include <sys/inotify.h>]])
3591 # *** End of Mono.Native checks ***
3593 AM_CONDITIONAL(ENABLE_GSS, false)
3595 dnl *********************************
3596 dnl *** Checks for Windows compilation ***
3597 dnl *********************************
3598 AC_CHECK_HEADERS(winternl.h)
3600 jdk_headers_found=no
3601 AC_CHECK_LIB(ws2_32, main, LIBS="$LIBS -lws2_32", AC_ERROR(bad mingw install?))
3602 AC_CHECK_LIB(psapi, main, LIBS="$LIBS -lpsapi", AC_ERROR(bad mingw install?))
3603 AC_CHECK_LIB(ole32, main, LIBS="$LIBS -lole32", AC_ERROR(bad mingw install?))
3604 AC_CHECK_LIB(winmm, main, LIBS="$LIBS -lwinmm", AC_ERROR(bad mingw install?))
3605 AC_CHECK_LIB(oleaut32, main, LIBS="$LIBS -loleaut32", AC_ERROR(bad mingw install?))
3606 AC_CHECK_LIB(advapi32, main, LIBS="$LIBS -ladvapi32", AC_ERROR(bad mingw install?))
3607 AC_CHECK_LIB(version, main, LIBS="$LIBS -lversion", AC_ERROR(bad mingw install?))
3609 dnl *********************************
3610 dnl *** Check for struct ip_mreqn ***
3611 dnl *********************************
3612 AC_MSG_CHECKING(for struct ip_mreqn)
3613 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3614 struct ip_mreqn mreq;
3615 mreq.imr_address.s_addr = 0;
3617 # Yes, we have it...
3619 AC_DEFINE(HAVE_STRUCT_IP_MREQN)
3621 # We'll just have to try and use struct ip_mreq
3623 AC_MSG_CHECKING(for struct ip_mreq)
3624 AC_TRY_COMPILE([#include <ws2tcpip.h>], [
3625 struct ip_mreq mreq;
3626 mreq.imr_interface.s_addr = 0;
3628 # Yes, we have it...
3630 AC_DEFINE(HAVE_STRUCT_IP_MREQ)
3632 # No multicast support
3637 dnl **********************************
3638 dnl *** Check for getaddrinfo ***
3639 dnl **********************************
3640 AC_MSG_CHECKING(for getaddrinfo)
3643 #include <winsock2.h>
3644 #include <ws2tcpip.h>
3646 getaddrinfo(NULL,NULL,NULL,NULL);
3648 # Yes, we have it...
3650 AC_DEFINE(HAVE_GETADDRINFO, 1, [Have getaddrinfo])
3655 dnl **********************************
3656 dnl *** Check for gethostbyname ***
3657 dnl **********************************
3658 AC_MSG_CHECKING(for gethostbyname)
3661 #include <winsock2.h>
3662 #include <ws2tcpip.h>
3664 gethostbyname(NULL);
3666 # Yes, we have it...
3668 AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [Have gethostbyname])
3673 dnl **********************************
3674 dnl *** Check for getprotobyname ***
3675 dnl **********************************
3676 AC_MSG_CHECKING(for getprotobyname)
3679 #include <winsock2.h>
3680 #include <ws2tcpip.h>
3682 getprotobyname(NULL);
3684 # Yes, we have it...
3686 AC_DEFINE(HAVE_GETPROTOBYNAME, 1, [Have getprotobyname])
3691 dnl **********************************
3692 dnl *** Check for getnameinfo ***
3693 dnl **********************************
3694 AC_MSG_CHECKING(for getnameinfo)
3697 #include <winsock2.h>
3698 #include <ws2tcpip.h>
3700 getnameinfo (NULL, 0, NULL, 0, NULL, 0, 0);
3702 # Yes, we have it...
3704 AC_DEFINE(HAVE_GETNAMEINFO, 1, [Have getnameinfo])
3709 dnl **********************************
3710 dnl *** Check for inet_ntop ***
3711 dnl **********************************
3712 AC_MSG_CHECKING(for inet_ntop)
3715 #include <winsock2.h>
3716 #include <ws2tcpip.h>
3718 inet_ntop (0, NULL, NULL, 0);
3720 # Yes, we have it...
3722 AC_DEFINE(HAVE_INET_NTOP, 1, [Have inet_ntop])
3727 dnl **********************************
3728 dnl *** Check for inet_pton ***
3729 dnl **********************************
3730 AC_MSG_CHECKING(for inet_pton)
3733 #include <winsock2.h>
3734 #include <ws2tcpip.h>
3739 inet_pton (0, NULL, NULL);
3741 # Yes, we have it...
3743 AC_DEFINE(HAVE_INET_PTON, 1, [Have inet_pton])
3748 AC_CHECK_DECLS(InterlockedExchange64, [], [], [[#include <windows.h>]])
3749 AC_CHECK_DECLS(InterlockedCompareExchange64, [], [], [[#include <windows.h>]])
3750 AC_CHECK_DECLS(InterlockedDecrement64, [], [], [[#include <windows.h>]])
3751 AC_CHECK_DECLS(InterlockedIncrement64, [], [], [[#include <windows.h>]])
3752 AC_CHECK_DECLS(InterlockedAdd, [], [], [[#include <windows.h>]])
3753 AC_CHECK_DECLS(InterlockedAdd64, [], [], [[#include <windows.h>]])
3754 AC_CHECK_DECLS(__readfsdword, [], [], [[#include <windows.h>]])
3758 AC_MSG_CHECKING(for socklen_t)
3760 #include <sys/types.h>
3761 #include <sys/socket.h>
3765 ac_cv_c_socklen_t=yes
3766 AC_DEFINE(HAVE_SOCKLEN_T, 1, [Have socklen_t])
3772 AC_CHECK_FUNCS(execvp)
3774 dnl ****************************
3775 dnl *** Look for /dev/random ***
3776 dnl ****************************
3778 AC_MSG_CHECKING([if usage of random device is requested])
3779 AC_ARG_ENABLE(dev-random,
3780 [ --disable-dev-random disable the use of the random device (enabled by default)],
3781 try_dev_random=$enableval, try_dev_random=yes)
3783 AC_MSG_RESULT($try_dev_random)
3787 dnl IBM i does not have /dev/random, use unblocking only
3790 NAME_DEV_RANDOM="/dev/urandom"
3793 dnl Win32 does not have /dev/random, they have their own method...
3795 *-mingw*|*-*-cygwin*)
3796 ac_cv_have_dev_random=no
3799 dnl Everywhere else, it's /dev/random
3802 NAME_DEV_RANDOM="/dev/random"
3806 AC_DEFINE_UNQUOTED(NAME_DEV_RANDOM, "$NAME_DEV_RANDOM", [Name of /dev/random])
3808 dnl Now check if the device actually exists
3810 if test "x$try_dev_random" = "xyes"; then
3811 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
3812 [if test -r "$NAME_DEV_RANDOM" ; then
3813 ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
3814 if test "x$ac_cv_have_dev_random" = "xyes"; then
3815 AC_DEFINE(HAVE_CRYPT_RNG, 1, [Have /dev/random])
3818 AC_MSG_CHECKING(for random device)
3819 ac_cv_have_dev_random=no
3820 AC_MSG_RESULT(has been disabled)
3823 if test "x$host_win32" = "xyes"; then
3824 AC_DEFINE(HAVE_CRYPT_RNG)
3827 if test "x$ac_cv_have_dev_random" = "xno" \
3828 && test "x$host_win32" = "xno"; then
3831 *** A system-provided entropy source was not found on this system.
3832 *** Because of this, the System.Security.Cryptography random number generator
3833 *** will throw a NotImplemented exception.
3835 *** If you are seeing this message, and you know your system DOES have an
3836 *** entropy collection in place, please report an issue on GitHub and
3837 *** provide information about the system and how to access the random device.
3839 *** Otherwise you can install either egd or prngd and set the environment
3840 *** variable MONO_EGD_SOCKET to point to the daemon's socket to use that.
3844 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)
3846 AC_MSG_CHECKING([if big-arrays are to be enabled])
3847 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)
3848 if test "x$enable_big_arrays" = "xyes" ; then
3849 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3850 AC_DEFINE(MONO_BIG_ARRAYS,1,[Enable the allocation and indexing of arrays greater than Int32.MaxValue])
3852 AC_MSG_ERROR([The allocation and indexing of arrays greater than Int32.MaxValue is not supported on this platform.])
3855 AC_MSG_RESULT($enable_big_arrays)
3861 AC_ARG_ENABLE(dtrace,[ --enable-dtrace Enable DTrace probes], enable_dtrace=$enableval, enable_dtrace=$has_dtrace)
3863 if test "x$enable_dtrace" = "xyes"; then
3864 if test "x$has_dtrace" = "xno"; then
3865 AC_MSG_ERROR([DTrace probes are not supported on this platform.])
3867 AC_PATH_PROG(DTRACE, [dtrace], [no], [$PATH:/usr/sbin])
3868 if test "x$DTRACE" = "xno"; then
3869 AC_MSG_RESULT([dtrace utility not found, dtrace support disabled.])
3871 elif ! $DTRACE -h -s $srcdir/data/mono.d > /dev/null 2>&1; then
3872 AC_MSG_RESULT([dtrace doesn't support -h option, dtrace support disabled.])
3878 if test "x$enable_dtrace" = "xyes"; then
3879 AC_DEFINE(ENABLE_DTRACE, 1, [Enable DTrace probes])
3881 if test "x$ac_cv_sizeof_void_p" = "x8"; then
3884 DTRACEFLAGS="-arch ppc64"
3887 DTRACEFLAGS="-arch x86_64"
3896 DTRACEFLAGS="-arch ppc"
3899 DTRACEFLAGS="-arch i386"
3906 AC_SUBST(DTRACEFLAGS)
3912 AC_CHECK_HEADERS([sys/sdt.h])
3914 AM_CONDITIONAL(ENABLE_DTRACE, [test x$enable_dtrace = xyes])
3915 AM_CONDITIONAL(DTRACE_G_REQUIRED, [test x$dtrace_g = xyes])
3917 dnl **************************
3918 dnl *** AOT cross offsets ***
3919 dnl **************************
3921 AC_ARG_WITH(cross-offsets, [ --with-cross-offsets=<offsets file path> Explicit AOT cross offsets file],
3922 AC_DEFINE_UNQUOTED(MONO_OFFSETS_FILE, "$withval", [AOT cross offsets file]))
3928 AC_ARG_ENABLE(llvm,[ --enable-llvm Enable the LLVM back-end], enable_llvm=$enableval, enable_llvm=default)
3929 AC_ARG_ENABLE(loadedllvm,[ --enable-loadedllvm Load the LLVM back-end dynamically], enable_llvm=$enableval && enable_loadedllvm=$enableval, enable_loadedllvm=no)
3930 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)
3931 AC_ARG_ENABLE(llvm-runtime,[ --enable-llvm-runtime Enable runtime support for llvmonly code], enable_llvm_runtime=$enableval, enable_llvm_runtime=no)
3932 AC_ARG_ENABLE(llvm-asserts,[ --enable-llvm-asserts Enable llvm asserts (option to LLVM in CMake)], enable_llvm_asserts=$enableval, enable_llvm_asserts=no)
3934 AC_ARG_WITH(llvm, [ --with-llvm=<llvm prefix> Enable the LLVM back-end], enable_llvm=yes,)
3936 if test "x$enable_llvm" = "xdefault"; then
3937 enable_llvm=$enable_llvm_default
3940 enable_llvm_msvc_only="no"
3941 if test "x$enable_llvm" = "xyes"; then
3942 if test "x$host_win32" = "xyes"; then
3943 if test "x$cross_compiling" = "xno"; then
3946 AC_MSG_WARN("LLVM for host=Windows and target=Windows is only supported on x64 MSVC builds. Disabling LLVM for GCC build.")
3947 enable_llvm_msvc_only="yes"
3950 AC_MSG_ERROR("LLVM for host=Windows and target=Windows is only supported for x64 builds.")
3954 if test "x$enable_loadedllvm" = "xyes"; then
3955 AC_MSG_WARN("Loadable LLVM currently not supported on Windows. Disabling feature.")
3956 enable_loadedllvm=no
3962 if test "x$enable_llvm" = "xyes"; then
3963 if test "x$with_llvm" != "x"; then
3964 EXTERNAL_LLVM_CONFIG=$with_llvm/bin/llvm-config
3965 if test x$host_win32 = xyes; then
3966 EXTERNAL_LLVM_CONFIG=$EXTERNAL_LLVM_CONFIG.exe
3968 if test ! -x $EXTERNAL_LLVM_CONFIG; then
3969 AC_MSG_ERROR([LLVM executable $EXTERNAL_LLVM_CONFIG not found.])
3972 if test x$host_win32 = xyes; then
3973 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config.exe, no)
3975 AC_PATH_PROG(EXTERNAL_LLVM_CONFIG, llvm-config, no)
3977 if test "x$EXTERNAL_LLVM_CONFIG" = "xno"; then
3982 LLVM_CODEGEN_LIBS="x86codegen"
3985 LLVM_CODEGEN_LIBS="armcodegen"
3988 LLVM_CODEGEN_LIBS="aarch64codegen"
3991 LLVM_CODEGEN_LIBS="powerpccodegen"
3994 if test "x$host" != "x$target"; then
3995 # No need for jit libs
3999 AC_SUBST(LLVM_CODEGEN_LIBS)
4000 AC_SUBST(EXTERNAL_LLVM_CONFIG)
4002 if test "x$host_win32" = "xyes" && test "x$cross_compiling" = "xno" && test "x$internal_llvm" = "xno"; then
4003 EXTERNAL_LLVM_CONFIG_WIN32=$(cygpath -m $EXTERNAL_LLVM_CONFIG)
4004 AC_SUBST(EXTERNAL_LLVM_CONFIG_WIN32)
4006 if test "x$enable_llvm_msvc_only" != "xyes"; then
4007 AC_DEFINE(ENABLE_LLVM, 1, [Enable the LLVM back end])
4009 AC_DEFINE(ENABLE_LLVM_MSVC_ONLY, 1, [Enable the LLVM back end])
4013 # AC_DEFINE necessary for correct restore behavior on Linux
4014 AM_CONDITIONAL(INTERNAL_LLVM, [test "x$internal_llvm" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4015 if test "x$internal_llvm" != "xno"; then
4016 if test "x$enable_llvm_msvc_only" != "xyes"; then
4017 AC_DEFINE(INTERNAL_LLVM, 1, [LLVM used is being build during mono build])
4019 AC_DEFINE(INTERNAL_LLVM_MSVC_ONLY, 1, [LLVM used is being build during mono build])
4023 AM_CONDITIONAL(INTERNAL_LLVM_ASSERTS, [test "x$enable_llvm_asserts" != "xno" && test "x$enable_llvm_msvc_only" != "xyes"])
4024 if test "x$enable_llvm_asserts" != "xno"; then
4025 if test "x$enable_llvm_msvc_only" != "xyes"; then
4026 AC_DEFINE(INTERNAL_LLVM_ASSERTS, 1, [Build LLVM with assertions])
4028 AC_DEFINE(INTERNAL_LLVM_ASSERTS_MSVC_ONLY, 1, [Build LLVM with assertions])
4032 AM_CONDITIONAL(ENABLE_LLVM, [test x$enable_llvm = xyes && test x$enable_llvm_msvc_only != xyes])
4034 AM_CONDITIONAL(LOADED_LLVM, [test x$enable_loadedllvm = xyes && test x$enable_llvm_msvc_only != xyes])
4035 if test "x$enable_loadedllvm" = "xyes"; then
4036 if test "x$enable_llvm_msvc_only" != "xyes"; then
4037 AC_DEFINE(MONO_LLVM_LOADED, 1, [The LLVM back end is dynamically loaded])
4041 if test "x$enable_llvm" = "xyes"; then
4042 enable_llvm_runtime=yes
4045 AM_CONDITIONAL(ENABLE_LLVM_RUNTIME, [test x$enable_llvm_runtime = xyes && test x$enable_llvm_msvc_only != xyes])
4046 if test "x$enable_llvm_runtime" = "xyes"; then
4047 if test "x$enable_llvm_msvc_only" != "xyes"; then
4048 AC_DEFINE(ENABLE_LLVM_RUNTIME, 1, [Runtime support code for llvm enabled])
4050 AC_DEFINE(ENABLE_LLVM_RUNTIME_MSVC_ONLY, 1, [Runtime support code for llvm enabled])
4055 ACCESS_UNALIGNED="yes"
4059 SQLITE="libsqlite.so.0"
4060 SQLITE3="libsqlite3.so.0"
4062 GDKX11="libgdk-x11-2.0.so.0"
4063 GTKX11="libgtk-x11-2.0.so.0"
4064 XINERAMA="libXinerama.so.1"
4066 sizeof_register="SIZEOF_VOID_P"
4069 boehm_supported=true
4078 ACCESS_UNALIGNED="no"
4086 ACCESS_UNALIGNED="no"
4088 AC_MSG_CHECKING(for mips n32)
4090 #if _MIPS_SIM != _ABIN32
4107 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4112 # On solaris 10 x86, gcc prints a warning saying 'visibility attribute not supported on this configuration; ignored', but linking fails. A test case:
4113 # int astruct __attribute__ ((visibility ("hidden")));
4116 # void *p = &astruct;
4118 # gcc -fPIC --shared -o libfoo.so foo.c
4120 # foo.c:6: warning: visibility attribute not supported in this configuration; ignored
4121 # ld: fatal: relocation error: R_386_GOTOFF: file /var/tmp//ccxYR96k.o: symbol astruct: relocation must bind locally
4122 have_visibility_hidden=no
4125 have_visibility_hidden=no
4136 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4143 openbsd*|freebsd*|kfreebsd-gnu*)
4150 x86_64-*-* | amd64-*-*)
4153 if test "x$ac_cv_sizeof_void_p" = "x4"; then
4154 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4161 BTLS_PLATFORM=x86_64
4162 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4167 BTLS_PLATFORM=x86_64
4168 boehm_supported=false
4170 openbsd*|freebsd*|kfreebsd-gnu*)
4173 BTLS_PLATFORM=x86_64
4177 BTLS_PLATFORM=x86_64
4182 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4188 ACCESS_UNALIGNED="no"
4195 if test x"$GCC" = xyes; then
4196 # We don't support v8 cpus
4197 CFLAGS="$CFLAGS -Wno-cast-align -mcpu=v9"
4199 if test x"$AR" = xfalse; then
4200 AC_MSG_ERROR([The required utility 'ar' is not found in your PATH. Usually it can be found in /usr/ccs/bin.])
4203 *-mingw*|*-*-cygwin*)
4204 # When this is enabled, it leads to very strange crashes at runtime (gcc-3.4.4)
4205 have_visibility_hidden=no
4209 # Old Boehm fails to compile for x86_64-mingw.
4210 # It is trivial to fix, but just silently drop it.
4211 boehm_supported=false
4215 macppc-*-openbsd* | powerpc*-*-linux* | powerpc-*-openbsd* | \
4216 powerpc-*-sysv* | powerpc-*-darwin* | powerpc-*-netbsd* | \
4217 powerpc-*-freebsd* | powerpc*-*-aix* | powerpc*-*-os400* )
4218 if test "x$ac_cv_sizeof_void_p" = "x8"; then
4220 CPPFLAGS="$CPPFLAGS -D__mono_ppc__ -D__mono_ppc64__"
4221 if ! (echo $CC | grep -q -- 'clang'); then
4222 CFLAGS="$CFLAGS -mminimal-toc"
4226 CPPFLAGS="$CPPFLAGS -D__mono_ppc__"
4232 BTLS_PLATFORM=powerpc
4233 dnl on AIX/PASE, shared libraries can be inside archives
4234 dnl if they are, we specify them by lib.a(lib.so)
4235 dnl we may hardcode 64-bit names at times, but we don't do 32-bit AIX, so
4236 LIBC="libc.a(shr_64.o)"
4237 INTL="libintl.a(libintl.so.8)"
4241 BTLS_PLATFORM=powerpc
4250 ACCESS_UNALIGNED="no"
4251 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4257 ACCESS_UNALIGNED="no"
4258 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4263 ACCESS_UNALIGNED="no"
4265 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4268 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4270 arm*-linux*-gnueabi)
4271 BTLS_PLATFORM=armsoft
4278 ACCESS_UNALIGNED="no"
4279 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4281 aarch64-*darwin*ilp32)
4284 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4286 # assuming no other target other than watchOS is using aarch64*darwin triple
4290 # https://lkml.org/lkml/2012/7/15/133
4293 boehm_supported=false
4296 BTLS_PLATFORM=aarch64
4297 AC_CHECK_HEADER(stdalign.h,[],[BTLS_SUPPORTED=no])
4302 ACCESS_UNALIGNED="yes"
4305 CFLAGS="$CFLAGS -mbackchain -D__USE_STRING_INLINES"
4312 BTLS_PLATFORM=riscv32
4314 boehm_supported=false
4321 BTLS_PLATFORM=riscv64
4323 boehm_supported=false
4329 if test "x$host" != "x$target"; then
4330 AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
4332 enable_support_build=no
4334 # Can't use tls, since it depends on the runtime detection of tls offsets
4335 # in mono-compiler.h
4342 AC_DEFINE(TARGET_WASM, 1, [Target wasm])
4346 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4350 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4354 powerpc64-ps3-linux-gnu)
4356 arch_target=powerpc64
4357 AC_DEFINE(TARGET_PS3, 1, [...])
4358 # It would be better to just use TARGET_POWERPC64, but lots of code already
4360 AC_DEFINE(__mono_ppc64__, 1, [...])
4361 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4363 target_byte_order=G_BIG_ENDIAN
4365 powerpc64-xbox360-linux-gnu)
4367 arch_target=powerpc64
4368 AC_DEFINE(TARGET_XBOX360, 1, [...])
4369 # It would be better to just use TARGET_POWERPC64, but lots of code already
4372 target_byte_order=G_BIG_ENDIAN
4376 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4380 CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
4393 AC_DEFINE(TARGET_PS4, 1, [...])
4394 AC_DEFINE(DISABLE_HW_TRAPS, 1, [...])
4395 CPPFLAGS="$CPPFLAGS"
4398 aarch64*darwin*_ilp32)
4400 AC_DEFINE(MONO_ARCH_ILP32, 1, [64 bit mode with 4 byte longs and pointers])
4401 AC_DEFINE(TARGET_WATCHOS, 1, [...])
4408 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4409 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4416 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4417 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4423 AC_MSG_ERROR([Cross compiling is not supported for target $target])
4431 AC_DEFINE(TARGET_ANDROID, 1, [...])
4438 AC_DEFINE(TARGET_WASM, 1, [...])
4442 AC_DEFINE(TARGET_X86, 1, [...])
4446 AC_DEFINE(TARGET_AMD64, 1, [...])
4450 AC_DEFINE(TARGET_ARM, 1, [...])
4452 ACCESS_UNALIGNED="no"
4455 AC_DEFINE(TARGET_ARM64, 1, [...])
4459 AC_DEFINE(TARGET_POWERPC, 1, [...])
4462 AC_DEFINE(TARGET_POWERPC, 1, [...])
4463 AC_DEFINE(TARGET_POWERPC64, 1, [...])
4466 AC_DEFINE(TARGET_S390X, 1, [...])
4469 AC_DEFINE(TARGET_MIPS, 1, [...])
4472 AC_DEFINE(TARGET_SPARC, 1, [...])
4475 AC_DEFINE(TARGET_SPARC64, 1, [...])
4478 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4479 AC_DEFINE([TARGET_RISCV32], [1], [Target is 32-bit RISC-V])
4482 AC_DEFINE([TARGET_RISCV], [1], [Target is RISC-V])
4483 AC_DEFINE([TARGET_RISCV64], [1], [Target is 64-bit RISC-V])
4488 *32* | ARM | X86 | POWERPC | MIPS | SPARC | WASM | ARM6432)
4489 target_sizeof_void_p=4
4492 target_sizeof_void_p=8
4495 AC_MSG_ERROR([unknown target])
4501 AC_DEFINE(HOST_WASM, 1, [...])
4504 AC_DEFINE(HOST_X86, 1, [...])
4507 AC_DEFINE(HOST_AMD64, 1, [...])
4510 AC_DEFINE(HOST_ARM, 1, [...])
4513 AC_DEFINE(HOST_ARM64, 1, [...])
4516 AC_DEFINE(HOST_POWERPC, 1, [...])
4519 AC_DEFINE(HOST_POWERPC, 1, [...])
4520 AC_DEFINE(HOST_POWERPC64, 1, [...])
4523 AC_DEFINE(HOST_S390X, 1, [...])
4526 AC_DEFINE(HOST_MIPS, 1, [...])
4529 AC_DEFINE(HOST_SPARC, 1, [...])
4532 AC_DEFINE(HOST_SPARC64, 1, [...])
4535 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4536 AC_DEFINE([HOST_RISCV32], [1], [Host is 32-bit RISC-V])
4539 AC_DEFINE([HOST_RISCV], [1], [Host is RISC-V])
4540 AC_DEFINE([HOST_RISCV64], [1], [Host is 64-bit RISC-V])
4544 MONO_ARCH_GSHAREDVT_SUPPORTED=0
4546 X86 | AMD64 | ARM | ARM64)
4547 MONO_ARCH_GSHAREDVT_SUPPORTED=1 # keep in sync with mini-{x86,amd64,arm,arm64}.h
4551 AM_CONDITIONAL(MONO_ARCH_GSHAREDVT_SUPPORTED, test $MONO_ARCH_GSHAREDVT_SUPPORTED = 1)
4552 AM_CONDITIONAL(TARGET_WASM, test $arch_target = wasm)
4558 AC_ARG_ENABLE(vtune,[ --enable-vtune Enable the VTUNE back-end], enable_vtune=$enableval, enable_vtune=no)
4559 AC_ARG_WITH(vtune, [ --with-vtune=<vtune prefix> Enable jit vtune profiling], enable_vtune=yes,)
4561 AM_CONDITIONAL(HAVE_VTUNE, test x$enable_vtune = xyes)
4563 if test "x$enable_vtune" = "xyes"; then
4564 if test "x$with_vtune" = "x"; then
4565 VTUNE_PATH=/opt/intel/vtune_amplifier_xe
4567 VTUNE_PATH=$with_vtune
4569 VTUNE_INCLUDE=$VTUNE_PATH/include
4572 VTUNE_LIB=$VTUNE_PATH/lib32
4575 VTUNE_LIB=$VTUNE_PATH/lib64
4578 AC_MSG_ERROR([Unsupported target $TARGET for VTUNE.])
4581 if test ! -f $VTUNE_INCLUDE/jitprofiling.h; then
4582 AC_MSG_ERROR([VTUNE $VTUNE_INCLUDE/jitprofiling.h not found.])
4584 if test ! -f $VTUNE_LIB/libjitprofiling.a; then
4585 AC_MSG_ERROR([VTUNE $VTUNE_LIB/libjitprofiling.a not found.])
4588 VTUNE_CFLAGS=-I$VTUNE_INCLUDE
4589 VTUNE_LIBS="-L/$VTUNE_LIB/ -ljitprofiling"
4591 AC_SUBST(VTUNE_LIBS)
4592 AC_SUBST(VTUNE_CFLAGS)
4594 dnl Use GCC atomic ops if they work on the target.
4595 if test x$GCC = "xyes"; then
4597 X86 | AMD64 | ARM | ARM64 | ARM6432 | POWERPC | POWERPC64 | MIPS | S390X | SPARC | SPARC64 | RISCV32 | RISCV64)
4598 AC_DEFINE(USE_GCC_ATOMIC_OPS, 1, [...])
4603 if test "x$target_mach" = "xyes"; then
4605 if test "x$TARGET_SYS" = "xWATCHOS"; then
4606 AC_DEFINE(TARGET_WATCHOS,1,[The JIT/AOT targets WatchOS])
4607 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4608 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_WATCHOS"
4610 elif test "x$TARGET" = "xARM" -o "x$TARGET" = "xARM64" -o "x$TARGET" = "xARM6432"; then
4611 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4612 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4613 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4617 AC_TRY_COMPILE([#include "TargetConditionals.h"],[
4618 #if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
4619 #error fail this for ios
4622 AC_DEFINE(TARGET_OSX,1,[The JIT/AOT targets OSX])
4623 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_OSX"
4624 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_OSX"
4627 AC_DEFINE(TARGET_IOS,1,[The JIT/AOT targets iOS])
4628 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DTARGET_IOS"
4629 CFLAGS_FOR_LIBGC="$CFLAGS_FOR_LIBGC -DTARGET_IOS"
4634 AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
4637 AM_CONDITIONAL(TARGET_OSX, test x$target_osx = xyes)
4639 AC_SUBST(SIZEOF_VOID_P,[$ac_cv_sizeof_void_p])
4641 if test "x$target_byte_order" = "xG_BIG_ENDIAN"; then
4642 AC_DEFINE(TARGET_BYTE_ORDER,G_BIG_ENDIAN,[byte order of target])
4643 elif test "x$target_byte_order" = "xG_LITTLE_ENDIAN"; then
4644 AC_DEFINE(TARGET_BYTE_ORDER,G_LITTLE_ENDIAN,[byte order of target])
4646 AC_DEFINE(TARGET_BYTE_ORDER,G_BYTE_ORDER,[byte order of target])
4649 AC_DEFINE_UNQUOTED(TARGET_SIZEOF_VOID_P,${target_sizeof_void_p},[wordsize of target])
4651 if test "x$sizeof_register" = "x4"; then
4652 AC_DEFINE(SIZEOF_REGISTER,4,[size of target machine integer registers])
4653 elif test "x$sizeof_register" = "x8"; then
4654 AC_DEFINE(SIZEOF_REGISTER,8,[size of target machine integer registers])
4656 AC_DEFINE_UNQUOTED(SIZEOF_REGISTER,${target_sizeof_void_p},[size of target machine integer registers])
4659 if test "x$have_visibility_hidden" = "xyes"; then
4660 AC_DEFINE(HAVE_VISIBILITY_HIDDEN, 1, [Support for the visibility ("hidden") attribute])
4663 if test "x$have_deprecated" = "xyes"; then
4664 AC_DEFINE(HAVE_DEPRECATED, 1, [Support for the deprecated attribute])
4668 dnl Simple Generational checks (sgen)
4671 AC_ARG_WITH(sgen, [ --with-sgen=yes,no Extra Generational GC, default=yes],[buildsgen=$with_sgen],[buildsgen=yes])
4672 AC_ARG_WITH(sgen-default-concurrent, [ --with-sgen-default-concurrent=yes,no Use Concurrent GC, default=no],[],[with_sgen_default_concurrent=no])
4673 if test x$buildsgen = xyes; then
4674 AC_DEFINE(HAVE_MOVING_COLLECTOR, 1, [Moving collector])
4675 SGEN_DEFINES="-DHAVE_SGEN_GC"
4678 if test x$with_sgen_default_concurrent != xno; then
4679 AC_DEFINE(HAVE_CONC_GC_AS_DEFAULT, 1, [Defaults to concurrent GC])
4680 conc_gc_msg=" (concurrent by default)"
4683 if test "x$gc_msg" = "x"; then
4684 gc_msg="sgen$conc_gc_msg"
4686 gc_msg="sgen$conc_gc_msg and $gc_msg"
4689 AC_SUBST(SGEN_DEFINES)
4690 AM_CONDITIONAL(SUPPORT_SGEN, test x$buildsgen = xyes)
4692 jit_status="Building and using the JIT"
4700 INTL="libintl.dylib"
4701 SQLITE="libsqlite.0.dylib"
4702 SQLITE3="libsqlite3.0.dylib"
4704 GDKX11="libgdk-x11-2.0.dylib"
4705 GTKX11="libgtk-x11-2.0.dylib"
4710 SQLITE="libsqlite.so"
4711 SQLITE3="libsqlite3.so"
4721 SQLITE="libsqlite.so"
4722 SQLITE3="libsqlite3.so"
4727 SQLITE="libsqlite.so"
4728 SQLITE3="libsqlite3.so"
4732 dlsearch_path=`(libtool --config ; echo eval echo \\$sys_lib_dlsearch_path_spec) | sh`
4733 AC_MSG_CHECKING(for the soname of libX11.so)
4734 for i in $x_libraries $dlsearch_path; do
4736 if test -f $i/libX11.so.$r; then
4743 if test "x$X11" = "xlibX11.so"; then
4744 AC_MSG_WARN([Could not find libX11.so. Do you have X.org or XFree86 installed? Assuming libX11.so.6...]);
4752 ######################################
4754 ######################################
4758 BREAKPOINT="G_STMT_START { raise (SIGTRAP); } G_STMT_END"
4759 if test x$GCC = xyes; then
4760 GNUC_UNUSED='__attribute__((__unused__))'
4761 GNUC_NORETURN='__attribute__((__noreturn__))'
4763 i*86|x86_64) BREAKPOINT="G_STMT_START { __asm__ (\"int \$03\"); } G_STMT_END" ;;
4766 AC_SUBST(GNUC_PRETTY)
4767 AC_SUBST(GNUC_UNUSED)
4768 AC_SUBST(GNUC_NORETURN)
4769 AC_SUBST(BREAKPOINT)
4771 AC_C_BIGENDIAN([ORDER=G_BIG_ENDIAN],[ORDER=G_LITTLE_ENDIAN])
4774 *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
4790 CFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
4795 arm*-darwin*|aarch64*-*|riscv*)
4796 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
4799 ORDER=G_LITTLE_ENDIAN
4802 LDFLAGS="$LDFLAGS -ltextencoding"
4805 CFLAGS="$CFLAGS -pthread"
4806 LDFLAGS="$LDFLAGS -pthread"
4816 # Defined for all targets/platforms using classic Windows API support.
4817 AC_DEFINE(HAVE_CLASSIC_WINAPI_SUPPORT, 1, [Use classic Windows API support])
4818 AC_DEFINE(HAVE_UWP_WINAPI_SUPPORT, 0, [Don't use UWP Windows API support])
4820 AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf)
4821 AC_CHECK_FUNCS(getrlimit)
4822 AC_CHECK_FUNCS(fork execv execve)
4823 AC_CHECK_FUNCS(waitpid)
4825 AC_ARG_WITH([overridable-allocators], [ --with-overridable-allocators allow g_*alloc/g_free to call custom allocators set via g_mem_set_vtable])
4827 if test x$with_overridable_allocators = xyes; then
4828 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
4829 AC_MSG_NOTICE([Overridable allocator support enabled])
4831 AC_MSG_NOTICE([Overridable allocator support disabled])
4835 # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding
4836 # the detection of strndup on OS X so Mono built on 10.7+ still runs on 10.6. This can be
4837 # removed once support for 10.6 is dropped.
4839 # iOS detection of strndup and getpwuid_r is faulty for some reason so let's simply avoid it
4841 if test x$target_osx = xyes; then
4842 AC_CHECK_FUNCS(getpwuid_r)
4843 elif test x$target_ios = xno; then
4844 AC_CHECK_FUNCS(strndup getpwuid_r)
4847 AC_SEARCH_LIBS(sqrtf, m)
4849 # nanosleep may not be part of libc, also search it in other libraries
4850 AC_SEARCH_LIBS(nanosleep, rt)
4852 AC_SEARCH_LIBS(dlopen, dl)
4853 old_ldflags="${LDFLAGS}"
4854 # GNU specific option, this confuses IBM ld, but do offer alternatives when possible
4855 if test $lt_cv_prog_gnu_ld = yes; then
4856 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4859 *-*-aix*|*-*-os400*)
4862 dnl Try to use export-dynamic anyways
4863 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
4867 AC_TRY_LINK(, [int i;], found_export_dynamic=yes, found_export_dynamic=no)
4868 if test $found_export_dynamic = no; then
4869 LDFLAGS="${old_ldflags}"
4872 AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h iconv.h sys/types.h sys/resource.h)
4873 dnl giconv.c will check on HAVE_ICONV_H but we need this for link time
4874 AC_CHECK_LIB(iconv, iconv_open)
4875 AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0])
4876 AC_SUBST(HAVE_ALLOCA_H)
4878 # Get the exact type of size_t, not just its size.
4879 # This is so we can find an exact printf format among u, lu, llu, I64u.
4880 # To avoid warnings about slight mismatches.
4881 # C99 runtime "zu" dependency is being avoided here.
4883 # We have to compile as C++ because C is too lenient
4884 # and lets the wrong thing compile, with warnings.
4886 # Note: "zu" or ifdef <something> have the advantage
4887 # of producing installable "biarch" headers. i.e. one Mac header
4888 # for Mac/x86 and Mac/amd64.
4892 # Check long before int because it is the overwhelming Unix answer,
4893 # across 32bit and 64bit systems -- fewer compiler invocations in autoconf.
4895 # long ahead of int also tends to produce biarch-compatible headers except Windows.
4897 AC_MSG_CHECKING(if size_t is unsigned long)
4898 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4900 unsigned long *a = (size_t*)0;
4903 AC_SUBST(GSIZE_FORMAT, '"lu"')
4906 AC_MSG_CHECKING(if size_t is unsigned int)
4907 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4909 unsigned *a = (size_t*)0;
4912 AC_SUBST(GSIZE_FORMAT, '"u"')
4914 # At this point the majority of systems have their answer,
4915 # and we descend into non-standard or new-standard territory.
4917 # Check __int64 first because I64 on some systems predates ll, enabling
4918 # new compiler/old runtime interop, and the types always have the same size.
4920 AC_MSG_CHECKING(if size_t is unsigned __int64)
4921 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4923 unsigned __int64 *a = (size_t*)0;
4926 AC_SUBST(GSIZE_FORMAT, '"I64u"')
4929 AC_MSG_CHECKING(if size_t is unsigned long long)
4930 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
4932 unsigned long long *a = (size_t*)0;
4935 AC_SUBST(GSIZE_FORMAT, '"llu"')
4938 AC_MSG_ERROR(Unable to determine size_t among unsigned long, int, __int64, long long)
4946 # If size_t/ptrdiff_t is correct, use it. Otherwise C99 [u]intptr_t.
4947 # This provides for an exact match with functions that
4948 # take size_t like malloc and pthread_attr_getstacksize, avoiding warnings.
4949 # uintptr_t is not necessarily the same.
4951 # ptrdiff_t is preferred over ssize_t as it is C89 vs. new Posix.
4952 # ssize_t looks nicer but ptrdiff_t is wrapped up as gssize anyway.
4954 if test $ac_cv_sizeof_void_p = $ac_cv_sizeof_size_t; then
4964 AC_SUBST(GSIZE_FORMAT)
4967 # END OF EGLIB CHECKS
4970 AC_ARG_WITH([libgdiplus],
4971 [ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
4972 [], [with_libgdiplus=installed])
4974 # default install location
4975 libgdiplus_install_loc=libgdiplus${libsuffix}
4978 libgdiplus_install_loc=libgdiplus${libsuffix}.0
4982 case $with_libgdiplus in
4989 if test x$cross_compiling = xno; then
4990 if test x$host_darwin = xyes; then
4991 a=/Library/Frameworks/Mono.framework/Versions/Current/lib/$libgdiplus_install_loc
4993 libgdiplus_install_loc=$a
5001 libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
5004 /*) # absolute path, assume it is an install location
5005 libgdiplus_loc=$with_libgdiplus
5006 libgdiplus_install_loc=$with_libgdiplus
5010 libgdiplus_loc=`pwd`/$with_libgdiplus
5013 AC_SUBST(libgdiplus_loc)
5014 AC_SUBST(libgdiplus_install_loc)
5016 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)
5017 if test "x$icall_symbol_map" = "xyes"; then
5018 AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
5021 AC_ARG_ENABLE(icall-export,[ --enable-icall-export Export icall functions], icall_export=$enableval, icall_export=no)
5022 if test "x$icall_export" = "xyes"; then
5023 AC_DEFINE(ENABLE_ICALL_EXPORT, 1, [Icall export enabled])
5026 AC_ARG_ENABLE(icall-tables,[ --disable-icall-tables Disable the runtime lookup of icalls], icall_tables=$enableval, icall_tables=yes)
5027 if test "x$icall_tables" = "xno"; then
5028 AC_DEFINE(DISABLE_ICALL_TABLES, 1, [Icall tables disabled])
5031 AM_CONDITIONAL(DISABLE_ICALL_TABLES, test x$icall_tables = xno)
5033 if test "x$with_tls" = "x__thread"; then
5034 AC_DEFINE(MONO_KEYWORD_THREAD, __thread, [Have __thread keyword])
5035 # Pass the information to libgc
5036 CPPFLAGS="$CPPFLAGS -DUSE_COMPILER_TLS"
5037 AC_MSG_CHECKING(if the tls_model attribute is supported)
5038 AC_TRY_COMPILE([static __thread int foo __attribute__((tls_model("initial-exec")));], [
5041 AC_DEFINE(HAVE_TLS_MODEL_ATTR, 1, [tls_model available])
5047 if test ${TARGET} = ARM; then
5048 dnl ******************************************
5049 dnl *** Check to see what FPU is available ***
5050 dnl ******************************************
5051 AC_MSG_CHECKING(which FPU to use)
5054 # This is a bit tricky:
5056 # if (__ARM_PCS_VFP) {
5057 # /* mfloat-abi=hard == VFP with hard ABI */
5058 # } elif (!__SOFTFP__) {
5059 # /* mfloat-abi=softfp == VFP with soft ABI */
5061 # /* mfloat-abi=soft == no VFP */
5064 # The exception is iOS (w/ GCC) where none of the above
5065 # are defined (but iOS always uses the 'softfp' ABI).
5067 # No support for FPA.
5072 # iOS GCC always uses the 'softfp' ABI.
5073 if test x"$GCC" = xyes && test x$host_darwin = xyes; then
5077 # Are we using the 'hard' ABI?
5078 if test x$fpu = xNONE; then
5079 AC_TRY_COMPILE([], [
5080 #ifndef __ARM_PCS_VFP
5081 #error "Float ABI is not 'hard'"
5090 # No 'hard' ABI. 'soft' or 'softfp'?
5091 if test x$fpu = xNONE; then
5092 AC_TRY_COMPILE([], [
5094 #error "Float ABI is not 'softfp'"
5103 if test x$arm_fpu != x; then
5108 CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1"
5111 dnl *********************************************
5112 dnl *** Check which ARM version(s) we can use ***
5113 dnl *********************************************
5114 AC_MSG_CHECKING(which ARM version to use)
5116 AC_TRY_COMPILE([], [
5117 #if !defined(__ARM_ARCH_5T__) && !defined(__ARM_ARCH_5TE__) && !defined(__ARM_ARCH_5TEJ__)
5118 #error Not on ARM v5.
5126 AC_TRY_COMPILE([], [
5127 #if !defined(__ARM_ARCH_6J__) && !defined(__ARM_ARCH_6ZK__) && !defined(__ARM_ARCH_6K__) && !defined(__ARM_ARCH_6T2__) && !defined(__ARM_ARCH_6M__)
5128 #error Not on ARM v6.
5137 AC_TRY_COMPILE([], [
5138 #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_7R__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7S__)
5139 #error Not on ARM v7.
5149 AC_MSG_RESULT($arm_ver)
5151 if test x$arm_v5 = xyes; then
5152 AC_DEFINE(HAVE_ARMV5, 1, [ARM v5])
5153 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV5=1"
5156 if test x$arm_v6 = xyes; then
5157 AC_DEFINE(HAVE_ARMV6, 1, [ARM v6])
5158 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV6=1"
5161 if test x$arm_v7 = xyes; then
5162 AC_DEFINE(HAVE_ARMV7, 1, [ARM v7])
5163 CPPFLAGS_FOR_LIBGC="$CPPFLAGS_FOR_LIBGC -DHAVE_ARMV7=1"
5167 if test ${TARGET} = RISCV32 -o ${TARGET} = RISCV64; then
5168 AC_ARG_WITH([riscv-fpabi], [ --with-riscv-fpabi=auto,double,soft Select RISC-V floating point ABI (auto)], [fpabi=$withval], [fpabi=double])
5170 AC_MSG_CHECKING([which RISC-V floating point ABI to use])
5172 if test x$fpabi = xauto; then
5173 AC_TRY_COMPILE([], [
5174 #ifdef __riscv_float_abi_double
5184 if test x$fpabi = xauto; then
5185 AC_TRY_COMPILE([], [
5186 #ifdef __riscv_float_abi_single
5196 if test x$fpabi = xauto; then
5197 AC_TRY_COMPILE([], [
5198 #ifdef __riscv_float_abi_soft
5210 AC_DEFINE([RISCV_FPABI_DOUBLE], [1], [RISC-V FPABI is double-precision])
5211 AC_MSG_RESULT([double-precision])
5214 AC_DEFINE([RISCV_FPABI_SINGLE], [1], [RISC-V FPABI is single-precision])
5215 AC_MSG_ERROR([single-precision, not supported])
5218 AC_DEFINE([RISCV_FPABI_SOFT], [1], [RISC-V FPABI is soft float])
5219 AC_MSG_RESULT([soft float])
5222 AC_MSG_ERROR([unknown])
5225 AC_MSG_ERROR([invalid option: $fpabi])
5230 if test ${TARGET} = unknown; then
5231 CPPFLAGS="$CPPFLAGS -DNO_PORT"
5232 AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
5235 if test "x$platform_android" = "xyes"; then
5236 case "x${TARGET}" in
5241 BTLS_PLATFORM=android-armv5
5245 BTLS_PLATFORM=android-armv6
5249 BTLS_PLATFORM=android-armv7
5258 BTLS_PLATFORM=android-v8a
5262 BTLS_PLATFORM=android-x86
5266 BTLS_PLATFORM=android-x64
5274 if test ${ACCESS_UNALIGNED} = no; then
5275 CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
5278 if test x$host_darwin = xyes; then
5279 AC_MSG_CHECKING([for ranlib that supports -no_warning_for_no_symbols option])
5281 [$RANLIB -no_warning_for_no_symbols 2>&1 | grep -q "unknown option"],
5282 [AC_MSG_RESULT([no])],
5284 # avoid AR calling ranlib, libtool calls it anyway. suppress no symbols warning.
5286 RANLIB="$RANLIB -no_warning_for_no_symbols"
5287 AC_MSG_RESULT([yes])
5294 # Pass CPPFLAGS to libgc configure
5295 # We should use a separate variable for this to avoid passing useless and
5296 # potentially problematic defines to libgc (like -D_FILE_OFFSET_BITS=64)
5297 # This should be executed late so we pick up the final version of CPPFLAGS
5298 # The problem with this approach, is that during a reconfigure, the main
5299 # configure scripts gets invoked with these arguments, so we use separate
5300 # variables understood by libgc's configure to pass CPPFLAGS and CFLAGS.
5301 TMP_CPPFLAGS="$CPPFLAGS $CPPFLAGS_FOR_LIBGC"
5302 if test x$TARGET = xSPARC -o x$TARGET = xSPARC64; then
5303 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-D_FILE_OFFSET_BITS=64//g'`
5305 # Don't pass -finstrument-for-thread-suspension in,
5306 # if these are instrumented it will be very bad news
5307 # (infinite recursion, undefined parking behavior, etc)
5308 TMP_CPPFLAGS=`echo $TMP_CPPFLAGS | sed -e 's/-finstrument-for-thread-suspension//g'`
5309 ac_configure_args="$ac_configure_args --disable-embed-check --with-libgc-threads=$libgc_threads $libgc_configure_args \"CPPFLAGS_FOR_LIBGC=$TMP_CPPFLAGS\" \"CFLAGS_FOR_LIBGC=$CFLAGS_FOR_LIBGC\""
5310 if test "x$support_boehm" = "xyes"; then
5311 AC_CONFIG_SUBDIRS(libgc)
5317 AC_ARG_WITH(malloc_mempools,[ --with-malloc-mempools=yes,no Use malloc for each single mempool allocation (only for runtime debugging, defaults to no)],[
5318 if test x$with_malloc_mempools = xyes; then
5320 AC_DEFINE(USE_MALLOC_FOR_MEMPOOLS,1,[Use malloc for each single mempool allocation])
5325 DISABLE_MCS_DOCS=default
5326 AC_ARG_WITH(mcs_docs,[ --with-mcs-docs=yes,no If you want to build the documentation under mcs (defaults to yes)],[
5327 if test x$with_mcs_docs != xyes; then
5328 DISABLE_MCS_DOCS=yes
5331 if test -n "$INSTALL_4_x_TRUE"; then :
5332 DISABLE_MCS_DOCS=yes
5334 if test "x$DISABLE_MCS_DOCS" = "xdefault"; then
5335 DISABLE_MCS_DOCS=$DISABLE_MCS_DOCS_default
5338 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)],[
5339 if test x$with_lazy_gc_thread_creation != xno ; then
5340 AC_DEFINE(LAZY_GC_THREAD_CREATION,1,[Enable lazy gc thread creation by the embedding host.])
5342 ], [with_lazy_gc_thread_creation=no])
5344 dnl *****************************
5345 dnl *** Thread suspend policy ***
5346 dnl *****************************
5348 dnl Set a default hybrid or cooperative suspend on some platforms
5350 dnl Coop default is set by the bitcode preset.
5352 dnl If coop isn't on by default, maybe hybrid should be?
5353 if test x$enable_cooperative_suspend_default != xyes; then
5356 dnl Some host/target confusion, there's no host_osx (and
5357 dnl host_darwin would be true on iOS not just macOS).
5358 if test x$target_osx = xyes; then
5359 enable_hybrid_suspend_default=yes
5360 elif test x$host_linux = xyes -o x$host_win32 = xyes; then
5361 enable_hybrid_suspend_default=yes
5367 dnl Now check if there were flags overriding the defaults
5369 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])
5370 AC_ARG_ENABLE(cooperative_suspend, [ --enable-cooperative-suspend Enable cooperative stop-the-world garbage collection (sgen only) (defaults to no)], [], [enable_cooperative_suspend=default])
5372 if test x$enable_cooperative_suspend = xdefault -a x$with_cooperative_gc != xdefault; then
5373 enable_cooperative_suspend=$with_cooperative_gc
5376 if test x$enable_cooperative_suspend = xdefault; then
5377 enable_cooperative_suspend=$enable_cooperative_suspend_default
5380 if test x$enable_cooperative_suspend != xno; then
5381 AC_DEFINE(ENABLE_COOP_SUSPEND,1,[Enable cooperative stop-the-world garbage collection.])
5384 AM_CONDITIONAL([ENABLE_COOP_SUSPEND], [test x$enable_cooperative_suspend != xno])
5386 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])
5388 if test x$enable_hybrid_suspend = xdefault; then
5389 enable_hybrid_suspend=$enable_hybrid_suspend_default
5392 if test x$enable_hybrid_suspend != xno -a x$enable_cooperative_suspend != xno ; then
5393 AC_MSG_ERROR([Hybrid suspend and Cooperative suspend cannot be both enabled.])
5396 if test x$enable_hybrid_suspend != xno ; then
5397 AC_DEFINE(ENABLE_HYBRID_SUSPEND,1,[Enable hybrid suspend for GC stop-the-world])
5400 AM_CONDITIONAL([ENABLE_HYBRID_SUSPEND], [test x$enable_hybrid_suspend != xno])
5402 dnl End of thread suspend policy
5404 dnl ***************************
5405 dnl *** feature experiments ***
5406 dnl ***************************
5408 dnl When adding experiments, also add to mono/utils/mono-experiments.def
5409 AC_ARG_ENABLE(experiment, [ --enable-experiment=LIST Enable experimental fatures from the comma-separate LIST. Available experiments: null],[
5411 if test x$enable_experiment != x ; then
5412 AC_DEFINE(ENABLE_EXPERIMENTS,1,[Enable feature experiments])
5414 for feature in `echo "$enable_experiment" | sed -e "s/,/ /g"`; do
5415 eval "mono_experiment_test_enable_$feature='yes'"
5418 if test "x$mono_experiment_test_enable_all" = "xyes"; then
5419 eval "mono_experiment_test_enable_null='yes'"
5423 if test "x$mono_experiment_test_enable_null" = "xyes"; then
5424 AC_DEFINE(ENABLE_EXPERIMENT_null, 1, [Enable experiment 'null'])
5428 dnl **********************
5429 dnl *** checked builds ***
5430 dnl **********************
5432 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],[
5434 if test x$enable_checked_build != x ; then
5435 AC_DEFINE(ENABLE_CHECKED_BUILD,1,[Enable checked build])
5437 for feature in `echo "$enable_checked_build" | sed -e "s/,/ /g"`; do
5438 eval "mono_checked_build_test_enable_$feature='yes'"
5441 if test "x$mono_checked_build_test_enable_all" = "xyes"; then
5442 eval "mono_checked_build_test_enable_gc='yes'"
5443 eval "mono_checked_build_test_enable_metadata='yes'"
5444 eval "mono_checked_build_test_enable_thread='yes'"
5445 eval "mono_checked_build_test_enable_private_types='yes'"
5446 eval "mono_checked_build_test_enable_crash_reporting='yes'"
5449 if test "x$mono_checked_build_test_enable_gc" = "xyes"; then
5450 AC_DEFINE(ENABLE_CHECKED_BUILD_GC, 1, [Enable GC checked build])
5453 if test "x$mono_checked_build_test_enable_metadata" = "xyes"; then
5454 AC_DEFINE(ENABLE_CHECKED_BUILD_METADATA, 1, [Enable metadata checked build])
5457 if test "x$mono_checked_build_test_enable_thread" = "xyes"; then
5458 AC_DEFINE(ENABLE_CHECKED_BUILD_THREAD, 1, [Enable thread checked build])
5461 if test "x$mono_checked_build_test_enable_private_types" = "xyes"; then
5462 AC_DEFINE(ENABLE_CHECKED_BUILD_PRIVATE_TYPES, 1, [Enable private types checked build])
5465 if test "x$mono_checked_build_test_enable_crash_reporting" = "xyes"; then
5467 with_overridable_allocators=yes
5468 AC_DEFINE(ENABLE_OVERRIDABLE_ALLOCATORS,1,[Overridable allocator support enabled])
5470 AC_DEFINE(ENABLE_CHECKED_BUILD_CRASH_REPORTING, 1, [Enable private types checked build])
5474 dnl End of checked builds
5476 AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno || test x$with_overridable_allocators = xyes)
5478 AC_CHECK_HEADER([malloc.h],
5479 [AC_DEFINE([HAVE_USR_INCLUDE_MALLOC_H], [1],
5480 [Define to 1 if you have /usr/include/malloc.h.])],,)
5482 # When --disable-shared is used, libtool transforms libmono-2.0.la into libmono-2.0.so
5483 # instead of libmono-static.a
5484 if test "x$enable_shared" = "xno" -a "x$enable_executables" = "xyes"; then
5485 LIBMONO_LA=libmini-static.la
5487 if test x$buildsgen = xyes; then
5488 LIBMONO_LA=libmonosgen-$API_VER.la
5490 LIBMONO_LA=libmonoboehm-$API_VER.la
5493 AC_SUBST(LIBMONO_LA)
5499 AC_ARG_ENABLE(btls, [ --disable-btls Disable the BoringTls provider], enable_btls=$enableval, enable_btls=$BTLS_SUPPORTED)
5500 AC_ARG_ENABLE(btls-lib, [ --disable-btls-lib Disable building the BTLS native library], enable_btls_lib=$enableval, enable_btls_lib=$BTLS_SUPPORTED)
5501 AC_ARG_WITH(btls_android_ndk, [ --with-btls-android-ndk Android NDK for BoringTls])
5502 AC_ARG_WITH(btls_android_api, [ --with-btls-android-api Android NDK API level for BTLS build])
5503 AC_ARG_WITH(btls_android_cmake_toolchain, [ --with-btls-android-cmake-toolchain Path to the cmake toolchain file for Android])
5504 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])
5506 if test "x$with_btls_android_api" = "x" ; then
5507 case "$BTLS_PLATFORM" in
5509 with_btls_android_api=16" ;;
5511 with_btls_android_api=16" ;;
5513 with_btls_android_api=16 ;;
5515 with_btls_android_api=21 ;;
5517 with_btls_android_api=16 ;;
5519 with_btls_android_api=21 ;;
5523 if test "x$enable_btls" = "xno"; then
5527 AM_CONDITIONAL(BTLS, test x$enable_btls_lib = xyes)
5530 if test "x$enable_btls" = "xyes"; then
5531 AC_PATH_PROG(CMAKE, [cmake], [no], [$PATH:/Applications/CMake.app/Contents/bin:/usr/local/bin])
5532 if test "x$CMAKE" = "xno"; then
5533 AC_MSG_ERROR("cmake not found")
5536 BTLS_ROOT=`cd $srcdir && pwd`/external/boringssl
5543 if test "x$host_win32" = "xyes"; then
5544 AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
5547 case "$BTLS_PLATFORM" in
5553 btls_cflags="$btls_cflags -arch i386"
5556 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5557 if test "x$HAVE_YASM" != "xyes"; then
5558 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5567 btls_cflags="-DNOCRYPT $WIN32_CPPFLAGS"
5568 if test "x$HAVE_YASM" != "xyes"; then
5569 BTLS_CMAKE_ARGS="-DOPENSSL_NO_ASM=1"
5576 btls_cflags="-DOPENSSL_NO_ASM=1"
5580 btls_cflags="-DOPENSSL_NO_ASM=1"
5584 btls_cflags="-march=armv8-a+crypto"
5593 btls_cflags="$btls_cflags -maix64 -mminimal-toc -pthread -D_ALL_SOURCE -D_THREAD_SAFE -D_REENTRANT"
5594 BTLS_CMAKE_ARGS="-DCMAKE_AR=/usr/bin/ar -DCMAKE_C_ARCHIVE_CREATE=\"<CMAKE_AR> -X64 cr <TARGET> <LINK_FLAGS> <OBJECTS>\""
5598 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5601 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5604 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"armeabi-v7a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5607 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"arm64-v8a\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5610 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5613 BTLS_CMAKE_ARGS="-DANDROID_ABI=\"x86_64\" -DANDROID_NATIVE_API_LEVEL=$with_btls_android_api"
5622 AC_MSG_ERROR(Invalid BTLS platform)
5625 if test "x$platform_android" = "xyes"; then
5626 if test "x$with_btls_android_cmake_toolchain" = "x"; then
5627 with_btls_android_cmake_toolchain="$BTLS_ROOT/util/android-cmake/android.toolchain.cmake"
5630 if test "x$with_btls_android_ndk_asm_workaround" != "x"; then
5631 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DENABLE_NDK_ARM_WORKAROUND=ON"
5635 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=$with_btls_android_cmake_toolchain"
5636 if test "x$with_btls_android_ndk" != "x"; then
5637 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DANDROID_NDK=\"$with_btls_android_ndk\""
5639 AC_MSG_ERROR([Need to pass the --with-btls-android-ndk argument when building with BTLS support on Android.])
5643 if test "x$btls_arch" != "x"; then
5644 BTLS_CMAKE_ARGS="$BTLS_CMAKE_ARGS -DBTLS_ARCH=\"$btls_arch\""
5647 BTLS_CFLAGS="$CPPFLAGS_FOR_BTLS $btls_cflags"
5649 AC_SUBST(BTLS_CFLAGS)
5650 AC_SUBST(BTLS_PLATFORM)
5651 AC_SUBST(BTLS_CMAKE_ARGS)
5653 AC_DEFINE(HAVE_BTLS, 1, [BoringTls is supported])
5658 AM_CONDITIONAL(BTLS_ANDROID, test x$btls_android = xyes)
5660 if test x$DISABLE_MCS_DOCS = xyes; then
5667 ## Maybe should also disable if mcsdir is invalid. Let's punt the issue for now.
5668 AM_CONDITIONAL(BUILD_MCS, [test x$cross_compiling = xno && test x$enable_mcs_build != xno])
5669 AM_CONDITIONAL(BUILD_SUPPORT, [test x$enable_support_build != xno])
5671 libmono_ldflags="$libmono_ldflags $LIBS"
5673 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
5674 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
5675 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
5676 AM_CONDITIONAL(SPARC64, test x$TARGET = xSPARC64)
5677 AM_CONDITIONAL(X86, test x$TARGET = xX86)
5678 AM_CONDITIONAL(AMD64, test x$TARGET = xAMD64)
5679 AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
5680 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
5681 AM_CONDITIONAL(POWERPC64, test x$TARGET = xPOWERPC64)
5682 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
5683 AM_CONDITIONAL(ARM64, test x$TARGET = xARM64 -o x$TARGET = xARM6432)
5684 AM_CONDITIONAL(S390X, test x$TARGET = xS390X)
5685 AM_CONDITIONAL([RISCV], [test x$TARGET = xRISCV32 -o x$TARGET = xRISCV64])
5686 AM_CONDITIONAL([RISCV32], [test x$TARGET = xRISCV32])
5687 AM_CONDITIONAL([RISCV64], [test x$TARGET = xRISCV64])
5688 AM_CONDITIONAL(WASM, test x$TARGET = xWASM)
5689 AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
5690 AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
5691 AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
5692 AM_CONDITIONAL(HOST_ARM64, test x$HOST = xARM64)
5693 AM_CONDITIONAL([HOST_RISCV], [test x$HOST = xRISCV32 -o x$HOST = xRISCV64])
5694 AM_CONDITIONAL([HOST_RISCV32], [test x$HOST = xRISCV32])
5695 AM_CONDITIONAL([HOST_RISCV64], [test x$HOST = xRISCV64])
5696 AM_CONDITIONAL(HOST_WASM, test x$HOST = xWASM)
5698 AM_CONDITIONAL(CROSS_COMPILE, test "x$host" != "x$target")
5708 AC_DEFINE_UNQUOTED(MONO_ARCHITECTURE,"$arch_target",[The architecture this is running on])
5709 AC_SUBST(arch_target)
5711 #This must always be defined when building the runtime
5712 AC_DEFINE(MONO_INSIDE_RUNTIME,1, [Disable banned functions from being used by the runtime])
5714 mono_build_root=`pwd`
5715 AC_SUBST(mono_build_root)
5717 AC_ARG_ENABLE(msvc,[ --enable-msvc Build with Visual Studio (msvc) (defaults to no)], enable_msvc=$enableval, enable_msvc=no)
5718 if test x$host_win32 = xno; then
5719 if test x$enable_msvc = xyes; then
5720 echo "Error, --enable-msvc only supported for Windows builds."
5724 AM_CONDITIONAL(ENABLE_MSVC, test x$enable_msvc = xyes)
5726 if test "x$enable_msvc" = "xyes"; then
5727 if test "x$support_boehm" = "xyes"; then
5728 echo "Error, Boehm GC is not supported when using --enable-msvc."
5731 mono_msvc_build_dir='$(top_srcdir)'/msvc/build/sgen
5732 if test "x$host_cpu" = "xi686"; then
5733 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/Win32/lib/Release
5734 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/Win32/bin/Release
5735 mono_runtime=msvc/build/sgen/Win32/bin/Release/mono-sgen.exe
5736 mono_runtime_wrapper=$mono_runtime
5738 mono_msvc_build_lib_dir='$(mono_msvc_build_dir)'/x64/lib/Release
5739 mono_msvc_build_bin_dir='$(mono_msvc_build_dir)'/x64/bin/Release
5740 mono_runtime=msvc/build/sgen/x64/bin/Release/mono-sgen.exe
5741 mono_runtime_wrapper=msvc/build/sgen/x64/bin/Release/mono-sgen-msvc.sh
5743 AC_SUBST(mono_msvc_build_dir)
5744 AC_SUBST(mono_msvc_build_lib_dir)
5745 AC_SUBST(mono_msvc_build_bin_dir)
5747 mono_runtime=mono/mini/mono
5748 mono_runtime_wrapper=$mono_runtime
5751 AC_SUBST(mono_runtime)
5752 AC_SUBST(mono_runtime_wrapper)
5754 CSC_LOCATION=`cd $srcdir && pwd`/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.8.2/tools/csc.exe
5756 if test $csc_compiler = mcs; then
5757 CSC=$mcs_topdir/class/lib/build/mcs.exe
5762 AM_CONDITIONAL([CSC_IS_ROSLYN], [test x$csc_compiler != xmcs])
5764 mono_cfg_root=$mono_build_root/runtime
5765 if test x$host_win32 = xyes; then
5766 if test "x$cross_compiling" = "xno"; then
5767 mono_cfg_dir=`cygpath -w -a $mono_cfg_root`\\etc
5768 CSC=`cygpath -m -a $CSC`
5769 CSC_LOCATION=`cygpath -m -a $CSC_LOCATION`
5771 mono_cfg_dir=`echo $mono_cfg_root | tr '/' '\\'`\\etc
5774 mono_cfg_dir=$mono_cfg_root/etc
5777 if test "x$platform_android" = "xyes"; then
5781 AC_SUBST(mono_cfg_dir)
5785 AC_CONFIG_FILES([po/mcs/Makefile.in])
5787 AC_CONFIG_FILES([acceptance-tests/microbench-perf.sh],[chmod +x acceptance-tests/microbench-perf.sh])
5788 AC_CONFIG_FILES([runtime/mono-wrapper],[chmod +x runtime/mono-wrapper])
5789 AC_CONFIG_FILES([runtime/monodis-wrapper],[chmod +x runtime/monodis-wrapper])
5791 AC_CONFIG_COMMANDS([runtime/etc/mono/1.0/machine.config],
5794 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5796 *) reldir=$depth/$srcdir ;;
5798 $ac_aux_dir/install-sh -d runtime/etc/mono/1.0
5799 cd runtime/etc/mono/1.0
5800 rm -f machine.config
5801 $LN_S $reldir/data/net_1_1/machine.config machine.config
5805 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/machine.config],
5808 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5810 *) reldir=$depth/$srcdir ;;
5812 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5813 cd runtime/etc/mono/2.0
5814 rm -f machine.config
5815 $LN_S $reldir/data/net_2_0/machine.config machine.config
5819 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/web.config],
5822 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5824 *) reldir=$depth/$srcdir ;;
5826 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0
5827 cd runtime/etc/mono/2.0
5829 $LN_S $reldir/data/net_2_0/web.config web.config
5833 AC_CONFIG_COMMANDS([runtime/etc/mono/browscap.ini],
5836 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5838 *) reldir=$depth/$srcdir ;;
5840 $ac_aux_dir/install-sh -d runtime/etc/mono/
5841 cd runtime/etc/mono/
5843 $LN_S $reldir/data/browscap.ini browscap.ini
5847 AC_CONFIG_COMMANDS([runtime/etc/mono/2.0/Browsers/Compat.browser],
5848 [ depth=../../../../..
5850 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5852 *) reldir=$depth/$srcdir ;;
5854 $ac_aux_dir/install-sh -d runtime/etc/mono/2.0/Browsers/
5855 cd runtime/etc/mono/2.0/Browsers
5856 rm -f Compat.browser
5857 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5861 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/Browsers/Compat.browser],
5862 [ depth=../../../../..
5864 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5866 *) reldir=$depth/$srcdir ;;
5868 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0/Browsers/
5869 cd runtime/etc/mono/4.0/Browsers
5870 rm -f Compat.browser
5871 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5875 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/Browsers/Compat.browser],
5876 [ depth=../../../../..
5878 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5880 *) reldir=$depth/$srcdir ;;
5882 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5/Browsers/
5883 cd runtime/etc/mono/4.5/Browsers
5884 rm -f Compat.browser
5885 $LN_S $reldir/data/Browsers/Compat.browser Compat.browser
5889 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/machine.config],
5892 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5894 *) reldir=$depth/$srcdir ;;
5896 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5897 cd runtime/etc/mono/4.0
5898 rm -f machine.config
5899 $LN_S $reldir/data/net_4_0/machine.config machine.config
5903 AC_CONFIG_COMMANDS([runtime/etc/mono/4.0/web.config],
5906 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5908 *) reldir=$depth/$srcdir ;;
5910 $ac_aux_dir/install-sh -d runtime/etc/mono/4.0
5911 cd runtime/etc/mono/4.0
5913 $LN_S $reldir/data/net_4_0/web.config web.config
5917 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/machine.config],
5920 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5922 *) reldir=$depth/$srcdir ;;
5924 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5925 cd runtime/etc/mono/4.5
5926 rm -f machine.config
5927 $LN_S $reldir/data/net_4_5/machine.config machine.config
5931 AC_CONFIG_COMMANDS([runtime/etc/mono/4.5/web.config],
5934 [[\\/$]]* | ?:[[\\/]]* ) reldir=$srcdir ;;
5936 *) reldir=$depth/$srcdir ;;
5938 $ac_aux_dir/install-sh -d runtime/etc/mono/4.5
5939 cd runtime/etc/mono/4.5
5941 $LN_S $reldir/data/net_4_5/web.config web.config
5945 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])
5946 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])
5947 AC_CONFIG_COMMANDS([clean-llvm], [rm -f llvm/llvm_config.mk])
5950 # Mono.Native Support
5951 # -------------------
5952 # Mono.Native is the new name for both System.Native and System.Security.Cryptography.Apple.
5953 # It is built as a stand-alone shared library and not bundled with the runtime because we
5954 # may need to build two different versions of it.
5956 # Starting with macOS 10.12+ and iOS 10+, Apple introduced a new Unified API for some of the
5957 # crypto primitives that we're using as part of System.Security.Cryptography.Apple.
5959 # On Desktop, we can check at runtime whether the OS version is recent enough and switch
5960 # implementation accordingly. We build a single `libmono-native` shared library.
5962 # However, on Mobile we cannot have any undefined symbols as this would break Bitcode.
5964 # During the mobile build, we are called with `CFLAGS` containing an explicit minium version flag,
5965 # which is eiter `-mmacosx-version-min=`, `-mios-simulator-version-min=` or `-miphoneos-version-min=`
5966 # depending on platform.
5968 # We build two versions of the shared library:
5969 # - `libmono-native-compat` is built with whichever minimum version is passed to us via `CFLAGS`.
5970 # - `libmono-native-unifed` is built with the minimum version set to macOS 10.12+ / iOS 10+.
5972 # For testing purpuses, there is a function called `mono_native_get_platform_type ()`
5973 # (see mono/native/mono-native-platform.c), which returns a `MonoNativePlatformType` enum value.
5974 # There is also `Mono.MonoNativePlatform.GetPlatformType ()` (see mcs/class/corlib/Test/Mono/MonoNativePlatform.cs).
5976 # This can be called by automated tests both to ensure that the library has been correctly installed and also
5977 # to verify that it's the correct version of it.
5980 AC_MSG_CHECKING([Mono.Native support])
5981 sed_version_pattern='[[0-9]]\{1,2\}\(\.[[0-9]]\{1,2\}\)'
5982 if test x$disable_mono_native = xyes; then
5984 elif test x$target_osx = xyes; then
5986 MONO_NATIVE_CXX=$CXX
5987 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
5988 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
5989 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
5990 MONO_NATIVE_CFLAGS=$CFLAGS
5991 MONO_NATIVE_LDFLAGS=$LDFLAGS
5994 MONO_NATIVE_PLATFORM=macos
5995 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_MACOS"
5997 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer],
5998 [!(MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)])
6000 if test x$mono_native_compat = xyes; then
6001 mono_native_compat=yes
6002 mono_native_text="Mac OSX (compat + unified v10.12)"
6003 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6004 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6005 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6006 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6007 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6009 sed_remove_mac_version_pattern="s/-mmacosx-version-min=$sed_version_pattern//g"
6010 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6011 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6012 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6013 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6014 MONO_NATIVE_UNIFIED_LDFLAGS="`echo $LDFLAGS | sed -e $sed_remove_mac_version_pattern` -mmacosx-version-min=10.12"
6016 mono_native_compat=no
6017 mono_native_text="Mac OSX"
6019 elif test x$mono_native_platform_ios = xyes; then
6020 AC_MONO_APPLE_TARGET(TARGET_OS_SIMULATOR, [mono_native_ios_sim=yes], [mono_native_ios_sim=no])
6022 AC_MONO_APPLE_TARGET(TARGET_OS_IOS, [
6023 if test x$mono_native_ios_sim = xyes; then
6024 mono_native_ios_target=ios-simulator
6025 mono_native_text="iOS Simulator"
6026 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6028 mono_native_ios_target=iphoneos
6029 mono_native_text="iOS Device"
6030 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_IPHONE | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6032 mono_native_unified_version="10.0"
6033 mono_native_compat_check="__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0"
6035 AC_MONO_APPLE_TARGET(TARGET_OS_TV, [
6036 if test x$mono_native_ios_sim = xyes; then
6037 mono_native_ios_target=tvos-simulator
6038 mono_native_text="AppleTV Simulator"
6039 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6041 mono_native_ios_target=tvos
6042 mono_native_text="AppleTV Device"
6043 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_TV | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6045 mono_native_unified_version="10.0"
6046 mono_native_compat_check="__TV_OS_VERSION_MIN_REQUIRED >= __TVOS_10_0"
6048 AC_MONO_APPLE_TARGET(TARGET_OS_WATCH, [
6049 if test x$mono_native_ios_sim = xyes; then
6050 mono_native_ios_target=watchos-simulator
6051 mono_native_text="Apple Watch Simulator"
6052 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_SIMULATOR"
6054 mono_native_ios_target=watchos
6055 mono_native_text="Apple Watch Device"
6056 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_IOS | MONO_NATIVE_PLATFORM_TYPE_WATCH | MONO_NATIVE_PLATFORM_TYPE_DEVICE"
6058 mono_native_unified_version="5.0"
6059 mono_native_compat_check="__WATCH_OS_VERSION_MIN_REQUIRED >= __WATCHOS_5_0"
6061 AC_MSG_ERROR([Unknown iOS Target])
6066 AC_MONO_APPLE_AVAILABLE(mono_native_compat, [whether we need the compatibility layer], [!($mono_native_compat_check)])
6068 if test x$with_bitcode = xyes; then
6069 mono_native_ldflags="-framework CoreFoundation -framework Foundation -no-undefined -fatal_warnings"
6070 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6072 mono_native_ldflags="-framework CoreFoundation -framework Foundation -fatal_warnings"
6075 if test x$enable_gss = xyes; then
6076 mono_native_ldflags="$mono_native_ldflags -framework GSS"
6080 MONO_NATIVE_CXX=$CXX
6081 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6082 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6083 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6084 MONO_NATIVE_CFLAGS=$CFLAGS
6085 MONO_NATIVE_LDFLAGS="$LDFLAGS $mono_native_ldflags"
6087 if test x$mono_native_compat = xyes; then
6088 mono_native_text="$mono_native_text (compat + unified v$mono_native_unified_version)"
6089 MONO_NATIVE_COMPAT_CCASFLAGS=$MONO_NATIVE_CCASFLAGS
6090 MONO_NATIVE_COMPAT_CPPFLAGS=$MONO_NATIVE_CPPFLAGS
6091 MONO_NATIVE_COMPAT_CXXFLAGS=$MONO_NATIVE_CXXFLAGS
6092 MONO_NATIVE_COMPAT_CFLAGS=$MONO_NATIVE_CFLAGS
6093 MONO_NATIVE_COMPAT_LDFLAGS=$MONO_NATIVE_LDFLAGS
6095 sed_remove_ios_version_pattern="s/-m\(.*\)-version-min=$sed_version_pattern//g"
6096 MONO_NATIVE_UNIFIED_CCASFLAGS="`echo $CCASFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6097 MONO_NATIVE_UNIFIED_CPPFLAGS="`echo $CPPFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6098 MONO_NATIVE_UNIFIED_CXXFLAGS="`echo $CXXFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6099 MONO_NATIVE_UNIFIED_CFLAGS="`echo $CFLAGS | sed -e $sed_remove_ios_version_pattern` -m$mono_native_ios_target-version-min=$mono_native_unified_version"
6100 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"
6104 MONO_NATIVE_PLATFORM=ios
6105 elif test x$host_linux = xyes; then
6106 mono_native_text="Linux"
6108 MONO_NATIVE_CXX=$CXX
6109 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6110 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6111 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6112 MONO_NATIVE_CFLAGS=$CFLAGS
6113 MONO_NATIVE_LDFLAGS=$LDFLAGS
6116 mono_native_compat=no
6117 MONO_NATIVE_PLATFORM=linux
6119 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6120 elif test x$target_wasm = xyes; then
6121 mono_native_text="wasm"
6123 MONO_NATIVE_CXX=$CXX
6124 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6125 # The system.native code uses _WASM_ to check for wasm
6126 MONO_NATIVE_CPPFLAGS="$CPPFLAGS -D_WASM_"
6127 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6128 MONO_NATIVE_CFLAGS=$CFLAGS
6129 MONO_NATIVE_LDFLAGS=$LDFLAGS
6132 mono_native_compat=no
6133 MONO_NATIVE_PLATFORM=linux
6135 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_LINUX"
6136 elif case $host_os in aix*|os400*) true;; *) false;; esac; then
6137 mono_native_text="AIX"
6139 MONO_NATIVE_CXX=$CXX
6140 MONO_NATIVE_CCASFLAGS=$CCASFLAGS
6141 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6142 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6143 MONO_NATIVE_CFLAGS=$CFLAGS
6144 MONO_NATIVE_LDFLAGS=$LDFLAGS
6147 mono_native_compat=no
6148 MONO_NATIVE_PLATFORM=aix
6150 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_AIX"
6151 elif test x$platform_android = xyes; then
6152 mono_native_text="Android"
6154 MONO_NATIVE_CXX=$CXX
6155 MONO_NATIVE_CPPFLAGS=$CPPFLAGS
6156 MONO_NATIVE_CXXFLAGS=$CXXFLAGS
6157 MONO_NATIVE_CFLAGS=$CFLAGS
6158 MONO_NATIVE_LDFLAGS=$LDFLAGS
6159 MONO_NATIVE_LIBADD="../mini/$LIBMONO_LA"
6162 mono_native_compat=no
6163 MONO_NATIVE_PLATFORM=android
6165 MONO_NATIVE_PLATFORM_TYPE="MONO_NATIVE_PLATFORM_TYPE_ANDROID"
6168 mono_native_text="no"
6171 AC_MSG_RESULT($mono_native_text)
6173 if test x$mono_native_compat = xyes; then
6174 MONO_NATIVE_LIBRARY_NAME=libmono-native-compat
6176 MONO_NATIVE_LIBRARY_NAME=libmono-native
6179 AC_SUBST(MONO_NATIVE_PLATFORM)
6180 AC_SUBST(MONO_NATIVE_CC)
6181 AC_SUBST(MONO_NATIVE_CXX)
6182 AC_SUBST(MONO_NATIVE_CCASFLAGS)
6183 AC_SUBST(MONO_NATIVE_COMPAT_CCASFLAGS)
6184 AC_SUBST(MONO_NATIVE_UNIFIED_CCASFLAGS)
6185 AC_SUBST(MONO_NATIVE_CPPFLAGS)
6186 AC_SUBST(MONO_NATIVE_COMPAT_CPPFLAGS)
6187 AC_SUBST(MONO_NATIVE_UNIFIED_CPPFLAGS)
6188 AC_SUBST(MONO_NATIVE_CXXFLAGS)
6189 AC_SUBST(MONO_NATIVE_COMPAT_CXXFLAGS)
6190 AC_SUBST(MONO_NATIVE_UNIFIED_CXXFLAGS)
6191 AC_SUBST(MONO_NATIVE_CFLAGS)
6192 AC_SUBST(MONO_NATIVE_COMPAT_CFLAGS)
6193 AC_SUBST(MONO_NATIVE_UNIFIED_CFLAGS)
6194 AC_SUBST(MONO_NATIVE_LDFLAGS)
6195 AC_SUBST(MONO_NATIVE_COMPAT_LDFLAGS)
6196 AC_SUBST(MONO_NATIVE_UNIFIED_LDFLAGS)
6197 AC_SUBST(MONO_NATIVE_LIBRARY_NAME)
6198 AC_SUBST(MONO_NATIVE_LIBADD)
6200 AM_CONDITIONAL(MONO_NATIVE, test x$mono_native = xyes)
6201 AM_CONDITIONAL(MONO_NATIVE_COMPAT, test x$mono_native_compat = xyes)
6202 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_MACOS, test x$MONO_NATIVE_PLATFORM = xmacos)
6203 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_IOS, test x$MONO_NATIVE_PLATFORM = xios)
6204 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_LINUX, test x$MONO_NATIVE_PLATFORM = xlinux)
6205 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_AIX, test x$MONO_NATIVE_PLATFORM = xaix)
6206 AM_CONDITIONAL(MONO_NATIVE_PLATFORM_ANDROID, test x$MONO_NATIVE_PLATFORM = xandroid)
6208 MONO_NATIVE_PLATFORM_TYPE_COMPAT="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_COMPAT"
6209 MONO_NATIVE_PLATFORM_TYPE_UNIFIED="$MONO_NATIVE_PLATFORM_TYPE | MONO_NATIVE_PLATFORM_TYPE_UNIFIED"
6210 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE)
6211 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_COMPAT)
6212 AC_SUBST(MONO_NATIVE_PLATFORM_TYPE_UNIFIED)
6214 ### C++ Linker selection
6216 # We have to lie to autotools, sometimes.
6218 # If we're building with llvm compiled into Mono, set MONO_CXXLD to CXX,
6219 # otherwise to CC. We want C linking even if we're compiling with C++ enabled
6220 # because we do not want to link inthe C++ runtime library (-lstdc++ or -lc++),
6221 # except if we're linking with LLVM which relies on it.
6223 # Explanation of the hack:
6226 # https://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html,
6227 # automake chooses the linker that it used to compile a target based on the
6228 # _SOURCES for that target. If the target is comprised of only C code, it
6229 # chooses the C linker (on Linux and OSX this is just gcc or clang called with
6230 # linker arguments and a -o). If the target _SOURCES include at least one C++ file,
6231 # then automake chooses the C++ linker (usually g++ or clang++ called with linker arguments and -o).
6233 # The problem for Mono is that we don't want the C++ runtime library (libstdc++
6234 # or libc++) linked in - even when Mono is written in C++, we take care not to
6235 # require the runtime library. As a result, we don't want g++ or clang++ to do
6236 # the linking. On the other hand if LLVM is enabled, then we _must_ use the
6237 # C++ linker - LLVM doesn't have the same restrictions.
6239 # So the trick is we set MONO_CXXLD here to $CXX or $CC and in
6240 # mono/mini/Makefile.am.in we have CCLD=$MONO_CXXLD and CXXLD=$MONO_CXXLD which bypasses
6241 # automake's autodetection and lets us use the linker that we want.
6243 if test "x$enable_llvm_runtime" = "xyes"; then
6244 AC_SUBST(MONO_CXXLD, [$CXX])
6246 AC_SUBST(MONO_CXXLD, [$CC])
6249 ### Set -Werror options
6251 # Anything involving -Werror must be done late because autoconf depends on compiling with warnings to be success.
6253 if test x"$GCC" = xyes; then
6255 if test "x$with_jemalloc" != "xyes"; then
6257 # incompatible-pointer-types requires gcc circa 5.x
6260 CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
6261 AC_MSG_CHECKING(for -Wincompatible-pointer-types option to gcc)
6265 CFLAGS="$ORIG_CFLAGS -Werror=incompatible-pointer-types"
6271 CFLAGS="$CFLAGS -Werror=return-type"
6274 # Implicit function declarations are not 64 bit safe
6275 # Do this late, since this causes lots of configure tests to fail
6276 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6277 # jay has a lot of implicit declarations
6278 JAY_CFLAGS="-Wno-implicit-function-declaration"
6285 # Update all submodules recursively to ensure everything is checked out
6286 (cd $srcdir && scripts/update_submodules.sh)
6291 acceptance-tests/Makefile
6293 scripts/mono-find-provides
6294 scripts/mono-find-requires
6298 mono/native/Makefile
6300 mono/utils/jemalloc/Makefile
6301 mono/metadata/Makefile
6305 mono/arch/x86/Makefile
6306 mono/arch/amd64/Makefile
6307 mono/arch/ppc/Makefile
6308 mono/arch/sparc/Makefile
6309 mono/arch/s390x/Makefile
6310 mono/arch/arm/Makefile
6311 mono/arch/arm64/Makefile
6312 mono/arch/mips/Makefile
6313 mono/arch/riscv/Makefile
6315 mono/native/platform-type.c
6316 mono/native/platform-type-compat.c
6317 mono/native/platform-type-unified.c
6319 mono/tests/assembly-load-reference/Makefile
6320 mono/tests/tests-config
6321 mono/tests/gc-descriptors/Makefile
6322 mono/tests/testing_gac/Makefile
6323 mono/tests/llvmonly-mixed/Makefile
6324 mono/unit-tests/Makefile
6325 mono/benchmark/Makefile
6327 mono/profiler/Makefile
6329 mono/eglib/eglib-config.h
6330 mono/eglib/test/Makefile
6332 ikvm-native/Makefile
6337 data/net_2_0/Makefile
6338 data/net_4_0/Makefile
6339 data/net_4_5/Makefile
6340 data/net_2_0/Browsers/Makefile
6341 data/net_4_0/Browsers/Makefile
6342 data/net_4_5/Browsers/Makefile
6348 data/mono-options.pc
6349 data/mono-lineeditor.pc
6355 data/system.web.extensions_1.0.pc
6356 data/system.web.extensions.design_1.0.pc
6357 data/system.web.mvc.pc
6358 data/system.web.mvc2.pc
6359 data/system.web.mvc3.pc
6360 data/aspnetwebstack.pc
6366 tools/locale-builder/Makefile
6368 tools/pedump/Makefile
6374 if test x$host_win32 = xyes; then
6375 # Get rid of 'cyg' prefixes in library names
6376 sed -e "s/\/cyg\//\/\//" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6377 # libtool seems to inherit -mno-cygwin from our CFLAGS, and uses it to compile its executable
6378 # wrapper scripts which use exec(). gcc has no problem compiling+linking this, but the resulting
6379 # executable doesn't work...
6380 sed -e "s,-mno-cygwin,,g" libtool > libtool.new; mv libtool.new libtool; chmod 755 libtool
6383 if test x$host_darwin = xyes; then
6384 # This doesn't seem to be required and it slows down parallel builds
6385 sed -e 's,lock_old_archive_extraction=yes,lock_old_archive_extraction=no,g' < libtool > libtool.new && mv libtool.new libtool && chmod +x libtool
6390 NONE) prefix=$ac_default_prefix ;;
6392 case $exec_prefix in
6393 NONE) exec_prefix='${prefix}' ;;
6397 # If we are cross compiling, we don't build in the mcs/ tree. Let us not clobber
6398 # any existing config.make. This allows people to share the same source tree
6399 # with different build directories, one native and one cross
6401 if test x$cross_compiling = xno && test x$enable_mcs_build != xno; then
6403 test -w $mcs_topdir/build || chmod +w $mcs_topdir/build
6405 echo "prefix=$prefix" > $mcs_topdir/build/config.make
6406 echo "exec_prefix=$exec_prefix" >> $mcs_topdir/build/config.make
6407 echo "sysconfdir=$sysconfdir" >> $mcs_topdir/build/config.make
6408 echo 'mono_libdir=${exec_prefix}/lib' >> $mcs_topdir/build/config.make
6409 echo "mono_build_root=$mono_build_root" >> $mcs_topdir/build/config.make
6410 echo 'IL_FLAGS = /debug' >> $mcs_topdir/build/config.make
6411 echo "RUNTIME = $mono_build_root/runtime/mono-wrapper" >> $mcs_topdir/build/config.make
6412 echo "ILDISASM = $mono_build_root/runtime/monodis-wrapper" >> $mcs_topdir/build/config.make
6413 echo "JAY_CFLAGS = $JAY_CFLAGS" >> $mcs_topdir/build/config.make
6416 [[\\/$]]* | ?:[[\\/]]* ) mcs_INSTALL=$INSTALL ;;
6417 *) mcs_INSTALL=$mono_build_root/$INSTALL ;;
6420 echo "INSTALL = $mcs_INSTALL" >> $mcs_topdir/build/config.make
6423 [myver=$($AWK 'BEGIN {
6424 split (ENVIRON["VERSION"] ".0.0.0", vsplit, ".")
6425 if(length(vsplit [1]) > 4) {
6426 split (substr(ENVIRON["VERSION"], 0, 4) "." substr(ENVIRON["VERSION"], 5) ".0.0", vsplit, ".")
6428 print vsplit [1] "." vsplit [2] "." vsplit [3] "." vsplit [4]
6431 echo "MONO_VERSION = $myver" >> $mcs_topdir/build/config.make
6432 echo "MONO_CORLIB_VERSION = $MONO_CORLIB_VERSION" >> $mcs_topdir/build/config.make
6434 if test x$host_darwin = xyes; then
6435 echo "BUILD_PLATFORM = macos" >> $mcs_topdir/build/config.make
6436 echo "HOST_PLATFORM ?= macos" >> $mcs_topdir/build/config.make
6437 echo "XTEST_PLATFORM ?= osx" >> $mcs_topdir/build/config.make
6438 elif test x$host_win32 = xyes; then
6439 echo "BUILD_PLATFORM = win32" >> $mcs_topdir/build/config.make
6440 echo "HOST_PLATFORM ?= win32" >> $mcs_topdir/build/config.make
6441 echo "XTEST_PLATFORM ?= windows" >> $mcs_topdir/build/config.make
6442 elif test x$host_linux = xyes; then
6443 echo "BUILD_PLATFORM = linux" >> $mcs_topdir/build/config.make
6444 echo "HOST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6445 echo "XTEST_PLATFORM ?= linux" >> $mcs_topdir/build/config.make
6447 echo "BUILD_PLATFORM = unix" >> $mcs_topdir/build/config.make
6448 echo "HOST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6449 echo "XTEST_PLATFORM ?= unix" >> $mcs_topdir/build/config.make
6452 if test "x$PLATFORM_AOT_SUFFIX" != "x"; then
6453 echo "PLATFORM_AOT_SUFFIX = $PLATFORM_AOT_SUFFIX" >> $mcs_topdir/build/config.make
6456 if test x$AOT_SUPPORTED = xyes -a x$enable_system_aot = xdefault; then
6457 enable_system_aot=yes
6460 if test x$host_win32 = xno -a x$enable_system_aot = xyes; then
6461 echo "ENABLE_AOT = 1" >> $mcs_topdir/build/config.make
6464 if test x$DISABLE_MCS_DOCS = xyes; then
6465 echo "DISABLE_MCS_DOCS = yes" >> $mcs_topdir/build/config.make
6468 if test x$has_extension_module != xno; then
6469 echo "EXTENSION_MODULE = 1" >> $srcdir/$mcsdir/build/config.make
6472 echo "DEFAULT_PROFILE = $default_profile" >> $srcdir/$mcsdir/build/config.make
6474 if test "x$test_bcl_opt" = "xyes"; then
6475 echo "BCL_OPTIMIZE = 1" >> $srcdir/$mcsdir/build/config.make
6478 echo "STANDALONE_CSC_LOCATION=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6479 echo "SERVER_CSC_LOCATION?=$CSC_LOCATION" >> $srcdir/$mcsdir/build/config.make
6480 echo "VBCS_LOCATION?=" >> $srcdir/$mcsdir/build/config.make
6482 if test $csc_compiler = mcs; then
6483 echo "MCS_MODE = 1" >> $srcdir/$mcsdir/build/config.make
6486 if test "x$AOT_BUILD_FLAGS" != "x" ; then
6487 echo "AOT_RUN_FLAGS=$AOT_RUN_FLAGS" >> $srcdir/$mcsdir/build/config.make
6488 echo "AOT_BUILD_FLAGS=$AOT_BUILD_FLAGS" >> $srcdir/$mcsdir/build/config.make
6489 echo "AOT_BUILD_ATTRS=$AOT_BUILD_ATTRS" >> $srcdir/$mcsdir/build/config.make
6492 if test "x$AOT_MODE" != "x" ; then
6493 echo "AOT_MODE=$AOT_MODE" >> $srcdir/$mcsdir/build/config.make
6496 if test "x$enable_btls" = "xyes"; then
6497 echo "HAVE_BTLS=1" >> $srcdir/$mcsdir/build/config.make
6500 if test "x$mono_native" = "xyes"; then
6501 echo "MONO_NATIVE_SUPPORTED=true" >> $srcdir/$mcsdir/build/config.make
6503 echo "MONO_NATIVE_SUPPORTED=false" >> $srcdir/$mcsdir/build/config.make
6506 if test x$mono_native_compat = xyes; then
6507 echo "MONO_NATIVE_USING_COMPAT=true" >> $srcdir/$mcsdir/build/config.make
6509 echo "MONO_NATIVE_USING_COMPAT=false" >> $srcdir/$mcsdir/build/config.make
6512 echo "MONO_NATIVE_PLATFORM_TYPE=$MONO_NATIVE_PLATFORM_TYPE" >> $srcdir/$mcsdir/build/config.make
6513 echo "MONO_NATIVE_PLATFORM=$MONO_NATIVE_PLATFORM" >> $srcdir/$mcsdir/build/config.make
6514 if test x$enable_compiler_server = xyes; then
6515 echo "ENABLE_COMPILER_SERVER?=1" >> $srcdir/$mcsdir/build/config.make
6517 echo "ENABLE_COMPILER_SERVER?=0" >> $srcdir/$mcsdir/build/config.make
6519 echo "COMPILER_SERVER_PIPENAME?=monomake" >> $srcdir/$mcsdir/build/config.make
6525 libgdiplus_msg=${libgdiplus_loc:-assumed to be installed}
6527 btls_platform_string=
6528 if test x$enable_btls = xyes; then
6529 if test x$btls_android = xyes; then
6530 btls_platform_string=" (android:$BTLS_PLATFORM)"
6532 btls_platform_string=" ($BTLS_PLATFORM)"
6537 if test x$buildsgen = xyes; then
6538 if test x$enable_cooperative_suspend != xno; then
6539 thread_suspend_msg="Suspend: Cooperative"
6540 elif test x$enable_hybrid_suspend != xno; then
6541 thread_suspend_msg="Suspend: Hybrid"
6543 thread_suspend_msg="Suspend: Preemptive"
6549 C# Compiler: $csc_compiler
6557 SIGALTSTACK: $with_sigaltstack
6559 BigArrays: $enable_big_arrays
6560 DTrace: $enable_dtrace
6561 LLVM Back End: $enable_llvm (dynamically loaded: $enable_loadedllvm, built in-tree: $internal_llvm, assertions: $enable_llvm_asserts, msvc only: $enable_llvm_msvc_only)
6562 Spectre: $spectre_mitigation_status
6563 Mono.Native: $mono_native_text
6566 .NET 4.x: $with_profile4_x
6567 Xamarin.Android: $with_monodroid
6568 Xamarin.iOS: $with_monotouch
6569 Xamarin.WatchOS: $with_monotouch_watch
6570 Xamarin.TVOS: $with_monotouch_tv
6571 Xamarin.Mac: $with_xammac
6572 Windows AOT: $with_winaot
6574 Unreal: $with_unreal
6575 WebAssembly: $with_wasm
6576 Test profiles: AOT Full ($with_testing_aot_full), AOT Hybrid ($with_testing_aot_hybrid)
6577 JNI support: $jdk_headers_found
6578 libgdiplus: $libgdiplus_msg
6580 BTLS: $enable_btls$btls_platform_string
6581 jemalloc: $with_jemalloc (always use: $with_jemalloc_always)
6582 crash reporting: $crash_reporting (private crashes: $with_crash_privacy)
6583 .NET Core: $with_core
6586 if test x$with_static_mono = xno -a "x$host_win32" != "xyes"; then
6587 AC_MSG_WARN(Turning off static Mono is a risk, you might run into unexpected bugs)