From c4874d20df7f8ebbccac1dfc9aa94aa86c749899 Mon Sep 17 00:00:00 2001 From: TheDutchMC Date: Tue, 19 Jan 2021 20:24:34 +0100 Subject: [PATCH] Conversion to Makefile - Replaced setup.sh with target `standalone` in Makefile - Updated documentation accordingly - Updated CMakeLists_standalone to work with it now being used from Make (some path things for libdeepspeech.so) - Fixed some wrongly formatted javadoc in DeepSpeechModel.java --- native_client/java/.gitignore | 6 +- native_client/java/Makefile | 102 ++++++++++----- native_client/java/README.md | 11 +- .../libdeepspeech/CMakeLists_standalone.txt | 4 +- .../libdeepspeech/DeepSpeechModel.java | 2 +- native_client/java/setup.sh | 121 ------------------ native_client/java/standalone.md | 5 +- 7 files changed, 82 insertions(+), 169 deletions(-) delete mode 100755 native_client/java/setup.sh mode change 100644 => 100755 native_client/java/standalone.md diff --git a/native_client/java/.gitignore b/native_client/java/.gitignore index f9fd348b0e..ddfec0b1b9 100755 --- a/native_client/java/.gitignore +++ b/native_client/java/.gitignore @@ -1,5 +1,6 @@ -#User input -libdeepspeech/libs/*.so +#Native libs +libdeepspeech/libs/* +libdeepspeech/*.so #Gradle .gradle/ @@ -11,7 +12,6 @@ libdeepspeech/CMakeFiles/ libdeepspeech/cmake_install.cmake libdeepspeech/CMakeCache.txt libdeepspeech/Makefile -libdeepspeech/libdeepspeech-jni.so #SWIG jni/*.cpp diff --git a/native_client/java/Makefile b/native_client/java/Makefile index e75d178a25..72d2fb63dc 100644 --- a/native_client/java/Makefile +++ b/native_client/java/Makefile @@ -1,31 +1,71 @@ -.PHONY: clean apk-clean - -include ../definitions.mk - -ARCHS := $(shell grep 'ABI_FILTERS' libdeepspeech/gradle.properties | cut -d'=' -f2 | sed -e 's/;/ /g') -GRADLE ?= ./gradlew - -all: apk - -clean: apk-clean - rm -rf *.java jni/deepspeech_wrap.cpp - -apk-clean: - $(GRADLE) clean - -libs-clean: - rm -fr libdeepspeech/libs/*/libdeepspeech.so - -libdeepspeech/libs/%/libdeepspeech.so: - -mkdir libdeepspeech/libs/$*/ - cp ${TFDIR}/bazel-out/$*-*/bin/native_client/libdeepspeech.so libdeepspeech/libs/$*/ - -apk: apk-clean bindings $(patsubst %,libdeepspeech/libs/%/libdeepspeech.so,$(ARCHS)) - $(GRADLE) build - -maven-bundle: apk - $(GRADLE) uploadArchives - $(GRADLE) zipMavenArtifacts - -bindings: clean ds-swig - $(DS_SWIG_ENV) swig -c++ -java -package org.deepspeech.libdeepspeech -outdir libdeepspeech/src/main/java/org/deepspeech/libdeepspeech/ -o jni/deepspeech_wrap.cpp jni/deepspeech.i +.PHONY: clean apk-clean jre jre-prepare jre-libdeepspeech-jni jre-gradle jre-collect jre-clean apk-prepare + +include ../definitions.mk + +ARCHS := $(shell grep 'ABI_FILTERS' libdeepspeech/gradle.properties | cut -d'=' -f2 | sed -e 's/;/ /g') +GRADLE ?= ./gradlew + +all: apk jre +android: apk +standalone: jre + +clean: apk-clean jre-clean + rm -rf *.java jni/deepspeech_wrap.cpp + +apk-clean: + $(GRADLE) clean + +libs-clean: + rm -fr libdeepspeech/libs/*/libdeepspeech.so + +libdeepspeech/libs/%/libdeepspeech.so: + -mkdir libdeepspeech/libs/$*/ + cp ${TFDIR}/bazel-out/$*-*/bin/native_client/libdeepspeech.so libdeepspeech/libs/$*/ + +apk-prepare: + cp build.gradle.android build.gradle + cp libdeepspeech/build.gradle.android libdeepspeech/build.gradle + cp libdeepspeech/CMakeLists_android.txt libdeepspeech/CMakeLists.txt + +apk: apk-prepare apk-clean bindings $(patsubst %,libdeepspeech/libs/%/libdeepspeech.so,$(ARCHS)) + $(GRADLE) build + +jre: jre-prepare jre-collect jre-restore-makefile jre-clean +jre-prepare: $(patsubst %,libdeepspeech/libs/%/libdeepspeech.so,$(ARCHS)) + cp Makefile Makefile.original + cp build.gradle.standalone build.gradle + cp libdeepspeech/build.gradle.standalone libdeepspeech/build.gradle + cp libdeepspeech/CMakeLists_standalone.txt libdeepspeech/CMakeLists.txt + sed -i 's|__JAVA_HOME__|'${JAVA_HOME}'|g' libdeepspeech/CMakeLists.txt + +jre-libdeepspeech-jni: bindings + cd libdeepspeech; \ + cmake .; \ + $(MAKE) + +jre-gradle: jre-libdeepspeech-jni + $(GRADLE) build + +jre-collect: jre-gradle + mkdir -p build + mv libdeepspeech/libdeepspeech-jni.so build/ + cp libdeepspeech/libs/x86_64/libdeepspeech.so build/ + cp libdeepspeech/build/libs/libdeepspeech.jar build/ + +jre-clean: + rm -f libdeepspeech/CMakeLists.txt + rm -f libdeepspeech/build.gradle + rm -f build.gradle + rm -f jni/deepspeech_wrap.cpp jni/deepspeech_wrap.o + rm -rf libdeepspeech/cmake_install.cmake libdeepspeech/CMakeCache.txt libdeepspeech/Makefile libdeepspeech/CMakeFiles/ + rm -rf libdeepspeech/build/ + +jre-restore-makefile: + mv Makefile.original Makefile + +maven-bundle: apk + $(GRADLE) uploadArchives + $(GRADLE) zipMavenArtifacts + +bindings: clean ds-swig + $(DS_SWIG_ENV) swig -c++ -java -package org.deepspeech.libdeepspeech -outdir libdeepspeech/src/main/java/org/deepspeech/libdeepspeech/ -o jni/deepspeech_wrap.cpp jni/deepspeech.i \ No newline at end of file diff --git a/native_client/java/README.md b/native_client/java/README.md index 5fde08ffa4..ea79b5c4a2 100755 --- a/native_client/java/README.md +++ b/native_client/java/README.md @@ -4,17 +4,14 @@ Full project description and documentation on GitHub: [https://github.com/mozill ## Android bindings For use with Android -### Preparation -1. Rename `./build.gradle.android` to `build.gradle` -2. Rename `./libdeepspeech/build.gradle.android` to `build.gradle` -3. Rename `./libdeepspeech/CMakeLists_android.txt` to `CMakeLists.txt` - -### Build -1. In `./` run `make` +``make android`` >Note: The current example app in `./App` is not up to date with the latest changes to the bindings! ## Standalone Java Bindings for DeepSpeech For use with standalone Java +``make standalone`` + +### Usage information: See [standalone.md](standalone.md) \ No newline at end of file diff --git a/native_client/java/libdeepspeech/CMakeLists_standalone.txt b/native_client/java/libdeepspeech/CMakeLists_standalone.txt index f95ea0a704..a2e08fe32e 100755 --- a/native_client/java/libdeepspeech/CMakeLists_standalone.txt +++ b/native_client/java/libdeepspeech/CMakeLists_standalone.txt @@ -12,9 +12,9 @@ include_directories( ${CMAKE_JAVA_} __JAVA_HOME__/include __JAVA_HOME__/include/ add_library( deepspeech-jni SHARED ../jni/deepspeech_wrap.cpp ) -find_library(deepspeech-lib NAMES deepspeech PATHS ${CMAKE_SOURCE_DIR}/libs/ REQUIRED) +find_library(deepspeech-lib NAMES deepspeech PATHS ${CMAKE_SOURCE_DIR}/libs/x86_64/ REQUIRED) message(STATUS ${deepspeech-lib}) -add_custom_command( TARGET deepspeech-jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/libs/libdeepspeech.so $ENV{CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libdeepspeech.so ) +add_custom_command( TARGET deepspeech-jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/libs/x86_64/libdeepspeech.so ${CMAKE_SOURCE_DIR}/libdeepspeech.so ) target_link_libraries( deepspeech-jni ${deepspeech-lib} ) \ No newline at end of file diff --git a/native_client/java/libdeepspeech/src/main/java/org/deepspeech/libdeepspeech/DeepSpeechModel.java b/native_client/java/libdeepspeech/src/main/java/org/deepspeech/libdeepspeech/DeepSpeechModel.java index 5c98329da3..778a9971cb 100755 --- a/native_client/java/libdeepspeech/src/main/java/org/deepspeech/libdeepspeech/DeepSpeechModel.java +++ b/native_client/java/libdeepspeech/src/main/java/org/deepspeech/libdeepspeech/DeepSpeechModel.java @@ -128,7 +128,7 @@ public void setScorerAlphaBeta(float alpha, float beta) { evaluateErrorCode(impl.SetScorerAlphaBeta(this._msp, alpha, beta)); } - /* + /** * @brief Use the DeepSpeech model to perform Speech-To-Text. * * @param buffer A 16-bit, mono raw audio signal at the appropriate diff --git a/native_client/java/setup.sh b/native_client/java/setup.sh deleted file mode 100755 index aa876448a8..0000000000 --- a/native_client/java/setup.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/sh -#This script is for standalone java only - -#You, the user, should set this if it differes from what is set here! -JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64 - -#Colours used in the shell -RED='\033[0;31m' -NC='\033[0m' # No Color -GREEN='\033[0;32m' - -#Function is called whenever a program fails, $1 is supposed to be a short name for what failed (e.g Make) -fail() { - printf "${RED}FAIL${NC}\n" - echo "${RED}Setup failed: $1 $NC " - exit 1 -} - -printf "Performing checks..." - -#Check if libdeepspeech.so exists -if [ ! -e ./libdeepspeech/libs/libdeepspeech.so ] -then - printf "${RED}FAIL${NC}\n" - echo "- ./libdeepspeech/libs/libdeepspeech.so: ${RED}FAIL${NC}" - echo "Download libdeepspeech.so from GitHub releases or compile DeepSpeech first" - exit 1 -fi - -#Check if JAVA_HOME is set -if [ -z "$JAVA_HOME" ] -then - printf "${RED}FAIL${NC}\n" - echo "- JAVA_HOME: ${RED}FAIL${NC}" - echo "Please set the JAVA_HOME environmental variable!" - exit 1 -fi - -#Check if the gradle wrapper is present -if [ ! -d "./gradle" ] -then - printf "${RED}FAIL${NC}\n" - echo "- Gradle Wrapper: ${RED}FAIL${NC}" - echo "Use 'gradle wrapper' and try again" - exit 1 -fi - -#Check if the script is run as root, this is needed because Make -if [ $(id -u) -ne 0 ] -then - printf "${RED}FAIL${NC}\n" - echo "- Root check: ${RED}FAIL${NC}" - echo "Please run this script as root or with sudo!" - exit 1 -fi - -#Checks are complete -printf "${GREEN}OK${NC}\n" - -#Make the environment ready -cp Makefile Makefile.android -cp build.gradle.standalone build.gradle -cp libdeepspeech/build.gradle.standalone libdeepspeech/build.gradle -cp libdeepspeech/CMakeLists_standalone.txt libdeepspeech/CMakeLists.txt - -#Create the .cpp file for the bindings -printf "Creating bindings..." -swig -c++ -java -package org.deepspeech.libdeepspeech -outdir libdeepspeech/src/main/java/org/deepspeech/libdeepspeech/ -o jni/deepspeech_wrap.cpp jni/deepspeech.i >/dev/null 2>&1 || fail "Swig" -printf "${GREEN}OK${NC}\n" - -printf "Compiling libdeepspeech-jni.so..." - -#We move into the libdeepspeech directory, to avoid funky behaviour -cd libdeepspeech - -#Substitute __JAVA_HOME__ -sed -i 's|__JAVA_HOME__|'$JAVA_HOME'|g' CMakeLists.txt || fail "Sed" - -#Generate the Makefiles and Make it! -cmake . >/dev/null || fail "CMake" -make >/dev/null || fail "Make" -printf "${GREEN}OK${NC}\n" - -printf "Compiling Java bindings..." -#Create the JAR to include into other projects -cd .. -./gradlew build >/dev/null || fail "Gradle" - -printf "${GREEN}OK${NC}\n" - -#Copy all the important bits to a single directory, easier for the user -printf "Collecting artifacts..." -mkdir -p build -mv libdeepspeech/libdeepspeech-jni.so build/ -cp libdeepspeech/libs/libdeepspeech.so build/ -cp libdeepspeech/build/libs/libdeepspeech.jar build/ -printf "${GREEN}OK${NC}\n" - -printf "Cleaning up..." - -#Delete copied files which are no longer needed -rm -rf libdeepspeech/CMakeLists.txt -rm -rf libdeepspeech/build.gradle -rm -rf build.gradle - -#Restore Android cmake -mv Makefile.android Makefile - -#SWIG files -rm -rf jni/deepspeech_wrap.cpp jni/deepspeech_wrap.o - -#CMake files -rm -rf libdeepspeech/cmake_install.cmake libdeepspeech/CMakeCache.txt libdeepspeech/Makefile libdeepspeech/CMakeFiles/ - -#Gradle -rm -rf libdeepspeech/build/ - -printf "${GREEN}OK${NC}\n\n" - -pwd=$(pwd) -echo "Done. Your files are located in ${pwd}/build/" diff --git a/native_client/java/standalone.md b/native_client/java/standalone.md old mode 100644 new mode 100755 index cba1c83e81..731a6d5794 --- a/native_client/java/standalone.md +++ b/native_client/java/standalone.md @@ -1,7 +1,4 @@ -### Setup -1. Get `libdeepspeech.so` by compiling or (from here)[], and copy it into `./libdeepspeech/libs/` -2. Run `setup.sh` as root or with `sudo` -3. You can now find the files needed for your project at `./build/` +# DeepSpeech for standalone Java ### Adding DeepSpeech to your Java project >Note: You can do this on your own way too, but this works with the example usage code provided below.