From 267766172cff97f5bc22cce45aad622209c01729 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 19 Jun 2025 09:56:45 +0200 Subject: [PATCH 1/2] android : update CMakeLists.txt to use FetchContent for ggml This commit updates the CMakeLists.txt file for the Android Whisper example to use FetchContent for managing the ggml library. The motivation for this change is avoid having to make manual changes to the CMakeLists.txt file after syncing the ggml library. I've built and run the example locally to verify that it works as expected. Refs: https://github.com/ggml-org/whisper.cpp/pull/3265#issuecomment-2986715717 --- .../lib/src/main/jni/whisper/CMakeLists.txt | 38 +++---------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/examples/whisper.android/lib/src/main/jni/whisper/CMakeLists.txt b/examples/whisper.android/lib/src/main/jni/whisper/CMakeLists.txt index cb789c42f6a..c986b417d55 100644 --- a/examples/whisper.android/lib/src/main/jni/whisper/CMakeLists.txt +++ b/examples/whisper.android/lib/src/main/jni/whisper/CMakeLists.txt @@ -14,34 +14,10 @@ set( ${CMAKE_SOURCE_DIR}/jni.c ) -# TODO: this needs to be updated to work with the new ggml CMakeLists - -if (NOT GGML_HOME) - set( - SOURCE_FILES - ${SOURCE_FILES} - ${WHISPER_LIB_DIR}/ggml/src/ggml.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-alloc.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-backend.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-backend-reg.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-quants.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-threading.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/ggml-cpu.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/ggml-cpu.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/hbm.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/traits.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/unary-ops.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/binary-ops.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/vec.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/ops.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/arch/arm/quants.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/arch/arm/repack.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/quants.c - ) -endif() - find_library(LOG_LIB log) +include(FetchContent) + function(build_library target_name) add_library( ${target_name} @@ -70,15 +46,13 @@ function(build_library target_name) endif () if (GGML_HOME) - include(FetchContent) FetchContent_Declare(ggml SOURCE_DIR ${GGML_HOME}) - FetchContent_MakeAvailable(ggml) - - target_compile_options(ggml PRIVATE ${GGML_COMPILE_OPTIONS}) - target_link_libraries(${target_name} ${LOG_LIB} android ggml) else() - target_link_libraries(${target_name} ${LOG_LIB} android) + FetchContent_Declare(ggml SOURCE_DIR ${WHISPER_LIB_DIR}/ggml) endif() + FetchContent_MakeAvailable(ggml) + target_compile_options(ggml PRIVATE ${GGML_COMPILE_OPTIONS}) + target_link_libraries(${target_name} ${LOG_LIB} android ggml) endfunction() From 1c9856b2f54ffe019d2cbdca2e90605471218969 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 19 Jun 2025 11:27:20 +0200 Subject: [PATCH 2/2] android.java : update cmake to use FetchContent for ggml This commit updates the CMake configuration for the Android Java example to use `FetchContent` for including the `ggml` library. Do be able to use FetchContent we also update the `compileSdkVersion` and `targetSdkVersion` to 31, and the `buildToolsVersion` to '30.0.3'. This also required a an update to the Gradle plugin version to 7.4.0. The motivation for this change is avoid having to make manual changes to the CMakeLists.txt file after syncing the ggml library. --- .../whisper.android.java/app/build.gradle | 6 ++--- .../app/src/main/AndroidManifest.xml | 4 ++-- .../whispercpp/java/whisper/WhisperLib.java | 2 +- .../app/src/main/jni/whisper/CMakeLists.txt | 23 +++++-------------- examples/whisper.android.java/build.gradle | 6 ++--- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 16 insertions(+), 27 deletions(-) diff --git a/examples/whisper.android.java/app/build.gradle b/examples/whisper.android.java/app/build.gradle index 532d780a195..543701e1bb1 100644 --- a/examples/whisper.android.java/app/build.gradle +++ b/examples/whisper.android.java/app/build.gradle @@ -3,13 +3,13 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 31 buildToolsVersion '30.0.3' defaultConfig { applicationId "com.litongjava.whisper.android.java" minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 versionCode 1 versionName "1.0" @@ -55,4 +55,4 @@ dependencies { implementation 'com.litongjava:android-view-inject:1.0' implementation 'com.litongjava:jfinal-aop:1.0.1' implementation 'com.litongjava:litongjava-android-utils:1.0.0' -} \ No newline at end of file +} diff --git a/examples/whisper.android.java/app/src/main/AndroidManifest.xml b/examples/whisper.android.java/app/src/main/AndroidManifest.xml index f4980ad08ec..7011531b180 100644 --- a/examples/whisper.android.java/app/src/main/AndroidManifest.xml +++ b/examples/whisper.android.java/app/src/main/AndroidManifest.xml @@ -10,7 +10,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Whisperandroidjava"> - + @@ -19,4 +19,4 @@ - \ No newline at end of file + diff --git a/examples/whisper.android.java/app/src/main/java/com/whispercpp/java/whisper/WhisperLib.java b/examples/whisper.android.java/app/src/main/java/com/whispercpp/java/whisper/WhisperLib.java index 38dd47a38a2..9d0275cd3d7 100644 --- a/examples/whisper.android.java/app/src/main/java/com/whispercpp/java/whisper/WhisperLib.java +++ b/examples/whisper.android.java/app/src/main/java/com/whispercpp/java/whisper/WhisperLib.java @@ -72,4 +72,4 @@ public class WhisperLib { public static native String benchMemcpy(int nthread); public static native String benchGgmlMulMat(int nthread); -} \ No newline at end of file +} diff --git a/examples/whisper.android.java/app/src/main/jni/whisper/CMakeLists.txt b/examples/whisper.android.java/app/src/main/jni/whisper/CMakeLists.txt index 68415f7f784..3514fbe28c7 100644 --- a/examples/whisper.android.java/app/src/main/jni/whisper/CMakeLists.txt +++ b/examples/whisper.android.java/app/src/main/jni/whisper/CMakeLists.txt @@ -6,28 +6,14 @@ set(CMAKE_CXX_STANDARD 17) set(WHISPER_LIB_DIR ${CMAKE_SOURCE_DIR}/../../../../../../../) set(SOURCE_FILES - ${WHISPER_LIB_DIR}/ggml/src/ggml.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/ggml-cpu.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/traits.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/arch/arm/quants.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/arch/arm/repack.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/quants.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/ggml-cpu.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/unary-ops.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/binary-ops.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/vec.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-cpu/ops.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-alloc.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-backend.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-backend-reg.cpp - ${WHISPER_LIB_DIR}/ggml/src/ggml-quants.c - ${WHISPER_LIB_DIR}/ggml/src/ggml-threading.cpp ${WHISPER_LIB_DIR}/src/whisper.cpp ${CMAKE_SOURCE_DIR}/jni.c ) find_library(LOG_LIB log) +include(FetchContent) + function(build_library target_name) add_library( ${target_name} @@ -35,7 +21,10 @@ function(build_library target_name) ${SOURCE_FILES} ) - target_link_libraries(${target_name} ${LOG_LIB} android) + FetchContent_Declare(ggml SOURCE_DIR ${WHISPER_LIB_DIR}/ggml) + FetchContent_MakeAvailable(ggml) + + target_link_libraries(${target_name} ${LOG_LIB} android ggml) target_compile_definitions(${target_name} PUBLIC GGML_USE_CPU) if (${target_name} STREQUAL "whisper_v8fp16_va") diff --git a/examples/whisper.android.java/build.gradle b/examples/whisper.android.java/build.gradle index cc32112cf61..ef09bb6ebfa 100644 --- a/examples/whisper.android.java/build.gradle +++ b/examples/whisper.android.java/build.gradle @@ -2,10 +2,10 @@ buildscript { repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:4.1.3" + classpath "com.android.tools.build:gradle:7.4.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,7 +15,7 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() maven { url "https://maven.aliyun.com/repository/gradle-plugin" } } } diff --git a/examples/whisper.android.java/gradle/wrapper/gradle-wrapper.properties b/examples/whisper.android.java/gradle/wrapper/gradle-wrapper.properties index 9f4db5dbdd6..aa7e2229984 100644 --- a/examples/whisper.android.java/gradle/wrapper/gradle-wrapper.properties +++ b/examples/whisper.android.java/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip