Android: Build rules

This sets up Gradle / CMake rules for Android build.
This commit is contained in:
kichikuou
2019-12-31 15:16:49 +09:00
parent d1d0641642
commit eb50ac4fdc
6 changed files with 81 additions and 31 deletions
+5 -2
View File
@@ -1,2 +1,5 @@
*~
/out
out
android/.gradle
android/app/.externalNativeBuild
android/app/build
android/build
+8 -2
View File
@@ -39,6 +39,12 @@ if (EMSCRIPTEN)
set(SDL2_FOUND 1)
set(FREETYPE_FOUND 1)
set(DEFAULT_FONT_PATH .)
elseif (ANDROID)
set(SDL2_FOUND 1)
set(SDL2MIXER_FOUND 1)
set(SDL2TTF_FOUND 1)
set(DEFAULT_FONT_PATH .)
find_library(ndk_zlib z)
else()
include(TestBigEndian)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
@@ -153,7 +159,7 @@ if (EMSCRIPTEN)
list(APPEND SRC_MIDI midi.emscripten.c)
list(APPEND SUMMARY_MIDI "Emscripten")
else()
if (HAVE_SIGACTION)
if (HAVE_SIGACTION AND NOT ANDROID)
list(APPEND SRC_MIDI midi.rawmidi.c midifile.c)
list(APPEND SUMMARY_MIDI "raw")
set(MIDI_DEVICE "/dev/midi" CACHE STRING "midi device")
@@ -182,7 +188,7 @@ endif()
# Joystick
if (EMSCRIPTEN)
if (EMSCRIPTEN OR ANDROID)
set(SRC_JOYSTICK joystick_dmy.c)
elseif (SDL2_FOUND)
set(SRC_JOYSTICK joystick_sdl.c)
+13 -13
View File
@@ -18,15 +18,11 @@ android {
versionCode 1
versionName "1.0"
externalNativeBuild {
ndkBuild {
arguments "APP_PLATFORM=android-16"
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
cmake {
arguments "-DANDROID_APP_PLATFORM=android-16", "-DANDROID_STL=c++_static"
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
abiFilters 'arm64-v8a'
}
// cmake {
// arguments "-DANDROID_APP_PLATFORM=android-16", "-DANDROID_STL=c++_static"
// // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
// abiFilters 'arm64-v8a'
// }
}
}
buildTypes {
@@ -40,12 +36,12 @@ android {
jniLibs.srcDir 'libs'
}
externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
cmake {
// xsystem35 requires CMake >=3.13, so SDK-bundled CMake
// (3.6 or 3.10.2) cannot be used.
version getInstalledCmakeVersion()
path 'jni/CMakeLists.txt'
}
// cmake {
// path 'jni/CMakeLists.txt'
// }
}
}
@@ -69,3 +65,7 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
}
String getInstalledCmakeVersion() {
('cmake --version'.execute().text =~ /cmake version ([0-9.]+)/)[0][1]
}
+40 -11
View File
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.6)
cmake_minimum_required(VERSION 3.13)
project(GAME)
@@ -6,15 +6,44 @@ project(GAME)
# include(AndroidNdkModules)
# android_ndk_import_module_cpufeatures()
include(FetchContent)
# TODO: Use SDL2 2.0.11 once released
FetchContent_Declare(
SDL
URL https://hg.libsdl.org/SDL/archive/a5f93b21dfe0.tar.gz # rev 13383
URL_HASH SHA1=a7e9696f7ef8af7c4b89671b096c38d1a4cbf90c
)
# TODO: Use SDL2_ttf 2.0.16 once released
FetchContent_Declare(
SDL_ttf
URL https://hg.libsdl.org/SDL_ttf/archive/d56d67db41d8.tar.gz # rev 420
URL_HASH SHA1=143089a2b2973a5baeee0914af43608cfe8e1d87
)
# TODO: Use SDL2_mixer 2.0.5 once released
FetchContent_Declare(
SDL_mixer
URL https://hg.libsdl.org/SDL_mixer/archive/d2686bcfcba2.tar.gz # rev 1127
URL_HASH SHA1=4e62e29bd5628b262b3ffb6d5d29861c76a1500e
)
# SDL sources are in a subfolder named "SDL"
add_subdirectory(SDL)
# Compilation of companion libraries
#add_subdirectory(SDL_image)
#add_subdirectory(SDL_mixer)
#add_subdirectory(SDL_ttf)
# Your game and its CMakeLists.txt are in a subfolder named "src"
add_subdirectory(src)
# Compilation of SDL and companion libraries
FetchContent_GetProperties(SDL)
if(NOT sdl_POPULATED)
FetchContent_Populate(SDL)
add_subdirectory(${sdl_SOURCE_DIR} ${sdl_BINARY_DIR})
endif()
FetchContent_GetProperties(SDL_ttf)
if(NOT sdl_ttf_POPULATED)
FetchContent_Populate(SDL_ttf)
add_subdirectory(${sdl_ttf_SOURCE_DIR} ${sdl_ttf_BINARY_DIR})
endif()
FetchContent_GetProperties(SDL_mixer)
if(NOT sdl_mixer_POPULATED)
FetchContent_Populate(SDL_mixer)
add_subdirectory(${sdl_mixer_SOURCE_DIR} ${sdl_mixer_BINARY_DIR})
# TODO: Fix this in upstream
target_include_directories(SDL2_mixer PUBLIC ${sdl_mixer_SOURCE_DIR}/include)
endif()
# The main CMakeLists.txt of xsystem35
add_subdirectory(../../.. xsystem35)
+11 -3
View File
@@ -7,7 +7,11 @@ if (ENABLE_MODULES)
endif()
endif()
add_executable(xsystem35)
if (ANDROID)
add_library(xsystem35 SHARED)
else()
add_executable(xsystem35)
endif()
target_compile_options(xsystem35 PRIVATE -Wno-pointer-sign -Wno-invalid-source-encoding)
@@ -79,7 +83,11 @@ if (EMSCRIPTEN)
"SHELL:-s EXPORTED_FUNCTIONS=\"['_main','_ags_setAntialiasedStringMode', '_ald_getdata', '_ald_freedata']\""
"SHELL:-s EXTRA_EXPORTED_RUNTIME_METHODS=\"['getValue','getMemory','addRunDependency','removeRunDependency']\"")
else() # non-emscripten
elseif (ANDROID)
target_link_libraries(xsystem35 PRIVATE SDL2 SDL2_ttf SDL2_mixer ${ndk_zlib})
else() # non-emscripten, non-android
target_link_libraries(xsystem35 PRIVATE m ZLIB::ZLIB)
if (X11_FOUND)
target_include_directories(xsystem35 PRIVATE ${X11_INCLUDE_DIR})
@@ -108,7 +116,7 @@ else() # non-emscripten
endif()
# FIXME: set up dependency for xsystem35 on this
if (ENABLE_SDL AND NOT EMSCRIPTEN)
if (ENABLE_SDL AND NOT EMSCRIPTEN AND NOT ANDROID)
add_custom_target(sdl_input.c
COMMAND perl xsyskey.pl ${SDL2_INCLUDE_DIRS} > sdl_input.c
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+4
View File
@@ -41,6 +41,10 @@
# include <gtk/gtk.h>
#endif
#ifdef ENABLE_SDL
# include <SDL.h>
#endif
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif