| 
									
										
										
										
											2021-03-18 16:19:09 +01:00
										 |  |  | import os, json | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-03 15:46:52 +02:00
										 |  |  | from SCons.Util import WhereIs | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def run_closure_compiler(target, source, env, for_signature): | 
					
						
							| 
									
										
										
										
											2020-10-03 15:46:52 +02:00
										 |  |  |     closure_bin = os.path.join(os.path.dirname(WhereIs("emcc")), "node_modules", ".bin", "google-closure-compiler") | 
					
						
							|  |  |  |     cmd = [WhereIs("node"), closure_bin] | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     cmd.extend(["--compilation_level", "ADVANCED_OPTIMIZATIONS"]) | 
					
						
							|  |  |  |     for f in env["JSEXTERNS"]: | 
					
						
							|  |  |  |         cmd.extend(["--externs", f.get_abspath()]) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     for f in source: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         cmd.extend(["--js", f.get_abspath()]) | 
					
						
							|  |  |  |     cmd.extend(["--js_output_file", target[0].get_abspath()]) | 
					
						
							|  |  |  |     return " ".join(cmd) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-08 15:39:14 +01:00
										 |  |  | def get_build_version(): | 
					
						
							| 
									
										
										
										
											2021-01-25 04:48:11 +01:00
										 |  |  |     import version | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     name = "custom_build" | 
					
						
							|  |  |  |     if os.getenv("BUILD_NAME") != None: | 
					
						
							|  |  |  |         name = os.getenv("BUILD_NAME") | 
					
						
							| 
									
										
										
										
											2021-03-20 14:35:28 +01:00
										 |  |  |     v = "%d.%d" % (version.major, version.minor) | 
					
						
							|  |  |  |     if version.patch > 0: | 
					
						
							|  |  |  |         v += ".%d" % version.patch | 
					
						
							|  |  |  |     v += ".%s.%s" % (version.status, name) | 
					
						
							|  |  |  |     return v | 
					
						
							| 
									
										
										
										
											2021-01-25 04:48:11 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | def create_engine_file(env, target, source, externs): | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["use_closure_compiler"]: | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |         return env.BuildJS(target, source, JSEXTERNS=externs) | 
					
						
							|  |  |  |     return env.Textfile(target, [env.File(s) for s in source]) | 
					
						
							| 
									
										
										
										
											2020-10-23 18:33:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-08 15:39:14 +01:00
										 |  |  | def create_template_zip(env, js, wasm, extra): | 
					
						
							|  |  |  |     binary_name = "godot.tools" if env["tools"] else "godot" | 
					
						
							|  |  |  |     zip_dir = env.Dir("#bin/.javascript_zip") | 
					
						
							|  |  |  |     in_files = [ | 
					
						
							|  |  |  |         js, | 
					
						
							|  |  |  |         wasm, | 
					
						
							|  |  |  |         "#platform/javascript/js/libs/audio.worklet.js", | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     out_files = [ | 
					
						
							|  |  |  |         zip_dir.File(binary_name + ".js"), | 
					
						
							|  |  |  |         zip_dir.File(binary_name + ".wasm"), | 
					
						
							|  |  |  |         zip_dir.File(binary_name + ".audio.worklet.js"), | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     # GDNative/Threads specific | 
					
						
							|  |  |  |     if env["gdnative_enabled"]: | 
					
						
							|  |  |  |         in_files.append(extra)  # Runtime | 
					
						
							|  |  |  |         out_files.append(zip_dir.File(binary_name + ".side.wasm")) | 
					
						
							|  |  |  |     elif env["threads_enabled"]: | 
					
						
							|  |  |  |         in_files.append(extra)  # Worker | 
					
						
							|  |  |  |         out_files.append(zip_dir.File(binary_name + ".worker.js")) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     service_worker = "#misc/dist/html/service-worker.js" | 
					
						
							|  |  |  |     if env["tools"]: | 
					
						
							|  |  |  |         # HTML | 
					
						
							|  |  |  |         html = "#misc/dist/html/editor.html" | 
					
						
							| 
									
										
										
										
											2021-03-18 16:19:09 +01:00
										 |  |  |         cache = [ | 
					
						
							|  |  |  |             "godot.tools.html", | 
					
						
							|  |  |  |             "offline.html", | 
					
						
							|  |  |  |             "godot.tools.js", | 
					
						
							|  |  |  |             "godot.tools.worker.js", | 
					
						
							|  |  |  |             "godot.tools.audio.worklet.js", | 
					
						
							|  |  |  |             "logo.svg", | 
					
						
							|  |  |  |             "favicon.png", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         opt_cache = ["godot.tools.wasm"] | 
					
						
							|  |  |  |         subst_dict = { | 
					
						
							|  |  |  |             "@GODOT_VERSION@": get_build_version(), | 
					
						
							|  |  |  |             "@GODOT_NAME@": "GodotEngine", | 
					
						
							|  |  |  |             "@GODOT_CACHE@": json.dumps(cache), | 
					
						
							|  |  |  |             "@GODOT_OPT_CACHE@": json.dumps(opt_cache), | 
					
						
							|  |  |  |             "@GODOT_OFFLINE_PAGE@": "offline.html", | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-03-08 15:39:14 +01:00
										 |  |  |         html = env.Substfile(target="#bin/godot${PROGSUFFIX}.html", source=html, SUBST_DICT=subst_dict) | 
					
						
							|  |  |  |         in_files.append(html) | 
					
						
							|  |  |  |         out_files.append(zip_dir.File(binary_name + ".html")) | 
					
						
							|  |  |  |         # And logo/favicon | 
					
						
							|  |  |  |         in_files.append("#misc/dist/html/logo.svg") | 
					
						
							|  |  |  |         out_files.append(zip_dir.File("logo.svg")) | 
					
						
							|  |  |  |         in_files.append("#icon.png") | 
					
						
							|  |  |  |         out_files.append(zip_dir.File("favicon.png")) | 
					
						
							|  |  |  |         # PWA | 
					
						
							|  |  |  |         service_worker = env.Substfile( | 
					
						
							|  |  |  |             target="#bin/godot${PROGSUFFIX}.service.worker.js", source=service_worker, SUBST_DICT=subst_dict | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         in_files.append(service_worker) | 
					
						
							|  |  |  |         out_files.append(zip_dir.File("service.worker.js")) | 
					
						
							|  |  |  |         in_files.append("#misc/dist/html/manifest.json") | 
					
						
							|  |  |  |         out_files.append(zip_dir.File("manifest.json")) | 
					
						
							|  |  |  |         in_files.append("#misc/dist/html/offline.html") | 
					
						
							|  |  |  |         out_files.append(zip_dir.File("offline.html")) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         # HTML | 
					
						
							|  |  |  |         in_files.append("#misc/dist/html/full-size.html") | 
					
						
							|  |  |  |         out_files.append(zip_dir.File(binary_name + ".html")) | 
					
						
							| 
									
										
										
										
											2021-03-18 16:19:09 +01:00
										 |  |  |         in_files.append(service_worker) | 
					
						
							|  |  |  |         out_files.append(zip_dir.File(binary_name + ".service.worker.js")) | 
					
						
							|  |  |  |         in_files.append("#misc/dist/html/offline-export.html") | 
					
						
							|  |  |  |         out_files.append(zip_dir.File("godot.offline.html")) | 
					
						
							| 
									
										
										
										
											2021-03-08 15:39:14 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     zip_files = env.InstallAs(out_files, in_files) | 
					
						
							|  |  |  |     env.Zip( | 
					
						
							|  |  |  |         "#bin/godot", | 
					
						
							|  |  |  |         zip_files, | 
					
						
							|  |  |  |         ZIPROOT=zip_dir, | 
					
						
							|  |  |  |         ZIPSUFFIX="${PROGSUFFIX}${ZIPSUFFIX}", | 
					
						
							|  |  |  |         ZIPCOMSTR="Archiving $SOURCES as $TARGET", | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-23 18:33:20 +02:00
										 |  |  | def add_js_libraries(env, libraries): | 
					
						
							|  |  |  |     env.Append(JS_LIBS=env.File(libraries)) | 
					
						
							| 
									
										
										
										
											2020-09-26 17:15:21 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def add_js_pre(env, js_pre): | 
					
						
							|  |  |  |     env.Append(JS_PRE=env.File(js_pre)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def add_js_externs(env, externs): | 
					
						
							|  |  |  |     env.Append(JS_EXTERNS=env.File(externs)) |