From 06f9928cb5e5be73a5de126c4604185895047bd7 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Thu, 22 May 2025 17:11:18 -0700 Subject: [PATCH 1/5] Android build cmake in gradle --- extension/android/CMakeLists.txt | 2 ++ .../android/executorch_android/build.gradle | 36 ++++++++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/extension/android/CMakeLists.txt b/extension/android/CMakeLists.txt index 3b7a04c2e97..b582815af4f 100644 --- a/extension/android/CMakeLists.txt +++ b/extension/android/CMakeLists.txt @@ -192,3 +192,5 @@ target_include_directories( target_compile_options(executorch_jni PUBLIC ${_common_compile_options}) target_link_libraries(executorch_jni ${link_libraries} log) + +set_target_properties(executorch_jni PROPERTIES OUTPUT_NAME executorch) diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index 2fa0b9fd57c..1e51d716bb4 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -20,23 +20,35 @@ android { minSdk = 23 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } + externalNativeBuild { + cmake { + abiFilters "arm64-v8a" + targets "executorch_jni" + arguments "-DBUILD_TESTING=OFF", "-DCMAKE_INSTALL_PREFIX=/Users/hsz/executorch/cmake-out-android-arm64-v8a", "-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH" + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } - sourceSets { - main { - jniLibs.srcDirs = ['../../../cmake-out-android-so/'] + sourceSets { + androidTest { + resources.srcDirs += ['src/androidTest/resources'] + } } - androidTest { - resources.srcDirs += [ 'src/androidTest/resources' ] + + kotlinOptions { + jvmTarget = "1.8" } } - kotlinOptions { - jvmTarget = "1.8" + + externalNativeBuild { + cmake { + path "../CMakeLists.txt" + } } } From ab99d19bb69e43ea6b253132d4fe45c3c16a4819 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Thu, 22 May 2025 17:52:12 -0700 Subject: [PATCH 2/5] Can this work --- CMakeLists.txt | 4 ++++ extension/android/CMakeLists.txt | 11 +++++------ extension/android/executorch_android/build.gradle | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d8798bafb9..516dbe29df4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -721,4 +721,8 @@ if(EXECUTORCH_BUILD_VULKAN) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/vulkan) endif() +if(ANDROID) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/android) +endif() + include(Test.cmake) diff --git a/extension/android/CMakeLists.txt b/extension/android/CMakeLists.txt index b582815af4f..a1a8fe1dccf 100644 --- a/extension/android/CMakeLists.txt +++ b/extension/android/CMakeLists.txt @@ -6,7 +6,9 @@ cmake_minimum_required(VERSION 3.24) # 3.24 is required for WHOLE_ARCHIVE -project(executorch_jni) +if(NOT EXECUTORCH_ROOT) + set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) +endif() if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) @@ -16,7 +18,6 @@ if(NOT ANDROID) message(FATAL_ERROR "This directory is for Android build only") endif() -set(EXECUTORCH_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../..") include(${EXECUTORCH_ROOT}/tools/cmake/Utils.cmake) set(_common_compile_options -Wno-deprecated-declarations -fPIC) set(_common_include_directories ${EXECUTORCH_ROOT}/..) @@ -60,8 +61,6 @@ set_target_properties(fbjni PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/third-party/fbjni/prefab/modules/fbjni/libs/android.${ANDROID_ABI}/libfbjni.so" ) -set(executorch_DIR ${CMAKE_CURRENT_BINARY_DIR}/../../lib/cmake/ExecuTorch) -find_package(executorch CONFIG REQUIRED) target_link_options_shared_lib(executorch) add_library(executorch_jni SHARED jni/jni_layer.cpp jni/log.cpp jni/jni_layer_runtime.cpp) @@ -152,12 +151,12 @@ if(EXECUTORCH_BUILD_LLAMA_JNI) target_compile_definitions(executorch_jni PUBLIC EXECUTORCH_BUILD_LLAMA_JNI=1) add_subdirectory( ${EXECUTORCH_ROOT}/examples/models/llava/runner - ${CMAKE_CURRENT_BINARY_DIR}/../../examples/models/llava/runner + ${CMAKE_CURRENT_BINARY_DIR}/examples/models/llava/runner ) add_subdirectory( ${EXECUTORCH_ROOT}/examples/models/llama/runner - ${CMAKE_CURRENT_BINARY_DIR}/../../examples/models/llama/runner + ${CMAKE_CURRENT_BINARY_DIR}/examples/models/llama/runner ) if(NEURON_BUFFER_ALLOCATOR_LIB) diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index 1e51d716bb4..b0e3c5c67f5 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -25,7 +25,7 @@ android { cmake { abiFilters "arm64-v8a" targets "executorch_jni" - arguments "-DBUILD_TESTING=OFF", "-DCMAKE_INSTALL_PREFIX=/Users/hsz/executorch/cmake-out-android-arm64-v8a", "-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH" + arguments "-DBUILD_TESTING=OFF", "-DCMAKE_POLICY_VERSION_MINIMUM=3.24", "-DEXECUTORCH_BUILD_XNNPACK=ON", "-DEXECUTORCH_XNNPACK_SHARED_WORKSPACE=ON", "-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON", "-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON", "-DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON", "-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON", "-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON", "-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON" } } @@ -47,7 +47,7 @@ android { externalNativeBuild { cmake { - path "../CMakeLists.txt" + path "../../../CMakeLists.txt" } } } From 32d24d0ba5e51e9841c39ace4fa7f1f1d491523e Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 11 Jul 2025 17:16:55 -0700 Subject: [PATCH 3/5] Add x86_64 --- extension/android/executorch_android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index d15253551ef..d8620b7b2c8 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -23,7 +23,7 @@ android { externalNativeBuild { cmake { - abiFilters "arm64-v8a" + abiFilters "arm64-v8a", "x86_64" targets "executorch_jni" arguments "-DBUILD_TESTING=OFF", "-DCMAKE_POLICY_VERSION_MINIMUM=3.24", "-DEXECUTORCH_BUILD_XNNPACK=ON", "-DEXECUTORCH_XNNPACK_SHARED_WORKSPACE=ON", "-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON", "-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON", "-DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON", "-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON", "-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON", "-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON" } From 9a4626e83f454123a11f43c8e62cc39b474f7046 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 11 Jul 2025 17:37:35 -0700 Subject: [PATCH 4/5] test --- extension/android/executorch_android/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index d8620b7b2c8..6332e7f9e13 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -50,6 +50,7 @@ android { path "../../../CMakeLists.txt" } } + ndkPath "/opt/ndk/" } task copyTestRes(type: Exec) { From 6b8df6fca53d960071e59779ff5ada6d0cc30fa7 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Tue, 5 Aug 2025 11:08:05 -0700 Subject: [PATCH 5/5] Try --- extension/android/executorch_android/build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index d06319e7630..81c4e0f8e56 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -25,7 +25,7 @@ android { cmake { abiFilters "arm64-v8a", "x86_64" targets "executorch_jni" - arguments "-DBUILD_TESTING=OFF", "-DCMAKE_POLICY_VERSION_MINIMUM=3.24", "-DEXECUTORCH_BUILD_XNNPACK=ON", "-DEXECUTORCH_XNNPACK_SHARED_WORKSPACE=ON", "-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON", "-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON", "-DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON", "-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON", "-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON", "-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON" + arguments "-DBUILD_TESTING=OFF", "-DCMAKE_POLICY_VERSION_MINIMUM=3.24", "-DEXECUTORCH_BUILD_XNNPACK=ON", "-DEXECUTORCH_XNNPACK_SHARED_WORKSPACE=ON", "-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON", "-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON", "-DEXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR=ON", "-DEXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL=ON", "-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON", "-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON", "-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON" } } @@ -50,7 +50,6 @@ android { path "../../../CMakeLists.txt" } } - ndkPath "/opt/ndk/" } task copyTestRes(type: Exec) {