From b190208aa58f2eab7ffa7918453324b290143262 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Mon, 14 Oct 2013 02:35:29 -0700 Subject: [PATCH 1/2] Fix non-Windows headless build. --- headless/Headless.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/headless/Headless.cpp b/headless/Headless.cpp index da2658911f..71784cb441 100644 --- a/headless/Headless.cpp +++ b/headless/Headless.cpp @@ -79,14 +79,13 @@ void printUsage(const char *progname, const char *reason) fprintf(stderr, " -m, --mount umd.cso mount iso on umd:\n"); fprintf(stderr, " -l, --log full log output, not just emulated printfs\n"); - HEADLESSHOST_CLASS h1; - HeadlessHost h2; - if (typeid(h1) != typeid(h2)) +#if HEADLESSHOST_CLASS != HeadlessHost { fprintf(stderr, " --graphics=BACKEND use the full gpu backend (slower)\n"); fprintf(stderr, " options: gles, software, directx9\n"); fprintf(stderr, " --screenshot=FILE compare against a screenshot\n"); } +#endif fprintf(stderr, " --timeout=SECONDS abort test it if takes longer than SECONDS\n"); fprintf(stderr, " -v, --verbose show the full passed/failed result\n"); @@ -100,8 +99,10 @@ static HeadlessHost * getHost(GPUCore gpuCore) { switch(gpuCore) { case GPU_NULL: return new HeadlessHost(); +#ifdef _WIN32 case GPU_DIRECTX9: return new WindowsHeadlessHostDx9(); +#endif default: return new HEADLESSHOST_CLASS(); } From 7fb9d65a082d2035cedd5ebbbb6cdc92f475c3d0 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Mon, 14 Oct 2013 02:39:34 -0700 Subject: [PATCH 2/2] Make it possible to build headless on Android. Use "ab HEADLESS=1", and then you'll have a shiny new ppsspp_headless exexutable which can run tests. --- android/jni/Android.mk | 73 +++++++++++++----------------------------- android/jni/Locals.mk | 49 ++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 51 deletions(-) create mode 100644 android/jni/Locals.mk diff --git a/android/jni/Android.mk b/android/jni/Android.mk index 0728f18c18..1ff3cc6b84 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -21,60 +21,17 @@ include $(CLEAR_VARS) #TARGET_PLATFORM := android-8 -LOCAL_MODULE := ppsspp_jni - NATIVE := ../../native SRC := ../.. -LOCAL_CFLAGS := -DUSE_FFMPEG -DUSE_PROFILER -DUSING_GLES2 -O3 -fsigned-char -Wall -Wno-multichar -Wno-psabi -Wno-unused-variable -fno-strict-aliasing -# yes, it's really CPPFLAGS for C++ -LOCAL_CPPFLAGS := -fno-exceptions -std=gnu++11 -fno-rtti -Wno-reorder -Wno-literal-suffix -LOCAL_C_INCLUDES := \ - $(LOCAL_PATH)/../../Common \ - $(LOCAL_PATH)/../.. \ - $(LOCAL_PATH)/$(NATIVE)/base \ - $(LOCAL_PATH)/$(NATIVE)/ext/libzip \ - $(LOCAL_PATH)/$(NATIVE) \ - $(LOCAL_PATH) - -LOCAL_STATIC_LIBRARIES := native libzip -LOCAL_LDLIBS := -lz -lGLESv2 -lEGL -ldl -llog -ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libavformat.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libavcodec.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libswresample.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libswscale.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libavutil.a -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../ffmpeg/android/armv7/include -LOCAL_CFLAGS += -DARMEABI_V7A -endif -ifeq ($(TARGET_ARCH_ABI),armeabi) -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libavformat.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libavcodec.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libswresample.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libswscale.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libavutil.a -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../ffmpeg/android/armv6/include -LOCAL_CFLAGS += -DARMEABI -endif -ifeq ($(TARGET_ARCH_ABI),x86) -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libavformat.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libavcodec.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libswresample.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libswscale.a -LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libavutil.a -LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../ffmpeg/android/x86/include -endif +include $(LOCAL_PATH)/Locals.mk # $(SRC)/Core/EmuThread.cpp \ # http://software.intel.com/en-us/articles/getting-started-on-optimizing-ndk-project-for-multiple-cpu-architectures - ifeq ($(TARGET_ARCH_ABI),x86) -LOCAL_CFLAGS := $(LOCAL_CFLAGS) -D_M_IX86 -fomit-frame-pointer -mtune=atom -mssse3 - ARCH_FILES := \ $(SRC)/Common/ABI.cpp \ $(SRC)/Common/x64Emitter.cpp \ @@ -93,8 +50,6 @@ endif ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) -LOCAL_CFLAGS := $(LOCAL_CFLAGS) -DARM -DARMV7 - ARCH_FILES := \ $(SRC)/Common/ArmEmitter.cpp \ $(SRC)/Common/ArmCPUDetect.cpp \ @@ -114,8 +69,6 @@ endif ifeq ($(TARGET_ARCH_ABI),armeabi) -LOCAL_CFLAGS := $(LOCAL_CFLAGS) -DARM - ARCH_FILES := \ $(SRC)/Common/ArmEmitter.cpp \ $(SRC)/Common/ArmCPUDetect.cpp \ @@ -133,7 +86,7 @@ ARCH_FILES := \ endif -LOCAL_SRC_FILES := \ +EXEC_AND_LIB_FILES := \ $(ARCH_FILES) \ TestRunner.cpp \ $(SRC)/Core/MIPS/MIPS.cpp.arm \ @@ -148,7 +101,6 @@ LOCAL_SRC_FILES := \ $(SRC)/Core/MIPS/MIPSCodeUtils.cpp.arm \ $(SRC)/Core/MIPS/MIPSDebugInterface.cpp \ $(SRC)/UI/ui_atlas.cpp \ - $(SRC)/UI/NativeApp.cpp \ $(SRC)/UI/DevScreens.cpp \ $(SRC)/UI/EmuScreen.cpp \ $(SRC)/UI/MainScreen.cpp \ @@ -162,7 +114,6 @@ LOCAL_SRC_FILES := \ $(SRC)/UI/ControlMappingScreen.cpp \ $(SRC)/UI/GameSettingsScreen.cpp \ $(SRC)/UI/CwCheatScreen.cpp \ - $(SRC)/native/android/app-android.cpp \ $(SRC)/ext/disarm.cpp \ $(SRC)/ext/libkirk/AES.c \ $(SRC)/ext/libkirk/amctrl.c \ @@ -322,9 +273,29 @@ LOCAL_SRC_FILES := \ $(SRC)/Core/Util/PPGeDraw.cpp \ $(SRC)/git-version.cpp +# These are the files just for ppsspp_jni +LOCAL_MODULE := ppsspp_jni +LOCAL_SRC_FILES := \ + $(EXEC_AND_LIB_FILES) \ + $(SRC)/native/android/app-android.cpp \ + $(SRC)/UI/NativeApp.cpp include $(BUILD_SHARED_LIBRARY) + +ifeq ($(HEADLESS),1) + include $(CLEAR_VARS) + include $(LOCAL_PATH)/Locals.mk + + LOCAL_MODULE := ppsspp_headless + LOCAL_SRC_FILES := \ + $(EXEC_AND_LIB_FILES) \ + $(SRC)/headless/Headless.cpp \ + $(SRC)/headless/Compare.cpp + + include $(BUILD_EXECUTABLE) +endif + $(call import-module,libzip) $(call import-module,native) diff --git a/android/jni/Locals.mk b/android/jni/Locals.mk new file mode 100644 index 0000000000..61e1b601eb --- /dev/null +++ b/android/jni/Locals.mk @@ -0,0 +1,49 @@ +# These are definitions for LOCAL_ variables for PPSSPP. +# They are shared between ppsspp_jni (lib for Android app) and ppsspp_headless. + +LOCAL_CFLAGS := -DUSE_FFMPEG -DUSE_PROFILER -DUSING_GLES2 -O3 -fsigned-char -Wall -Wno-multichar -Wno-psabi -Wno-unused-variable -fno-strict-aliasing +# yes, it's really CPPFLAGS for C++ +LOCAL_CPPFLAGS := -fno-exceptions -std=gnu++11 -fno-rtti -Wno-reorder -Wno-literal-suffix +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../../Common \ + $(LOCAL_PATH)/../.. \ + $(LOCAL_PATH)/$(NATIVE)/base \ + $(LOCAL_PATH)/$(NATIVE)/ext/libzip \ + $(LOCAL_PATH)/$(NATIVE) \ + $(LOCAL_PATH) + +LOCAL_STATIC_LIBRARIES := native libzip +LOCAL_LDLIBS := -lz -lGLESv2 -lEGL -ldl -llog + +ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libavformat.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libavcodec.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libswresample.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libswscale.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv7/lib/libavutil.a + LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../ffmpeg/android/armv7/include + LOCAL_CFLAGS += -DARMEABI_V7A + + LOCAL_CFLAGS := $(LOCAL_CFLAGS) -DARM -DARMV7 +endif +ifeq ($(TARGET_ARCH_ABI),armeabi) + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libavformat.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libavcodec.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libswresample.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libswscale.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/armv6/lib/libavutil.a + LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../ffmpeg/android/armv6/include + LOCAL_CFLAGS += -DARMEABI + + LOCAL_CFLAGS := $(LOCAL_CFLAGS) -DARM +endif +ifeq ($(TARGET_ARCH_ABI),x86) + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libavformat.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libavcodec.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libswresample.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libswscale.a + LOCAL_LDLIBS += $(LOCAL_PATH)/../../ffmpeg/android/x86/lib/libavutil.a + LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../ffmpeg/android/x86/include + + LOCAL_CFLAGS := $(LOCAL_CFLAGS) -D_M_IX86 -fomit-frame-pointer -mtune=atom -mssse3 +endif \ No newline at end of file