mirror of
https://github.com/mozilla/DeepSpeech.git
synced 2025-10-26 11:19:39 +00:00
88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
import glob
|
|
import os
|
|
import shlex
|
|
import subprocess
|
|
import sys
|
|
|
|
from multiprocessing.dummy import Pool
|
|
|
|
ARGS = ['-O3', '-DNDEBUG', '-DKENLM_MAX_ORDER=6', '-std=c++11',
|
|
'-Wno-unused-local-typedefs', '-Wno-sign-compare']
|
|
|
|
INCLUDES = [
|
|
'..',
|
|
'../kenlm',
|
|
'third_party/openfst-1.6.7/src/include',
|
|
'third_party/ThreadPool'
|
|
]
|
|
|
|
COMMON_FILES = (glob.glob('../kenlm/util/*.cc')
|
|
+ glob.glob('../kenlm/lm/*.cc')
|
|
+ glob.glob('../kenlm/util/double-conversion/*.cc'))
|
|
|
|
COMMON_FILES += glob.glob('third_party/openfst-1.6.7/src/lib/*.cc')
|
|
|
|
COMMON_FILES = [
|
|
fn for fn in COMMON_FILES
|
|
if not (fn.endswith('main.cc') or fn.endswith('test.cc') or fn.endswith(
|
|
'unittest.cc'))
|
|
]
|
|
|
|
COMMON_FILES += glob.glob('*.cpp')
|
|
|
|
def build_common(out_name='common.a', build_dir='temp_build/temp_build', num_parallel=1):
|
|
compiler = os.environ.get('CXX', 'g++')
|
|
ar = os.environ.get('AR', 'ar')
|
|
libtool = os.environ.get('LIBTOOL', 'libtool')
|
|
cflags = os.environ.get('CFLAGS', '') + os.environ.get('CXXFLAGS', '')
|
|
|
|
for file in COMMON_FILES:
|
|
outfile = os.path.join(build_dir, os.path.splitext(file)[0] + '.o')
|
|
outdir = os.path.dirname(outfile)
|
|
if not os.path.exists(outdir):
|
|
print('mkdir', outdir)
|
|
os.makedirs(outdir)
|
|
|
|
def build_one(file):
|
|
outfile = os.path.join(build_dir, os.path.splitext(file)[0] + '.o')
|
|
if os.path.exists(outfile):
|
|
return
|
|
|
|
cmd = '{cc} -fPIC -c {cflags} {args} {includes} {infile} -o {outfile}'.format(
|
|
cc=compiler,
|
|
cflags=cflags,
|
|
args=' '.join(ARGS),
|
|
includes=' '.join('-I' + i for i in INCLUDES),
|
|
infile=file,
|
|
outfile=outfile,
|
|
)
|
|
print(cmd)
|
|
subprocess.check_call(shlex.split(cmd))
|
|
return outfile
|
|
|
|
pool = Pool(num_parallel)
|
|
obj_files = list(pool.imap_unordered(build_one, COMMON_FILES))
|
|
|
|
if sys.platform.startswith('darwin'):
|
|
cmd = '{libtool} -static -o {outfile} {infiles}'.format(
|
|
libtool=libtool,
|
|
outfile=out_name,
|
|
infiles=' '.join(obj_files),
|
|
)
|
|
print(cmd)
|
|
subprocess.check_call(shlex.split(cmd))
|
|
else:
|
|
cmd = '{ar} rcs {outfile} {infiles}'.format(
|
|
ar=ar,
|
|
outfile=out_name,
|
|
infiles=' '.join(obj_files)
|
|
)
|
|
print(cmd)
|
|
subprocess.check_call(shlex.split(cmd))
|
|
|
|
if __name__ == '__main__':
|
|
build_common()
|