From 4349cb57691125bbc24163e6a4f13b981262b2d8 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 10 Oct 2013 21:51:39 -0700 Subject: [PATCH] Fixed bug 2146 - Enable static linking of libSDL on Android Denis Bernard This patch to Android.mk adds support for static linking of libSDL for Android applications. A patched readme with static build instructions is also provided. It does not break existing build environments setup according to the README-android.txt since the static library version will not be built in not required. The static build uses the Android NDK module system (see docs/IMPORT-MODULE.html in the NDK folder and step 5 in the instructions below). Instructions: 1. Copy the android-project directory wherever you want to keep your projects and rename it to the name of your project. 2. Create a symlink to SDL/src/main/android/SDL_android_main.c as /jni/src/SDL_android_main.c 3. Rename /jni/src/Android_static.mk to /jni/src/Android.mk (overwrite the existing one) 4. Edit /jni/src/Android.mk to include your source files 5. create and export an environment variable named NDK_MODULE_PATH that points to the parent directory of this SDL directory. e.g.: export NDK_MODULE_PATH="$PWD"/.. 6. Edit /src/org/libsdl/app/SDLActivity.java and remove the call to System.loadLibrary("SDL2") line 42. 7. Run 'ndk-build' (a script provided by the NDK). This compiles the C source Although this requires an environment variable to be setup, it can be added once and for all to the main Android.mk of the project. --- Android.mk | 17 +++++++++++++++++ README-android.txt | 22 ++++++++++++++++++++++ android-project/jni/src/Android_static.mk | 12 ++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 android-project/jni/src/Android_static.mk diff --git a/Android.mk b/Android.mk index 3cb1e3155300f..c8e67da7b3f79 100755 --- a/Android.mk +++ b/Android.mk @@ -49,3 +49,20 @@ LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog -landroid include $(BUILD_SHARED_LIBRARY) + +########################### +# +# SDL static library +# +########################### + +LOCAL_MODULE := SDL2_static + +LOCAL_MODULE_FILENAME := libSDL2 + +LOCAL_SRC_FILES += $(LOCAL_PATH)/src/main/android/SDL_android_main.c + +LOCAL_LDLIBS := +LOCAL_EXPORT_LDLIBS := -Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit -ldl -lGLESv1_CM -lGLESv2 -llog -landroid + +include $(BUILD_STATIC_LIBRARY) diff --git a/README-android.txt b/README-android.txt index adf3f6465bea4..a161c8407aa61 100644 --- a/README-android.txt +++ b/README-android.txt @@ -110,6 +110,28 @@ android-project/ on this implementation. +================================================================================ + Build an app with static linking of libSDL +================================================================================ + +This build uses the Android NDK module system. + +Instructions: +1. Copy the android-project directory wherever you want to keep your projects + and rename it to the name of your project. +2. Rename /jni/src/Android_static.mk to /jni/src/Android.mk + (overwrite the existing one) +3. Edit /jni/src/Android.mk to include your source files +4. create and export an environment variable named NDK_MODULE_PATH that points + to the parent directory of this SDL directory. e.g.: + + export NDK_MODULE_PATH="$PWD"/.. + +5. Edit /src/org/libsdl/app/SDLActivity.java and remove the call to + System.loadLibrary("SDL2") line 42. +6. Run 'ndk-build' (a script provided by the NDK). This compiles the C source + + ================================================================================ Customizing your application name ================================================================================ diff --git a/android-project/jni/src/Android_static.mk b/android-project/jni/src/Android_static.mk new file mode 100644 index 0000000000000..faed669c0ec0b --- /dev/null +++ b/android-project/jni/src/Android_static.mk @@ -0,0 +1,12 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := main + +LOCAL_SRC_FILES := YourSourceHere.c + +LOCAL_STATIC_LIBRARIES := SDL2_static + +include $(BUILD_SHARED_LIBRARY) +$(call import-module,SDL)LOCAL_PATH := $(call my-dir)