but we can now create shared objects for each project; only the testsuite is not building properly because of issues with STLport, and EglApp is deactivated because AndroidApp should have precedence.legacy
| @@ -0,0 +1,10 @@ | |||||
| #!/bin/sh | |||||
| # This can't hurt | |||||
| make distclean | |||||
| set -e | |||||
| ./build/lol-build bootstrap android-arm | |||||
| ./build/lol-build configure android-arm | |||||
| ./build/lol-build build android-arm | |||||
| @@ -79,9 +79,6 @@ bootstrap() | |||||
| ios-arm) | ios-arm) | ||||
| # No bootstrapping needed | # No bootstrapping needed | ||||
| ;; | ;; | ||||
| android-arm) | |||||
| # No bootstrapping needed | |||||
| ;; | |||||
| *) | *) | ||||
| PATH="$PATH" M4PATH="$M4PATH" ./bootstrap | PATH="$PATH" M4PATH="$M4PATH" ./bootstrap | ||||
| ;; | ;; | ||||
| @@ -156,8 +153,17 @@ configure() | |||||
| # No configuration needed | # No configuration needed | ||||
| ;; | ;; | ||||
| android-arm) | android-arm) | ||||
| cd monsterz/android | |||||
| android update project --path . | |||||
| ./configure --host=arm-linux-androideabi ac_cv_exeext=.so \ | |||||
| CPPFLAGS="-Wno-psabi -I$ANDROID_NDK_ROOT/sources/cxx-stl/stlport/stlport -I$ANDROID_NDK_ROOT/sources/cxx-stl/gabi++/include -fpic -fno-exceptions -fno-rtti -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64" \ | |||||
| CFLAGS="-march=armv5te -mtune=xscale -msoft-float -mthumb" \ | |||||
| CXXFLAGS="-march=armv5te -mtune=xscale -msoft-float -mthumb" \ | |||||
| LOL_LIBS="-L$ANDROID_NDK_ROOT/sources/cxx-stl/stlport/libs/armeabi -lstlport_shared -lm -fpic -XCClinker -shared" | |||||
| # FIXME: is this needed? | |||||
| # android update project --path . | |||||
| # ndk-build | |||||
| # ant compile | |||||
| # ndk-build distclean | |||||
| # ant clean | |||||
| ;; | ;; | ||||
| raspi-arm) | raspi-arm) | ||||
| ./configure --host=arm-bcm2708hardfp-linux-gnueabi CPPFLAGS="-I$RASPI_SDK_ROOT/firmware/opt/vc/include -I$RASPI_SDK_ROOT/firmware/opt/vc/include/interface/vcos/pthreads" LDFLAGS="-L$RASPI_SDK_ROOT/firmware/opt/vc/lib" | ./configure --host=arm-bcm2708hardfp-linux-gnueabi CPPFLAGS="-I$RASPI_SDK_ROOT/firmware/opt/vc/include -I$RASPI_SDK_ROOT/firmware/opt/vc/include/interface/vcos/pthreads" LDFLAGS="-L$RASPI_SDK_ROOT/firmware/opt/vc/lib" | ||||
| @@ -209,11 +215,6 @@ build() | |||||
| cd monsterz/ios | cd monsterz/ios | ||||
| xcodebuild -configuration Release -sdk iphonesimulator4.3 | xcodebuild -configuration Release -sdk iphonesimulator4.3 | ||||
| ;; | ;; | ||||
| android-arm) | |||||
| cd monsterz/android | |||||
| ndk-build | |||||
| ant compile | |||||
| ;; | |||||
| *) | *) | ||||
| make -j$LOL_PARALLEL | make -j$LOL_PARALLEL | ||||
| ;; | ;; | ||||
| @@ -261,11 +262,6 @@ clean() | |||||
| cd monsterz/ios | cd monsterz/ios | ||||
| xcodebuild -configuration Release -sdk iphonesimulator4.3 clean | xcodebuild -configuration Release -sdk iphonesimulator4.3 clean | ||||
| ;; | ;; | ||||
| android-arm) | |||||
| cd monsterz/android | |||||
| ndk-build distclean | |||||
| ant clean | |||||
| ;; | |||||
| *) | *) | ||||
| make distclean | make distclean | ||||
| ;; | ;; | ||||
| @@ -196,8 +196,10 @@ fi | |||||
| if test "x${ac_cv_my_stop_looking_for_gl}" = "xno"; then | if test "x${ac_cv_my_stop_looking_for_gl}" = "xno"; then | ||||
| AC_CHECK_HEADER(GLES2/gl2.h, | AC_CHECK_HEADER(GLES2/gl2.h, | ||||
| [AC_DEFINE(HAVE_GLES_2X, 1, Define to 1 if GLES 2.x is available) | |||||
| ac_cv_my_have_gl="yes"]) | |||||
| [ac_cv_my_have_gl="yes" | |||||
| AC_DEFINE(HAVE_GLES_2X, 1, Define to 1 if GLES 2.x is available) | |||||
| AC_CHECK_LIB(GLESv2, glEnable, | |||||
| [GL_LIBS="${GL_LIBS} -lGLESv2"])]) | |||||
| fi | fi | ||||
| if test "x${ac_cv_my_stop_looking_for_gl}" = "xno"; then | if test "x${ac_cv_my_stop_looking_for_gl}" = "xno"; then | ||||
| @@ -208,7 +210,7 @@ if test "x${ac_cv_my_stop_looking_for_gl}" = "xno"; then | |||||
| fi | fi | ||||
| if test "x${ac_cv_my_stop_looking_for_gl}" = "xno"; then | if test "x${ac_cv_my_stop_looking_for_gl}" = "xno"; then | ||||
| AC_CHECK_LIB(GL, glLoadIdentity, | |||||
| AC_CHECK_LIB(GL, glEnable, | |||||
| [ac_cv_my_have_gl="yes" | [ac_cv_my_have_gl="yes" | ||||
| AC_DEFINE(HAVE_GL_2X, 1, Define to 1 if GL 2.x is available) # FIXME: hackish | AC_DEFINE(HAVE_GL_2X, 1, Define to 1 if GL 2.x is available) # FIXME: hackish | ||||
| GL_LIBS="-lGL"]) | GL_LIBS="-lGL"]) | ||||
| @@ -350,6 +352,14 @@ AC_LANG_POP(C++) | |||||
| AM_CONDITIONAL(USE_NACL, test "${ac_cv_my_have_nacl}" != "no") | AM_CONDITIONAL(USE_NACL, test "${ac_cv_my_have_nacl}" != "no") | ||||
| dnl Use Android? FIXME: super hacks! | |||||
| ac_cv_my_have_android="no" | |||||
| AC_CHECK_LIB(log, __android_log_vprint, | |||||
| [ac_cv_my_have_android="yes" | |||||
| LOL_LIBS="${LOL_LIBS} -llog -module"]) | |||||
| AM_CONDITIONAL(USE_ANDROID, test "${ac_cv_my_have_android}" != "no") | |||||
| dnl Use EGL? | dnl Use EGL? | ||||
| ac_cv_my_have_egl="no" | ac_cv_my_have_egl="no" | ||||
| PKG_CHECK_MODULES(EGL, egl, [ac_cv_my_have_egl="yes"], [:]) | PKG_CHECK_MODULES(EGL, egl, [ac_cv_my_have_egl="yes"], [:]) | ||||
| @@ -61,9 +61,11 @@ static inline int isnan(float f) | |||||
| } | } | ||||
| #endif | #endif | ||||
| /* If using NaCl, override main() with our version */ | |||||
| /* If using NaCl or Android, override main() with our version */ | |||||
| #if defined __native_client__ | #if defined __native_client__ | ||||
| # define main lol_nacl_main | # define main lol_nacl_main | ||||
| #elif defined __ANDROID__ | |||||
| # define main lol_android_main | |||||
| #endif | #endif | ||||
| /* If using SDL on Windows or OS X, let it override main() */ | /* If using SDL on Windows or OS X, let it override main() */ | ||||
| @@ -12,7 +12,7 @@ | |||||
| # include "config.h" | # include "config.h" | ||||
| #endif | #endif | ||||
| #if defined USE_EGL | |||||
| #if defined USE_EGL && !defined __ANDROID__ | |||||
| # if defined HAVE_BCM_HOST_H | # if defined HAVE_BCM_HOST_H | ||||
| # include <bcm_host.h> | # include <bcm_host.h> | ||||
| # else | # else | ||||
| @@ -40,7 +40,7 @@ class EglAppData | |||||
| friend class EglApp; | friend class EglApp; | ||||
| private: | private: | ||||
| #if defined USE_EGL | |||||
| #if defined USE_EGL && !defined __ANDROID__ | |||||
| EGLDisplay egl_dpy; | EGLDisplay egl_dpy; | ||||
| EGLContext egl_ctx; | EGLContext egl_ctx; | ||||
| EGLSurface egl_surf; | EGLSurface egl_surf; | ||||
| @@ -61,7 +61,7 @@ private: | |||||
| EglApp::EglApp(char const *title, ivec2 res, float fps) : | EglApp::EglApp(char const *title, ivec2 res, float fps) : | ||||
| data(new EglAppData()) | data(new EglAppData()) | ||||
| { | { | ||||
| #if defined USE_EGL | |||||
| #if defined USE_EGL && !defined __ANDROID__ | |||||
| # if defined HAVE_BCM_HOST_H | # if defined HAVE_BCM_HOST_H | ||||
| bcm_host_init(); | bcm_host_init(); | ||||
| @@ -230,7 +230,7 @@ void EglApp::Run() | |||||
| { | { | ||||
| /* Tick the renderer, show the frame and clamp to desired framerate. */ | /* Tick the renderer, show the frame and clamp to desired framerate. */ | ||||
| Ticker::TickDraw(); | Ticker::TickDraw(); | ||||
| #if defined USE_EGL | |||||
| #if defined USE_EGL && !defined __ANDROID__ | |||||
| eglSwapBuffers(data->egl_dpy, data->egl_surf); | eglSwapBuffers(data->egl_dpy, data->egl_surf); | ||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -238,7 +238,7 @@ void EglApp::Run() | |||||
| EglApp::~EglApp() | EglApp::~EglApp() | ||||
| { | { | ||||
| #if defined USE_EGL | |||||
| #if defined USE_EGL && !defined __ANDROID__ | |||||
| eglDestroyContext(data->egl_dpy, data->egl_ctx); | eglDestroyContext(data->egl_dpy, data->egl_ctx); | ||||
| eglDestroySurface(data->egl_dpy, data->egl_surf); | eglDestroySurface(data->egl_dpy, data->egl_surf); | ||||
| eglTerminate(data->egl_dpy); | eglTerminate(data->egl_dpy); | ||||
| @@ -23,13 +23,19 @@ | |||||
| using namespace lol; | using namespace lol; | ||||
| /* Monsterz-specific */ | |||||
| #include "interface.h" | |||||
| /* One of these wrappers will be overridden by the user's version */ | |||||
| void lol_android_main(void) __attribute__((weak)); | |||||
| void lol_android_main(void) {} | |||||
| void lol_android_main(int argc, char **argv) __attribute__((weak)); | |||||
| void lol_android_main(int argc, char **argv) {} | |||||
| void lol_android_main(int argc, char **argv, char **envp) __attribute__((weak)); | |||||
| void lol_android_main(int argc, char **argv, char **envp) {} | |||||
| namespace lol | namespace lol | ||||
| { | { | ||||
| JavaVM *g_vm; | JavaVM *g_vm; | ||||
| jobject g_activity; | jobject g_activity; | ||||
| Thread *g_main_thread; | |||||
| AndroidApp::AndroidApp(char const *title, ivec2 res, float fps) : | AndroidApp::AndroidApp(char const *title, ivec2 res, float fps) : | ||||
| data(0) | data(0) | ||||
| @@ -49,6 +55,20 @@ void AndroidApp::Run() | |||||
| } | } | ||||
| } | } | ||||
| void *AndroidApp::MainRun(void *data) | |||||
| { | |||||
| int argc = 1; | |||||
| char *argv[] = { "", NULL }; | |||||
| char *env[] = { NULL }; | |||||
| /* Call the user's main() function. One of these will work. */ | |||||
| lol_android_main(); | |||||
| lol_android_main(argc, argv); | |||||
| lol_android_main(argc, argv, env); | |||||
| return NULL; | |||||
| } | |||||
| AndroidApp::~AndroidApp() | AndroidApp::~AndroidApp() | ||||
| { | { | ||||
| } | } | ||||
| @@ -76,8 +96,7 @@ Java_org_zoy_LolEngine_LolRenderer_nativeInit(JNIEnv* env) | |||||
| Ticker::Setup(30.0f); | Ticker::Setup(30.0f); | ||||
| Video::Setup(ivec2(320, 200)); | Video::Setup(ivec2(320, 200)); | ||||
| new Interface(); | |||||
| new DebugFps(20, 20); | |||||
| g_main_thread = new Thread(lol::AndroidApp::MainRun, NULL);; | |||||
| } | } | ||||
| extern "C" void | extern "C" void | ||||
| @@ -92,6 +111,7 @@ extern "C" void | |||||
| Java_org_zoy_LolEngine_LolRenderer_nativeDone(JNIEnv* env) | Java_org_zoy_LolEngine_LolRenderer_nativeDone(JNIEnv* env) | ||||
| { | { | ||||
| /* FIXME: clean up */ | /* FIXME: clean up */ | ||||
| delete g_main_thread; | |||||
| } | } | ||||
| extern "C" void | extern "C" void | ||||
| @@ -32,6 +32,8 @@ public: | |||||
| void ShowPointer(bool show); | void ShowPointer(bool show); | ||||
| void Run(); | void Run(); | ||||
| static void *MainRun(void *data); | |||||
| private: | private: | ||||
| AndroidAppData *data; | AndroidAppData *data; | ||||
| }; | }; | ||||
| @@ -17,9 +17,14 @@ CLEANFILES = $(noinst_PROGRAMS:%$(EXEEXT)=%.self) \ | |||||
| EXTRA_DIST = data/gradient.png | EXTRA_DIST = data/gradient.png | ||||
| noinst_PROGRAMS = quad benchsuite testsuite btphystest | |||||
| noinst_PROGRAMS = quad benchsuite $(testsuite) btphystest | |||||
| TESTS = testsuite | |||||
| TESTS = $(testsuite) | |||||
| # Conditionally built for now because of STLport issues | |||||
| if !USE_ANDROID | |||||
| testsuite = testsuite | |||||
| endif | |||||
| testsuite_SOURCES = testsuite.cpp \ | testsuite_SOURCES = testsuite.cpp \ | ||||
| unit/vector.cpp unit/matrix.cpp unit/half.cpp unit/trig.cpp \ | unit/vector.cpp unit/matrix.cpp unit/half.cpp unit/trig.cpp \ | ||||