35adf718cf
Rename engine.start() to startGame(), new start() takes string arguments handed directly to main(). Rename Engine.loadEngine() to load(). Add setLocale(), setResizeCanvasOnStart(), setExecutableName() and preloadFile().
115 lines
3.4 KiB
Python
115 lines
3.4 KiB
Python
import os
|
|
import string
|
|
import sys
|
|
|
|
|
|
def is_active():
|
|
return True
|
|
|
|
|
|
def get_name():
|
|
return "JavaScript"
|
|
|
|
|
|
def can_build():
|
|
|
|
return ("EMSCRIPTEN_ROOT" in os.environ or "EMSCRIPTEN" in os.environ)
|
|
|
|
|
|
def get_opts():
|
|
from SCons.Variables import BoolVariable
|
|
return [
|
|
BoolVariable('javascript_eval', 'Enable JavaScript eval interface', True),
|
|
]
|
|
|
|
|
|
def get_flags():
|
|
|
|
return [
|
|
('tools', False),
|
|
('module_theora_enabled', False),
|
|
]
|
|
|
|
|
|
def create(env):
|
|
|
|
# remove Windows' .exe suffix
|
|
return env.Clone(tools=['textfile', 'zip'], PROGSUFFIX='')
|
|
|
|
|
|
def escape_sources_backslashes(target, source, env, for_signature):
|
|
return [path.replace('\\','\\\\') for path in env.GetBuildPath(source)]
|
|
|
|
def escape_target_backslashes(target, source, env, for_signature):
|
|
return env.GetBuildPath(target[0]).replace('\\','\\\\')
|
|
|
|
|
|
def configure(env):
|
|
|
|
## Build type
|
|
|
|
if (env["target"] == "release"):
|
|
env.Append(CCFLAGS=['-O3'])
|
|
env.Append(LINKFLAGS=['-O3'])
|
|
|
|
elif (env["target"] == "release_debug"):
|
|
env.Append(CCFLAGS=['-O2', '-DDEBUG_ENABLED'])
|
|
env.Append(LINKFLAGS=['-O2', '-s', 'ASSERTIONS=1'])
|
|
# retain function names at the cost of file size, for backtraces and profiling
|
|
env.Append(LINKFLAGS=['--profiling-funcs'])
|
|
|
|
elif (env["target"] == "debug"):
|
|
env.Append(CCFLAGS=['-O1', '-D_DEBUG', '-g', '-DDEBUG_ENABLED'])
|
|
env.Append(LINKFLAGS=['-O1', '-g'])
|
|
|
|
## Compiler configuration
|
|
|
|
env['ENV'] = os.environ
|
|
if ("EMSCRIPTEN_ROOT" in os.environ):
|
|
env.PrependENVPath('PATH', os.environ['EMSCRIPTEN_ROOT'])
|
|
elif ("EMSCRIPTEN" in os.environ):
|
|
env.PrependENVPath('PATH', os.environ['EMSCRIPTEN'])
|
|
env['CC'] = 'emcc'
|
|
env['CXX'] = 'em++'
|
|
env['LINK'] = 'emcc'
|
|
env['RANLIB'] = 'emranlib'
|
|
# Emscripten's ar has issues with duplicate file names, so use cc
|
|
env['AR'] = 'emcc'
|
|
env['ARFLAGS'] = '-o'
|
|
|
|
if (os.name == 'nt'):
|
|
# use TempFileMunge on Windows since some commands get too long for
|
|
# cmd.exe even with spawn_fix
|
|
# need to escape backslashes for this
|
|
env['ESCAPED_SOURCES'] = escape_sources_backslashes
|
|
env['ESCAPED_TARGET'] = escape_target_backslashes
|
|
env['ARCOM'] = '${TEMPFILE("%s")}' % env['ARCOM'].replace('$SOURCES', '$ESCAPED_SOURCES').replace('$TARGET', '$ESCAPED_TARGET')
|
|
|
|
env['OBJSUFFIX'] = '.bc'
|
|
env['LIBSUFFIX'] = '.bc'
|
|
|
|
## Compile flags
|
|
|
|
env.Append(CPPPATH=['#platform/javascript'])
|
|
env.Append(CPPFLAGS=['-DJAVASCRIPT_ENABLED', '-DUNIX_ENABLED', '-DPTHREAD_NO_RENAME', '-DTYPED_METHOD_BIND', '-DNO_THREADS'])
|
|
env.Append(CPPFLAGS=['-DGLES3_ENABLED'])
|
|
|
|
# These flags help keep the file size down
|
|
env.Append(CPPFLAGS=["-fno-exceptions", '-DNO_SAFE_CAST', '-fno-rtti'])
|
|
|
|
if env['javascript_eval']:
|
|
env.Append(CPPFLAGS=['-DJAVASCRIPT_EVAL_ENABLED'])
|
|
|
|
## Link flags
|
|
|
|
env.Append(LINKFLAGS=['-s', 'BINARYEN=1'])
|
|
env.Append(LINKFLAGS=['-s', 'ALLOW_MEMORY_GROWTH=1'])
|
|
env.Append(LINKFLAGS=['-s', 'USE_WEBGL2=1'])
|
|
env.Append(LINKFLAGS=['-s', 'EXTRA_EXPORTED_RUNTIME_METHODS="[\'FS\']"'])
|
|
|
|
env.Append(LINKFLAGS=['-s', 'INVOKE_RUN=0'])
|
|
env.Append(LINKFLAGS=['-s', 'NO_EXIT_RUNTIME=1'])
|
|
|
|
# TODO: Move that to opus module's config
|
|
if 'module_opus_enabled' in env and env['module_opus_enabled']:
|
|
env.opus_fixed_point = "yes"
|