Use wrappers for accessing socket errors. Cygwin does not have some errors in errno...
[mono.git] / configure.in
index e6361c81056073cc0c8c182bd6811bcf9ff712a1..778441e52fd35784260aa513bd01b26882315792 100644 (file)
@@ -86,6 +86,7 @@ esac
 
 host_win32=no
 target_win32=no
+platform_android=no
 case "$host" in
        *-mingw*|*-*-cygwin*)
                AC_DEFINE(HOST_WIN32,1,[Host Platform is Win32])
@@ -180,6 +181,41 @@ case "$host" in
                with_sigaltstack=no
                use_sigposix=yes
                ;;
+       *-*-linux-android*)
+               host_win32=no
+               platform_android=yes
+               AC_DEFINE(PLATFORM_ANDROID,1,[Targeting the Android platform])
+               AC_DEFINE(TARGET_ANDROID,1,[Targeting the Android platform])
+
+               CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
+               if test "x$disable_munmap" != "xyes"; then
+                       CPPFLAGS="$CPPFLAGS -DUSE_MUNMAP"
+               fi
+               libmono_cflags="-D_REENTRANT"
+               libdl="-ldl"
+               libgc_threads=pthreads
+               use_sigposix=yes
+
+               with_tls=pthread
+               with_sigaltstack=no
+               with_static_mono=no
+
+               # Android doesn't support boehm, as it's missing <link.h>
+               support_boehm=no
+               with_gc=sgen
+
+               # isinf(3) requires -lm; see isinf check below
+               LDFLAGS="$LDFLAGS -lm"
+
+               # Bionic's <pthread.h> sets PTHREAD_STACK_MIN=2*PAGE_SIZE; doesn't define
+               # PAGE_SIZE; breaks mono/io-layer/collection.c
+               # Bionic doesn't provide S_IWRITE; breaks io-layer/io.c
+               CFLAGS="$CFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
+               CXXFLAGS="$CXXFLAGS -DPAGE_SIZE=4096 -DS_IWRITE=S_IWUSR"
+
+               # to bypass the underscore linker check, can't work when cross-compiling
+               mono_cv_uscore=yes
+               ;;
        *-*-linux*)
                host_win32=no
                CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP"
@@ -302,6 +338,7 @@ AM_CONDITIONAL(TARGET_WIN32, test x$target_win32 = xyes)
 AM_CONDITIONAL(PLATFORM_LINUX, echo x$target_os | grep -q linux)
 AM_CONDITIONAL(PLATFORM_DARWIN, test x$platform_darwin = xyes)
 AM_CONDITIONAL(PLATFORM_SIGPOSIX, test x$use_sigposix = xyes)
+AM_CONDITIONAL(PLATFORM_ANDROID, test x$platform_android = xyes)
 
 AC_CHECK_TOOL(CC, gcc, gcc)
 AC_PROG_CC
@@ -459,6 +496,20 @@ if test x"$GCC" = xyes; then
                   AC_MSG_RESULT(no)
                   CFLAGS=$ORIG_CFLAGS
                ])
+
+               ORIG_CFLAGS=$CFLAGS
+               # Check for the normal version, since gcc ignores unknown -Wno options
+               CFLAGS="$CFLAGS -Wunused-but-set-variable"
+               AC_MSG_CHECKING(for -Wno-unused-but-set-variable option to gcc)
+               AC_TRY_COMPILE([], [
+                                                  void main () { }
+               ], [
+                  AC_MSG_RESULT(yes)
+                  CFLAGS="$ORIG_CFLAGS -Wno-unused-but-set-variable"
+               ], [
+                  AC_MSG_RESULT(no)
+                  CFLAGS=$ORIG_CFLAGS
+               ])
 else
        # The Sun Forte compiler complains about inline functions that access static variables
        # so disable all inlining.
@@ -816,6 +867,9 @@ if test x$enable_parallel_mark = xyes; then
        libgc_configure_args="$libgc_configure_args --enable-parallel-mark"
 fi
 
+AC_ARG_ENABLE(boehm, [  --disable-boehm            Disable the Boehm GC.], support_boehm=$enableval,support_boehm=${support_boehm:-yes})
+AM_CONDITIONAL(SUPPORT_BOEHM, test x$support_boehm = xyes)
+
 dnl
 dnl Boehm GC configuration
 dnl
@@ -2302,12 +2356,12 @@ case "$host" in
 esac
 
 if test "x$host" != "x$target"; then
+   AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
    case "$target" in
    powerpc64-ps3-linux-gnu)
                TARGET=POWERPC64
                arch_target=powerpc64
                AC_DEFINE(TARGET_PS3, 1, [...])
-               AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
                # It would be better to just use TARGET_POWERPC64, but lots of code already
                # uses this define
                AC_DEFINE(__mono_ppc64__, 1, [...])
@@ -2320,7 +2374,6 @@ if test "x$host" != "x$target"; then
                TARGET=POWERPC64
                arch_target=powerpc64
                AC_DEFINE(TARGET_XBOX360, 1, [...])
-               AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
                # It would be better to just use TARGET_POWERPC64, but lots of code already
                # uses this define
                sizeof_register=8
@@ -2330,7 +2383,6 @@ if test "x$host" != "x$target"; then
                TARGET=AMD64
                arch_target=amd64
                AC_DEFINE(TARGET_AMD64, 1, [...])
-               AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
                AC_DEFINE(__mono_ilp32__, 1, [64 bit mode with 4 byte longs and pointers])
                sizeof_register=8
                ;;
@@ -2338,6 +2390,7 @@ if test "x$host" != "x$target"; then
                # TEGRA
                TARGET=ARM;
                arch_target=arm;
+               AC_DEFINE(TARGET_ARM, 1, [...])
                ACCESS_UNALIGNED="no"
                JIT_SUPPORTED=yes
                CPPFLAGS="$CPPFLAGS -DARM_FPU_VFP=1 -D__ARM_EABI__"
@@ -2349,6 +2402,7 @@ if test "x$host" != "x$target"; then
    armv5tel-unknown-linux-gnueabi*)
                TARGET=ARM;
                arch_target=arm;
+               AC_DEFINE(TARGET_ARM, 1, [...])
                ACCESS_UNALIGNED="no"
                JIT_SUPPORTED=yes
                CPPFLAGS="$CPPFLAGS -D__ARM_EABI__"
@@ -2357,8 +2411,21 @@ if test "x$host" != "x$target"; then
                # in mono-compiler.h
                with_tls=pthread
                ;;
+   armv5-*-linux-androideabi*)
+               TARGET=ARM;
+               arch_target=arm;
+               AC_DEFINE(TARGET_ARM, 1, [...])
+               AC_DEFINE(TARGET_ANDROID, 1, [...])
+               ACCESS_UNALIGNED="no"
+               JIT_SUPPORTED=yes
+               CPPFLAGS="$CPPFLAGS -D__ARM_EABI__ -DARM_FPU_NONE=1"
+               jit_wanted=true
+               # Can't use tls, since it depends on the runtime detection of tls offset
+               # in mono-compiler.h
+               with_tls=pthread
+               ;;
        *)
-               AC_MSG_WARN([Cross compiling is only supported for targets matching 'powerpc64-{ps3,xbox360}-linux-gnu'])
+               AC_MSG_ERROR([Cross compiling is not supported for target $target])
        esac
 fi
 
@@ -2523,7 +2590,7 @@ fi
 mono_debugger_supported=no
 AC_ARG_ENABLE(mono-debugger, [  --disable-mono-debugger disable support for the mdb debugger], try_mono_debugger=$enableval, try_mono_debugger=yes)
 if test "x$try_mono_debugger" = "xyes"; then
-       if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA"; then
+       if test "x$TARGET" = "xAMD64" -o "x$TARGET" = "xX86" -o "x$TARGET" = "xALPHA" -o "x$TARGET" = "xS390x"; then
                if test x$use_included_gc = xyes; then
                        case "$host" in
                        *-*-*linux*)