3 # WARNING! Do not edit! https://waf.io/book/index.html#_obtaining_the_waf_file
6 # -*- coding: utf-8 vi:ts=4:noexpandtab
8 import subprocess, shlex, sys
10 from waflib.Tools import ccroot, gcc, gxx
11 from waflib.Configure import conf
12 from waflib.TaskGen import after_method, feature
14 from waflib.Tools.compiler_c import c_compiler
15 from waflib.Tools.compiler_cxx import cxx_compiler
17 for supported_os in ('linux', 'darwin', 'gnu', 'aix'):
18 c_compiler[supported_os].append('c_emscripten')
19 cxx_compiler[supported_os].append('c_emscripten')
23 def get_emscripten_version(conf, cc):
25 Emscripten doesn't support processing '-' like clang/gcc
28 dummy = conf.cachedir.parent.make_node("waf-emscripten.c")
30 cmd = cc + ['-dM', '-E', '-x', 'c', dummy.abspath()]
31 env = conf.env.env or None
33 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
34 out = p.communicate()[0]
35 except Exception as e:
36 conf.fatal('Could not determine emscripten version %r: %s' % (cmd, e))
38 if not isinstance(out, str):
39 out = out.decode(sys.stdout.encoding or 'latin-1')
42 out = out.splitlines()
44 lst = shlex.split(line)
50 if not ('__clang__' in k and 'EMSCRIPTEN' in k):
51 conf.fatal('Could not determine the emscripten compiler version.')
53 conf.env.DEST_OS = 'generic'
54 conf.env.DEST_BINFMT = 'elf'
55 conf.env.DEST_CPU = 'asm-js'
56 conf.env.CC_VERSION = (k['__clang_major__'], k['__clang_minor__'], k['__clang_patchlevel__'])
60 def find_emscripten(conf):
61 cc = conf.find_program(['emcc'], var='CC')
62 conf.get_emscripten_version(cc)
64 conf.env.CC_NAME = 'emscripten'
65 cxx = conf.find_program(['em++'], var='CXX')
67 conf.env.CXX_NAME = 'emscripten'
68 conf.find_program(['emar'], var='AR')
71 conf.find_emscripten()
73 conf.gcc_common_flags()
74 conf.gxx_common_flags()
80 conf.env.ARFLAGS = ['rcs']
81 conf.env.cshlib_PATTERN = '%s.js'
82 conf.env.cxxshlib_PATTERN = '%s.js'
83 conf.env.cstlib_PATTERN = '%s.a'
84 conf.env.cxxstlib_PATTERN = '%s.a'
85 conf.env.cprogram_PATTERN = '%s.html'
86 conf.env.cxxprogram_PATTERN = '%s.html'
87 conf.env.CXX_TGT_F = ['-c', '-o', '']
88 conf.env.CC_TGT_F = ['-c', '-o', '']
89 conf.env.CXXLNK_TGT_F = ['-o', '']
90 conf.env.CCLNK_TGT_F = ['-o', '']
91 conf.env.append_value('LINKFLAGS',['-Wl,--enable-auto-import'])