Clean up some cross-compilation issues on osx. Add a TARGET_MACH define instead of...
authorZoltan Varga <vargaz@gmail.com>
Tue, 9 Oct 2012 19:36:26 +0000 (21:36 +0200)
committerZoltan Varga <vargaz@gmail.com>
Tue, 9 Oct 2012 19:36:46 +0000 (21:36 +0200)
configure.in
mono/mini/aot-compiler.c
mono/mini/image-writer.c
mono/mini/mini-arm.c

index e6e687ea38a377501e33a3279041745ac4c85ea0..f80df889c6454689acb127dacf49134bb5e71343 100644 (file)
@@ -289,6 +289,7 @@ case "$host" in
                parallel_mark="Disabled_Currently_Hangs_On_MacOSX"
                host_win32=no
                platform_darwin=yes
+               target_mach=yes
                CPPFLAGS="$CPPFLAGS -no-cpp-precomp -D_THREAD_SAFE -DGC_MACOSX_THREADS -DPLATFORM_MACOSX -DUSE_MMAP -DUSE_MUNMAP"
                CPPFLAGS="$CPPFLAGS -DGetCurrentProcess=MonoGetCurrentProcess -DGetCurrentThread=MonoGetCurrentThread -DCreateEvent=MonoCreateEvent"
                libmono_cflags="-D_THREAD_SAFE"
@@ -2430,6 +2431,8 @@ case "$host" in
                ;;
 esac
 
+HOST=$TARGET
+
 if test "x$host" != "x$target"; then
    AC_DEFINE(MONO_CROSS_COMPILE,1,[The runtime is compiled for cross-compiling mode])
    enable_mcs_build=no
@@ -2468,20 +2471,7 @@ if test "x$host" != "x$target"; then
                AC_DEFINE(TARGET_X86, 1, [...])
                sizeof_register=4
                ;;
-   armv7l-unknown-linux-gnueabi*)
-               # 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__"
-               jit_wanted=true
-               # Can't use tls, since it depends on the runtime detection of tls offsets
-               # in mono-compiler.h
-               with_tls=pthread
-               ;;
-   armv5tel-unknown-linux-gnueabi*)
+   arm*-unknown-linux-gnueabi*)
                TARGET=ARM;
                arch_target=arm;
                AC_DEFINE(TARGET_ARM, 1, [...])
@@ -2492,19 +2482,17 @@ if test "x$host" != "x$target"; then
                # Can't use tls, since it depends on the runtime detection of tls offsets
                # 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
+               target_mach=no
+               case "$target" in
+               armv7l-unknown-linux-gnueabi*)
+                       # TEGRA
+                       CPPFLAGS="$CPPFLAGS -DARM_FPU_VFP=1"
+                       ;;
+               armv5-*-linux-androideabi*)
+                       AC_DEFINE(TARGET_ANDROID, 1, [...])
+                       CPPFLAGS="$CPPFLAGS -DARM_FPU_NONE"
+                       ;;
+               esac
                ;;
        *)
                AC_MSG_ERROR([Cross compiling is not supported for target $target])
@@ -2537,6 +2525,10 @@ MIPS)
        ;;
 esac
 
+if test "x$target_mach" = "xyes"; then
+   AC_DEFINE(TARGET_MACH,1,[The JIT/AOT targets Apple platforms])
+fi
+
 if test "x$sizeof_register" = "x4"; then
    AC_DEFINE(SIZEOF_REGISTER,4,[size of machine integer registers])
 elif test "x$sizeof_register" = "x8"; then
@@ -2938,6 +2930,9 @@ AM_CONDITIONAL(ARM, test x$TARGET = xARM)
 AM_CONDITIONAL(S390, test x$TARGET = xS390)
 AM_CONDITIONAL(S390x, test x$TARGET = xS390x)
 AM_CONDITIONAL(HPPA, test x$TARGET = xHPPA)
+AM_CONDITIONAL(HOST_X86, test x$HOST = xX86)
+AM_CONDITIONAL(HOST_AMD64, test x$HOST = xAMD64)
+AM_CONDITIONAL(HOST_ARM, test x$HOST = xARM)
 
 AM_CONDITIONAL(JIT_SUPPORTED, test x$JIT_SUPPORTED = xyes)
 AM_CONDITIONAL(INTERP_SUPPORTED, test x$interp_wanted = xtrue)
index 9baed117d030b9a265c673ae3cfe37b6252fb3b3..9502e543c77e61f9e22497bc883a6b1bb815ffe6 100644 (file)
@@ -80,9 +80,9 @@
 
 #ifdef TARGET_WIN32
 #define SHARED_EXT ".dll"
-#elif defined(__ppc__) && defined(__APPLE__)
+#elif defined(__ppc__) && defined(TARGET_MACH)
 #define SHARED_EXT ".dylib"
-#elif defined(__APPLE__) && defined(TARGET_X86) && !defined(__native_client_codegen__)
+#elif defined(TARGET_MACH) && defined(TARGET_X86) && !defined(__native_client_codegen__)
 #define SHARED_EXT ".dylib"
 #else
 #define SHARED_EXT ".so"
@@ -407,7 +407,7 @@ static void
 emit_string_symbol (MonoAotCompile *acfg, const char *name, const char *value)
 {
        img_writer_emit_section_change (acfg->w, RODATA_SECT, 1);
-#ifdef __APPLE__
+#ifdef TARGET_MACH
        /* On apple, all symbols need to be aligned to avoid warnings from ld */
        emit_alignment (acfg, 4);
 #endif
@@ -531,7 +531,7 @@ encode_sleb128 (gint32 value, guint8 *buf, guint8 **endbuf)
 #endif
 
 #ifdef TARGET_ARM
-#ifdef __MACH__
+#ifdef TARGET_MACH
 #define AOT_TARGET_STR "ARM (MACH)"
 #else
 #define AOT_TARGET_STR "ARM (!MACH)"
@@ -587,7 +587,7 @@ arch_init (MonoAotCompile *acfg)
                g_string_append (acfg->llc_args, "-mattr=+v6");
        } else {
 #ifdef ARM_FPU_VFP
-               g_string_append (acfg->llc_args, " -mattr=+vfp2,+d16");
+               g_string_append (acfg->llc_args, " -mattr=+vfp2,-neon,+d16");
                g_string_append (acfg->as_args, " -mfpu=vfp3");
 #else
                g_string_append (acfg->llc_args, " -soft-float");
@@ -600,7 +600,7 @@ arch_init (MonoAotCompile *acfg)
                mono_arch_set_target (acfg->aot_opts.mtriple);
 #endif
 
-#ifdef __APPLE__
+#ifdef TARGET_MACH
        acfg->llvm_label_prefix = "_";
        acfg->need_no_dead_strip = TRUE;
 #endif
@@ -2513,7 +2513,7 @@ is_plt_patch (MonoJumpInfo *patch_info)
 static char*
 get_plt_symbol (MonoAotCompile *acfg, int plt_offset, MonoJumpInfo *patch_info)
 {
-#ifdef __APPLE__
+#ifdef TARGET_MACH
        /* 
         * The Apple linker reorganizes object files, so it doesn't like branches to local
         * labels, since those have no relocations.
@@ -3838,7 +3838,7 @@ emit_and_reloc_code (MonoAotCompile *acfg, MonoMethod *method, guint8 *code, gui
                                                        direct_pinvoke = get_pinvoke_import (acfg, patch_info->data.method);
                                                if (direct_pinvoke) {
                                                        const char*prefix;
-#if defined(__APPLE__)
+#if defined(TARGET_MACH)
                                                        prefix = "_";
 #else
                                                        prefix = "";
@@ -4804,7 +4804,7 @@ emit_plt (MonoAotCompile *acfg)
                        }
 
                        if (debug_sym) {
-#if defined(__APPLE__)
+#if defined(TARGET_MACH)
                                fprintf (acfg->fp, "    .thumb_func %s\n", debug_sym);
                                fprintf (acfg->fp, "    .no_dead_strip %s\n", debug_sym);
 #endif
@@ -5838,7 +5838,7 @@ mono_aot_get_plt_symbol (MonoJumpInfoType type, gconstpointer data)
        plt_entry = get_plt_entry (llvm_acfg, ji);
        plt_entry->llvm_used = TRUE;
 
-#if defined(__APPLE__)
+#if defined(TARGET_MACH)
        return g_strdup_printf (plt_entry->llvm_symbol + strlen (llvm_acfg->llvm_label_prefix));
 #else
        return g_strdup_printf (plt_entry->llvm_symbol);
@@ -6867,7 +6867,7 @@ emit_globals (MonoAotCompile *acfg)
 
                sprintf (symbol, "name_%d", i);
                emit_section_change (acfg, RODATA_SECT, 1);
-#ifdef __APPLE__
+#ifdef TARGET_MACH
                emit_alignment (acfg, 4);
 #endif
                emit_label (acfg, symbol);
@@ -7043,7 +7043,7 @@ emit_file_info (MonoAotCompile *acfg)
        for (i = 0; i < MONO_AOT_TRAMP_NUM; ++i)
                emit_int32 (acfg, acfg->trampoline_size [i]);
 
-#if defined (TARGET_ARM) && defined (__APPLE__)
+#if defined (TARGET_ARM) && defined (TARGET_MACH)
        {
                MonoType t;
                int align = 0;
@@ -7071,7 +7071,7 @@ emit_file_info (MonoAotCompile *acfg)
                 * mono_aot_register_module (). The symbol points to a pointer to the the file info
                 * structure.
                 */
-#if defined(__APPLE__) && !defined(__native_client_codegen__)
+#if defined(TARGET_MACH) && !defined(__native_client_codegen__)
                sprintf (symbol, "_mono_aot_module_%s_info", acfg->image->assembly->aname.name);
 #else
                sprintf (symbol, "mono_aot_module_%s_info", acfg->image->assembly->aname.name);
@@ -7258,7 +7258,7 @@ compile_asm (MonoAotCompile *acfg)
 #define LD_OPTIONS "-m elf64ppc"
 #elif defined(sparc) && SIZEOF_VOID_P == 8
 #define AS_OPTIONS "-xarch=v9"
-#elif defined(TARGET_X86) && defined(__APPLE__) && !defined(__native_client_codegen__)
+#elif defined(TARGET_X86) && defined(TARGET_MACH) && !defined(__native_client_codegen__)
 #define AS_OPTIONS "-arch i386 -W"
 #else
 #define AS_OPTIONS ""
@@ -7321,11 +7321,11 @@ compile_asm (MonoAotCompile *acfg)
 
 #if defined(sparc)
        command = g_strdup_printf ("ld -shared -G -o %s %s.o", tmp_outfile_name, acfg->tmpfname);
-#elif defined(__ppc__) && defined(__APPLE__)
+#elif defined(__ppc__) && defined(TARGET_MACH)
        command = g_strdup_printf ("gcc -dynamiclib -o %s %s.o", tmp_outfile_name, acfg->tmpfname);
 #elif defined(HOST_WIN32)
        command = g_strdup_printf ("gcc -shared --dll -mno-cygwin -o %s %s.o", tmp_outfile_name, acfg->tmpfname);
-#elif defined(TARGET_X86) && defined(__APPLE__) && !defined(__native_client_codegen__)
+#elif defined(TARGET_X86) && defined(TARGET_MACH) && !defined(__native_client_codegen__)
        command = g_strdup_printf ("gcc -m32 -dynamiclib -o %s %s.o", tmp_outfile_name, acfg->tmpfname);
 #else
        command = g_strdup_printf ("%sld %s %s -shared -o %s %s.o", tool_prefix, EH_LD_OPTIONS, LD_OPTIONS, tmp_outfile_name, acfg->tmpfname);
@@ -7346,7 +7346,7 @@ compile_asm (MonoAotCompile *acfg)
        system (com);
        g_free (com);*/
 
-#if defined(TARGET_ARM) && !defined(__APPLE__)
+#if defined(TARGET_ARM) && !defined(TARGET_MACH)
        /* 
         * gas generates 'mapping symbols' each time code and data is mixed, which 
         * happens a lot in emit_and_reloc_code (), so we need to get rid of them.
@@ -7364,7 +7364,7 @@ compile_asm (MonoAotCompile *acfg)
 
        rename (tmp_outfile_name, outfile_name);
 
-#if defined(__APPLE__)
+#if defined(TARGET_MACH)
        command = g_strdup_printf ("dsymutil %s", outfile_name);
        printf ("Generating debug symbols: %s\n", command);
        if (system (command) != 0) {
index 1506972c78aeab7dab20127b7ac8b2f69839b026..de9413a871dcde746f3965788e0afb8f1598f300 100644 (file)
@@ -53,7 +53,7 @@
  * TARGET_ASM_GAS == GNU assembler
  */
 #if !defined(TARGET_ASM_APPLE) && !defined(TARGET_ASM_GAS)
-#if defined(__MACH__) && !defined(__native_client_codegen__)
+#if defined(TARGET_MACH) && !defined(__native_client_codegen__)
 #define TARGET_ASM_APPLE
 #else
 #define TARGET_ASM_GAS
@@ -63,7 +63,7 @@
 /*
  * Defines for the directives used by different assemblers
  */
-#if defined(TARGET_POWERPC) || defined(__MACH__)
+#if defined(TARGET_POWERPC) || defined(TARGET_MACH)
 #define AS_STRING_DIRECTIVE ".asciz"
 #else
 #define AS_STRING_DIRECTIVE ".string"
 #define USE_ELF_WRITER 1
 #endif
 
-#if defined(TARGET_ARM) && !defined(__MACH__)
+#if defined(TARGET_ARM) && !defined(TARGET_MACH)
 #define USE_ELF_WRITER 1
 #endif
 
index 7221fc963135dd9383597d21e0b8aa32e89cdfe3..762a178c195873d3931ea8aa52a4b4dd5c3fbfa7 100644 (file)
@@ -886,7 +886,8 @@ mono_arch_regalloc_cost (MonoCompile *cfg, MonoMethodVar *vmv)
 void
 mono_arch_flush_icache (guint8 *code, gint size)
 {
-#if __APPLE__
+#ifdef MONO_CROSS_COMPILE
+#elif __APPLE__
        sys_icache_invalidate (code, size);
 #elif __GNUC_PREREQ(4, 1)
        __clear_cache (code, code + size);