godot/platform/javascript/detect.py
Rémi Verschelde 9ef833ec6d HTML5: Do not error on undefined symbols
Emscripten used not to error out on those warnings, but this behaviour changed
recently, so we revert it to be able to compile as we used to for previous 2.1.x
releases. It would be good to fix those undefined symbols though.
2019-06-04 13:35:24 +02:00

114 lines
4.0 KiB
Python

import os
import sys
import string
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():
return [
['compress', 'Compress JS Executable', 'no']
]
def get_flags():
return [
('tools', 'no'),
('module_etc1_enabled', 'no'),
('module_mpc_enabled', 'no'),
('module_speex_enabled', 'no'),
]
def configure(env):
env['ENV'] = os.environ
env.use_windows_spawn_fix('javascript')
env.Append(CPPPATH=['#platform/javascript'])
env['ENV'] = os.environ
if ("EMSCRIPTEN_ROOT" in os.environ):
em_path = os.environ["EMSCRIPTEN_ROOT"]
elif ("EMSCRIPTEN" in os.environ):
em_path = os.environ["EMSCRIPTEN"]
env['ENV']['PATH'] = em_path + ":" + env['ENV']['PATH']
env['CC'] = em_path + '/emcc'
env['CXX'] = em_path + '/emcc'
#env['AR'] = em_path+"/emar"
env['AR'] = em_path + "/emcc"
env['ARFLAGS'] = "-o"
# env['RANLIB'] = em_path+"/emranlib"
env['RANLIB'] = em_path + "/emcc"
env['OBJSUFFIX'] = '.bc'
env['LIBSUFFIX'] = '.bc'
env['CCCOM'] = "$CC -o $TARGET $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES"
env['CXXCOM'] = "$CC -o $TARGET $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES"
# env.Append(LIBS=['c','m','stdc++','log','GLESv1_CM','GLESv2'])
# env["LINKFLAGS"]= string.split(" -g --sysroot="+ld_sysroot+" -Wl,--no-undefined -Wl,-z,noexecstack ")
if (env["target"] == "release"):
env.Append(CCFLAGS=['-O2'])
elif (env["target"] == "release_debug"):
env.Append(CCFLAGS=['-O2', '-DDEBUG_ENABLED'])
elif (env["target"] == "debug"):
env.Append(CCFLAGS=['-D_DEBUG', '-O2', '-DDEBUG_ENABLED'])
env.Append(CPPFLAGS=['-DDEBUG_MEMORY_ALLOC'])
# TODO: Move that to opus module's config
if("module_opus_enabled" in env and env["module_opus_enabled"] != "no"):
env.opus_fixed_point = "yes"
env.Append(CPPFLAGS=["-fno-exceptions", '-DNO_SAFE_CAST', '-fno-rtti'])
env.Append(CPPFLAGS=['-DJAVASCRIPT_ENABLED', '-DUNIX_ENABLED', '-DPTHREAD_NO_RENAME', '-DNO_FCNTL', '-DMPC_FIXED_POINT', '-DTYPED_METHOD_BIND', '-DNO_THREADS'])
env.Append(CPPFLAGS=['-DGLES2_ENABLED'])
env.Append(CPPFLAGS=['-DGLES_NO_CLIENT_ARRAYS'])
env.Append(CPPFLAGS=['-s', 'ASM_JS=1'])
env.Append(CPPFLAGS=['-s', 'FULL_ES2=1'])
# env.Append(CPPFLAGS=['-DANDROID_ENABLED', '-DUNIX_ENABLED','-DMPC_FIXED_POINT'])
if (env["compress"] == "yes"):
lzma_binpath = em_path + "/third_party/lzma.js/lzma-native"
lzma_decoder = em_path + "/third_party/lzma.js/lzma-decoder.js"
lzma_dec = "LZMA.decompress"
env.Append(LINKFLAGS=['--compression', lzma_binpath + "," + lzma_decoder + "," + lzma_dec])
env.Append(LINKFLAGS=['-s', 'ASM_JS=1'])
env.Append(LINKFLAGS=['-s', 'WASM=0'])
env.Append(LINKFLAGS=['-s', 'EXTRA_EXPORTED_RUNTIME_METHODS="[\'FS\']"'])
env.Append(LINKFLAGS=['--separate-asm'])
env.Append(LINKFLAGS=['-O2'])
# env.Append(LINKFLAGS=['-g4'])
# FIXME: This used to be the default in older emscripten, but now it would error out.
# We have two undefined symbols in the current 2.1 branch (since years):
# error: undefined symbol: popen
# error: undefined symbol: sem_getvalue
env.Append(LINKFLAGS=['-s', 'ERROR_ON_UNDEFINED_SYMBOLS=0'])
# print "CCCOM is:", env.subst('$CCCOM')
# print "P: ", env['p'], " Platofrm: ", env['platform']
import methods
env.Append(BUILDERS={'GLSL120': env.Builder(action=methods.build_legacygl_headers, suffix='glsl.gen.h', src_suffix='.glsl')})
env.Append(BUILDERS={'GLSL': env.Builder(action=methods.build_glsl_headers, suffix='glsl.gen.h', src_suffix='.glsl')})
env.Append(BUILDERS={'GLSL120GLES': env.Builder(action=methods.build_gles2_headers, suffix='glsl.gen.h', src_suffix='.glsl')})
#env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.gen.h',src_suffix = '.hlsl') } )