diff --git a/.ci/docker/build.sh b/.ci/docker/build.sh index ad2f713466c..fabb60b5fd1 100755 --- a/.ci/docker/build.sh +++ b/.ci/docker/build.sh @@ -41,7 +41,7 @@ case "${IMAGE_NAME}" in LINTRUNNER="" CLANG_VERSION=12 # From https://developer.android.com/ndk/downloads - ANDROID_NDK_VERSION=r26c + ANDROID_NDK_VERSION=r27b ;; *) echo "Invalid image name ${IMAGE_NAME}" diff --git a/extension/android/CMakeLists.txt b/extension/android/CMakeLists.txt index 075e4f21a40..a1bf4d3fd72 100644 --- a/extension/android/CMakeLists.txt +++ b/extension/android/CMakeLists.txt @@ -21,9 +21,33 @@ include(${EXECUTORCH_ROOT}/build/Utils.cmake) set(_common_compile_options -Wno-deprecated-declarations -fPIC) set(_common_include_directories ${EXECUTORCH_ROOT}/..) -add_subdirectory( - ${EXECUTORCH_ROOT}/examples/third-party/fbjni - ${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni +if(NOT FBJNI_VERSION) + set(FBJNI_VERSION 0.5.1) +endif() +set(FBJNI_AAR_URL https://repo1.maven.org/maven2/com/facebook/fbjni/fbjni/${FBJNI_VERSION}/fbjni-${FBJNI_VERSION}.aar) +set(FBJNI_DOWNLOAD_PATH ${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/fbjni.aar) + +if (NOT EXISTS "${FBJNI_DOWNLOAD_PATH}") + file(DOWNLOAD "${FBJNI_AAR_URL}" "${FBJNI_DOWNLOAD_PATH}") +endif() + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/prefab/modules/fbjni/include/" "${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/prefab/modules/fbjni/libs/android.${ANDROID_ABI}/libfbjni.so" + COMMAND unzip -o ${FBJNI_DOWNLOAD_PATH} -d ${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni + DEPENDS "${FBJNI_DOWNLOAD_PATH}") + +add_custom_target( + fbjni_prefab + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/prefab/modules/fbjni/include/" "${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/prefab/modules/fbjni/libs/android.${ANDROID_ABI}/libfbjni.so" +) + +add_library(fbjni SHARED IMPORTED) +add_dependencies(fbjni fbjni_prefab) +set_target_properties(fbjni PROPERTIES + IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/prefab/modules/fbjni/libs/android.${ANDROID_ABI}/libfbjni.so" +) +list(APPEND + _common_include_directories ) set(executorch_DIR ${CMAKE_CURRENT_BINARY_DIR}/../../lib/cmake/ExecuTorch) @@ -128,6 +152,7 @@ endif() target_include_directories( executorch_jni PRIVATE ${_common_include_directories} + "${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/prefab/modules/fbjni/include/" ) target_compile_options(executorch_jni PUBLIC ${_common_compile_options})