commit
ffcec7f9aa
|
@ -130,6 +130,7 @@ tf_cc_shared_object(
|
||||||
}) + tflite_copts(),
|
}) + tflite_copts(),
|
||||||
linkopts = select({
|
linkopts = select({
|
||||||
"//tensorflow:macos": [],
|
"//tensorflow:macos": [],
|
||||||
|
"//tensorflow:ios": ["-fembed-bitcode"],
|
||||||
"//tensorflow:linux_x86_64": LINUX_LINKOPTS,
|
"//tensorflow:linux_x86_64": LINUX_LINKOPTS,
|
||||||
"//tensorflow:rpi3": LINUX_LINKOPTS,
|
"//tensorflow:rpi3": LINUX_LINKOPTS,
|
||||||
"//tensorflow:rpi3-armv8": LINUX_LINKOPTS,
|
"//tensorflow:rpi3-armv8": LINUX_LINKOPTS,
|
||||||
|
|
|
@ -12,7 +12,11 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#if defined(__ANDROID__) || defined(_MSC_VER)
|
#ifdef __APPLE__
|
||||||
|
#include <TargetConditionals.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__ANDROID__) || defined(_MSC_VER) || TARGET_OS_IPHONE
|
||||||
#define NO_SOX
|
#define NO_SOX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -244,7 +248,7 @@ GetAudioBuffer(const char* path, int desired_sample_rate)
|
||||||
sox_false // Reverse endianness
|
sox_false // Reverse endianness
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#if TARGET_OS_OSX
|
||||||
// It would be preferable to use sox_open_memstream_write here, but OS-X
|
// It would be preferable to use sox_open_memstream_write here, but OS-X
|
||||||
// doesn't support POSIX 2008, which it requires. See Issue #461.
|
// doesn't support POSIX 2008, which it requires. See Issue #461.
|
||||||
// Instead, we write to a temporary file.
|
// Instead, we write to a temporary file.
|
||||||
|
@ -348,7 +352,7 @@ GetAudioBuffer(const char* path, int desired_sample_rate)
|
||||||
fclose(wave);
|
fclose(wave);
|
||||||
#endif // NO_SOX
|
#endif // NO_SOX
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#if TARGET_OS_OSX
|
||||||
res.buffer_size = (size_t)(output->olength * 2);
|
res.buffer_size = (size_t)(output->olength * 2);
|
||||||
res.buffer = (char*)malloc(sizeof(char) * res.buffer_size);
|
res.buffer = (char*)malloc(sizeof(char) * res.buffer_size);
|
||||||
FILE* output_file = fopen(output_name, "rb");
|
FILE* output_file = fopen(output_name, "rb");
|
||||||
|
|
|
@ -101,6 +101,20 @@ NODE_PLATFORM_TARGET := --target_arch=arm64 --target_platform=linux
|
||||||
TOOLCHAIN_LDD_OPTS := --root $(RASPBIAN)/
|
TOOLCHAIN_LDD_OPTS := --root $(RASPBIAN)/
|
||||||
endif # ($(TARGET),rpi3-armv8)
|
endif # ($(TARGET),rpi3-armv8)
|
||||||
|
|
||||||
|
ifeq ($(TARGET),ios-simulator)
|
||||||
|
CFLAGS := -isysroot $(shell xcrun -sdk iphonesimulator13.5 -show-sdk-path)
|
||||||
|
SOX_CFLAGS :=
|
||||||
|
SOX_LDFLAGS :=
|
||||||
|
LDFLAGS :=
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(TARGET),ios-arm64)
|
||||||
|
CFLAGS := -target arm64-apple-ios -isysroot $(shell xcrun -sdk iphoneos13.5 -show-sdk-path)
|
||||||
|
SOX_CFLAGS :=
|
||||||
|
SOX_LDFLAGS :=
|
||||||
|
LDFLAGS :=
|
||||||
|
endif
|
||||||
|
|
||||||
# -Wl,--no-as-needed is required to force linker not to evict libs it thinks we
|
# -Wl,--no-as-needed is required to force linker not to evict libs it thinks we
|
||||||
# dont need ; will fail the build on OSX because that option does not exists
|
# dont need ; will fail the build on OSX because that option does not exists
|
||||||
ifeq ($(OS),Linux)
|
ifeq ($(OS),Linux)
|
||||||
|
@ -108,9 +122,13 @@ LDFLAGS_NEEDED := -Wl,--no-as-needed
|
||||||
LDFLAGS_RPATH := -Wl,-rpath,\$$ORIGIN
|
LDFLAGS_RPATH := -Wl,-rpath,\$$ORIGIN
|
||||||
endif
|
endif
|
||||||
ifeq ($(OS),Darwin)
|
ifeq ($(OS),Darwin)
|
||||||
CXXFLAGS += -stdlib=libc++ -mmacosx-version-min=10.10
|
CXXFLAGS += -stdlib=libc++
|
||||||
LDFLAGS_NEEDED := -stdlib=libc++ -mmacosx-version-min=10.10
|
LDFLAGS_NEEDED := -stdlib=libc++
|
||||||
LDFLAGS_RPATH := -Wl,-rpath,@executable_path
|
LDFLAGS_RPATH := -Wl,-rpath,@executable_path
|
||||||
|
ifeq ($(TARGET),host)
|
||||||
|
CXXFLAGS += -mmacosx-version-min=10.10
|
||||||
|
LDFLAGS_NEEDED += -mmacosx-version-min=10.10
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS += $(EXTRA_CFLAGS)
|
CFLAGS += $(EXTRA_CFLAGS)
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
.DS_Store
|
||||||
|
build/
|
||||||
|
xcuserdata/
|
||||||
|
/deepspeech_ios/libdeepspeech.dylib
|
|
@ -0,0 +1,499 @@
|
||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 50;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
505B136B24960D550007DADA /* deepspeech_ios.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 505B136124960D550007DADA /* deepspeech_ios.framework */; };
|
||||||
|
505B137224960D550007DADA /* deepspeech_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = 505B136424960D550007DADA /* deepspeech_ios.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
505B137D24961AF20007DADA /* deepspeech.h in Headers */ = {isa = PBXBuildFile; fileRef = 505B137C24961AF20007DADA /* deepspeech.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||||
|
505B137F24961BA70007DADA /* DeepSpeech.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505B137E24961BA70007DADA /* DeepSpeech.swift */; };
|
||||||
|
507CD39B24B61FA100409BBB /* libdeepspeech.so in Frameworks */ = {isa = PBXBuildFile; fileRef = 507CD39A24B61FA100409BBB /* libdeepspeech.so */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
505B136C24960D550007DADA /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 505B135824960D550007DADA /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = 505B136024960D550007DADA;
|
||||||
|
remoteInfo = deepspeech_ios;
|
||||||
|
};
|
||||||
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
505B138A249628290007DADA /* Embed Libraries */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 12;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 10;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
name = "Embed Libraries";
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
505B136124960D550007DADA /* deepspeech_ios.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = deepspeech_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
505B136424960D550007DADA /* deepspeech_ios.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = deepspeech_ios.h; sourceTree = "<group>"; };
|
||||||
|
505B136524960D550007DADA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
505B136A24960D550007DADA /* deepspeech_iosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = deepspeech_iosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
505B137B249619C90007DADA /* deepspeech_ios.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = deepspeech_ios.modulemap; sourceTree = "<group>"; };
|
||||||
|
505B137C24961AF20007DADA /* deepspeech.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = deepspeech.h; path = ../../deepspeech.h; sourceTree = "<group>"; };
|
||||||
|
505B137E24961BA70007DADA /* DeepSpeech.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepSpeech.swift; sourceTree = "<group>"; };
|
||||||
|
507CD39A24B61FA100409BBB /* libdeepspeech.so */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libdeepspeech.so; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
505B135E24960D550007DADA /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
507CD39B24B61FA100409BBB /* libdeepspeech.so in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
505B136724960D550007DADA /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
505B136B24960D550007DADA /* deepspeech_ios.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
505B135724960D550007DADA = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
505B136324960D550007DADA /* deepspeech_ios */,
|
||||||
|
505B136224960D550007DADA /* Products */,
|
||||||
|
505B1380249620C60007DADA /* Frameworks */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
505B136224960D550007DADA /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
505B136124960D550007DADA /* deepspeech_ios.framework */,
|
||||||
|
505B136A24960D550007DADA /* deepspeech_iosTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
505B136324960D550007DADA /* deepspeech_ios */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
505B137C24961AF20007DADA /* deepspeech.h */,
|
||||||
|
505B136424960D550007DADA /* deepspeech_ios.h */,
|
||||||
|
505B137E24961BA70007DADA /* DeepSpeech.swift */,
|
||||||
|
505B137B249619C90007DADA /* deepspeech_ios.modulemap */,
|
||||||
|
505B136524960D550007DADA /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = deepspeech_ios;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
505B1380249620C60007DADA /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
507CD39A24B61FA100409BBB /* libdeepspeech.so */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
505B135C24960D550007DADA /* Headers */ = {
|
||||||
|
isa = PBXHeadersBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
505B137224960D550007DADA /* deepspeech_ios.h in Headers */,
|
||||||
|
505B137D24961AF20007DADA /* deepspeech.h in Headers */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXHeadersBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
505B136024960D550007DADA /* deepspeech_ios */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 505B137524960D550007DADA /* Build configuration list for PBXNativeTarget "deepspeech_ios" */;
|
||||||
|
buildPhases = (
|
||||||
|
505B135C24960D550007DADA /* Headers */,
|
||||||
|
505B135D24960D550007DADA /* Sources */,
|
||||||
|
505B135E24960D550007DADA /* Frameworks */,
|
||||||
|
505B135F24960D550007DADA /* Resources */,
|
||||||
|
505B138A249628290007DADA /* Embed Libraries */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = deepspeech_ios;
|
||||||
|
productName = deepspeech_ios;
|
||||||
|
productReference = 505B136124960D550007DADA /* deepspeech_ios.framework */;
|
||||||
|
productType = "com.apple.product-type.framework";
|
||||||
|
};
|
||||||
|
505B136924960D550007DADA /* deepspeech_iosTests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 505B137824960D550007DADA /* Build configuration list for PBXNativeTarget "deepspeech_iosTests" */;
|
||||||
|
buildPhases = (
|
||||||
|
505B136624960D550007DADA /* Sources */,
|
||||||
|
505B136724960D550007DADA /* Frameworks */,
|
||||||
|
505B136824960D550007DADA /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
505B136D24960D550007DADA /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = deepspeech_iosTests;
|
||||||
|
productName = deepspeech_iosTests;
|
||||||
|
productReference = 505B136A24960D550007DADA /* deepspeech_iosTests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
505B135824960D550007DADA /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastSwiftUpdateCheck = 1150;
|
||||||
|
LastUpgradeCheck = 1150;
|
||||||
|
ORGANIZATIONNAME = Mozilla;
|
||||||
|
TargetAttributes = {
|
||||||
|
505B136024960D550007DADA = {
|
||||||
|
CreatedOnToolsVersion = 11.5;
|
||||||
|
LastSwiftMigration = 1150;
|
||||||
|
};
|
||||||
|
505B136924960D550007DADA = {
|
||||||
|
CreatedOnToolsVersion = 11.5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = 505B135B24960D550007DADA /* Build configuration list for PBXProject "deepspeech_ios" */;
|
||||||
|
compatibilityVersion = "Xcode 9.3";
|
||||||
|
developmentRegion = en;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = 505B135724960D550007DADA;
|
||||||
|
productRefGroup = 505B136224960D550007DADA /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
505B136024960D550007DADA /* deepspeech_ios */,
|
||||||
|
505B136924960D550007DADA /* deepspeech_iosTests */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
505B135F24960D550007DADA /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
505B136824960D550007DADA /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
505B135D24960D550007DADA /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
505B137F24961BA70007DADA /* DeepSpeech.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
505B136624960D550007DADA /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXTargetDependency section */
|
||||||
|
505B136D24960D550007DADA /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = 505B136024960D550007DADA /* deepspeech_ios */;
|
||||||
|
targetProxy = 505B136C24960D550007DADA /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
505B137324960D550007DADA /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
VERSION_INFO_PREFIX = "";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
505B137424960D550007DADA /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
VERSION_INFO_PREFIX = "";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
505B137624960D550007DADA /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEFINES_MODULE = YES;
|
||||||
|
DEVELOPMENT_TEAM = AWCG9S27P7;
|
||||||
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
|
INFOPLIST_FILE = deepspeech_ios/Info.plist;
|
||||||
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/deepspeech_ios",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
MODULEMAP_FILE = deepspeech_ios/deepspeech_ios.modulemap;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
505B137724960D550007DADA /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEFINES_MODULE = YES;
|
||||||
|
DEVELOPMENT_TEAM = AWCG9S27P7;
|
||||||
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
|
INFOPLIST_FILE = deepspeech_ios/Info.plist;
|
||||||
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/deepspeech_ios",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
MODULEMAP_FILE = deepspeech_ios/deepspeech_ios.modulemap;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
505B137924960D550007DADA /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
INFOPLIST_FILE = deepspeech_iosTests/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-iosTests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
505B137A24960D550007DADA /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
INFOPLIST_FILE = deepspeech_iosTests/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-iosTests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
505B135B24960D550007DADA /* Build configuration list for PBXProject "deepspeech_ios" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
505B137324960D550007DADA /* Debug */,
|
||||||
|
505B137424960D550007DADA /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
505B137524960D550007DADA /* Build configuration list for PBXNativeTarget "deepspeech_ios" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
505B137624960D550007DADA /* Debug */,
|
||||||
|
505B137724960D550007DADA /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
505B137824960D550007DADA /* Build configuration list for PBXNativeTarget "deepspeech_iosTests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
505B137924960D550007DADA /* Debug */,
|
||||||
|
505B137A24960D550007DADA /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 505B135824960D550007DADA /* Project object */;
|
||||||
|
}
|
7
native_client/swift/deepspeech_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
native_client/swift/deepspeech_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:deepspeech_ios.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,77 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1150"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "505B136024960D550007DADA"
|
||||||
|
BuildableName = "deepspeech_ios.framework"
|
||||||
|
BlueprintName = "deepspeech_ios"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "505B136924960D550007DADA"
|
||||||
|
BuildableName = "deepspeech_iosTests.xctest"
|
||||||
|
BlueprintName = "deepspeech_iosTests"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "505B136024960D550007DADA"
|
||||||
|
BuildableName = "deepspeech_ios.framework"
|
||||||
|
BlueprintName = "deepspeech_ios"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "group:deepspeech_ios.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
<FileRef
|
||||||
|
location = "group:deepspeech_ios_test/deepspeech_ios_test.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>PreviewsEnabled</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,454 @@
|
||||||
|
//
|
||||||
|
// DeepSpeech.swift
|
||||||
|
// deepspeech_ios
|
||||||
|
//
|
||||||
|
// Created by Reuben Morais on 14.06.20.
|
||||||
|
// Copyright © 2020 Mozilla. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import deepspeech_ios.libdeepspeech_Private
|
||||||
|
|
||||||
|
public enum DeepSpeechError: Error {
|
||||||
|
// Should be kept in sync with deepspeech.h
|
||||||
|
case noModel(errorCode: Int32)
|
||||||
|
case invalidAlphabet(errorCode: Int32)
|
||||||
|
case invalidShape(errorCode: Int32)
|
||||||
|
case invalidScorer(errorCode: Int32)
|
||||||
|
case modelIncompatible(errorCode: Int32)
|
||||||
|
case scorerNotEnabled(errorCode: Int32)
|
||||||
|
case scorerUnreadable(errorCode: Int32)
|
||||||
|
case scorerInvalidLm(errorCode: Int32)
|
||||||
|
case scorerNoTrie(errorCode: Int32)
|
||||||
|
case scorerInvalidTrie(errorCode: Int32)
|
||||||
|
case scorerVersionMismatch(errorCode: Int32)
|
||||||
|
case failInitMmap(errorCode: Int32)
|
||||||
|
case failInitSess(errorCode: Int32)
|
||||||
|
case failInterpreter(errorCode: Int32)
|
||||||
|
case failRunSess(errorCode: Int32)
|
||||||
|
case failCreateStream(errorCode: Int32)
|
||||||
|
case failReadProtobuf(errorCode: Int32)
|
||||||
|
case failCreateSess(errorCode: Int32)
|
||||||
|
case failCreateModel(errorCode: Int32)
|
||||||
|
|
||||||
|
// Additional case for invalid error codes, should never happen unless the
|
||||||
|
// user has mixed header and binary versions.
|
||||||
|
case invalidErrorCode(errorCode: Int32)
|
||||||
|
}
|
||||||
|
|
||||||
|
extension DeepSpeechError : LocalizedError {
|
||||||
|
public var errorDescription: String? {
|
||||||
|
switch self {
|
||||||
|
case .noModel(let errorCode),
|
||||||
|
.invalidAlphabet(let errorCode),
|
||||||
|
.invalidShape(let errorCode),
|
||||||
|
.invalidScorer(let errorCode),
|
||||||
|
.modelIncompatible(let errorCode),
|
||||||
|
.scorerNotEnabled(let errorCode),
|
||||||
|
.scorerUnreadable(let errorCode),
|
||||||
|
.scorerInvalidLm(let errorCode),
|
||||||
|
.scorerNoTrie(let errorCode),
|
||||||
|
.scorerInvalidTrie(let errorCode),
|
||||||
|
.scorerVersionMismatch(let errorCode),
|
||||||
|
.failInitMmap(let errorCode),
|
||||||
|
.failInitSess(let errorCode),
|
||||||
|
.failInterpreter(let errorCode),
|
||||||
|
.failRunSess(let errorCode),
|
||||||
|
.failCreateStream(let errorCode),
|
||||||
|
.failReadProtobuf(let errorCode),
|
||||||
|
.failCreateSess(let errorCode),
|
||||||
|
.failCreateModel(let errorCode),
|
||||||
|
.invalidErrorCode(let errorCode):
|
||||||
|
let result = DS_ErrorCodeToErrorMessage(errorCode)
|
||||||
|
defer { DS_FreeString(result) }
|
||||||
|
return String(cString: result!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func errorCodeToEnum(errorCode: Int32) -> DeepSpeechError {
|
||||||
|
switch Int(errorCode) {
|
||||||
|
case Int(DS_ERR_NO_MODEL.rawValue):
|
||||||
|
return DeepSpeechError.noModel(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_INVALID_ALPHABET.rawValue):
|
||||||
|
return DeepSpeechError.invalidAlphabet(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_INVALID_SHAPE.rawValue):
|
||||||
|
return DeepSpeechError.invalidShape(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_INVALID_SCORER.rawValue):
|
||||||
|
return DeepSpeechError.invalidScorer(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_MODEL_INCOMPATIBLE.rawValue):
|
||||||
|
return DeepSpeechError.modelIncompatible(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_SCORER_NOT_ENABLED.rawValue):
|
||||||
|
return DeepSpeechError.scorerNotEnabled(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_SCORER_UNREADABLE.rawValue):
|
||||||
|
return DeepSpeechError.scorerUnreadable(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_SCORER_INVALID_LM.rawValue):
|
||||||
|
return DeepSpeechError.scorerInvalidLm(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_SCORER_NO_TRIE.rawValue):
|
||||||
|
return DeepSpeechError.scorerNoTrie(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_SCORER_INVALID_TRIE.rawValue):
|
||||||
|
return DeepSpeechError.scorerInvalidTrie(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_SCORER_VERSION_MISMATCH.rawValue):
|
||||||
|
return DeepSpeechError.scorerVersionMismatch(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_INIT_MMAP.rawValue):
|
||||||
|
return DeepSpeechError.failInitMmap(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_INIT_SESS.rawValue):
|
||||||
|
return DeepSpeechError.failInitSess(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_INTERPRETER.rawValue):
|
||||||
|
return DeepSpeechError.failInterpreter(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_RUN_SESS.rawValue):
|
||||||
|
return DeepSpeechError.failRunSess(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_CREATE_STREAM.rawValue):
|
||||||
|
return DeepSpeechError.failCreateStream(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_READ_PROTOBUF.rawValue):
|
||||||
|
return DeepSpeechError.failReadProtobuf(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_CREATE_SESS.rawValue):
|
||||||
|
return DeepSpeechError.failCreateSess(errorCode: errorCode)
|
||||||
|
case Int(DS_ERR_FAIL_CREATE_MODEL.rawValue):
|
||||||
|
return DeepSpeechError.failCreateModel(errorCode: errorCode)
|
||||||
|
default:
|
||||||
|
return DeepSpeechError.invalidErrorCode(errorCode: errorCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func evaluateErrorCode(errorCode: Int32) throws {
|
||||||
|
if errorCode != Int32(DS_ERR_OK.rawValue) {
|
||||||
|
throw errorCodeToEnum(errorCode: errorCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Stores text of an individual token, along with its timing information
|
||||||
|
public struct DeepSpeechTokenMetadata {
|
||||||
|
/// The text corresponding to this token
|
||||||
|
let text: String
|
||||||
|
|
||||||
|
/// Position of the token in units of 20ms
|
||||||
|
let timestep: Int
|
||||||
|
|
||||||
|
/// Position of the token in seconds
|
||||||
|
let startTime: Float
|
||||||
|
|
||||||
|
internal init(fromInternal: TokenMetadata) {
|
||||||
|
text = String(cString: fromInternal.text)
|
||||||
|
timestep = Int(fromInternal.timestep)
|
||||||
|
startTime = fromInternal.start_time
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** A single transcript computed by the model, including a confidence value and
|
||||||
|
the metadata for its constituent tokens
|
||||||
|
*/
|
||||||
|
public struct DeepSpeechCandidateTranscript {
|
||||||
|
/// Array of DeepSpeechTokenMetadata objects
|
||||||
|
private(set) var tokens: [DeepSpeechTokenMetadata] = []
|
||||||
|
|
||||||
|
/** Approximated confidence value for this transcript. This corresponds to
|
||||||
|
both acoustic model and language model scores that contributed to the
|
||||||
|
creation of this transcript.
|
||||||
|
*/
|
||||||
|
let confidence: Double
|
||||||
|
|
||||||
|
internal init(fromInternal: CandidateTranscript) {
|
||||||
|
let tokensBuffer = UnsafeBufferPointer<TokenMetadata>(start: fromInternal.tokens, count: Int(fromInternal.num_tokens))
|
||||||
|
for tok in tokensBuffer {
|
||||||
|
tokens.append(DeepSpeechTokenMetadata(fromInternal: tok))
|
||||||
|
}
|
||||||
|
confidence = fromInternal.confidence
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An array of DeepSpeechCandidateTranscript objects computed by the model
|
||||||
|
public struct DeepSpeechMetadata {
|
||||||
|
/// Array of DeepSpeechCandidateTranscript objects
|
||||||
|
private(set) var transcripts: [DeepSpeechCandidateTranscript] = []
|
||||||
|
|
||||||
|
internal init(fromInternal: UnsafeMutablePointer<Metadata>) {
|
||||||
|
let md = fromInternal.pointee
|
||||||
|
let transcriptsBuffer = UnsafeBufferPointer<CandidateTranscript>(
|
||||||
|
start: md.transcripts,
|
||||||
|
count: Int(md.num_transcripts))
|
||||||
|
|
||||||
|
for tr in transcriptsBuffer {
|
||||||
|
transcripts.append(DeepSpeechCandidateTranscript(fromInternal: tr))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DeepSpeechStream {
|
||||||
|
private var streamCtx: OpaquePointer!
|
||||||
|
|
||||||
|
internal init(streamContext: OpaquePointer) {
|
||||||
|
streamCtx = streamContext
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
if streamCtx != nil {
|
||||||
|
DS_FreeStream(streamCtx)
|
||||||
|
streamCtx = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Feed audio samples to an ongoing streaming inference.
|
||||||
|
|
||||||
|
- Parameter buffer: A 16-bit, mono raw audio signal at the appropriate
|
||||||
|
sample rate (matching what the model was trained on).
|
||||||
|
|
||||||
|
- Precondition: `finishStream()` has not been called on this stream.
|
||||||
|
*/
|
||||||
|
public func feedAudioContent(buffer: Array<Int16>) {
|
||||||
|
precondition(streamCtx != nil, "calling method on invalidated Stream")
|
||||||
|
|
||||||
|
buffer.withUnsafeBufferPointer { unsafeBufferPointer in
|
||||||
|
feedAudioContent(buffer: unsafeBufferPointer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Feed audio samples to an ongoing streaming inference.
|
||||||
|
|
||||||
|
- Parameter buffer: A 16-bit, mono raw audio signal at the appropriate
|
||||||
|
sample rate (matching what the model was trained on).
|
||||||
|
|
||||||
|
- Precondition: `finishStream()` has not been called on this stream.
|
||||||
|
*/
|
||||||
|
public func feedAudioContent(buffer: UnsafeBufferPointer<Int16>) {
|
||||||
|
precondition(streamCtx != nil, "calling method on invalidated Stream")
|
||||||
|
|
||||||
|
DS_FeedAudioContent(streamCtx, buffer.baseAddress, UInt32(buffer.count))
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Compute the intermediate decoding of an ongoing streaming inference.
|
||||||
|
|
||||||
|
- Precondition: `finishStream()` has not been called on this stream.
|
||||||
|
|
||||||
|
- Returns: The STT intermediate result.
|
||||||
|
*/
|
||||||
|
public func intermediateDecode() -> String {
|
||||||
|
precondition(streamCtx != nil, "calling method on invalidated Stream")
|
||||||
|
|
||||||
|
let result = DS_IntermediateDecode(streamCtx)
|
||||||
|
defer { DS_FreeString(result) }
|
||||||
|
return String(cString: result!)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Compute the intermediate decoding of an ongoing streaming inference,
|
||||||
|
return results including metadata.
|
||||||
|
|
||||||
|
- Parameter numResults: The number of candidate transcripts to return.
|
||||||
|
|
||||||
|
- Precondition: `finishStream()` has not been called on this stream.
|
||||||
|
|
||||||
|
- Returns: Metadata struct containing multiple CandidateTranscript structs.
|
||||||
|
Each transcript has per-token metadata including timing information.
|
||||||
|
*/
|
||||||
|
public func intermediateDecodeWithMetadata(numResults: Int) -> DeepSpeechMetadata {
|
||||||
|
precondition(streamCtx != nil, "calling method on invalidated Stream")
|
||||||
|
let result = DS_IntermediateDecodeWithMetadata(streamCtx, UInt32(numResults))!
|
||||||
|
defer { DS_FreeMetadata(result) }
|
||||||
|
return DeepSpeechMetadata(fromInternal: result)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Compute the final decoding of an ongoing streaming inference and return
|
||||||
|
the result. Signals the end of an ongoing streaming inference.
|
||||||
|
|
||||||
|
- Precondition: `finishStream()` has not been called on this stream.
|
||||||
|
|
||||||
|
- Returns: The STT result.
|
||||||
|
|
||||||
|
- Postcondition: This method will invalidate this streaming context.
|
||||||
|
*/
|
||||||
|
public func finishStream() -> String {
|
||||||
|
precondition(streamCtx != nil, "calling method on invalidated Stream")
|
||||||
|
|
||||||
|
let result = DS_FinishStream(streamCtx)
|
||||||
|
defer {
|
||||||
|
DS_FreeString(result)
|
||||||
|
streamCtx = nil
|
||||||
|
}
|
||||||
|
return String(cString: result!)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Compute the final decoding of an ongoing streaming inference and return
|
||||||
|
results including metadata. Signals the end of an ongoing streaming
|
||||||
|
inference.
|
||||||
|
|
||||||
|
- Parameter numResults: The number of candidate transcripts to return.
|
||||||
|
|
||||||
|
- Precondition: `finishStream()` has not been called on this stream.
|
||||||
|
|
||||||
|
- Returns: Metadata struct containing multiple CandidateTranscript structs.
|
||||||
|
Each transcript has per-token metadata including timing information.
|
||||||
|
|
||||||
|
- Postcondition: This method will invalidate this streaming context.
|
||||||
|
*/
|
||||||
|
public func finishStreamWithMetadata(numResults: Int) -> DeepSpeechMetadata {
|
||||||
|
precondition(streamCtx != nil, "calling method on invalidated Stream")
|
||||||
|
|
||||||
|
let result = DS_FinishStreamWithMetadata(streamCtx, UInt32(numResults))!
|
||||||
|
defer { DS_FreeMetadata(result) }
|
||||||
|
return DeepSpeechMetadata(fromInternal: result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An object providing an interface to a trained DeepSpeech model.
|
||||||
|
public class DeepSpeechModel {
|
||||||
|
private var modelCtx: OpaquePointer!
|
||||||
|
|
||||||
|
/**
|
||||||
|
- Parameter modelPath: The path to the model file.
|
||||||
|
|
||||||
|
- Throws: `DeepSpeechError` on failure.
|
||||||
|
*/
|
||||||
|
public init(modelPath: String) throws {
|
||||||
|
let err = DS_CreateModel(modelPath, &modelCtx)
|
||||||
|
try evaluateErrorCode(errorCode: err)
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
DS_FreeModel(modelCtx)
|
||||||
|
modelCtx = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get beam width value used by the model. If {@link DS_SetModelBeamWidth}
|
||||||
|
was not called before, will return the default value loaded from the
|
||||||
|
model file.
|
||||||
|
|
||||||
|
- Returns: Beam width value used by the model.
|
||||||
|
*/
|
||||||
|
public func getBeamWidth() -> Int {
|
||||||
|
return Int(DS_GetModelBeamWidth(modelCtx))
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set beam width value used by the model.
|
||||||
|
|
||||||
|
- Parameter beamWidth: The beam width used by the model. A larger beam
|
||||||
|
width value generates better results at the cost
|
||||||
|
of decoding time.
|
||||||
|
|
||||||
|
- Throws: `DeepSpeechError` on failure.
|
||||||
|
*/
|
||||||
|
public func setBeamWidth(beamWidth: Int) throws {
|
||||||
|
let err = DS_SetModelBeamWidth(modelCtx, UInt32(beamWidth))
|
||||||
|
try evaluateErrorCode(errorCode: err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The sample rate expected by the model.
|
||||||
|
public var sampleRate: Int {
|
||||||
|
get {
|
||||||
|
return Int(DS_GetModelSampleRate(modelCtx))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enable decoding using an external scorer.
|
||||||
|
|
||||||
|
- Parameter scorerPath: The path to the external scorer file.
|
||||||
|
|
||||||
|
- Throws: `DeepSpeechError` on failure.
|
||||||
|
*/
|
||||||
|
public func enableExternalScorer(scorerPath: String) throws {
|
||||||
|
let err = DS_EnableExternalScorer(modelCtx, scorerPath)
|
||||||
|
try evaluateErrorCode(errorCode: err)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Disable decoding using an external scorer.
|
||||||
|
|
||||||
|
- Throws: `DeepSpeechError` on failure.
|
||||||
|
*/
|
||||||
|
public func disableExternalScorer() throws {
|
||||||
|
let err = DS_DisableExternalScorer(modelCtx)
|
||||||
|
try evaluateErrorCode(errorCode: err)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set hyperparameters alpha and beta of the external scorer.
|
||||||
|
|
||||||
|
- Parameter alpha: The alpha hyperparameter of the decoder. Language model weight.
|
||||||
|
- Parameter beta: The beta hyperparameter of the decoder. Word insertion weight.
|
||||||
|
|
||||||
|
- Throws: `DeepSpeechError` on failure.
|
||||||
|
*/
|
||||||
|
public func setScorerAlphaBeta(alpha: Float, beta: Float) throws {
|
||||||
|
let err = DS_SetScorerAlphaBeta(modelCtx, alpha, beta)
|
||||||
|
try evaluateErrorCode(errorCode: err)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Use the DeepSpeech model to convert speech to text.
|
||||||
|
|
||||||
|
- Parameter buffer: A 16-bit, mono raw audio signal at the appropriate
|
||||||
|
sample rate (matching what the model was trained on).
|
||||||
|
|
||||||
|
- Returns: The STT result.
|
||||||
|
*/
|
||||||
|
public func speechToText(buffer: Array<Int16>) -> String {
|
||||||
|
return buffer.withUnsafeBufferPointer { unsafeBufferPointer -> String in
|
||||||
|
return speechToText(buffer: unsafeBufferPointer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Use the DeepSpeech model to convert speech to text.
|
||||||
|
|
||||||
|
- Parameter buffer: A 16-bit, mono raw audio signal at the appropriate
|
||||||
|
sample rate (matching what the model was trained on).
|
||||||
|
|
||||||
|
- Returns: The STT result.
|
||||||
|
*/
|
||||||
|
public func speechToText(buffer: UnsafeBufferPointer<Int16>) -> String {
|
||||||
|
let result = DS_SpeechToText(modelCtx, buffer.baseAddress, UInt32(buffer.count))
|
||||||
|
defer { DS_FreeString(result) }
|
||||||
|
return String(cString: result!)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Use the DeepSpeech model to convert speech to text and output results
|
||||||
|
including metadata.
|
||||||
|
|
||||||
|
- Parameter buffer: A 16-bit, mono raw audio signal at the appropriate
|
||||||
|
sample rate (matching what the model was trained on).
|
||||||
|
- Parameter numResults: The maximum number of DeepSpeechCandidateTranscript
|
||||||
|
structs to return. Returned value might be smaller than this.
|
||||||
|
|
||||||
|
- Returns: Metadata struct containing multiple CandidateTranscript structs.
|
||||||
|
Each transcript has per-token metadata including timing information.
|
||||||
|
*/
|
||||||
|
public func speechToTextWithMetadata(buffer: Array<Int16>, numResults: Int) -> DeepSpeechMetadata {
|
||||||
|
return buffer.withUnsafeBufferPointer { unsafeBufferPointer -> DeepSpeechMetadata in
|
||||||
|
return speechToTextWithMetadata(buffer: unsafeBufferPointer, numResults: numResults)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Use the DeepSpeech model to convert speech to text and output results
|
||||||
|
including metadata.
|
||||||
|
|
||||||
|
- Parameter buffer: A 16-bit, mono raw audio signal at the appropriate
|
||||||
|
sample rate (matching what the model was trained on).
|
||||||
|
- Parameter numResults: The maximum number of DeepSpeechCandidateTranscript
|
||||||
|
structs to return. Returned value might be smaller than this.
|
||||||
|
|
||||||
|
- Returns: Metadata struct containing multiple CandidateTranscript structs.
|
||||||
|
Each transcript has per-token metadata including timing information.
|
||||||
|
*/
|
||||||
|
public func speechToTextWithMetadata(buffer: UnsafeBufferPointer<Int16>, numResults: Int) -> DeepSpeechMetadata {
|
||||||
|
let result = DS_SpeechToTextWithMetadata(
|
||||||
|
modelCtx,
|
||||||
|
buffer.baseAddress,
|
||||||
|
UInt32(buffer.count),
|
||||||
|
UInt32(numResults))!
|
||||||
|
defer { DS_FreeMetadata(result) }
|
||||||
|
return DeepSpeechMetadata(fromInternal: result)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a new streaming inference state.
|
||||||
|
|
||||||
|
- Returns: DeepSpeechStream object representing the streaming state.
|
||||||
|
|
||||||
|
- Throws: `DeepSpeechError` on failure.
|
||||||
|
*/
|
||||||
|
public func createStream() throws -> DeepSpeechStream {
|
||||||
|
var streamContext: OpaquePointer!
|
||||||
|
let err = DS_CreateStream(modelCtx, &streamContext)
|
||||||
|
try evaluateErrorCode(errorCode: err)
|
||||||
|
return DeepSpeechStream(streamContext: streamContext)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func DeepSpeechVersion() -> String {
|
||||||
|
let result = DS_Version()
|
||||||
|
defer { DS_FreeString(result) }
|
||||||
|
return String(cString: result!)
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,13 @@
|
||||||
|
//
|
||||||
|
// deepspeech_ios.h
|
||||||
|
// deepspeech_ios
|
||||||
|
//
|
||||||
|
// Created by Reuben Morais on 14.06.20.
|
||||||
|
// Copyright © 2020 Mozilla. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
// In this header, you should import all the public headers of your framework using statements like #import <deepspeech_ios/PublicHeader.h>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
framework module deepspeech_ios {
|
||||||
|
umbrella header "deepspeech_ios.h"
|
||||||
|
|
||||||
|
export *
|
||||||
|
module * { export * }
|
||||||
|
|
||||||
|
explicit module libdeepspeech_Private {
|
||||||
|
header "deepspeech.h"
|
||||||
|
export *
|
||||||
|
link "deepspeech"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,637 @@
|
||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 50;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
507CD3A124B61FE400409BBB /* deepspeech_ios.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 507CD3A024B61FE400409BBB /* deepspeech_ios.framework */; };
|
||||||
|
507CD3A324B61FEB00409BBB /* libdeepspeech.so in Frameworks */ = {isa = PBXBuildFile; fileRef = 507CD3A224B61FEA00409BBB /* libdeepspeech.so */; };
|
||||||
|
507CD3A424B61FFC00409BBB /* libdeepspeech.so in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 507CD3A224B61FEA00409BBB /* libdeepspeech.so */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
|
50F787F32497683900D52237 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F787F22497683900D52237 /* AppDelegate.swift */; };
|
||||||
|
50F787F52497683900D52237 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F787F42497683900D52237 /* SceneDelegate.swift */; };
|
||||||
|
50F787F72497683900D52237 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F787F62497683900D52237 /* ContentView.swift */; };
|
||||||
|
50F787F92497683A00D52237 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50F787F82497683A00D52237 /* Assets.xcassets */; };
|
||||||
|
50F787FC2497683A00D52237 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50F787FB2497683A00D52237 /* Preview Assets.xcassets */; };
|
||||||
|
50F787FF2497683A00D52237 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50F787FD2497683A00D52237 /* LaunchScreen.storyboard */; };
|
||||||
|
50F7880A2497683A00D52237 /* deepspeech_ios_testTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F788092497683A00D52237 /* deepspeech_ios_testTests.swift */; };
|
||||||
|
50F788152497683A00D52237 /* deepspeech_ios_testUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F788142497683A00D52237 /* deepspeech_ios_testUITests.swift */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
50F788062497683A00D52237 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 50F787E72497683900D52237 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = 50F787EE2497683900D52237;
|
||||||
|
remoteInfo = deepspeech_ios_test;
|
||||||
|
};
|
||||||
|
50F788112497683A00D52237 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 50F787E72497683900D52237 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = 50F787EE2497683900D52237;
|
||||||
|
remoteInfo = deepspeech_ios_test;
|
||||||
|
};
|
||||||
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
50F2B10E2498EB59007CD876 /* Embed Frameworks */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 10;
|
||||||
|
files = (
|
||||||
|
507CD3A424B61FFC00409BBB /* libdeepspeech.so in Embed Frameworks */,
|
||||||
|
);
|
||||||
|
name = "Embed Frameworks";
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
507CD3A024B61FE400409BBB /* deepspeech_ios.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = deepspeech_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
507CD3A224B61FEA00409BBB /* libdeepspeech.so */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libdeepspeech.so; path = ../libdeepspeech.so; sourceTree = "<group>"; };
|
||||||
|
50F787EF2497683900D52237 /* deepspeech_ios_test.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = deepspeech_ios_test.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
50F787F22497683900D52237 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
50F787F42497683900D52237 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
50F787F62497683900D52237 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||||
|
50F787F82497683A00D52237 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
|
50F787FB2497683A00D52237 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
||||||
|
50F787FE2497683A00D52237 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
|
50F788002497683A00D52237 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
50F788052497683A00D52237 /* deepspeech_ios_testTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = deepspeech_ios_testTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
50F788092497683A00D52237 /* deepspeech_ios_testTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = deepspeech_ios_testTests.swift; sourceTree = "<group>"; };
|
||||||
|
50F7880B2497683A00D52237 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
50F788102497683A00D52237 /* deepspeech_ios_testUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = deepspeech_ios_testUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
50F788142497683A00D52237 /* deepspeech_ios_testUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = deepspeech_ios_testUITests.swift; sourceTree = "<group>"; };
|
||||||
|
50F788162497683A00D52237 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
50F787EC2497683900D52237 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
507CD3A324B61FEB00409BBB /* libdeepspeech.so in Frameworks */,
|
||||||
|
507CD3A124B61FE400409BBB /* deepspeech_ios.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
50F788022497683A00D52237 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
50F7880D2497683A00D52237 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
50F2B0FC2498D6C7007CD876 /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
507CD3A224B61FEA00409BBB /* libdeepspeech.so */,
|
||||||
|
507CD3A024B61FE400409BBB /* deepspeech_ios.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
50F787E62497683900D52237 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
50F787F12497683900D52237 /* deepspeech_ios_test */,
|
||||||
|
50F788082497683A00D52237 /* deepspeech_ios_testTests */,
|
||||||
|
50F788132497683A00D52237 /* deepspeech_ios_testUITests */,
|
||||||
|
50F787F02497683900D52237 /* Products */,
|
||||||
|
50F2B0FC2498D6C7007CD876 /* Frameworks */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
50F787F02497683900D52237 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
50F787EF2497683900D52237 /* deepspeech_ios_test.app */,
|
||||||
|
50F788052497683A00D52237 /* deepspeech_ios_testTests.xctest */,
|
||||||
|
50F788102497683A00D52237 /* deepspeech_ios_testUITests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
50F787F12497683900D52237 /* deepspeech_ios_test */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
50F787F22497683900D52237 /* AppDelegate.swift */,
|
||||||
|
50F787F42497683900D52237 /* SceneDelegate.swift */,
|
||||||
|
50F787F62497683900D52237 /* ContentView.swift */,
|
||||||
|
50F787F82497683A00D52237 /* Assets.xcassets */,
|
||||||
|
50F787FD2497683A00D52237 /* LaunchScreen.storyboard */,
|
||||||
|
50F788002497683A00D52237 /* Info.plist */,
|
||||||
|
50F787FA2497683A00D52237 /* Preview Content */,
|
||||||
|
);
|
||||||
|
path = deepspeech_ios_test;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
50F787FA2497683A00D52237 /* Preview Content */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
50F787FB2497683A00D52237 /* Preview Assets.xcassets */,
|
||||||
|
);
|
||||||
|
path = "Preview Content";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
50F788082497683A00D52237 /* deepspeech_ios_testTests */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
50F788092497683A00D52237 /* deepspeech_ios_testTests.swift */,
|
||||||
|
50F7880B2497683A00D52237 /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = deepspeech_ios_testTests;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
50F788132497683A00D52237 /* deepspeech_ios_testUITests */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
50F788142497683A00D52237 /* deepspeech_ios_testUITests.swift */,
|
||||||
|
50F788162497683A00D52237 /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = deepspeech_ios_testUITests;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
50F787EE2497683900D52237 /* deepspeech_ios_test */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 50F788192497683A00D52237 /* Build configuration list for PBXNativeTarget "deepspeech_ios_test" */;
|
||||||
|
buildPhases = (
|
||||||
|
50F787EB2497683900D52237 /* Sources */,
|
||||||
|
50F787EC2497683900D52237 /* Frameworks */,
|
||||||
|
50F787ED2497683900D52237 /* Resources */,
|
||||||
|
50F2B10E2498EB59007CD876 /* Embed Frameworks */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = deepspeech_ios_test;
|
||||||
|
productName = deepspeech_ios_test;
|
||||||
|
productReference = 50F787EF2497683900D52237 /* deepspeech_ios_test.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
50F788042497683A00D52237 /* deepspeech_ios_testTests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 50F7881C2497683A00D52237 /* Build configuration list for PBXNativeTarget "deepspeech_ios_testTests" */;
|
||||||
|
buildPhases = (
|
||||||
|
50F788012497683A00D52237 /* Sources */,
|
||||||
|
50F788022497683A00D52237 /* Frameworks */,
|
||||||
|
50F788032497683A00D52237 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
50F788072497683A00D52237 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = deepspeech_ios_testTests;
|
||||||
|
productName = deepspeech_ios_testTests;
|
||||||
|
productReference = 50F788052497683A00D52237 /* deepspeech_ios_testTests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
|
};
|
||||||
|
50F7880F2497683A00D52237 /* deepspeech_ios_testUITests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 50F7881F2497683A00D52237 /* Build configuration list for PBXNativeTarget "deepspeech_ios_testUITests" */;
|
||||||
|
buildPhases = (
|
||||||
|
50F7880C2497683A00D52237 /* Sources */,
|
||||||
|
50F7880D2497683A00D52237 /* Frameworks */,
|
||||||
|
50F7880E2497683A00D52237 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
50F788122497683A00D52237 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = deepspeech_ios_testUITests;
|
||||||
|
productName = deepspeech_ios_testUITests;
|
||||||
|
productReference = 50F788102497683A00D52237 /* deepspeech_ios_testUITests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.ui-testing";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
50F787E72497683900D52237 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastSwiftUpdateCheck = 1150;
|
||||||
|
LastUpgradeCheck = 1150;
|
||||||
|
ORGANIZATIONNAME = Mozilla;
|
||||||
|
TargetAttributes = {
|
||||||
|
50F787EE2497683900D52237 = {
|
||||||
|
CreatedOnToolsVersion = 11.5;
|
||||||
|
};
|
||||||
|
50F788042497683A00D52237 = {
|
||||||
|
CreatedOnToolsVersion = 11.5;
|
||||||
|
TestTargetID = 50F787EE2497683900D52237;
|
||||||
|
};
|
||||||
|
50F7880F2497683A00D52237 = {
|
||||||
|
CreatedOnToolsVersion = 11.5;
|
||||||
|
TestTargetID = 50F787EE2497683900D52237;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = 50F787EA2497683900D52237 /* Build configuration list for PBXProject "deepspeech_ios_test" */;
|
||||||
|
compatibilityVersion = "Xcode 9.3";
|
||||||
|
developmentRegion = en;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = 50F787E62497683900D52237;
|
||||||
|
productRefGroup = 50F787F02497683900D52237 /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
50F787EE2497683900D52237 /* deepspeech_ios_test */,
|
||||||
|
50F788042497683A00D52237 /* deepspeech_ios_testTests */,
|
||||||
|
50F7880F2497683A00D52237 /* deepspeech_ios_testUITests */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
50F787ED2497683900D52237 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
50F787FF2497683A00D52237 /* LaunchScreen.storyboard in Resources */,
|
||||||
|
50F787FC2497683A00D52237 /* Preview Assets.xcassets in Resources */,
|
||||||
|
50F787F92497683A00D52237 /* Assets.xcassets in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
50F788032497683A00D52237 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
50F7880E2497683A00D52237 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
50F787EB2497683900D52237 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
50F787F32497683900D52237 /* AppDelegate.swift in Sources */,
|
||||||
|
50F787F52497683900D52237 /* SceneDelegate.swift in Sources */,
|
||||||
|
50F787F72497683900D52237 /* ContentView.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
50F788012497683A00D52237 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
50F7880A2497683A00D52237 /* deepspeech_ios_testTests.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
50F7880C2497683A00D52237 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
50F788152497683A00D52237 /* deepspeech_ios_testUITests.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXTargetDependency section */
|
||||||
|
50F788072497683A00D52237 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = 50F787EE2497683900D52237 /* deepspeech_ios_test */;
|
||||||
|
targetProxy = 50F788062497683A00D52237 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
50F788122497683A00D52237 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = 50F787EE2497683900D52237 /* deepspeech_ios_test */;
|
||||||
|
targetProxy = 50F788112497683A00D52237 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
50F787FD2497683A00D52237 /* LaunchScreen.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
50F787FE2497683A00D52237 /* Base */,
|
||||||
|
);
|
||||||
|
name = LaunchScreen.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
50F788172497683A00D52237 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
50F788182497683A00D52237 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
50F7881A2497683A00D52237 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_ASSET_PATHS = "\"deepspeech_ios_test/Preview Content\"";
|
||||||
|
DEVELOPMENT_TEAM = AWCG9S27P7;
|
||||||
|
ENABLE_PREVIEWS = YES;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)";
|
||||||
|
INFOPLIST_FILE = deepspeech_ios_test/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios-test";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
50F7881B2497683A00D52237 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_ASSET_PATHS = "\"deepspeech_ios_test/Preview Content\"";
|
||||||
|
DEVELOPMENT_TEAM = AWCG9S27P7;
|
||||||
|
ENABLE_PREVIEWS = YES;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)";
|
||||||
|
INFOPLIST_FILE = deepspeech_ios_test/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios-test";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
50F7881D2497683A00D52237 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
INFOPLIST_FILE = deepspeech_ios_testTests/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios-testTests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/deepspeech_ios_test.app/deepspeech_ios_test";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
50F7881E2497683A00D52237 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
INFOPLIST_FILE = deepspeech_ios_testTests/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.5;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios-testTests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/deepspeech_ios_test.app/deepspeech_ios_test";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
50F788202497683A00D52237 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
INFOPLIST_FILE = deepspeech_ios_testUITests/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios-testUITests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
TEST_TARGET_NAME = deepspeech_ios_test;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
50F788212497683A00D52237 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
INFOPLIST_FILE = deepspeech_ios_testUITests/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.deepspeech-ios-testUITests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
TEST_TARGET_NAME = deepspeech_ios_test;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
50F787EA2497683900D52237 /* Build configuration list for PBXProject "deepspeech_ios_test" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
50F788172497683A00D52237 /* Debug */,
|
||||||
|
50F788182497683A00D52237 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
50F788192497683A00D52237 /* Build configuration list for PBXNativeTarget "deepspeech_ios_test" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
50F7881A2497683A00D52237 /* Debug */,
|
||||||
|
50F7881B2497683A00D52237 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
50F7881C2497683A00D52237 /* Build configuration list for PBXNativeTarget "deepspeech_ios_testTests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
50F7881D2497683A00D52237 /* Debug */,
|
||||||
|
50F7881E2497683A00D52237 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
50F7881F2497683A00D52237 /* Build configuration list for PBXNativeTarget "deepspeech_ios_testUITests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
50F788202497683A00D52237 /* Debug */,
|
||||||
|
50F788212497683A00D52237 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 50F787E72497683900D52237 /* Project object */;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:deepspeech_ios_test.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,106 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1150"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "50F787EE2497683900D52237"
|
||||||
|
BuildableName = "deepspeech_ios_test.app"
|
||||||
|
BlueprintName = "deepspeech_ios_test"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios_test.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "50F788042497683A00D52237"
|
||||||
|
BuildableName = "deepspeech_ios_testTests.xctest"
|
||||||
|
BlueprintName = "deepspeech_ios_testTests"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios_test.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "50F7880F2497683A00D52237"
|
||||||
|
BuildableName = "deepspeech_ios_testUITests.xctest"
|
||||||
|
BlueprintName = "deepspeech_ios_testUITests"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios_test.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
enableAddressSanitizer = "YES"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "50F787EE2497683900D52237"
|
||||||
|
BuildableName = "deepspeech_ios_test.app"
|
||||||
|
BlueprintName = "deepspeech_ios_test"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios_test.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
<AdditionalOptions>
|
||||||
|
<AdditionalOption
|
||||||
|
key = "NSZombieEnabled"
|
||||||
|
value = "YES"
|
||||||
|
isEnabled = "YES">
|
||||||
|
</AdditionalOption>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "50F787EE2497683900D52237"
|
||||||
|
BuildableName = "deepspeech_ios_test.app"
|
||||||
|
BlueprintName = "deepspeech_ios_test"
|
||||||
|
ReferencedContainer = "container:deepspeech_ios_test.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
|
@ -0,0 +1,210 @@
|
||||||
|
//
|
||||||
|
// AppDelegate.swift
|
||||||
|
// deepspeech_ios_test
|
||||||
|
//
|
||||||
|
// Created by Reuben Morais on 15.06.20.
|
||||||
|
// Copyright © 2020 Mozilla. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import Foundation
|
||||||
|
import AVFoundation
|
||||||
|
import AudioToolbox
|
||||||
|
import Accelerate
|
||||||
|
|
||||||
|
import deepspeech_ios
|
||||||
|
|
||||||
|
/// Holds audio information used for building waveforms
|
||||||
|
final class AudioContext {
|
||||||
|
|
||||||
|
/// The audio asset URL used to load the context
|
||||||
|
public let audioURL: URL
|
||||||
|
|
||||||
|
/// Total number of samples in loaded asset
|
||||||
|
public let totalSamples: Int
|
||||||
|
|
||||||
|
/// Loaded asset
|
||||||
|
public let asset: AVAsset
|
||||||
|
|
||||||
|
// Loaded assetTrack
|
||||||
|
public let assetTrack: AVAssetTrack
|
||||||
|
|
||||||
|
private init(audioURL: URL, totalSamples: Int, asset: AVAsset, assetTrack: AVAssetTrack) {
|
||||||
|
self.audioURL = audioURL
|
||||||
|
self.totalSamples = totalSamples
|
||||||
|
self.asset = asset
|
||||||
|
self.assetTrack = assetTrack
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func load(fromAudioURL audioURL: URL, completionHandler: @escaping (_ audioContext: AudioContext?) -> ()) {
|
||||||
|
let asset = AVURLAsset(url: audioURL, options: [AVURLAssetPreferPreciseDurationAndTimingKey: NSNumber(value: true as Bool)])
|
||||||
|
|
||||||
|
guard let assetTrack = asset.tracks(withMediaType: AVMediaType.audio).first else {
|
||||||
|
fatalError("Couldn't load AVAssetTrack")
|
||||||
|
}
|
||||||
|
|
||||||
|
asset.loadValuesAsynchronously(forKeys: ["duration"]) {
|
||||||
|
var error: NSError?
|
||||||
|
let status = asset.statusOfValue(forKey: "duration", error: &error)
|
||||||
|
switch status {
|
||||||
|
case .loaded:
|
||||||
|
guard
|
||||||
|
let formatDescriptions = assetTrack.formatDescriptions as? [CMAudioFormatDescription],
|
||||||
|
let audioFormatDesc = formatDescriptions.first,
|
||||||
|
let asbd = CMAudioFormatDescriptionGetStreamBasicDescription(audioFormatDesc)
|
||||||
|
else { break }
|
||||||
|
|
||||||
|
let totalSamples = Int((asbd.pointee.mSampleRate) * Float64(asset.duration.value) / Float64(asset.duration.timescale))
|
||||||
|
let audioContext = AudioContext(audioURL: audioURL, totalSamples: totalSamples, asset: asset, assetTrack: assetTrack)
|
||||||
|
completionHandler(audioContext)
|
||||||
|
return
|
||||||
|
|
||||||
|
case .failed, .cancelled, .loading, .unknown:
|
||||||
|
print("Couldn't load asset: \(error?.localizedDescription ?? "Unknown error")")
|
||||||
|
}
|
||||||
|
|
||||||
|
completionHandler(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func render(audioContext: AudioContext?, stream: DeepSpeechStream) {
|
||||||
|
guard let audioContext = audioContext else {
|
||||||
|
fatalError("Couldn't create the audioContext")
|
||||||
|
}
|
||||||
|
|
||||||
|
let sampleRange: CountableRange<Int> = 0..<audioContext.totalSamples
|
||||||
|
|
||||||
|
guard let reader = try? AVAssetReader(asset: audioContext.asset)
|
||||||
|
else {
|
||||||
|
fatalError("Couldn't initialize the AVAssetReader")
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.timeRange = CMTimeRange(start: CMTime(value: Int64(sampleRange.lowerBound), timescale: audioContext.asset.duration.timescale),
|
||||||
|
duration: CMTime(value: Int64(sampleRange.count), timescale: audioContext.asset.duration.timescale))
|
||||||
|
|
||||||
|
let outputSettingsDict: [String : Any] = [
|
||||||
|
AVFormatIDKey: Int(kAudioFormatLinearPCM),
|
||||||
|
AVLinearPCMBitDepthKey: 16,
|
||||||
|
AVLinearPCMIsBigEndianKey: false,
|
||||||
|
AVLinearPCMIsFloatKey: false,
|
||||||
|
AVLinearPCMIsNonInterleaved: false
|
||||||
|
]
|
||||||
|
|
||||||
|
let readerOutput = AVAssetReaderTrackOutput(track: audioContext.assetTrack,
|
||||||
|
outputSettings: outputSettingsDict)
|
||||||
|
readerOutput.alwaysCopiesSampleData = false
|
||||||
|
reader.add(readerOutput)
|
||||||
|
|
||||||
|
var sampleBuffer = Data()
|
||||||
|
|
||||||
|
// 16-bit samples
|
||||||
|
reader.startReading()
|
||||||
|
defer { reader.cancelReading() }
|
||||||
|
|
||||||
|
while reader.status == .reading {
|
||||||
|
guard let readSampleBuffer = readerOutput.copyNextSampleBuffer(),
|
||||||
|
let readBuffer = CMSampleBufferGetDataBuffer(readSampleBuffer) else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
// Append audio sample buffer into our current sample buffer
|
||||||
|
var readBufferLength = 0
|
||||||
|
var readBufferPointer: UnsafeMutablePointer<Int8>?
|
||||||
|
CMBlockBufferGetDataPointer(readBuffer,
|
||||||
|
atOffset: 0,
|
||||||
|
lengthAtOffsetOut: &readBufferLength,
|
||||||
|
totalLengthOut: nil,
|
||||||
|
dataPointerOut: &readBufferPointer)
|
||||||
|
sampleBuffer.append(UnsafeBufferPointer(start: readBufferPointer, count: readBufferLength))
|
||||||
|
CMSampleBufferInvalidate(readSampleBuffer)
|
||||||
|
|
||||||
|
let totalSamples = sampleBuffer.count / MemoryLayout<Int16>.size
|
||||||
|
print("read \(totalSamples) samples")
|
||||||
|
|
||||||
|
sampleBuffer.withUnsafeBytes { (samples: UnsafeRawBufferPointer) in
|
||||||
|
let unsafeBufferPointer = samples.bindMemory(to: Int16.self)
|
||||||
|
stream.feedAudioContent(buffer: unsafeBufferPointer)
|
||||||
|
}
|
||||||
|
|
||||||
|
sampleBuffer.removeAll()
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (reader.status == AVAssetReaderStatusFailed || reader.status == AVAssetReaderStatusUnknown)
|
||||||
|
guard reader.status == .completed else {
|
||||||
|
fatalError("Couldn't read the audio file")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func test(model: DeepSpeechModel, audioPath: String, completion: @escaping () -> ()) {
|
||||||
|
let url = URL(fileURLWithPath: audioPath)
|
||||||
|
|
||||||
|
let stream = try! model.createStream()
|
||||||
|
print("\(audioPath)")
|
||||||
|
let start = CFAbsoluteTimeGetCurrent()
|
||||||
|
AudioContext.load(fromAudioURL: url, completionHandler: { audioContext in
|
||||||
|
guard let audioContext = audioContext else {
|
||||||
|
fatalError("Couldn't create the audioContext")
|
||||||
|
}
|
||||||
|
render(audioContext: audioContext, stream: stream)
|
||||||
|
let result = stream.finishStream()
|
||||||
|
let end = CFAbsoluteTimeGetCurrent()
|
||||||
|
print("\"\(audioPath)\": \(end - start) - \(result)")
|
||||||
|
completion()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
@UIApplicationMain
|
||||||
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
|
let model = try! DeepSpeechModel(modelPath: Bundle.main.path(forResource: "output_graph", ofType: "tflite")!)
|
||||||
|
try! model.enableExternalScorer(scorerPath: Bundle.main.path(forResource: "librispeech_en_utf8_nonpruned_o6", ofType: "scorer")!)
|
||||||
|
|
||||||
|
let files = [
|
||||||
|
"5639-40744-0008",
|
||||||
|
"1089-134686-0019",
|
||||||
|
"2094-142345-0053",
|
||||||
|
"8463-294825-0010",
|
||||||
|
"121-123852-0001",
|
||||||
|
"7021-79740-0008",
|
||||||
|
"6930-76324-0010",
|
||||||
|
"5105-28240-0001",
|
||||||
|
"1089-134691-0012",
|
||||||
|
"5142-33396-0027",
|
||||||
|
"260-123288-0004",
|
||||||
|
"6930-75918-0008",
|
||||||
|
"8463-294828-0005",
|
||||||
|
"61-70970-0002"
|
||||||
|
]
|
||||||
|
|
||||||
|
let serialQueue = DispatchQueue(label: "serialQueue")
|
||||||
|
let group = DispatchGroup()
|
||||||
|
group.enter()
|
||||||
|
serialQueue.async {
|
||||||
|
test(model: model, audioPath: Bundle.main.path(forResource: "1284-134647-0003", ofType: "wav")!) {
|
||||||
|
group.leave()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for path in files {
|
||||||
|
group.wait()
|
||||||
|
group.enter()
|
||||||
|
test(model: model, audioPath: Bundle.main.path(forResource: path, ofType: "wav")!) {
|
||||||
|
group.leave()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: UISceneSession Lifecycle
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
||||||
|
// Called when a new scene session is being created.
|
||||||
|
// Use this method to select a configuration to create the new scene with.
|
||||||
|
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
||||||
|
}
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
|
||||||
|
// Called when the user discards a scene session.
|
||||||
|
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
||||||
|
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "76x76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "76x76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "83.5x83.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ios-marketing",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "1024x1024"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<dependencies>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="53" y="375"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
|
@ -0,0 +1,21 @@
|
||||||
|
//
|
||||||
|
// ContentView.swift
|
||||||
|
// deepspeech_ios_test
|
||||||
|
//
|
||||||
|
// Created by Reuben Morais on 15.06.20.
|
||||||
|
// Copyright © 2020 Mozilla. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct ContentView: View {
|
||||||
|
var body: some View {
|
||||||
|
Text("Hello, World!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ContentView_Previews: PreviewProvider {
|
||||||
|
static var previews: some View {
|
||||||
|
ContentView()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>UIApplicationSceneManifest</key>
|
||||||
|
<dict>
|
||||||
|
<key>UIApplicationSupportsMultipleScenes</key>
|
||||||
|
<false/>
|
||||||
|
<key>UISceneConfigurations</key>
|
||||||
|
<dict>
|
||||||
|
<key>UIWindowSceneSessionRoleApplication</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>UISceneConfigurationName</key>
|
||||||
|
<string>Default Configuration</string>
|
||||||
|
<key>UISceneDelegateClassName</key>
|
||||||
|
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>UILaunchStoryboardName</key>
|
||||||
|
<string>LaunchScreen</string>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>armv7</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
//
|
||||||
|
// SceneDelegate.swift
|
||||||
|
// deepspeech_ios_test
|
||||||
|
//
|
||||||
|
// Created by Reuben Morais on 15.06.20.
|
||||||
|
// Copyright © 2020 Mozilla. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
|
|
||||||
|
var window: UIWindow?
|
||||||
|
|
||||||
|
|
||||||
|
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
|
||||||
|
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
|
||||||
|
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
|
||||||
|
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
|
||||||
|
|
||||||
|
// Create the SwiftUI view that provides the window contents.
|
||||||
|
let contentView = ContentView()
|
||||||
|
|
||||||
|
// Use a UIHostingController as window root view controller.
|
||||||
|
if let windowScene = scene as? UIWindowScene {
|
||||||
|
let window = UIWindow(windowScene: windowScene)
|
||||||
|
window.rootViewController = UIHostingController(rootView: contentView)
|
||||||
|
self.window = window
|
||||||
|
window.makeKeyAndVisible()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneDidDisconnect(_ scene: UIScene) {
|
||||||
|
// Called as the scene is being released by the system.
|
||||||
|
// This occurs shortly after the scene enters the background, or when its session is discarded.
|
||||||
|
// Release any resources associated with this scene that can be re-created the next time the scene connects.
|
||||||
|
// The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneDidBecomeActive(_ scene: UIScene) {
|
||||||
|
// Called when the scene has moved from an inactive state to an active state.
|
||||||
|
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneWillResignActive(_ scene: UIScene) {
|
||||||
|
// Called when the scene will move from an active state to an inactive state.
|
||||||
|
// This may occur due to temporary interruptions (ex. an incoming phone call).
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneWillEnterForeground(_ scene: UIScene) {
|
||||||
|
// Called as the scene transitions from the background to the foreground.
|
||||||
|
// Use this method to undo the changes made on entering the background.
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneDidEnterBackground(_ scene: UIScene) {
|
||||||
|
// Called as the scene transitions from the foreground to the background.
|
||||||
|
// Use this method to save data, release shared resources, and store enough scene-specific state information
|
||||||
|
// to restore the scene back to its current state.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// deepspeech_ios_testTests.swift
|
||||||
|
// deepspeech_ios_testTests
|
||||||
|
//
|
||||||
|
// Created by Reuben Morais on 15.06.20.
|
||||||
|
// Copyright © 2020 Mozilla. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import XCTest
|
||||||
|
@testable import deepspeech_ios_test
|
||||||
|
|
||||||
|
class deepspeech_ios_testTests: XCTestCase {
|
||||||
|
|
||||||
|
override func setUpWithError() throws {
|
||||||
|
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tearDownWithError() throws {
|
||||||
|
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||||
|
}
|
||||||
|
|
||||||
|
func testExample() throws {
|
||||||
|
// This is an example of a functional test case.
|
||||||
|
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
||||||
|
}
|
||||||
|
|
||||||
|
func testPerformanceExample() throws {
|
||||||
|
// This is an example of a performance test case.
|
||||||
|
self.measure {
|
||||||
|
// Put the code you want to measure the time of here.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,43 @@
|
||||||
|
//
|
||||||
|
// deepspeech_ios_testUITests.swift
|
||||||
|
// deepspeech_ios_testUITests
|
||||||
|
//
|
||||||
|
// Created by Reuben Morais on 15.06.20.
|
||||||
|
// Copyright © 2020 Mozilla. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import XCTest
|
||||||
|
|
||||||
|
class deepspeech_ios_testUITests: XCTestCase {
|
||||||
|
|
||||||
|
override func setUpWithError() throws {
|
||||||
|
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||||
|
|
||||||
|
// In UI tests it is usually best to stop immediately when a failure occurs.
|
||||||
|
continueAfterFailure = false
|
||||||
|
|
||||||
|
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tearDownWithError() throws {
|
||||||
|
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||||
|
}
|
||||||
|
|
||||||
|
func testExample() throws {
|
||||||
|
// UI tests must launch the application that they test.
|
||||||
|
let app = XCUIApplication()
|
||||||
|
app.launch()
|
||||||
|
|
||||||
|
// Use recording to get started writing UI tests.
|
||||||
|
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
||||||
|
}
|
||||||
|
|
||||||
|
func testLaunchPerformance() throws {
|
||||||
|
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
|
||||||
|
// This measures how long it takes to launch your application.
|
||||||
|
measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) {
|
||||||
|
XCUIApplication().launch()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,7 +25,7 @@ build:
|
||||||
nc_asset_name: 'native_client.tar.xz'
|
nc_asset_name: 'native_client.tar.xz'
|
||||||
args:
|
args:
|
||||||
tests_cmdline: ''
|
tests_cmdline: ''
|
||||||
tensorflow_git_desc: 'TensorFlow: v2.2.0-15-g518c1d0'
|
tensorflow_git_desc: 'TensorFlow: v2.2.0-17-g0854bb5'
|
||||||
test_model_task: ''
|
test_model_task: ''
|
||||||
homebrew:
|
homebrew:
|
||||||
url: ''
|
url: ''
|
||||||
|
|
|
@ -14,8 +14,6 @@ deepspeech:
|
||||||
tensorflow:
|
tensorflow:
|
||||||
packages_xenial:
|
packages_xenial:
|
||||||
apt: 'apt-get -qq update && apt-get -qq -y install realpath build-essential python-virtualenv python-dev python-pip libblas-dev liblapack-dev gfortran wget software-properties-common pixz zip zlib1g-dev unzip'
|
apt: 'apt-get -qq update && apt-get -qq -y install realpath build-essential python-virtualenv python-dev python-pip libblas-dev liblapack-dev gfortran wget software-properties-common pixz zip zlib1g-dev unzip'
|
||||||
packages_macos:
|
|
||||||
brew: '$TASKCLUSTER_TASK_DIR/DeepSpeech/ds/taskcluster/tf_tc-brew.sh'
|
|
||||||
packages_win:
|
packages_win:
|
||||||
pacman: 'pacman --noconfirm -S patch unzip tar'
|
pacman: 'pacman --noconfirm -S patch unzip tar'
|
||||||
msys64: 'ln -s $USERPROFILE/msys64 $TASKCLUSTER_TASK_DIR/msys64'
|
msys64: 'ln -s $USERPROFILE/msys64 $TASKCLUSTER_TASK_DIR/msys64'
|
||||||
|
@ -168,6 +166,12 @@ system:
|
||||||
win_amd64_cuda:
|
win_amd64_cuda:
|
||||||
url: "https://community-tc.services.mozilla.com/api/index/v1/task/project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.win-cuda/artifacts/public/home.tar.xz"
|
url: "https://community-tc.services.mozilla.com/api/index/v1/task/project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.win-cuda/artifacts/public/home.tar.xz"
|
||||||
namespace: "project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.win-cuda"
|
namespace: "project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.win-cuda"
|
||||||
|
ios_arm64:
|
||||||
|
url: "https://community-tc.services.mozilla.com/api/index/v1/task/project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.3.ios_arm64/artifacts/public/home.tar.xz"
|
||||||
|
namespace: "project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.3.ios_arm64"
|
||||||
|
ios_x86_64:
|
||||||
|
url: "https://community-tc.services.mozilla.com/api/index/v1/task/project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.3.ios_x86_64/artifacts/public/home.tar.xz"
|
||||||
|
namespace: "project.deepspeech.tensorflow.pip.r2.2.0854bb5188a3150a4d75a1c71ee610b0d45cfcb1.3.ios_x86_64"
|
||||||
username: 'build-user'
|
username: 'build-user'
|
||||||
homedir:
|
homedir:
|
||||||
linux: '/home/build-user'
|
linux: '/home/build-user'
|
||||||
|
|
|
@ -35,11 +35,8 @@ payload:
|
||||||
# There is no VM yet running tasks on OSX
|
# There is no VM yet running tasks on OSX
|
||||||
# so one should install by hand:
|
# so one should install by hand:
|
||||||
# - brew
|
# - brew
|
||||||
# - xcode (brew would install)
|
# - Xcode 10.1 in /Applications/Xcode.app, then sudo chown -R root:wheel /Applications/Xcode.app
|
||||||
# - brew install gnu-tar
|
# - brew install gnu-tar git pixz wget coreutils pyenv-virtualenv
|
||||||
# - brew install git
|
|
||||||
# - brew install pixz
|
|
||||||
# - brew cask install java
|
|
||||||
# - sudo easy_install pip
|
# - sudo easy_install pip
|
||||||
|
|
||||||
command:
|
command:
|
||||||
|
|
|
@ -42,12 +42,13 @@ do_prepare_homebrew()
|
||||||
|
|
||||||
check_homebrew "${_brew_instance}"
|
check_homebrew "${_brew_instance}"
|
||||||
|
|
||||||
# Force an upgrade to fetch formulae
|
|
||||||
brew search openssl
|
|
||||||
|
|
||||||
# Then we force onto a specific well-known commit
|
# Then we force onto a specific well-known commit
|
||||||
|
mkdir -p "$(brew --prefix)/Library/Taps/homebrew/homebrew-core"
|
||||||
pushd "$(brew --prefix)/Library/Taps/homebrew/homebrew-core"
|
pushd "$(brew --prefix)/Library/Taps/homebrew/homebrew-core"
|
||||||
git fetch origin && git checkout ${BREW_FORMULAS_COMMIT}
|
git init
|
||||||
|
git remote add origin https://github.com/Homebrew/homebrew-core.git
|
||||||
|
git fetch origin
|
||||||
|
git checkout ${BREW_FORMULAS_COMMIT}
|
||||||
popd
|
popd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,4 +9,4 @@ build:
|
||||||
package: "taskcluster/homebrew-package.sh --builds"
|
package: "taskcluster/homebrew-package.sh --builds"
|
||||||
metadata:
|
metadata:
|
||||||
name: "Builds Homebrew macOS AMD64"
|
name: "Builds Homebrew macOS AMD64"
|
||||||
description: "Setup a buildsl Homebrew for macOS/AMD64"
|
description: "Setup a builds Homebrew for macOS/AMD64"
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
build:
|
||||||
|
template_file: darwin-opt-base.tyml
|
||||||
|
dependencies:
|
||||||
|
- "swig-darwin-amd64"
|
||||||
|
- "node-gyp-cache"
|
||||||
|
- "homebrew_builds-darwin-amd64"
|
||||||
|
- "pyenv-darwin-amd64"
|
||||||
|
- "tf_ios-arm64-opt"
|
||||||
|
routes:
|
||||||
|
- "index.project.deepspeech.deepspeech.native_client.${event.head.branchortag}.ios_arm64-tflite"
|
||||||
|
- "index.project.deepspeech.deepspeech.native_client.${event.head.branchortag}.${event.head.sha}.ios_arm64-tflite"
|
||||||
|
- "index.project.deepspeech.deepspeech.native_client.ios_arm64-tflite.${event.head.sha}"
|
||||||
|
tensorflow: ${system.tensorflow.ios_arm64.url}
|
||||||
|
scripts:
|
||||||
|
build: "taskcluster/ios-build.sh --arm64"
|
||||||
|
package: "taskcluster/package.sh"
|
||||||
|
nc_asset_name: "native_client.arm64.tflite.ios.tar.xz"
|
||||||
|
maxRunTime: 14400
|
||||||
|
metadata:
|
||||||
|
name: "DeepSpeech iOS ARM64 TFLite"
|
||||||
|
description: "Building DeepSpeech for iOS ARM64, TFLite, optimized version"
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
platform=$1
|
||||||
|
|
||||||
|
source $(dirname "$0")/tc-tests-utils.sh
|
||||||
|
|
||||||
|
source $(dirname "$0")/tf_tc-vars.sh
|
||||||
|
|
||||||
|
BAZEL_TARGETS="
|
||||||
|
//native_client:libdeepspeech.so
|
||||||
|
"
|
||||||
|
|
||||||
|
if [ "${platform}" = "--arm64" ]; then
|
||||||
|
BAZEL_BUILD_FLAGS="${BAZEL_IOS_ARM64_FLAGS}"
|
||||||
|
else
|
||||||
|
BAZEL_BUILD_FLAGS="${BAZEL_IOS_X86_64_FLAGS}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
BAZEL_ENV_FLAGS="TF_NEED_CUDA=0"
|
||||||
|
|
||||||
|
do_bazel_build
|
|
@ -0,0 +1,21 @@
|
||||||
|
build:
|
||||||
|
template_file: darwin-opt-base.tyml
|
||||||
|
dependencies:
|
||||||
|
- "swig-darwin-amd64"
|
||||||
|
- "node-gyp-cache"
|
||||||
|
- "homebrew_builds-darwin-amd64"
|
||||||
|
- "pyenv-darwin-amd64"
|
||||||
|
- "tf_ios-x86_64-opt"
|
||||||
|
routes:
|
||||||
|
- "index.project.deepspeech.deepspeech.native_client.${event.head.branchortag}.ios_x86_64-tflite"
|
||||||
|
- "index.project.deepspeech.deepspeech.native_client.${event.head.branchortag}.${event.head.sha}.ios_x86_64-tflite"
|
||||||
|
- "index.project.deepspeech.deepspeech.native_client.ios_x86_64-tflite.${event.head.sha}"
|
||||||
|
tensorflow: ${system.tensorflow.ios_x86_64.url}
|
||||||
|
scripts:
|
||||||
|
build: "taskcluster/ios-build.sh --x86_64"
|
||||||
|
package: "taskcluster/package.sh"
|
||||||
|
nc_asset_name: "native_client.x86_64.tflite.ios.tar.xz"
|
||||||
|
maxRunTime: 14400
|
||||||
|
metadata:
|
||||||
|
name: "DeepSpeech iOS x86_64 TFLite"
|
||||||
|
description: "Building DeepSpeech for iOS x86_64, TFLite, optimized version"
|
|
@ -33,6 +33,8 @@ do_deepspeech_python_build()
|
||||||
virtualenv_activate "${pyalias}" "deepspeech"
|
virtualenv_activate "${pyalias}" "deepspeech"
|
||||||
|
|
||||||
python --version
|
python --version
|
||||||
|
pip --version
|
||||||
|
pip3 --version
|
||||||
which pip
|
which pip
|
||||||
which pip3
|
which pip3
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,9 @@ build:
|
||||||
artifact_namespace: ${system.tensorflow.darwin_amd64.namespace}
|
artifact_namespace: ${system.tensorflow.darwin_amd64.namespace}
|
||||||
generic:
|
generic:
|
||||||
workerType: "ds-macos-heavy"
|
workerType: "ds-macos-heavy"
|
||||||
system_config:
|
|
||||||
>
|
|
||||||
${tensorflow.packages_macos.brew}
|
|
||||||
scripts:
|
scripts:
|
||||||
setup: "taskcluster/tf_tc-setup.sh"
|
setup: "taskcluster/tf_tc-setup.sh"
|
||||||
build: "taskcluster/tf_tc-build.sh --osx"
|
build: "taskcluster/tf_tc-build.sh --cpu"
|
||||||
package: "taskcluster/tf_tc-package.sh"
|
package: "taskcluster/tf_tc-package.sh"
|
||||||
maxRunTime: 28800
|
maxRunTime: 28800
|
||||||
metadata:
|
metadata:
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
build:
|
||||||
|
template_file: generic_tc_caching-darwin-opt-base.tyml
|
||||||
|
cache:
|
||||||
|
artifact_url: ${system.tensorflow.ios_arm64.url}
|
||||||
|
artifact_namespace: ${system.tensorflow.ios_arm64.namespace}
|
||||||
|
generic:
|
||||||
|
workerType: "ds-macos-heavy"
|
||||||
|
scripts:
|
||||||
|
setup: "taskcluster/tf_tc-setup.sh"
|
||||||
|
build: "taskcluster/tf_tc-build.sh --ios-arm64"
|
||||||
|
package: "taskcluster/tf_tc-package.sh"
|
||||||
|
maxRunTime: 28800
|
||||||
|
metadata:
|
||||||
|
name: "TensorFlow iOS ARM64 TFLite"
|
||||||
|
description: "Building TensorFlow for iOS ARM64, TFLite, optimized version"
|
|
@ -0,0 +1,15 @@
|
||||||
|
build:
|
||||||
|
template_file: generic_tc_caching-darwin-opt-base.tyml
|
||||||
|
cache:
|
||||||
|
artifact_url: ${system.tensorflow.ios_x86_64.url}
|
||||||
|
artifact_namespace: ${system.tensorflow.ios_x86_64.namespace}
|
||||||
|
generic:
|
||||||
|
workerType: "ds-macos-heavy"
|
||||||
|
scripts:
|
||||||
|
setup: "taskcluster/tf_tc-setup.sh"
|
||||||
|
build: "taskcluster/tf_tc-build.sh --ios-x86_64"
|
||||||
|
package: "taskcluster/tf_tc-package.sh"
|
||||||
|
maxRunTime: 28800
|
||||||
|
metadata:
|
||||||
|
name: "TensorFlow iOS x86_64 TFLite"
|
||||||
|
description: "Building TensorFlow for iOS x86_64, TFLite, optimized version"
|
|
@ -8,7 +8,7 @@ build:
|
||||||
${tensorflow.packages_xenial.apt} && ${java.packages_xenial.apt}
|
${tensorflow.packages_xenial.apt} && ${java.packages_xenial.apt}
|
||||||
scripts:
|
scripts:
|
||||||
setup: "taskcluster/tf_tc-setup.sh"
|
setup: "taskcluster/tf_tc-setup.sh"
|
||||||
build: "taskcluster/tf_tc-build.sh"
|
build: "taskcluster/tf_tc-build.sh --cpu"
|
||||||
package: "taskcluster/tf_tc-package.sh"
|
package: "taskcluster/tf_tc-package.sh"
|
||||||
maxRunTime: 14400
|
maxRunTime: 14400
|
||||||
metadata:
|
metadata:
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
if [ -z "${TASKCLUSTER_TASK_DIR}" ]; then
|
|
||||||
echo "No TASKCLUSTER_TASK_DIR, aborting."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
LOCAL_BREW="${TASKCLUSTER_TASK_DIR}/homebrew"
|
|
||||||
export PATH=${LOCAL_BREW}/bin:$PATH
|
|
||||||
export HOMEBREW_LOGS="${TASKCLUSTER_TASK_DIR}/homebrew.logs/"
|
|
||||||
export HOMEBREW_CACHE="${TASKCLUSTER_TASK_DIR}/homebrew.cache/"
|
|
||||||
|
|
||||||
# Never fail on pre-existing homebrew/ directory
|
|
||||||
mkdir -p "${LOCAL_BREW}" || true
|
|
||||||
mkdir -p "${HOMEBREW_CACHE}" || true
|
|
||||||
|
|
||||||
# Make sure to verify there is a 'brew' binary there, otherwise install things.
|
|
||||||
if [ ! -x "${LOCAL_BREW}/bin/brew" ]; then
|
|
||||||
curl -L https://github.com/Homebrew/brew/tarball/2.2.17 | tar xz --strip 1 -C "${LOCAL_BREW}"
|
|
||||||
fi;
|
|
||||||
|
|
||||||
echo "local brew list (should be empty) ..."
|
|
||||||
brew list
|
|
||||||
|
|
||||||
echo "local brew prefix ..."
|
|
||||||
local_prefix=$(brew --prefix)
|
|
||||||
echo "${local_prefix}"
|
|
||||||
|
|
||||||
if [ "${LOCAL_BREW}" != "${local_prefix}" ]; then
|
|
||||||
echo "Weird state:"
|
|
||||||
echo "LOCAL_BREW=${LOCAL_BREW}"
|
|
||||||
echo "local_prefix=${local_prefix}"
|
|
||||||
exit 1
|
|
||||||
fi;
|
|
||||||
|
|
||||||
# coreutils, pyenv-virtualenv required for build of tensorflow
|
|
||||||
all_pkgs="coreutils pyenv-virtualenv"
|
|
||||||
|
|
||||||
for pkg in ${all_pkgs};
|
|
||||||
do
|
|
||||||
(brew list --versions ${pkg} && brew upgrade ${pkg}) || brew install ${pkg}
|
|
||||||
done;
|
|
|
@ -4,58 +4,6 @@ set -ex
|
||||||
|
|
||||||
source $(dirname $0)/tf_tc-vars.sh
|
source $(dirname $0)/tf_tc-vars.sh
|
||||||
|
|
||||||
build_amd64=yes
|
|
||||||
build_gpu=no
|
|
||||||
build_android_arm=no
|
|
||||||
build_android_arm64=no
|
|
||||||
build_linux_arm=no
|
|
||||||
build_linux_arm64=no
|
|
||||||
|
|
||||||
if [ "$1" = "--gpu" ]; then
|
|
||||||
build_amd64=yes
|
|
||||||
build_gpu=yes
|
|
||||||
build_android_arm=no
|
|
||||||
build_android_arm64=no
|
|
||||||
build_linux_arm=no
|
|
||||||
build_linux_arm64=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = "--arm" ]; then
|
|
||||||
build_amd64=yes
|
|
||||||
build_gpu=no
|
|
||||||
build_android_arm=no
|
|
||||||
build_android_arm64=no
|
|
||||||
build_linux_arm=yes
|
|
||||||
build_linux_arm64=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = "--arm64" ]; then
|
|
||||||
build_amd64=yes
|
|
||||||
build_gpu=no
|
|
||||||
build_android_arm=no
|
|
||||||
build_android_arm64=no
|
|
||||||
build_linux_arm=no
|
|
||||||
build_linux_arm64=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = "--android-armv7" ]; then
|
|
||||||
build_amd64=no
|
|
||||||
build_gpu=no
|
|
||||||
build_android_arm=yes
|
|
||||||
build_android_arm64=no
|
|
||||||
build_linux_arm=no
|
|
||||||
build_linux_arm64=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = "--android-arm64" ]; then
|
|
||||||
build_amd64=no
|
|
||||||
build_gpu=no
|
|
||||||
build_android_arm=no
|
|
||||||
build_android_arm64=yes
|
|
||||||
build_linux_arm=no
|
|
||||||
build_linux_arm64=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
pushd ${DS_ROOT_TASK}/DeepSpeech/ds/tensorflow/
|
pushd ${DS_ROOT_TASK}/DeepSpeech/ds/tensorflow/
|
||||||
BAZEL_BUILD="bazel ${BAZEL_OUTPUT_USER_ROOT} build -s --explain bazel_monolithic_tf.log --verbose_explanations --experimental_strict_action_env --config=monolithic"
|
BAZEL_BUILD="bazel ${BAZEL_OUTPUT_USER_ROOT} build -s --explain bazel_monolithic_tf.log --verbose_explanations --experimental_strict_action_env --config=monolithic"
|
||||||
|
|
||||||
|
@ -66,43 +14,32 @@ pushd ${DS_ROOT_TASK}/DeepSpeech/ds/tensorflow/
|
||||||
# Force toolchain sync (useful on macOS ?)
|
# Force toolchain sync (useful on macOS ?)
|
||||||
bazel ${BAZEL_OUTPUT_USER_ROOT} sync --configure
|
bazel ${BAZEL_OUTPUT_USER_ROOT} sync --configure
|
||||||
|
|
||||||
if [ "${build_amd64}" = "yes" ]; then
|
case "$1" in
|
||||||
# Pure amd64 CPU-only build
|
"--cpu")
|
||||||
if [ "${OS}" = "${TC_MSYS_VERSION}" -a "${build_gpu}" = "no" ]; then
|
echo "" | TF_NEED_CUDA=0 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_OPT_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LIB_CPP_API} ${BUILD_TARGET_LITE_LIB}
|
||||||
echo "" | TF_NEED_CUDA=0 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_OPT_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LIB_CPP_API} ${BUILD_TARGET_LITE_LIB}
|
;;
|
||||||
elif [ "${build_gpu}" = "no" -a "${build_linux_arm}" = "no" -a "${build_linux_arm64}" = "no" ]; then
|
"--gpu")
|
||||||
echo "" | TF_NEED_CUDA=0 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_OPT_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LIB_CPP_API} ${BUILD_TARGET_LITE_LIB}
|
eval "export ${TF_CUDA_FLAGS}" && (echo "" | TF_NEED_CUDA=1 ./configure) && ${BAZEL_BUILD} -c opt ${BAZEL_CUDA_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BAZEL_OPT_FLAGS} ${BUILD_TARGET_LIB_CPP_API}
|
||||||
fi
|
;;
|
||||||
|
"--arm")
|
||||||
# Cross RPi3 CPU-only build
|
echo "" | TF_NEED_CUDA=0 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ARM_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
||||||
if [ "${build_linux_arm}" = "yes" ]; then
|
;;
|
||||||
echo "" | TF_NEED_CUDA=0 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ARM_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
"--arm64")
|
||||||
fi
|
echo "" | TF_NEED_CUDA=0 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ARM64_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
||||||
|
;;
|
||||||
# Cross ARM64 Cortex-A53 build
|
"--android-armv7")
|
||||||
if [ "${build_linux_arm64}" = "yes" ]; then
|
|
||||||
echo "" | TF_NEED_CUDA=0 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ARM64_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Pure amd64 GPU-enabled build
|
|
||||||
if [ "${build_gpu}" = "yes" ]; then
|
|
||||||
eval "export ${TF_CUDA_FLAGS}" && (echo "" | TF_NEED_CUDA=1 ./configure) && ${BAZEL_BUILD} -c opt ${BAZEL_CUDA_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BAZEL_OPT_FLAGS} ${BUILD_TARGET_LIB_CPP_API}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${build_android_arm}" = "yes" ]; then
|
|
||||||
echo "" | TF_SET_ANDROID_WORKSPACE=1 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ANDROID_ARM_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
echo "" | TF_SET_ANDROID_WORKSPACE=1 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ANDROID_ARM_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
||||||
fi;
|
;;
|
||||||
|
"--android-arm64")
|
||||||
if [ "${build_android_arm64}" = "yes" ]; then
|
|
||||||
echo "" | TF_SET_ANDROID_WORKSPACE=1 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ANDROID_ARM64_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
echo "" | TF_SET_ANDROID_WORKSPACE=1 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_ANDROID_ARM64_FLAGS} ${BAZEL_EXTRA_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
||||||
fi;
|
;;
|
||||||
|
"--ios-arm64")
|
||||||
if [ $? -ne 0 ]; then
|
echo "" | TF_NEED_CUDA=0 TF_CONFIGURE_IOS=1 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_IOS_ARM64_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
||||||
# There was a failure, just account for it.
|
;;
|
||||||
echo "Build failure, please check the output above. Exit code was: $?"
|
"--ios-x86_64")
|
||||||
return 1
|
echo "" | TF_NEED_CUDA=0 TF_CONFIGURE_IOS=1 ./configure && ${BAZEL_BUILD} -c opt ${BAZEL_IOS_X86_64_FLAGS} ${BUILD_TARGET_LITE_LIB}
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
bazel ${BAZEL_OUTPUT_USER_ROOT} shutdown
|
bazel ${BAZEL_OUTPUT_USER_ROOT} shutdown
|
||||||
popd
|
popd
|
||||||
|
|
|
@ -171,6 +171,8 @@ BAZEL_ARM64_FLAGS="--config=rpi3-armv8 --config=rpi3-armv8_opt --copt=-DTFLITE_W
|
||||||
BAZEL_ANDROID_ARM_FLAGS="--config=android --config=android_arm --action_env ANDROID_NDK_API_LEVEL=21 --cxxopt=-std=c++14 --copt=-D_GLIBCXX_USE_C99 --copt=-DTFLITE_WITH_RUY_GEMV"
|
BAZEL_ANDROID_ARM_FLAGS="--config=android --config=android_arm --action_env ANDROID_NDK_API_LEVEL=21 --cxxopt=-std=c++14 --copt=-D_GLIBCXX_USE_C99 --copt=-DTFLITE_WITH_RUY_GEMV"
|
||||||
BAZEL_ANDROID_ARM64_FLAGS="--config=android --config=android_arm64 --action_env ANDROID_NDK_API_LEVEL=21 --cxxopt=-std=c++14 --copt=-D_GLIBCXX_USE_C99 --copt=-DTFLITE_WITH_RUY_GEMV"
|
BAZEL_ANDROID_ARM64_FLAGS="--config=android --config=android_arm64 --action_env ANDROID_NDK_API_LEVEL=21 --cxxopt=-std=c++14 --copt=-D_GLIBCXX_USE_C99 --copt=-DTFLITE_WITH_RUY_GEMV"
|
||||||
BAZEL_CUDA_FLAGS="--config=cuda"
|
BAZEL_CUDA_FLAGS="--config=cuda"
|
||||||
|
BAZEL_IOS_ARM64_FLAGS="--config=ios_arm64 --define=runtime=tflite --copt=-DTFLITE_WITH_RUY_GEMV"
|
||||||
|
BAZEL_IOS_X86_64_FLAGS="--config=ios_x86_64 --define=runtime=tflite --copt=-DTFLITE_WITH_RUY_GEMV"
|
||||||
|
|
||||||
if [ "${OS}" = "${TC_MSYS_VERSION}" ]; then
|
if [ "${OS}" = "${TC_MSYS_VERSION}" ]; then
|
||||||
# Somehow, even with Python being in the PATH, Bazel on windows struggles
|
# Somehow, even with Python being in the PATH, Bazel on windows struggles
|
||||||
|
|
|
@ -8,7 +8,7 @@ build:
|
||||||
${tensorflow.packages_win.pacman} && ${tensorflow.packages_win.msys64}
|
${tensorflow.packages_win.pacman} && ${tensorflow.packages_win.msys64}
|
||||||
scripts:
|
scripts:
|
||||||
setup: "taskcluster/tf_tc-setup.sh"
|
setup: "taskcluster/tf_tc-setup.sh"
|
||||||
build: "taskcluster/tf_tc-build.sh"
|
build: "taskcluster/tf_tc-build.sh --cpu"
|
||||||
package: "taskcluster/tf_tc-package.sh"
|
package: "taskcluster/tf_tc-package.sh"
|
||||||
maxRunTime: 14400
|
maxRunTime: 14400
|
||||||
metadata:
|
metadata:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 518c1d04bf55d362bb11e973b8f5d0aa3e5bf44d
|
Subproject commit 0854bb5188a3150a4d75a1c71ee610b0d45cfcb1
|
Loading…
Reference in New Issue