mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 00:20:18 +01:00
Added tests for lite interpreter. By default the run_test.sh will use lite interpreter, unless manually set BUILD_LITE_INTERPRETER=0 Also fixed model generation script for android instrumentation test and README. Verified test can pass for both full jit and lite interpreter. Also tested on emulator and real device using different abis. Lite interpreter ``` ./scripts/build_pytorch_android.sh x86 ./android/run_tests.sh ``` Full JIT ``` BUILD_LITE_INTERPRETER=0 ./scripts/build_pytorch_android.sh x86 BUILD_LITE_INTERPRETER=0 ./android/run_tests.sh ``` Pull Request resolved: https://github.com/pytorch/pytorch/pull/72736
164 lines
5.0 KiB
Groovy
164 lines
5.0 KiB
Groovy
apply plugin: 'com.android.library'
|
|
apply plugin: 'maven'
|
|
|
|
android {
|
|
compileSdkVersion rootProject.compileSdkVersion
|
|
buildToolsVersion rootProject.buildToolsVersion
|
|
|
|
defaultConfig {
|
|
minSdkVersion rootProject.minSdkVersion
|
|
targetSdkVersion rootProject.targetSdkVersion
|
|
versionCode 0
|
|
versionName "0.1"
|
|
|
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
ndk {
|
|
abiFilters ABI_FILTERS.split(",")
|
|
}
|
|
externalNativeBuild {
|
|
cmake {
|
|
if(System.env.BUILD_LITE_INTERPRETER == '0') {
|
|
arguments "-DANDROID_STL=c++_shared", "-DBUILD_LITE_INTERPRETER=OFF", "-DUSE_LITE_INTERPRETER_PROFILER=OFF"
|
|
} else {
|
|
arguments "-DANDROID_STL=c++_shared", "-DUSE_LITE_INTERPRETER_PROFILER=OFF"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
buildTypes {
|
|
debug {
|
|
minifyEnabled false
|
|
debuggable true
|
|
}
|
|
release {
|
|
minifyEnabled false
|
|
}
|
|
}
|
|
sourceSets {
|
|
main {
|
|
java {
|
|
if(System.env.BUILD_LITE_INTERPRETER == '0') {
|
|
println 'Build pytorch_jni'
|
|
exclude 'org/pytorch/LiteModuleLoader.java'
|
|
exclude 'org/pytorch/LiteNativePeer.java'
|
|
} else {
|
|
println 'Build pytorch_jni_lite'
|
|
}
|
|
}
|
|
jniLibs.srcDirs = ['src/main/jniLibs']
|
|
manifest.srcFile 'src/main/AndroidManifest.xml'
|
|
}
|
|
androidTest {
|
|
java {
|
|
if(System.env.BUILD_LITE_INTERPRETER == '0') {
|
|
println 'Build test for full jit (pytorch_jni)'
|
|
exclude 'org/pytorch/PytorchHostTests.java'
|
|
exclude 'org/pytorch/PytorchLiteInstrumentedTests.java'
|
|
exclude 'org/pytorch/suite/PytorchLiteInstrumentedTestSuite.java'
|
|
} else {
|
|
println 'Build test for lite interpreter (pytorch_jni_lite)'
|
|
exclude 'org/pytorch/PytorchHostTests.java'
|
|
exclude 'org/pytorch/PytorchInstrumentedTests.java'
|
|
exclude 'org/pytorch/suite/PytorchInstrumentedTestSuite.java'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
externalNativeBuild {
|
|
cmake {
|
|
path "CMakeLists.txt"
|
|
}
|
|
}
|
|
|
|
packagingOptions {
|
|
if (nativeLibsDoNotStrip.toBoolean()) {
|
|
doNotStrip "**/*.so"
|
|
logger.warn('WARNING: nativeLibsDoNotStrip==true; debug symbols included')
|
|
}
|
|
}
|
|
|
|
useLibrary 'android.test.runner'
|
|
useLibrary 'android.test.base'
|
|
useLibrary 'android.test.mock'
|
|
}
|
|
|
|
dependencies {
|
|
implementation 'com.facebook.fbjni:fbjni-java-only:' + rootProject.fbjniJavaOnlyVersion
|
|
implementation 'com.facebook.soloader:nativeloader:' + rootProject.soLoaderNativeLoaderVersion
|
|
|
|
testImplementation 'junit:junit:' + rootProject.junitVersion
|
|
testImplementation 'androidx.test:core:' + rootProject.coreVersion
|
|
|
|
androidTestImplementation 'junit:junit:' + rootProject.junitVersion
|
|
androidTestImplementation 'androidx.test:core:' + rootProject.coreVersion
|
|
androidTestImplementation 'androidx.test.ext:junit:' + rootProject.extJUnitVersion
|
|
androidTestImplementation 'androidx.test:rules:' + rootProject.rulesVersion
|
|
androidTestImplementation 'androidx.test:runner:' + rootProject.runnerVersion
|
|
}
|
|
|
|
apply from: rootProject.file('gradle/release.gradle')
|
|
|
|
task sourcesJar(type: Jar) {
|
|
from android.sourceSets.main.java.srcDirs
|
|
classifier = 'sources'
|
|
}
|
|
|
|
def getLibtorchHeadersDir() {
|
|
def abi = ABI_FILTERS.split(",")[0]
|
|
return "$rootDir/pytorch_android/src/main/cpp/libtorch_include/$abi"
|
|
}
|
|
|
|
afterEvaluate {
|
|
if (POM_PACKAGING == 'aar') {
|
|
android.libraryVariants.all { variant ->
|
|
variant.outputs.each { output ->
|
|
File f = output.outputFile
|
|
if (f.name.endsWith(".aar")) {
|
|
output.assemble.finalizedBy addFolderToAarTask(
|
|
"addHeadersToAar" + variant.name,
|
|
f.path,
|
|
getLibtorchHeadersDir(),
|
|
"headers")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.whenTaskAdded { task ->
|
|
if (task.name.startsWith("bundle") && task.name.endsWith("Aar")) {
|
|
doLast {
|
|
addFolderToAar("addHeadersTo" + task.name, task.archivePath, getLibtorchHeadersDir(), 'headers')
|
|
}
|
|
}
|
|
}
|
|
|
|
def addFolderToAarTask(taskName, aarPath, folderPath, folderPathInAar) {
|
|
return tasks.register(taskName) {
|
|
doLast {
|
|
addFolderToAar(taskName, aarPath, folderPath, folderPathInAar)
|
|
}
|
|
}
|
|
}
|
|
|
|
def addFolderToAar(taskName, aarPath, folderPath, folderPathInAar) {
|
|
def tmpDir = file("${buildDir}/${taskName}")
|
|
tmpDir.mkdir()
|
|
def tmpDirFolder = file("${tmpDir.path}/${folderPathInAar}")
|
|
tmpDirFolder.mkdir()
|
|
copy {
|
|
from zipTree(aarPath)
|
|
into tmpDir
|
|
}
|
|
copy {
|
|
from fileTree(folderPath)
|
|
into tmpDirFolder
|
|
}
|
|
ant.zip(destfile: aarPath) {
|
|
fileset(dir: tmpDir.path)
|
|
}
|
|
delete tmpDir
|
|
}
|
|
|
|
artifacts.add('archives', sourcesJar)
|