From ac2501549fdcab020db6c91db7b45647161e3505 Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Mon, 3 Mar 2014 14:06:00 +0200 Subject: [PATCH] Initial support for android-x86 (no idea if this actually works) This is ugly, done via HOST_NO_REC, NOT_ARM. Only if I had merged the clean-makefiles work before rls... Oh well. --- core/build.h | 10 +++++----- core/core.mk | 14 ++++++++++++-- core/hw/arm7/arm7.cpp | 8 ++++---- core/linux/common.cpp | 6 +++++- core/linux/nixprof.cpp | 11 ++++++++--- shell/android/jni/Android.mk | 5 +++++ shell/android/jni/Application.mk | 4 ++-- shell/android/jni/src/Android.cpp | 2 ++ 8 files changed, 43 insertions(+), 17 deletions(-) diff --git a/core/build.h b/core/build.h index bde50e576..9c6a1b51b 100755 --- a/core/build.h +++ b/core/build.h @@ -45,10 +45,6 @@ #define COMPILER_VC 0x30000001 #define COMPILER_GCC 0x30000002 -/// -#if (!defined(TARGET_WIN86) && !defined(TARGET_BEAGLE) && !defined(TARGET_NACL32) && !defined(TARGET_GCW0) && !defined(TARGET_PANDORA)) - #define TARGET_WIN86 -#endif #ifdef TARGET_WIN86 #define HOST_OS OS_WINDOWS @@ -58,10 +54,14 @@ #define HOST_OS OS_LINUX #define HOST_CPU CPU_ARM #define BUILD_COMPILER COMPILER_GCC -#elif TARGET_BEAGLE +#elif TARGET_LINUX_ARMELv7 #define HOST_OS OS_LINUX #define HOST_CPU CPU_ARM #define BUILD_COMPILER COMPILER_GCC +#elif TARGET_LINUX_x86 + #define HOST_OS OS_LINUX + #define HOST_CPU CPU_X86 + #define BUILD_COMPILER COMPILER_GCC #elif TARGET_GCW0 #define HOST_OS OS_LINUX #define HOST_CPU CPU_MIPS diff --git a/core/core.mk b/core/core.mk index 0b337ab30..296b0b7f5 100755 --- a/core/core.mk +++ b/core/core.mk @@ -51,8 +51,18 @@ RZDCY_CXXFLAGS := \ else RZDCY_CXXFLAGS := \ $(CFLAGS) -c -g -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \ - -D_ANDROID -DRELEASE -DTARGET_BEAGLE\ - -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 \ + -D_ANDROID -DRELEASE\ -frename-registers -fsingle-precision-constant -ffast-math \ -ftree-vectorize -fomit-frame-pointer -fno-exceptions -fno-rtti -std=gnu++11 + + ifndef NOT_ARM + RZDCY_CXXFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 + RZDCY_CXXFLAGS += -DTARGET_LINUX_ARMELv7 + else + RZDCY_CXXFLAGS += -DTARGET_LINUX_x86 + endif +endif + +ifdef NO_REC + RZDCY_CXXFLAGS += -DHOST_NO_REC endif \ No newline at end of file diff --git a/core/hw/arm7/arm7.cpp b/core/hw/arm7/arm7.cpp index c43171f9c..2ddb37c1d 100644 --- a/core/hw/arm7/arm7.cpp +++ b/core/hw/arm7/arm7.cpp @@ -789,7 +789,7 @@ u32 DYNACALL DoMemOp(u32 addr,u32 data) { u32 rv=0; -#if HOST_CPU==CPU_X86 +#if HOST_CPU==CPU_X86 && !defined(HOST_NO_REC) addr=virt_arm_reg(0); data=virt_arm_reg(1); #endif @@ -809,7 +809,7 @@ u32 DYNACALL DoMemOp(u32 addr,u32 data) arm_WriteMem32(addr,data); } - #if HOST_CPU==CPU_X86 + #if HOST_CPU==CPU_X86 && !defined(HOST_NO_REC) virt_arm_reg(0)=rv; #endif @@ -817,7 +817,7 @@ u32 DYNACALL DoMemOp(u32 addr,u32 data) } //findfirstset -- used in LDM/STM handling -#if HOST_CPU==CPU_X86 +#if HOST_CPU==CPU_X86 && BUILD_COMPILER != COMPILER_GCC #include u32 findfirstset(u32 v) @@ -2086,7 +2086,7 @@ void FlushCache() -#if HOST_CPU==CPU_X86 +#if HOST_CPU==CPU_X86 && HOST_OS == OS_WINDOWS #include diff --git a/core/linux/common.cpp b/core/linux/common.cpp index d30909dab..697238f2b 100644 --- a/core/linux/common.cpp +++ b/core/linux/common.cpp @@ -34,8 +34,12 @@ struct sigcontext uc_mcontext; #if HOST_CPU == CPU_ARM #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.arm_pc) -#else +#elif HOST_CPU == CPU_MIPS #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.pc) +#elif HOST_CPU == CPU_X86 +#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.eip) +#else +#error fix ->pc support #endif #include "hw/sh4/dyna/ngen.h" diff --git a/core/linux/nixprof.cpp b/core/linux/nixprof.cpp index e2461a525..4d5b18bea 100644 --- a/core/linux/nixprof.cpp +++ b/core/linux/nixprof.cpp @@ -58,12 +58,14 @@ typedef struct ucontext_t #if HOST_CPU == CPU_ARM #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.arm_pc) -#else +#elif HOST_CPU == CPU_MIPS #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.pc) +#elif HOST_CPU == CPU_X86 +#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.eip) +#else +#error fix ->pc support #endif - - /** @file CallStack_Android.h @brief Getting the callstack under Android @@ -275,7 +277,10 @@ void* prof(void *ptr) //Write shrec syms file ! prof_head(prof_out, "jitsym", "SH4"); + + #if !defined(HOST_NO_REC) sh4_jitsym(prof_out); + #endif //Write arm7rec syms file ! -> to do //prof_head(prof_out,"jitsym","ARM7"); diff --git a/shell/android/jni/Android.mk b/shell/android/jni/Android.mk index c11c6fb67..8b3e8042e 100644 --- a/shell/android/jni/Android.mk +++ b/shell/android/jni/Android.mk @@ -21,6 +21,11 @@ include $(CLEAR_VARS) FOR_ANDROID := 1 +ifneq ($(TARGET_ARCH_ABI),armeabi-v7a) + NOT_ARM := 1 + NO_REC := 1 +endif + include $(LOCAL_PATH)/../../core/core.mk LOCAL_SRC_FILES := $(RZDCY_FILES) $(wildcard $(LOCAL_PATH)/jni/src/*.cpp) diff --git a/shell/android/jni/Application.mk b/shell/android/jni/Application.mk index 8d449d9be..92b2234e2 100644 --- a/shell/android/jni/Application.mk +++ b/shell/android/jni/Application.mk @@ -1,5 +1,5 @@ APP_STL := stlport_static -#APP_ABI := armeabi-v7a x86 -APP_ABI := armeabi-v7a +APP_ABI := armeabi-v7a x86 +#APP_ABI := armeabi-v7a APP_PLATFORM := android-18 NDK_TOOLCHAIN_VERSION := 4.8 \ No newline at end of file diff --git a/shell/android/jni/src/Android.cpp b/shell/android/jni/src/Android.cpp index 71488a4f1..d54e092f9 100644 --- a/shell/android/jni/src/Android.cpp +++ b/shell/android/jni/src/Android.cpp @@ -369,8 +369,10 @@ JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_send(JNIEnv *env,jobj } if (param==2) { + #if !defined(HOST_NO_REC) print_stats=true; printf("Storing blocks ...\n"); + #endif } } else if (cmd==1)