import os
import shlex
import shutil
import sys
from tools import shared
from tools import config
from tools import utils
from subprocess import CalledProcessError
def run():
if len(sys.argv) < 2 or sys.argv[1] in ('--version', '--help'):
print('''\
emcmake is a helper for cmake, setting various environment
variables so that emcc etc. are used. Typical usage:
emcmake cmake [FLAGS]
''', file=sys.stderr)
return 1
args = sys.argv[1:]
def has_substr(args, substr):
return any(substr in s for s in args)
if not has_substr(args, '-DCMAKE_TOOLCHAIN_FILE') and 'CMAKE_TOOLCHAIN_FILE' not in os.environ:
args.append('-DCMAKE_TOOLCHAIN_FILE=' + utils.path_from_root('cmake/Modules/Platform/Emscripten.cmake'))
if not has_substr(args, '-DCMAKE_CROSSCOMPILING_EMULATOR'):
node_js = [config.NODE_JS[0]]
node_js += shared.node_pthread_flags(config.NODE_JS)
node_js = ';'.join(node_js)
args.append(f'-DCMAKE_CROSSCOMPILING_EMULATOR={node_js}')
if not os.path.dirname(args[0]) and not shutil.which(args[0]):
print(f'emcmake: cmake executable not found on PATH: `{args[0]}`', file=sys.stderr)
return 1
if utils.WINDOWS and not any(arg.startswith('-G') for arg in args):
if shutil.which('mingw32-make'):
args += ['-G', 'MinGW Makefiles']
elif shutil.which('ninja'):
args += ['-G', 'Ninja']
else:
print('emcmake: no compatible cmake generator found; Please install ninja or mingw32-make, or specify a generator explicitly using -G', file=sys.stderr)
return 1
print(f'configure: {shlex.join(args)}', file=sys.stderr)
try:
shared.check_call(args)
return 0
except CalledProcessError as e:
return e.returncode
if __name__ == '__main__':
sys.exit(run())