diff --git a/CMakeLists.txt b/CMakeLists.txt index 355c21b4..d14c500a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,7 @@ cmake_dependent_option(ISLE_COMPILE_SHADERS "Compile shaders" ON "SDL_SHADERCROS option(CMAKE_POSITION_INDEPENDENT_CODE "Build with -fPIC" ON) option(ENABLE_CLANG_TIDY "Enable clang-tidy") option(DOWNLOAD_DEPENDENCIES "Download dependencies" ON) +set(ANDROID_NDK_PATH "" CACHE PATH "Path to Android NDK") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" CACHE PATH "Directory where to put executables and dll") set(ISLE_EMSCRIPTEN_HOST "" CACHE STRING "Host URL for Emscripten streaming (e.g., https://test.com)") cmake_dependent_option(BUILD_SHARED_LIBS "Build lego1 as a shared library" ON "NOT EMSCRIPTEN" OFF) @@ -74,47 +75,22 @@ if (DOWNLOAD_DEPENDENCIES) message(STATUS "Fetching SDL3 and iniparser. This might take a while...") include(FetchContent) # FIXME: properly build and source the .aar - if (NOT ANDROID) - if (WINDOWS_STORE) - FetchContent_Declare( - SDL3 - GIT_REPOSITORY "https://github.com/Helloyunho/SDL3-uwp.git" - GIT_TAG "main" - EXCLUDE_FROM_ALL - ) - else() - FetchContent_Declare( - SDL3 - GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git" - GIT_TAG "main" - EXCLUDE_FROM_ALL - ) - endif() - FetchContent_MakeAvailable(SDL3) + if (WINDOWS_STORE) + FetchContent_Declare( + SDL3 + GIT_REPOSITORY "https://github.com/Helloyunho/SDL3-uwp.git" + GIT_TAG "main" + EXCLUDE_FROM_ALL + ) else() - find_package(SDL3 CONFIG REQUIRED) + FetchContent_Declare( + SDL3 + GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git" + GIT_TAG "main" + EXCLUDE_FROM_ALL + ) endif() - - # if(ANDROID) - # FetchContent_GetProperties(SDL3) - # set(SDL3_ANDROID_DIR "${sdl3_SOURCE_DIR}/android-project") - # - # add_custom_command( - # OUTPUT ${SDL3_ANDROID_DIR}/SDL/build/outputs/aar/SDL-release.aar - # COMMAND ${CMAKE_COMMAND} -E echo "Building SDL3.aar via Gradle..." - # COMMAND ./gradlew :SDL:assembleRelease - # WORKING_DIRECTORY ${SDL3_ANDROID_DIR} - # DEPENDS ${SDL3_ANDROID_DIR}/SDL/build.gradle - # COMMENT "Generating SDL3.aar from SDL3 android-project" - # ) - # - # add_custom_target(build_sdl3_aar ALL - # DEPENDS ${SDL3_ANDROID_DIR}/SDL/build/outputs/aar/SDL-release.aar - # ) - # - # # Make your native targets depend on the aar build, e.g. - # # add_dependencies(your_native_target build_sdl3_aar) - # endif() + FetchContent_MakeAvailable(SDL3) FetchContent_Declare( iniparser @@ -132,12 +108,49 @@ else() # find_package looks for already-installed system packages. # Configure with `-DCMAKE_PREFIX_PATH="/path/to/package1;/path/to/package2"` # to add search paths. + if (ANDROID) + message(STATUS "Please place the version-appropriate SDL3.aar in android-project/app/libs") + endif() find_package(SDL3 CONFIG REQUIRED) find_package(iniparser REQUIRED CONFIG COMPONENTS shared) target_link_libraries(Isle::iniparser INTERFACE iniparser-shared) endif() +# Effectively use as a gate for running the Android build +if (ANDROID_NDK_PATH) + + FetchContent_GetProperties(SDL3) + + set(SDL_ANDROID_ARCHIVE "${CMAKE_SOURCE_DIR}/android-project/app/libs/SDL3.aar") + add_custom_command(OUTPUT "${SDL_ANDROID_ARCHIVE}" + COMMAND ${Python3_EXECUTABLE} "${SDL3_SOURCE_DIR}/build-scripts/build-release.py" + --actions android + --fast + --android-ndk-home=${ANDROID_NDK_PATH} + --force + --root="${SDL3_SOURCE_DIR}" + COMMAND sh -c "cp ${sdl3_SOURCE_DIR}/build-android/SDL3-*.aar ${SDL_ANDROID_ARCHIVE}" + COMMENT "Generating SDL3.aar for android-project" + ) + + set(GRADLEW "${CMAKE_SOURCE_DIR}/android-project/gradlew") + if(CMAKE_BUILD_TYPE MATCHES "^Rel") + set(GRADLE_TASK "assembleRelease") + else() + set(GRADLE_TASK "assembleDebug") + endif() + + add_custom_target(ANDROID_GRADLE_BUILD ALL + DEPENDS "${SDL_ANDROID_ARCHIVE}" + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/android-project" + COMMAND "${GRADLEW}" -i ${GRADLE_TASK} -PcmakeArgs=" -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DISLE_USE_DX5=${ISLE_USE_DX5} -DISLE_BUILD_CONFIG=${ISLE_BUILD_CONFIG} -DENABLE_CLANG_TIDY=${ENABLE_CLANG_TIDY} -DISLE_WERROR=${ISLE_WERROR} -DISLE_DEBUG=${ISLE_DEBUG} -Werror=dev" + COMMENT "Building Android APK with Gradle" + ) + message(STATUS "SDL AAR") + return() +endif() + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if (ENABLE_CLANG_TIDY) find_program(CLANG_TIDY_BIN NAMES "clang-tidy" ENV "LLVM_ROOT" REQUIRED) diff --git a/android-project/app/build.gradle b/android-project/app/build.gradle index 2e9cfd63..141c950d 100644 --- a/android-project/app/build.gradle +++ b/android-project/app/build.gradle @@ -15,7 +15,12 @@ android { externalNativeBuild { cmake { - arguments '-DANDROID_STL=c++_shared', '-DCMAKE_BUILD_TYPE=Release', '-DISLE_USE_DX5=false', '-DISLE_BUILD_CONFIG=false', '-DENABLE_CLANG_TIDY=false', '-DISLE_WERROR=true', '-DISLE_DEBUG=false', '-Werror=dev', '-DCMAKE_MESSAGE_LOG_LEVEL=STATUS' + arguments '-DANDROID_STL=c++_shared' + if (project.hasProperty('cmakeArgs')) { + project.cmakeArgs.split(" ").each {arg -> arguments arg} + } + abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' +// abiFilters 'x86_64', 'arm64-v8a' } } } diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index c5c11819..593fed0d 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -41,7 +41,9 @@ android:name="org.legoisland.isle.IsleActivity" android:exported="true" android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation" - android:preferMinimalPostProcessing="true"> + android:preferMinimalPostProcessing="true" + android:screenOrientation="landscape" + android:launchMode="singleInstance">