| |
| |
| |
| |
| |
|
|
| import os |
| import shlex |
| import shutil |
| import sys |
|
|
| from tools import config, shared, utils |
|
|
|
|
| |
| |
| |
| 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] |
| |
| 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'emcmake: {shlex.join(args)} in directory {os.getcwd()}', file=sys.stderr) |
| shared.exec_process(args) |
|
|
|
|
| if __name__ == '__main__': |
| sys.exit(run()) |
|
|