From 11289b766fef74732ed4bf17a09c1b011af0541d Mon Sep 17 00:00:00 2001 From: Olli Kallioinen Date: Sun, 4 Jun 2017 21:25:57 +0300 Subject: [PATCH] Android cmake build fixed to work with the official android gradle plugin --- CMakeLists.txt | 37 +++++++++++++++++++++++++---- src/main/android/SDL_android_main.c | 4 +++- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ff57d9fc0cde..ba8ac4cb2b0cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,7 +137,9 @@ endif() # Default option knobs if(APPLE OR ARCH_64) - set(OPT_DEF_SSEMATH ON) + if(NOT "${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm") + set(OPT_DEF_SSEMATH ON) + endif() endif() if(UNIX OR MINGW OR MSYS) set(OPT_DEF_LIBC ON) @@ -543,7 +545,10 @@ if(ASSEMBLY) if(NOT SSEMATH) if(SSE OR SSE2 OR SSE3) if(USE_GCC) - list(APPEND EXTRA_CFLAGS "-mfpmath=387") + check_c_compiler_flag(-mfpmath=387 HAVE_FP_387) + if(HAVE_FP_387) + list(APPEND EXTRA_CFLAGS "-mfpmath=387") + endif() endif() set(HAVE_SSEMATH TRUE) endif() @@ -752,8 +757,19 @@ endif() if(ANDROID) file(GLOB ANDROID_CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/android/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_CORE_SOURCES}) + + # SDL_spinlock.c Needs to be compiled in ARM mode. + # There seems to be no better way currently to set the ARM mode. + # see: https://issuetracker.google.com/issues/62264618 + # Another option would be to set ARM mode to all compiled files + check_c_compiler_flag(-marm HAVE_ARM_MODE) + if(HAVE_ARM_MODE) + set_source_files_properties(${SDL2_SOURCE_DIR}/src/atomic/SDL_spinlock.c PROPERTIES COMPILE_FLAGS -marm) + endif() + file(GLOB ANDROID_MAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/android/*.c) - set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_MAIN_SOURCES}) + set(SDLMAIN_SOURCES ${SDLMAIN_SOURCES} ${ANDROID_MAIN_SOURCES}) + if(SDL_AUDIO) set(SDL_AUDIO_DRIVER_ANDROID 1) file(GLOB ANDROID_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/android/*.c) @@ -784,12 +800,23 @@ if(ANDROID) set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_VIDEO_SOURCES}) set(HAVE_SDL_VIDEO TRUE) + # Core stuff + find_library(ANDROID_DL_LIBRARY dl) + find_library(ANDROID_LOG_LIBRARY log) + find_library(ANDROID_LIBRARY_LIBRARY android) + list(APPEND EXTRA_LIBS ${ANDROID_DL_LIBRARY} ${ANDROID_LOG_LIBRARY} ${ANDROID_LIBRARY_LIBRARY}) + add_definitions(-DGL_GLEXT_PROTOTYPES) + #enable gles if(VIDEO_OPENGLES) set(SDL_VIDEO_OPENGL_EGL 1) set(HAVE_VIDEO_OPENGLES TRUE) set(SDL_VIDEO_OPENGL_ES2 1) set(SDL_VIDEO_RENDER_OGL_ES2 1) + + find_library(OpenGLES1_LIBRARY GLESv1_CM) + find_library(OpenGLES2_LIBRARY GLESv2) + list(APPEND EXTRA_LIBS ${OpenGLES1_LIBRARY} ${OpenGLES2_LIBRARY}) endif() endif() list(APPEND EXTRA_LDFLAGS "-Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit") @@ -848,7 +875,7 @@ if(EMSCRIPTEN) set(SDL_VIDEO_RENDER_OGL_ES2 1) endif() endif() -elseif(UNIX AND NOT APPLE) +elseif(UNIX AND NOT APPLE AND NOT ANDROID) if(SDL_AUDIO) if(SYSV5 OR SOLARIS OR HPUX) set(SDL_AUDIO_DRIVER_SUNAUDIO 1) @@ -1573,7 +1600,7 @@ set(_INSTALL_LIBS "SDL2main") if(SDL_SHARED) add_library(SDL2 SHARED ${SOURCE_FILES} ${VERSION_SOURCES}) - if(UNIX) + if(UNIX AND NOT ANDROID) set_target_properties(SDL2 PROPERTIES VERSION ${LT_VERSION} SOVERSION ${LT_REVISION} diff --git a/src/main/android/SDL_android_main.c b/src/main/android/SDL_android_main.c index 671d9328e8d46..9b90a38cb91e6 100644 --- a/src/main/android/SDL_android_main.c +++ b/src/main/android/SDL_android_main.c @@ -1,7 +1,9 @@ /* SDL_android_main.c, placed in the public domain by Sam Lantinga 3/13/14 */ -#include "../../SDL_internal.h" + +#include "SDL_config.h" +#include "SDL.h" #ifdef __ANDROID__