diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..67b3f57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +out +android/.gradle +android/app/.externalNativeBuild +android/app/build diff --git a/android/app/build.gradle b/android/app/build.gradle index bf3c35d..c733a1d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -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 { + // system3 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] +} diff --git a/android/app/jni/CMakeLists.txt b/android/app/jni/CMakeLists.txt index 3d49cf3..01593cc 100644 --- a/android/app/jni/CMakeLists.txt +++ b/android/app/jni/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.6) +cmake_minimum_required(VERSION 3.13) project(GAME) @@ -6,15 +6,31 @@ 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 +) -# 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() +# The main CMakeLists.txt of system3 +add_subdirectory(../../../src src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7b5dcf3..74da4b3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,12 +59,21 @@ target_compile_definitions(common INTERFACE target_include_directories(common INTERFACE . sys) target_sources(common INTERFACE ${SRC_COMMON} ${SRC_PLATFORM} ${SRC_MAKO}) -add_executable(system3) +if (ANDROID) + add_library(system3 SHARED) +else() + add_executable(system3) +endif() + target_sources(system3 PRIVATE sys/nact_sys3.cpp ${RES3} sys/ags_bmp.cpp sys/ags_pms.cpp) target_compile_definitions(system3 PRIVATE _SYSTEM3) target_link_libraries(system3 PRIVATE common) -if (NOT EMSCRIPTEN) +if (ANDROID) + + target_link_libraries(system3 PRIVATE SDL2 SDL2_ttf) + +elseif (NOT EMSCRIPTEN) add_executable(system1) target_sources(system1 PRIVATE sys/nact_sys1.cpp ${RES1} sys/ags_gl3.cpp sys/ags_gm3.cpp sys/ags_vsp2l.cpp)