Merge pull request #2843 from ryojiysd/ctcdecoder-wheels-win
Support building ctc_decoder wheel package on Windows system
This commit is contained in:
commit
ea233439ce
|
@ -15,14 +15,24 @@ else
|
|||
GENERATE_DEBUG_SYMS :=
|
||||
endif
|
||||
|
||||
ifeq ($(findstring _NT,$(OS)),_NT)
|
||||
ARCHIVE_EXT := lib
|
||||
else
|
||||
ARCHIVE_EXT := a
|
||||
endif
|
||||
|
||||
FIRST_PARTY := first_party.$(ARCHIVE_EXT)
|
||||
THIRD_PARTY := third_party.$(ARCHIVE_EXT)
|
||||
|
||||
|
||||
all: bindings
|
||||
|
||||
clean-keep-third-party:
|
||||
rm -rf dist temp_build ds_ctcdecoder.egg-info
|
||||
rm -f swigwrapper_wrap.cpp swigwrapper.py first_party.a
|
||||
rm -f swigwrapper_wrap.cpp swigwrapper.py $(FIRST_PARTY)
|
||||
|
||||
clean: clean-keep-third-party
|
||||
rm -f third_party.a
|
||||
rm -f $(THIRD_PARTY)
|
||||
rm workspace_status.cc
|
||||
rm -fr bazel-out/
|
||||
|
||||
|
|
|
@ -9,14 +9,23 @@ import sys
|
|||
|
||||
from multiprocessing.dummy import Pool
|
||||
|
||||
ARGS = ['-DKENLM_MAX_ORDER=6', '-std=c++11', '-Wno-unused-local-typedefs', '-Wno-sign-compare']
|
||||
if sys.platform.startswith('win'):
|
||||
ARGS = ['/nologo', '/D KENLM_MAX_ORDER=6', '/EHsc', '/source-charset:utf-8']
|
||||
OPT_ARGS = ['/O2', '/MT', '/D NDEBUG']
|
||||
DBG_ARGS = ['/Od', '/MTd', '/Zi', '/U NDEBUG', '/D DEBUG']
|
||||
OPENFST_DIR = 'third_party/openfst-1.6.9-win'
|
||||
else:
|
||||
ARGS = ['-fPIC', '-DKENLM_MAX_ORDER=6', '-std=c++11', '-Wno-unused-local-typedefs', '-Wno-sign-compare']
|
||||
OPT_ARGS = ['-O3', '-DNDEBUG']
|
||||
DBG_ARGS = ['-O0', '-g', '-UNDEBUG', '-DDEBUG']
|
||||
OPENFST_DIR = 'third_party/openfst-1.6.7'
|
||||
|
||||
|
||||
|
||||
INCLUDES = [
|
||||
'..',
|
||||
'../kenlm',
|
||||
'third_party/openfst-1.6.7/src/include',
|
||||
OPENFST_DIR + '/src/include',
|
||||
'third_party/ThreadPool'
|
||||
]
|
||||
|
||||
|
@ -24,7 +33,7 @@ KENLM_FILES = (glob.glob('../kenlm/util/*.cc')
|
|||
+ glob.glob('../kenlm/lm/*.cc')
|
||||
+ glob.glob('../kenlm/util/double-conversion/*.cc'))
|
||||
|
||||
KENLM_FILES += glob.glob('third_party/openfst-1.6.7/src/lib/*.cc')
|
||||
KENLM_FILES += glob.glob(OPENFST_DIR + '/src/lib/*.cc')
|
||||
|
||||
KENLM_FILES = [
|
||||
fn for fn in KENLM_FILES
|
||||
|
@ -42,6 +51,8 @@ CTC_DECODER_FILES = [
|
|||
|
||||
def build_archive(srcs=[], out_name='', build_dir='temp_build/temp_build', debug=False, num_parallel=1):
|
||||
compiler = os.environ.get('CXX', 'g++')
|
||||
if sys.platform.startswith('win'):
|
||||
compiler = '"{}"'.format(compiler)
|
||||
ar = os.environ.get('AR', 'ar')
|
||||
libtool = os.environ.get('LIBTOOL', 'libtool')
|
||||
cflags = os.environ.get('CFLAGS', '') + os.environ.get('CXXFLAGS', '')
|
||||
|
@ -59,13 +70,19 @@ def build_archive(srcs=[], out_name='', build_dir='temp_build/temp_build', debug
|
|||
if os.path.exists(outfile):
|
||||
return
|
||||
|
||||
cmd = '{cc} -fPIC -c {cflags} {args} {includes} {infile} -o {outfile}'.format(
|
||||
if sys.platform.startswith('win'):
|
||||
file = '"{}"'.format(file.replace('\\', '/'))
|
||||
output = '/Fo"{}"'.format(outfile.replace('\\', '/'))
|
||||
else:
|
||||
output = '-o ' + outfile
|
||||
|
||||
cmd = '{cc} -c {cflags} {args} {includes} {infile} {output}'.format(
|
||||
cc=compiler,
|
||||
cflags=cflags,
|
||||
args=' '.join(args),
|
||||
includes=' '.join('-I' + i for i in INCLUDES),
|
||||
infile=file,
|
||||
outfile=outfile,
|
||||
output=output,
|
||||
)
|
||||
print(cmd)
|
||||
subprocess.check_call(shlex.split(cmd))
|
||||
|
@ -82,6 +99,13 @@ def build_archive(srcs=[], out_name='', build_dir='temp_build/temp_build', debug
|
|||
)
|
||||
print(cmd)
|
||||
subprocess.check_call(shlex.split(cmd))
|
||||
elif sys.platform.startswith('win'):
|
||||
cmd = '"lib.exe" /OUT:"{outfile}" {infiles} /MACHINE:X64 /NOLOGO'.format(
|
||||
outfile=out_name,
|
||||
infiles=' '.join(obj_files))
|
||||
cmd = cmd.replace('\\', '/')
|
||||
print(cmd)
|
||||
subprocess.check_call(shlex.split(cmd))
|
||||
else:
|
||||
cmd = '{ar} rcs {outfile} {infiles}'.format(
|
||||
ar=ar,
|
||||
|
|
|
@ -54,8 +54,15 @@ def maybe_rebuild(srcs, out_name, build_dir):
|
|||
project_version = read('../../VERSION').strip()
|
||||
|
||||
build_dir = 'temp_build/temp_build'
|
||||
third_party_build = 'third_party.a'
|
||||
ctc_decoder_build = 'first_party.a'
|
||||
|
||||
if sys.platform.startswith('win'):
|
||||
archive_ext = 'lib'
|
||||
else:
|
||||
archive_ext = 'a'
|
||||
|
||||
third_party_build = 'third_party.{}'.format(archive_ext)
|
||||
ctc_decoder_build = 'first_party.{}'.format(archive_ext)
|
||||
|
||||
|
||||
maybe_rebuild(KENLM_FILES, third_party_build, build_dir)
|
||||
maybe_rebuild(CTC_DECODER_FILES, ctc_decoder_build, build_dir)
|
||||
|
|
Loading…
Reference in New Issue