Building SDL2 and other SDL libs for Android - need advice

So I’m trying to build SDL2, SDL2_mixer, SDL2_ttf, and SDL2_image for Android using the android NDK.

I’m at the point where I’m using the Android.mk files with ndk-build. I thought SDL2 had built fine; but since I can’t get any of the other libraries to build from it (they all fail after linking or trying to find an include file) I’m assuming I did not do the initial SDL2 build correctly.

I’m using Cygwin and followed the following steps:

  1. Download and install the NDK.
  2. Create the toolchain directories.
  3. Download and extracted the source for SDL 2.0.1
  4. In cygwin navigated to the SDL 2.0.1 folder where the Android.mk file is located
  5. Run the Android.mk file using the following command:

/cygdrive/h/programming/android/android-ndk-r9c/ndk-build V=1 clean all all NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk \ APP_PLATFORM=android-19

Results are here: http://pastebin.com/WYPhWuzT

But no errors that I see and I get a libSDL2.so file.

  1. Take the libSDL2.so file place it in the root directory of the next projects extracted source

  2. Edit the Android.mk file in SDL2_mixer2.0.0 like so:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := SDL2_mixer

Enable this if you want to support loading MOD music via modplug

The library path should be a relative path to this directory.

SUPPORT_MOD_MODPLUG := false
MODPLUG_LIBRARY_PATH := external/libmodplug-0.8.8.4

Enable this if you want to support loading MOD music via mikmod

The library path should be a relative path to this directory.

SUPPORT_MOD_MIKMOD := false
MIKMOD_LIBRARY_PATH := external/libmikmod-3.1.12

Enable this if you want to support loading MP3 music via SMPEG

The library path should be a relative path to this directory.

SUPPORT_MP3_SMPEG := false
SMPEG_LIBRARY_PATH := external/smpeg2-2.0.0

Enable this if you want to support loading OGG Vorbis music via Tremor

The library path should be a relative path to this directory.

SUPPORT_OGG := false
OGG_LIBRARY_PATH := external/libogg-1.3.1
VORBIS_LIBRARY_PATH := external/libvorbisidec-1.2.1

LOCAL_C_INCLUDES := $(LOCAL_PATH)
…/SDL2-2.0.1/include
LOCAL_CFLAGS := -DWAV_MUSIC

LOCAL_SRC_FILES := $(notdir $(filter-out %/playmus.c %/playwave.c, $(wildcard $(LOCAL_PATH)/*.c)))

LOCAL_LDLIBS :=
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := SDL2.so

ifeq ($(SUPPORT_MOD_MODPLUG),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(MODPLUG_LIBRARY_PATH)/src $(LOCAL_PATH)/$(MODPLUG_LIBRARY_PATH)/src/libmodplug
LOCAL_CFLAGS += -DMODPLUG_MUSIC -DHAVE_SETENV -DHAVE_SINF
LOCAL_SRC_FILES +=
$(MODPLUG_LIBRARY_PATH)/src/fastmix.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_669.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_abc.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_amf.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_ams.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_dbm.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_dmf.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_dsm.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_far.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_it.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_j2b.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_mdl.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_med.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_mid.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_mod.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_mt2.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_mtm.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_okt.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_pat.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_psm.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_ptm.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_s3m.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_stm.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_ult.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_umx.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_wav.cpp
$(MODPLUG_LIBRARY_PATH)/src/load_xm.cpp
$(MODPLUG_LIBRARY_PATH)/src/mmcmp.cpp
$(MODPLUG_LIBRARY_PATH)/src/modplug.cpp
$(MODPLUG_LIBRARY_PATH)/src/snd_dsp.cpp
$(MODPLUG_LIBRARY_PATH)/src/snd_flt.cpp
$(MODPLUG_LIBRARY_PATH)/src/snd_fx.cpp
$(MODPLUG_LIBRARY_PATH)/src/sndfile.cpp
$(MODPLUG_LIBRARY_PATH)/src/sndmix.cpp
endif

ifeq ($(SUPPORT_MOD_MIKMOD),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(MIKMOD_LIBRARY_PATH)/include
LOCAL_CFLAGS += -DMOD_MUSIC
LOCAL_SHARED_LIBRARIES += mikmod
endif

ifeq ($(SUPPORT_MP3_SMPEG),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(SMPEG_LIBRARY_PATH)
LOCAL_CFLAGS += -DMP3_MUSIC
LOCAL_SHARED_LIBRARIES += smpeg2
endif

ifeq ($(SUPPORT_OGG),true)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(OGG_LIBRARY_PATH)/include $(LOCAL_PATH)/$(VORBIS_LIBRARY_PATH)
LOCAL_CFLAGS += -DOGG_MUSIC -DOGG_USE_TREMOR
LOCAL_SRC_FILES +=
$(VORBIS_LIBRARY_PATH)/mdct.c
$(VORBIS_LIBRARY_PATH)/block.c
$(VORBIS_LIBRARY_PATH)/window.c
$(VORBIS_LIBRARY_PATH)/synthesis.c
$(VORBIS_LIBRARY_PATH)/info.c
$(VORBIS_LIBRARY_PATH)/floor1.c
$(VORBIS_LIBRARY_PATH)/floor0.c
$(VORBIS_LIBRARY_PATH)/vorbisfile.c
$(VORBIS_LIBRARY_PATH)/res012.c
$(VORBIS_LIBRARY_PATH)/mapping0.c
$(VORBIS_LIBRARY_PATH)/registry.c
$(VORBIS_LIBRARY_PATH)/codebook.c
$(VORBIS_LIBRARY_PATH)/sharedbook.c
$(OGG_LIBRARY_PATH)/src/framing.c
$(OGG_LIBRARY_PATH)/src/bitwise.c
endif

LOCAL_EXPORT_C_INCLUDES += $(LOCAL_C_INCLUDES)

include $(BUILD_SHARED_LIBRARY)

  1. Run the Android.mk file using the following command:

/cygdrive/h/programming/android/android-ndk-r9c/ndk-build V=1 clean all all NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk \ APP_PLATFORM=android-19

And the results are here: http://pastebin.com/4DBra7iD

This is all new to me but I’m assuming those are errors during the linking process. I get similar results when trying to build SDL2_ttf as well so my guess is I have messed up in building the original SDL2.so.

I have been working on this for about 8 hours trying several different tutorials and instructions and searching for similar issues but I have not been able to find out what I am doing wrong.