From 7fb9d65a082d2035cedd5ebbbb6cdc92f475c3d0 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Mon, 14 Oct 2013 02:39:34 -0700 Subject: [PATCH] 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