javascript.py 1.4 KB

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