javascript.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import os
  2. from SCons.Util import WhereIs
  3. def exists(env):
  4. return WhereIs("emcc") is not None
  5. def generate(env):
  6. if env["arch"] not in ("wasm32"):
  7. print("Only wasm32 supported on web. Exiting.")
  8. env.Exit(1)
  9. env["CC"] = "emcc"
  10. env["CXX"] = "em++"
  11. env["AR"] = "emar"
  12. env["RANLIB"] = "emranlib"
  13. env.Append(CPPFLAGS=["-s", "SIDE_MODULE=1"])
  14. env.Append(LINKFLAGS=["-s", "SIDE_MODULE=1"])
  15. env["SHOBJSUFFIX"] = ".bc"
  16. env["SHLIBSUFFIX"] = ".wasm"
  17. # Use TempFileMunge since some AR invocations are too long for cmd.exe.
  18. # Use POSIX-style paths, required with TempFileMunge.
  19. env["ARCOM_POSIX"] = env["ARCOM"].replace("$TARGET", "$TARGET.posix").replace("$SOURCES", "$SOURCES.posix")
  20. env["ARCOM"] = "${TEMPFILE(ARCOM_POSIX)}"
  21. # Thread support (via SharedArrayBuffer).
  22. env.Append(CCFLAGS=["-s", "USE_PTHREADS=1"])
  23. env.Append(LINKFLAGS=["-s", "USE_PTHREADS=1"])
  24. # All intermediate files are just LLVM bitcode.
  25. env["OBJPREFIX"] = ""
  26. env["OBJSUFFIX"] = ".bc"
  27. env["PROGPREFIX"] = ""
  28. # Program() output consists of multiple files, so specify suffixes manually at builder.
  29. env["PROGSUFFIX"] = ""
  30. env["LIBPREFIX"] = "lib"
  31. env["LIBSUFFIX"] = ".a"
  32. env["LIBPREFIXES"] = ["$LIBPREFIX"]
  33. env["LIBSUFFIXES"] = ["$LIBSUFFIX"]
  34. env.Replace(SHLINKFLAGS="$LINKFLAGS")
  35. env.Replace(SHLINKFLAGS="$LINKFLAGS")
  36. env.Append(CPPDEFINES=["WEB_ENABLED", "UNIX_ENABLED"])