SCsub 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env python
  2. Import('env')
  3. javascript_files = [
  4. "os_javascript.cpp",
  5. "audio_driver_javascript.cpp",
  6. "javascript_main.cpp",
  7. "power_javascript.cpp",
  8. "http_client_javascript.cpp",
  9. "javascript_eval.cpp",
  10. ]
  11. env_javascript = env.Clone()
  12. if env['target'] == "profile":
  13. env_javascript.Append(CPPFLAGS=['-DPROFILER_ENABLED'])
  14. javascript_objects = []
  15. for x in javascript_files:
  16. javascript_objects.append(env_javascript.Object(x))
  17. env.Append(LINKFLAGS=["-s", "EXPORTED_FUNCTIONS=\"['_main','_main_after_fs_sync','_send_notification']\""])
  18. # output file name without file extension
  19. basename = "godot" + env["PROGSUFFIX"]
  20. target_dir = env.Dir("#bin")
  21. zip_dir = target_dir.Dir('.javascript_zip')
  22. zip_files = env.InstallAs(zip_dir.File('godot.html'), '#misc/dist/html/default.html')
  23. implicit_targets = []
  24. if env['wasm']:
  25. wasm = target_dir.File(basename + '.wasm')
  26. implicit_targets.append(wasm)
  27. zip_files.append(InstallAs(zip_dir.File('godot.wasm'), wasm))
  28. prejs = env.File('pre_wasm.js')
  29. else:
  30. asmjs_files = [target_dir.File(basename + '.asm.js'), target_dir.File(basename + '.js.mem')]
  31. implicit_targets.extend(asmjs_files)
  32. zip_files.append(InstallAs([zip_dir.File('godot.asm.js'), zip_dir.File('godot.mem')], asmjs_files))
  33. prejs = env.File('pre_asmjs.js')
  34. js = env.Program(['#bin/godot'] + implicit_targets, javascript_objects, PROGSUFFIX=env['PROGSUFFIX'] + '.js')[0];
  35. zip_files.append(InstallAs(zip_dir.File('godot.js'), js))
  36. js_libraries = []
  37. js_libraries.append(env.File('http_request.js'))
  38. for lib in js_libraries:
  39. env.Append(LINKFLAGS=['--js-library', lib.path])
  40. env.Depends(js, js_libraries)
  41. postjs = env.File('engine.js')
  42. env.Depends(js, [prejs, postjs])
  43. env.Append(LINKFLAGS=['--pre-js', prejs.path])
  44. env.Append(LINKFLAGS=['--post-js', postjs.path])
  45. Zip('#bin/godot', zip_files, ZIPSUFFIX=env['PROGSUFFIX'] + env['ZIPSUFFIX'], ZIPROOT=zip_dir, ZIPCOMSTR="Archving $SOURCES as $TARGET")