Browse Source

android: use cmake build system

master
Yury Popov 2 years ago
parent
commit
0f050397dc
No account linked to committer's email address
4 changed files with 76 additions and 120 deletions
  1. 49
    37
      android/build.gradle
  2. 0
    83
      android/jni/Android.mk
  3. 26
    0
      android/jni/CMakeLists.txt
  4. 1
    0
      android/jni/jni/eSpeakService.c

+ 49
- 37
android/build.gradle View File

@@ -25,6 +25,49 @@ dependencies {
androidTestImplementation 'org.hamcrest:hamcrest-all:1.3'
}

android {
compileSdk 33
ndkVersion "25.1.8937393"
namespace "com.reecedunn.espeak"

defaultConfig {
minSdk 19
targetSdk 33
versionCode 22
versionName "1.52-dev"

externalNativeBuild {
cmake {
arguments "-DUSE_ASYNC:BOOL=OFF", "-DUSE_MBROLA:BOOL=OFF"
targets "ttsespeak", "espeak-data"
}
}
}

externalNativeBuild {
cmake {
path "jni/CMakeLists.txt"
version "3.22.1"
}
}

sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
}
androidTest.setRoot('eSpeakTests')
androidTest {
java.srcDirs = ['eSpeakTests/src']
}
}

lint {
abortOnError false
}
}

tasks.register('checkData') {
doFirst {
assert file("../espeak-ng-data/en_dict").exists()
@@ -37,13 +80,12 @@ tasks.register('checkData') {
}

tasks.register('createDataArchive', Zip) {
dependsOn tasks.checkData
preserveFileTimestamps = false
reproducibleFileOrder = true
archiveFileName = "espeakdata.zip"
destinationDirectory = file("res/raw")

from("../espeak-ng-data/") {
from("build/generated/espeak-ng-data/") {
into "espeak-ng-data"
}
}
@@ -61,40 +103,10 @@ tasks.register('createDataVersion', Copy) {
rename { return 'espeakdata_version' }
into file("./res/raw")
}
preBuild.dependsOn createDataVersion


android {
compileSdk 33
ndkVersion "25.1.8937393"
namespace "com.reecedunn.espeak"

defaultConfig {
minSdk 19
targetSdk 30
versionCode 22
versionName "1.52-dev"
}

externalNativeBuild {
ndkBuild {
path "jni/Android.mk"
}
}

sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
}
androidTest.setRoot('eSpeakTests')
androidTest {
java.srcDirs = ['eSpeakTests/src']
}
}

lint {
abortOnError false
}
project.afterEvaluate {
tasks.checkData.dependsOn(externalNativeBuildDebug)
tasks.createDataArchive.dependsOn(externalNativeBuildDebug)
javaPreCompileDebug.dependsOn(tasks.createDataVersion)
javaPreCompileRelease.dependsOn(tasks.createDataVersion)
}

+ 0
- 83
android/jni/Android.mk View File

@@ -1,83 +0,0 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

#LOCAL_CFLAGS = -std=c11 # speechplayer is c++ code

# ucd-tools wide-character compatibility support:

UCDTOOLS_SRC_PATH := ../../src/ucd-tools/src
UCDTOOLS_SRC_FILES := \
$(subst $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH),$(UCDTOOLS_SRC_PATH),$(wildcard $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/*.c*))

LOCAL_SRC_FILES += $(UCDTOOLS_SRC_FILES)

SPEECHPLAYER_SRC_FILES := \
../../src/speechPlayer/src/frame.cpp \
../../src/speechPlayer/src/speechPlayer.cpp \
../../src/speechPlayer/src/speechWaveGenerator.cpp

LOCAL_SRC_FILES += $(SPEECHPLAYER_SRC_FILES)

ESPEAK_SOURCES := \
src/libespeak-ng/common.c \
src/libespeak-ng/compiledata.c \
src/libespeak-ng/compiledict.c \
src/libespeak-ng/compilembrola.c \
src/libespeak-ng/dictionary.c \
src/libespeak-ng/encoding.c \
src/libespeak-ng/error.c \
src/libespeak-ng/espeak_api.c \
src/libespeak-ng/ieee80.c \
src/libespeak-ng/intonation.c \
src/libespeak-ng/klatt.c \
src/libespeak-ng/langopts.c \
src/libespeak-ng/mnemonics.c \
src/libespeak-ng/numbers.c \
src/libespeak-ng/phoneme.c \
src/libespeak-ng/phonemelist.c \
src/libespeak-ng/readclause.c \
src/libespeak-ng/setlengths.c \
src/libespeak-ng/soundicon.c \
src/libespeak-ng/spect.c \
src/libespeak-ng/speech.c \
src/libespeak-ng/sPlayer.c \
src/libespeak-ng/ssml.c \
src/libespeak-ng/synthdata.c \
src/libespeak-ng/synthesize.c \
src/libespeak-ng/synth_mbrola.c \
src/libespeak-ng/translate.c \
src/libespeak-ng/translateword.c \
src/libespeak-ng/tr_languages.c \
src/libespeak-ng/voices.c \
src/libespeak-ng/wavegen.c

ESPEAK_SRC_PATH := ../../src
ESPEAK_SRC_FILES := \
$(subst src/,$(ESPEAK_SRC_PATH)/,$(ESPEAK_SOURCES))

LOCAL_CFLAGS += -DINCLUDE_KLATT -DINCLUDE_SPEECHPLAYER -DINCLUDE_SONIC -DHAVE_ENDIAN_H
LOCAL_SRC_FILES += \
$(filter-out $(BLACKLIST_SRC_FILES),$(ESPEAK_SRC_FILES))

# JNI

LOCAL_SRC_FILES += \
$(subst $(LOCAL_PATH)/jni,jni,$(wildcard $(LOCAL_PATH)/jni/*.c))

# Common

LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/include \
$(LOCAL_PATH)/../../src/speechPlayer/include \
$(LOCAL_PATH)/$(ESPEAK_SRC_PATH)/include \
$(LOCAL_PATH)/$(ESPEAK_SRC_PATH)/include/compat

LOCAL_LDLIBS := \
-llog

LOCAL_MODULE := libttsespeak
LOCAL_MODULE_TAGS := optional
LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY)

+ 26
- 0
android/jni/CMakeLists.txt View File

@@ -0,0 +1,26 @@
cmake_minimum_required(VERSION 3.8)

project(espeak-android)

add_subdirectory(../../ espeakng)

add_custom_target(
espeak-data
COMMAND ${CMAKE_COMMAND} -B${CMAKE_CURRENT_BINARY_DIR}/../espeak-data ${CMAKE_CURRENT_SOURCE_DIR}/../../
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/../espeak-data --target data
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/../espeak-data/espeak-ng-data ${CMAKE_SOURCE_DIR}/../build/generated/espeak-ng-data
)

message(STATUS "Data: ${CMAKE_CURRENT_SOURCE_DIR}")

find_library(A_LOG log)

add_library(ttsespeak SHARED
jni/eSpeakService.c
)
target_include_directories(ttsespeak PRIVATE
include
)
target_link_libraries(ttsespeak PRIVATE
espeak-ng ${A_LOG}
)

+ 1
- 0
android/jni/jni/eSpeakService.c View File

@@ -26,6 +26,7 @@
#include <unistd.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <jni.h>

#include <espeak/speak_lib.h>

Loading…
Cancel
Save