56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
import common_compiler_flags
|
|
from SCons.Util import WhereIs
|
|
|
|
|
|
def exists(env):
|
|
return WhereIs("emcc") is not None
|
|
|
|
|
|
def generate(env):
|
|
if env["arch"] not in ("wasm32"):
|
|
print("Only wasm32 supported on web. Exiting.")
|
|
env.Exit(1)
|
|
|
|
# Emscripten toolchain
|
|
env["CC"] = "emcc"
|
|
env["CXX"] = "em++"
|
|
env["AR"] = "emar"
|
|
env["RANLIB"] = "emranlib"
|
|
|
|
# Use TempFileMunge since some AR invocations are too long for cmd.exe.
|
|
# Use POSIX-style paths, required with TempFileMunge.
|
|
env["ARCOM_POSIX"] = env["ARCOM"].replace("$TARGET", "$TARGET.posix").replace("$SOURCES", "$SOURCES.posix")
|
|
env["ARCOM"] = "${TEMPFILE(ARCOM_POSIX)}"
|
|
|
|
# All intermediate files are just object files.
|
|
env["OBJSUFFIX"] = ".o"
|
|
env["SHOBJSUFFIX"] = ".o"
|
|
|
|
# Static libraries clang-style.
|
|
env["LIBPREFIX"] = "lib"
|
|
env["LIBSUFFIX"] = ".a"
|
|
|
|
# Shared library as wasm.
|
|
env["SHLIBSUFFIX"] = ".wasm"
|
|
|
|
# Thread support (via SharedArrayBuffer).
|
|
if env["threads"]:
|
|
env.Append(CCFLAGS=["-sUSE_PTHREADS=1"])
|
|
env.Append(LINKFLAGS=["-sUSE_PTHREADS=1"])
|
|
|
|
# Build as side module (shared library).
|
|
env.Append(CCFLAGS=["-sSIDE_MODULE=1"])
|
|
env.Append(LINKFLAGS=["-sSIDE_MODULE=1"])
|
|
|
|
# Force wasm longjmp mode.
|
|
env.Append(CCFLAGS=["-sSUPPORT_LONGJMP='wasm'"])
|
|
env.Append(LINKFLAGS=["-sSUPPORT_LONGJMP='wasm'"])
|
|
|
|
env.Append(CPPDEFINES=["WEB_ENABLED", "UNIX_ENABLED"])
|
|
|
|
# Refer to https://github.com/godotengine/godot/blob/master/platform/web/detect.py
|
|
if env["lto"] == "auto":
|
|
env["lto"] = "full"
|
|
|
|
common_compiler_flags.generate(env)
|