Android.mk
author Sam Lantinga <slouken@libsdl.org>
Thu, 10 Oct 2013 21:51:39 -0700
changeset 7804 1f85fb33694b
parent 7793 6463a850229d
child 8097 d4e916b1c135
permissions -rwxr-xr-x
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
<project>/jni/src/SDL_android_main.c
3. Rename <project>/jni/src/Android_static.mk to <project>/jni/src/Android.mk
(overwrite the existing one)
4. Edit <project>/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 <project>/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.
slouken@4964
     1
LOCAL_PATH := $(call my-dir)
slouken@4964
     2
slouken@4964
     3
###########################
slouken@4964
     4
#
slouken@4964
     5
# SDL shared library
slouken@4964
     6
#
slouken@4964
     7
###########################
slouken@4964
     8
slouken@4964
     9
include $(CLEAR_VARS)
slouken@4964
    10
slouken@6270
    11
LOCAL_MODULE := SDL2
slouken@4964
    12
slouken@4964
    13
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
slouken@4964
    14
slouken@7311
    15
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
slouken@7311
    16
slouken@5090
    17
LOCAL_SRC_FILES := \
slouken@4964
    18
	$(subst $(LOCAL_PATH)/,, \
slouken@4964
    19
	$(wildcard $(LOCAL_PATH)/src/*.c) \
slouken@4964
    20
	$(wildcard $(LOCAL_PATH)/src/audio/*.c) \
slouken@5090
    21
	$(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \
slouken@5090
    22
	$(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \
slouken@5003
    23
	$(LOCAL_PATH)/src/atomic/SDL_atomic.c \
slouken@5003
    24
	$(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \
ewing@7501
    25
	$(wildcard $(LOCAL_PATH)/src/core/android/*.c) \
slouken@4964
    26
	$(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \
slouken@4964
    27
	$(wildcard $(LOCAL_PATH)/src/events/*.c) \
slouken@4964
    28
	$(wildcard $(LOCAL_PATH)/src/file/*.c) \
slouken@5090
    29
	$(wildcard $(LOCAL_PATH)/src/haptic/*.c) \
slouken@5090
    30
	$(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \
slouken@4964
    31
	$(wildcard $(LOCAL_PATH)/src/joystick/*.c) \
slouken@5090
    32
	$(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \
slouken@5092
    33
	$(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \
slouken@5090
    34
	$(wildcard $(LOCAL_PATH)/src/power/*.c) \
slouken@6448
    35
	$(wildcard $(LOCAL_PATH)/src/power/android/*.c) \
icculus@7667
    36
	$(wildcard $(LOCAL_PATH)/src/filesystem/dummy/*.c) \
slouken@5161
    37
	$(wildcard $(LOCAL_PATH)/src/render/*.c) \
slouken@5204
    38
	$(wildcard $(LOCAL_PATH)/src/render/*/*.c) \
slouken@4964
    39
	$(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \
slouken@4964
    40
	$(wildcard $(LOCAL_PATH)/src/thread/*.c) \
slouken@5090
    41
	$(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \
slouken@4964
    42
	$(wildcard $(LOCAL_PATH)/src/timer/*.c) \
slouken@5090
    43
	$(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \
slouken@4964
    44
	$(wildcard $(LOCAL_PATH)/src/video/*.c) \
gabomdq@7793
    45
	$(wildcard $(LOCAL_PATH)/src/video/android/*.c) \
gabomdq@7793
    46
    $(wildcard $(LOCAL_PATH)/src/test/*.c))
slouken@4964
    47
slouken@6208
    48
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES
gabomdq@7659
    49
LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog -landroid
slouken@4964
    50
slouken@4964
    51
include $(BUILD_SHARED_LIBRARY)
slouken@7804
    52
slouken@7804
    53
###########################
slouken@7804
    54
#
slouken@7804
    55
# SDL static library
slouken@7804
    56
#
slouken@7804
    57
###########################
slouken@7804
    58
slouken@7804
    59
LOCAL_MODULE := SDL2_static
slouken@7804
    60
slouken@7804
    61
LOCAL_MODULE_FILENAME := libSDL2
slouken@7804
    62
slouken@7804
    63
LOCAL_SRC_FILES += $(LOCAL_PATH)/src/main/android/SDL_android_main.c
slouken@7804
    64
slouken@7804
    65
LOCAL_LDLIBS := 
slouken@7804
    66
LOCAL_EXPORT_LDLIBS := -Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit -ldl -lGLESv1_CM -lGLESv2 -llog -landroid
slouken@7804
    67
slouken@7804
    68
include $(BUILD_STATIC_LIBRARY)