Rename Emscripten target to WebAssembly

This commit is contained in:
Joshua Granick
2023-05-23 14:19:32 -07:00
parent f285df6f76
commit 2ccee960dc
21 changed files with 102 additions and 126 deletions

View File

@@ -55,7 +55,7 @@ class Bytes
return untyped $sget(b, pos);
#elseif flash
return b[pos];
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
return untyped b[pos];
#elseif java
return untyped b[pos] & 0xFF;
@@ -72,7 +72,7 @@ class Bytes
untyped $sset(b, pos, v);
#elseif flash
b[pos] = v;
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
untyped b[pos] = v;
#elseif java
b[pos] = cast v;
@@ -104,7 +104,7 @@ class Bytes
cs.system.Array.Copy(src.b, srcpos, b, pos, len);
#elseif python
python.Syntax.code("self.b[{0}:{0}+{1}] = src.b[srcpos:srcpos+{1}]", pos, len);
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
b.blit(pos, src.b, srcpos, len);
#else
var b1 = b;
@@ -136,7 +136,7 @@ class Bytes
pos += len & ~3;
for (i in 0...len & 3)
set(pos++, value);
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
untyped __global__.__hxcpp_memory_memset(b, pos, len, value);
#else
for (i in 0...len)
@@ -206,7 +206,7 @@ class Bytes
return length - other.length;
// #elseif cs
// TODO: memcmp if unsafe flag is on
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
return b.memcmp(other.b);
#else
var b1 = b;
@@ -232,7 +232,7 @@ class Bytes
#elseif flash
b.position = pos;
return b.readDouble();
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
if (pos < 0 || pos + 8 > length) throw Error.OutsideBounds;
return untyped __global__.__hxcpp_memory_get_double(b, pos);
#else
@@ -254,7 +254,7 @@ class Bytes
#elseif flash
b.position = pos;
return b.readFloat();
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
if (pos < 0 || pos + 4 > length) throw Error.OutsideBounds;
return untyped __global__.__hxcpp_memory_get_float(b, pos);
#else
@@ -278,7 +278,7 @@ class Bytes
#elseif flash
b.position = pos;
b.writeDouble(v);
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
if (pos < 0 || pos + 8 > length) throw Error.OutsideBounds;
untyped __global__.__hxcpp_memory_set_double(b, pos, v);
#else
@@ -304,7 +304,7 @@ class Bytes
#elseif flash
b.position = pos;
b.writeFloat(v);
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
if (pos < 0 || pos + 4 > length) throw Error.OutsideBounds;
untyped __global__.__hxcpp_memory_set_float(b, pos, v);
#else
@@ -398,7 +398,7 @@ class Bytes
#elseif flash
b.position = pos;
return b.readUTFBytes(len);
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
var result:String = "";
untyped __global__.__hxcpp_string_of_bytes(b, result, pos, len);
return result;
@@ -510,7 +510,7 @@ class Bytes
var b = new flash.utils.ByteArray();
b.length = length;
return new Bytes(length, b);
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
var a = new BytesData();
if (length > 0) cpp.NativeArray.setSize(a, length);
return new Bytes(length, a);
@@ -540,7 +540,7 @@ class Bytes
var b = new flash.utils.ByteArray();
b.writeUTFBytes(s);
return new Bytes(b.length, b);
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
var a = new BytesData();
untyped __global__.__hxcpp_bytes_of_string(a, s);
return new Bytes(a.length, a);
@@ -638,7 +638,7 @@ class Bytes
return untyped __dollar__sget(b, pos);
#elseif flash
return b[pos];
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
return untyped b.unsafeGet(pos);
#elseif java
return untyped b[pos] & 0xFF;

View File

@@ -145,7 +145,7 @@ class NativeApplication
#elseif lime_cffi
var result = NativeCFFI.lime_application_exec(handle);
#if (!emscripten && !ios && !nodejs)
#if (!webassembly && !ios && !nodejs)
parent.onExit.dispatch(result);
#end

View File

@@ -562,7 +562,7 @@ class NativeAudioSource
{
if (handle != null)
{
#if !emscripten
#if !webassembly
var value = AL.getSource3f(handle, AL.POSITION);
position.x = value[0];
position.y = value[1];

View File

@@ -49,8 +49,11 @@ class DefineMacro
Compiler.define("mobile");
if (cffi) Compiler.define("lime-opengles");
}
else if (Context.defined("emscripten"))
else if (Context.defined("webassembly") || Context.defined("wasm") || Context.defined("emscripten"))
{
Compiler.define("webassembly");
Compiler.define("wasm");
Compiler.define("emscripten");
Compiler.define("web");
if (cffi) Compiler.define("lime-opengles");
}

View File

@@ -90,7 +90,7 @@ class CFFI
}
else
{
#if (cpp && (iphone || emscripten || android || static_link || tvos))
#if (cpp && (iphone || webassembly || android || static_link || tvos))
return cpp.Lib.load(library, method, args);
#end

View File

@@ -7,7 +7,7 @@ import lime.app.Event;
#if haxe4
import sys.thread.Deque;
import sys.thread.Thread;
#elseif (cpp || emscripten)
#elseif (cpp || webassembly)
import cpp.vm.Deque;
import cpp.vm.Thread;
#elseif neko
@@ -30,7 +30,7 @@ class ThreadPool
public var onProgress = new Event<Dynamic->Void>();
public var onRun = new Event<Dynamic->Void>();
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
@:noCompletion private var __synchronous:Bool;
@:noCompletion private var __workCompleted:Int;
@:noCompletion private var __workIncoming = new Deque<ThreadPoolMessage>();
@@ -45,12 +45,12 @@ class ThreadPool
currentThreads = 0;
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
__workQueued = 0;
__workCompleted = 0;
#end
#if (emscripten || force_synchronous)
#if (webassembly || force_synchronous)
__synchronous = true;
#end
}
@@ -67,7 +67,7 @@ class ThreadPool
// }
public function queue(state:Dynamic = null):Void
{
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
// TODO: Better way to handle this?
if (Application.current != null && Application.current.window != null && !__synchronous)
@@ -98,7 +98,7 @@ class ThreadPool
public function sendComplete(state:Dynamic = null):Void
{
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
if (!__synchronous)
{
__workResult.add(new ThreadPoolMessage(COMPLETE, state));
@@ -111,7 +111,7 @@ class ThreadPool
public function sendError(state:Dynamic = null):Void
{
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
if (!__synchronous)
{
__workResult.add(new ThreadPoolMessage(ERROR, state));
@@ -124,7 +124,7 @@ class ThreadPool
public function sendProgress(state:Dynamic = null):Void
{
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
if (!__synchronous)
{
__workResult.add(new ThreadPoolMessage(PROGRESS, state));
@@ -137,7 +137,7 @@ class ThreadPool
@:noCompletion private function runWork(state:Dynamic = null):Void
{
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
if (!__synchronous)
{
__workResult.add(new ThreadPoolMessage(WORK, state));
@@ -150,7 +150,7 @@ class ThreadPool
doWork.dispatch(state);
}
#if (cpp || neko || emscripten)
#if (cpp || neko || webassembly)
@:noCompletion private function __doWork():Void
{
while (true)

View File

@@ -264,7 +264,7 @@ class AssetHelper
}
else
{
if (project.target == EMSCRIPTEN
if (project.target == WEB_ASSEMBLY
&& (asset.embed != false
|| (asset.library != null && libraries.exists(asset.library) && libraries[asset.library].preload)))
{

View File

@@ -135,7 +135,7 @@ class HXProject extends Script
case AIR if (targetFlags.exists("ios") || targetFlags.exists("android")):
PlatformType.MOBILE;
case FLASH, HTML5, FIREFOX, EMSCRIPTEN:
case FLASH, HTML5, FIREFOX, WEB_ASSEMBLY:
PlatformType.WEB;
case ANDROID, BLACKBERRY, IOS, TIZEN, WEBOS, TVOS:

View File

@@ -16,6 +16,7 @@ package lime.tools;
var PS4 = "ps4";
var TIZEN = "tizen";
var VITA = "vita";
var WEB_ASSEMBLY = "webassembly";
var WINDOWS = "windows";
var WEBOS = "webos";
var WIIU = "wiiu";

View File

@@ -142,7 +142,7 @@ class ProjectXMLParser extends HXProject
}
else if (targetFlags.exists("cpp")
|| ((platformType != PlatformType.WEB) && !targetFlags.exists("html5"))
|| target == Platform.EMSCRIPTEN)
|| target == Platform.WEB_ASSEMBLY)
{
defines.set("targetType", "cpp");
defines.set("native", "1");

View File

@@ -1,40 +0,0 @@
/*
* Main.mm
*
* Boot code for lime.
*
*/
#include <stdio.h>
extern "C" const char *hxRunLibrary ();
extern "C" void hxcpp_set_top_of_stack ();
extern "C" int zlib_register_prims ();
extern "C" int lime_register_prims ();
::foreach ndlls::::if (registerStatics)::extern "C" int ::nameSafe::_register_prims ();::end::
::end::
extern "C" int main (int argc, char *argv[]) {
hxcpp_set_top_of_stack ();
zlib_register_prims ();
lime_register_prims ();
::foreach ndlls::::if (registerStatics)::::nameSafe::_register_prims ();::end::
::end::
const char *err = NULL;
err = hxRunLibrary ();
if (err) {
printf (" Error %s\n", err);
return -1;
}
return 0;
}

View File

@@ -125,7 +125,7 @@ import ::APP_MAIN::;
var result = app.exec();
#if (sys && !ios && !nodejs && !emscripten)
#if (sys && !ios && !nodejs && !webassembly)
lime.system.System.exit(result);
#end

View File

@@ -55,7 +55,7 @@ import sys.FileSystem;
if (rootPath == null) {
#if (ios || tvos || emscripten)
#if (ios || tvos || webassembly)
rootPath = "assets/";
#elseif android
rootPath = "";

View File

@@ -2,6 +2,8 @@
-cp ::OUTPUT_DIR::/haxe
-cpp ::CPP_DIR::
--macro keep("::APP_MAIN::")
-D webassembly
-D wasm
-D emscripten
-D webgl
-debug

View File

@@ -2,6 +2,8 @@
-cp ::OUTPUT_DIR::/haxe
-cpp ::CPP_DIR::
--macro keep("::APP_MAIN::")
-D webassembly
-D wasm
-D emscripten
-D webgl
-D final

View File

@@ -2,5 +2,7 @@
-cp ::OUTPUT_DIR::/haxe
-cpp ::CPP_DIR::
--macro keep("::APP_MAIN::")
-D webassembly
-D wasm
-D emscripten
-D webgl

View File

@@ -287,8 +287,8 @@ class CommandLineTools
target = Platform.LINUX;
targetFlags.set("rpi", "");
case "webassembly", "wasm":
target = Platform.EMSCRIPTEN;
case "webassembly", "wasm", "emscripten":
target = Platform.WEB_ASSEMBLY;
targetFlags.set("webassembly", "");
default:
@@ -622,8 +622,8 @@ class CommandLineTools
// platform = new FirefoxPlatform (command, project, targetFlags);
case EMSCRIPTEN:
platform = new EmscriptenPlatform(command, project, targetFlags);
case WEB_ASSEMBLY:
platform = new WebAssemblyPlatform(command, project, targetFlags);
case TVOS:
platform = new TVOSPlatform(command, project, targetFlags);
@@ -916,7 +916,6 @@ class CommandLineTools
Log.println(" \x1b[1mair\x1b[0m -- Create an AIR application");
Log.println(" \x1b[1mandroid\x1b[0m -- Create an Android application");
// Log.println (" \x1b[1mblackberry\x1b[0m -- Create a BlackBerry application");
Log.println(" \x1b[1memscripten\x1b[0m -- Create an Emscripten application");
Log.println(" \x1b[1mflash\x1b[0m -- Create a Flash SWF application");
Log.println(" \x1b[1mhtml5\x1b[0m -- Create an HTML5 application");
Log.println(" \x1b[1mios\x1b[0m -- Create an iOS application");
@@ -925,6 +924,7 @@ class CommandLineTools
// Log.println (" \x1b[1mtizen\x1b[0m -- Create a Tizen application");
Log.println(" \x1b[1mtvos\x1b[0m -- Create a tvOS application");
// Log.println (" \x1b[1mwebos\x1b[0m -- Create a webOS application");
Log.println(" \x1b[1mwebassembly\x1b[0m -- Create a WebAssembly application");
Log.println(" \x1b[1mwindows\x1b[0m -- Create a Windows application");
Log.println("");
@@ -947,7 +947,7 @@ class CommandLineTools
// Log.println (" \x1b[1mappletvsim\x1b[0m -- Alias for \x1b[1mtvos -simulator\x1b[0m");
Log.println(" \x1b[1mrpi\x1b[0;3m/\x1b[0m\x1b[1mraspberrypi\x1b[0m -- Alias for \x1b[1mlinux -rpi\x1b[0m");
Log.println(" \x1b[1melectron\x1b[0m -- Alias for \x1b[1mhtml5 -electron\x1b[0m");
Log.println(" \x1b[1mwebassembly\x1b[0;3m/\x1b[0m\x1b[1mwasm\x1b[0m -- Alias for \x1b[1memscripten -webassembly\x1b[0m");
Log.println(" \x1b[1mwasm/emscripten\x1b[0m -- Alias for \x1b[1mwebassembly\x1b[0m");
}
Log.println("");
@@ -1030,16 +1030,15 @@ class CommandLineTools
if (command != "run" && command != "trace")
{
Log.println(" \x1b[3m(emscripten)\x1b[0m \x1b[1m-webassembly\x1b[0m -- Compile for WebAssembly instead of asm.js");
Log.println(" \x1b[3m(emscripten|html5)\x1b[0m \x1b[1m-minify\x1b[0m -- Minify application file");
Log.println(" \x1b[3m(html5|webassembly)\x1b[0m \x1b[1m-minify\x1b[0m -- Minify application file");
}
if (command == "run" || command == "test")
{
Log.println(" \x1b[3m(emscripten|html5|flash)\x1b[0m \x1b[1m-nolaunch\x1b[0m -- Begin test server without launching");
Log.println(" \x1b[3m(html5|flash|webassembly)\x1b[0m \x1b[1m-nolaunch\x1b[0m -- Begin test server without launching");
// Log.println (" \x1b[3m(html5)\x1b[0m \x1b[1m-minify\x1b[0m -- Minify output using the Google Closure compiler");
// Log.println (" \x1b[3m(html5)\x1b[0m \x1b[1m-minify -yui\x1b[0m -- Minify output using the YUI compressor");
Log.println(" \x1b[3m(emscripten|html5|flash)\x1b[0m \x1b[1m--port=\x1b[0;3mvalue\x1b[0m -- Set port for test server");
Log.println(" \x1b[3m(html5|flash|webassembly)\x1b[0m \x1b[1m--port=\x1b[0;3mvalue\x1b[0m -- Set port for test server");
}
Log.println("");
@@ -1562,8 +1561,8 @@ class CommandLineTools
target = Platform.LINUX;
targetFlags.set("rpi", "");
case "webassembly", "wasm":
target = Platform.EMSCRIPTEN;
case "webassembly", "wasm", "emscripten":
target = Platform.WEB_ASSEMBLY;
targetFlags.set("webassembly", "");
case "winjs", "uwp":

View File

@@ -21,7 +21,7 @@ import lime.tools.ProjectHelper;
import sys.io.File;
import sys.FileSystem;
class EmscriptenPlatform extends PlatformTarget
class WebAssemblyPlatform extends PlatformTarget
{
private var dependencyPath:String;
private var outputFile:String;
@@ -94,8 +94,8 @@ class EmscriptenPlatform extends PlatformTarget
defaults.merge(project);
project = defaults;
targetDirectory = Path.combine(project.app.path, project.config.getString("emscripten.output-directory", "emscripten"));
dependencyPath = project.config.getString("emscripten.dependency-path", "lib");
targetDirectory = Path.combine(project.app.path, project.config.getString("webassembly.output-directory", "webassembly"));
dependencyPath = project.config.getString("webassembly.dependency-path", "lib");
outputFile = targetDirectory + "/bin/" + project.app.file + ".js";
}
@@ -114,11 +114,11 @@ class EmscriptenPlatform extends PlatformTarget
if (sdkPath == null)
{
Log.error("You must define EMSCRIPTEN_SDK with the path to your Emscripten SDK");
Log.error("You must define EMSCRIPTEN_SDK with the path to your Emscripten SDK.");
}
var hxml = targetDirectory + "/haxe/" + buildType + ".hxml";
var args = [hxml, "-D", "emscripten", "-D", "webgl", "-D", "static_link"];
var args = [hxml, "-D", "webassembly", "-D", "wasm", "-D", "emscripten", "-D", "webgl", "-D", "static_link"];
if (Log.verbose)
{
@@ -130,7 +130,7 @@ class EmscriptenPlatform extends PlatformTarget
if (noOutput) return;
CPPHelper.compile(project, targetDirectory + "/obj", ["-Demscripten", "-Dwebgl", "-Dstatic_link"]);
CPPHelper.compile(project, targetDirectory + "/obj", ["-Dwebassembly", "-Dwasm", "-Demscripten", "-Dwebgl", "-Dstatic_link"]);
// CPPHelper.compile(project, targetDirectory + "/obj", ["-Demscripten", "-Dwebgl", "-Dstatic_link"], "BuildMain.xml");
project.path(sdkPath);
@@ -165,7 +165,7 @@ class EmscriptenPlatform extends PlatformTarget
"ApplicationMain.o"
]);
if (project.targetFlags.exists("webassembly") || project.targetFlags.exists("wasm") || !project.targetFlags.exists("asmjs"))
if (!project.targetFlags.exists("asmjs"))
{
args.push("-s");
args.push("WASM=1");
@@ -190,19 +190,10 @@ class EmscriptenPlatform extends PlatformTarget
}
}
if (project.targetFlags.exists("final"))
if (project.targetFlags.exists("final") || project.defines.exists("disable-exception-catching") || project.targetFlags.exists("disable-exception-catching"))
{
args.push("-s");
args.push("DISABLE_EXCEPTION_CATCHING=1");
args.push("-O3");
}
else if (!project.debug)
{
args.push("-s");
args.push("DISABLE_EXCEPTION_CATCHING=1");
// args.push ("-s");
// args.push ("OUTLINING_LIMIT=70000");
args.push("-O2");
}
else
{
@@ -213,6 +204,20 @@ class EmscriptenPlatform extends PlatformTarget
args.push("NO_DISABLE_EXCEPTION_CATCHING=1");
args.push("-s");
args.push("ASSERTIONS=1");
}
if (project.targetFlags.exists("final"))
{
args.push("-O3");
}
else if (!project.debug)
{
// args.push ("-s");
// args.push ("OUTLINING_LIMIT=70000");
args.push("-O2");
}
else
{
args.push("-O1");
}
@@ -279,7 +284,7 @@ class EmscriptenPlatform extends PlatformTarget
}
}
System.copyFileTemplate(project.templatePaths, "emscripten/output.js", outputFile, context);
System.copyFileTemplate(project.templatePaths, "webassembly/output.js", outputFile, context);
}
if (project.targetFlags.exists("minify"))
@@ -316,7 +321,7 @@ class EmscriptenPlatform extends PlatformTarget
public override function deploy():Void
{
DeploymentHelper.deploy(project, targetFlags, targetDirectory, "Emscripten");
DeploymentHelper.deploy(project, targetFlags, targetDirectory, "WebAssembly");
}
public override function display():Void
@@ -353,7 +358,7 @@ class EmscriptenPlatform extends PlatformTarget
public override function rebuild():Void
{
CPPHelper.rebuild(project, [["-Demscripten", "-Dstatic_link"]]);
CPPHelper.rebuild(project, [["-Dwebassembly", "-Dwasm", "-Demscripten", "-Dstatic_link"]]);
}
public override function run():Void
@@ -378,10 +383,10 @@ class EmscriptenPlatform extends PlatformTarget
}
}
for (asset in project.assets)
{
asset.resourceName = "assets/" + asset.resourceName;
}
// for (asset in project.assets)
// {
// asset.resourceName = "assets/" + asset.resourceName;
// }
var destination = targetDirectory + "/bin/";
System.mkdir(destination);
@@ -462,10 +467,10 @@ class EmscriptenPlatform extends PlatformTarget
}
}
ProjectHelper.recursiveSmartCopyTemplate(project, "emscripten/template", destination, context);
ProjectHelper.recursiveSmartCopyTemplate(project, "webassembly/template", destination, context);
ProjectHelper.recursiveSmartCopyTemplate(project, "haxe", targetDirectory + "/haxe", context);
ProjectHelper.recursiveSmartCopyTemplate(project, "emscripten/hxml", targetDirectory + "/haxe", context);
// ProjectHelper.recursiveSmartCopyTemplate(project, "emscripten/cpp", targetDirectory + "/obj", context);
ProjectHelper.recursiveSmartCopyTemplate(project, "webassembly/hxml", targetDirectory + "/haxe", context);
// ProjectHelper.recursiveSmartCopyTemplate(project, "webassembly/cpp", targetDirectory + "/obj", context);
ProjectHelper.recursiveSmartCopyTemplate(project, "cpp/static", targetDirectory + "/obj", context);
for (asset in project.assets)

View File

@@ -369,9 +369,6 @@ class PlatformSetup
// setupBlackBerry ();
case "emscripten", "webassembly", "wasm":
setupEmscripten();
case "html5":
Log.println("\x1b[0;3mNo additional configuration is required.\x1b[0m");
// setupHTML5 ();
@@ -398,6 +395,9 @@ class PlatformSetup
// setupTizen ();
case "webassembly", "wasm", "emscripten":
setupWebAssembly();
case "webos":
// setupWebOS ();
@@ -625,18 +625,6 @@ class PlatformSetup
Log.println("Setup complete.");
}
public static function setupEmscripten():Void
{
Log.println("\x1b[1mIn order to build for WebAssembly or asm.js, you must download");
Log.println("and install the Emscripten SDK.");
Log.println("");
getDefineValue("EMSCRIPTEN_SDK", "Path to Emscripten SDK");
Log.println("");
Log.println("Setup complete.");
}
public static function setupHaxelib(haxelib:Haxelib, dependency:Bool = false):Void
{
setupHaxelibs.set(haxelib.name, true);
@@ -1165,6 +1153,20 @@ class PlatformSetup
}
}
public static function setupWebAssembly():Void
{
Log.println("\x1b[1mIn order to build for WebAssembly or asm.js, you must download");
Log.println("and install the Emscripten SDK.");
Log.println("");
Log.println("After install, the SDK path may be at \"emsdk/upstream/emscripten\"");
Log.println("");
getDefineValue("EMSCRIPTEN_SDK", "Path to Emscripten SDK");
Log.println("");
Log.println("Setup complete.");
}
public static function setupWindows():Void
{
Log.println("\x1b[1mIn order to build native executables for Windows, you must have a");