diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8d4043f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "QuickJS"] + path = QuickJS + url = https://github.com/JerrySievert/QuickJS diff --git a/Makefile b/Makefile index fa43533..20ee175 100644 --- a/Makefile +++ b/Makefile @@ -35,16 +35,16 @@ $(duktape): cd dep && $(UNTAR) ../duktape-2.4.0.tar.xz # QuickJS -quickjs := dep/QuickJS/libquickjs.a +quickjs := dep/lib/quickjs/libquickjs.a DEPS += $(quickjs) OBJECTS += $(quickjs) -FLAGS += -Idep/QuickJS -LDFLAGS += -Ldep/QuickJS -lquickjs -MAKEQJSFLAGS := - +QUICKJS_MAKE_FLAGS += prefix="$(DEP_PATH)" +ifdef ARCH_WIN + QUICKJS_MAKE_FLAGS += CONFIG_WIN32=y +endif $(quickjs): - cd dep && git clone "https://github.com/JerrySievert/QuickJS" - cd dep/QuickJS && $(MAKE) $(MAKEQJSFLAGS) + cd QuickJS && $(MAKE) $(QUICKJS_MAKE_FLAGS) + cd QuickJS && $(MAKE) $(QUICKJS_MAKE_FLAGS) install # # LuaJIT # luajit := dep/lib/luajit.a @@ -99,7 +99,3 @@ $(quickjs): include $(RACK_DIR)/plugin.mk - -ifdef ARCH_WIN - MAKEQJSFLAGS += CONFIG_WIN32=y -endif diff --git a/QuickJS b/QuickJS new file mode 160000 index 0000000..3aefcde --- /dev/null +++ b/QuickJS @@ -0,0 +1 @@ +Subproject commit 3aefcde48ae7698b4d6704b09a071d07a8d8019d diff --git a/src/QuickJSEngine.cpp b/src/QuickJSEngine.cpp index d6b691e..4e593b9 100644 --- a/src/QuickJSEngine.cpp +++ b/src/QuickJSEngine.cpp @@ -1,5 +1,5 @@ #include "ScriptEngine.hpp" -#include +#include static JSClassID QuickJSEngineClass; @@ -189,9 +189,16 @@ struct QuickJSEngine : ScriptEngine { JS_SetPropertyStr(ctx, global_obj, "block", blockIdx); // this is a horrible hack to get QuickJS to allocate the correct types - std::string updateTypes = "for (var i = 0; i < 6; i++) { block.inputs[i] = new Float32Array(block.inputs[i]); block.outputs[i] = new Float32Array(block.outputs[i]); " \ - "block.lights[i] = new Float32Array(block.lights[i]); block.switchLights[i] = new Float32Array(block.switchLights[i]); } " \ - "block.knobs = new Float32Array(block.knobs); block.switches = new Uint8Array(block.switches);"; + static const std::string updateTypes = R"( + for (var i = 0; i < 6; i++) { + block.inputs[i] = new Float32Array(block.inputs[i]); + block.outputs[i] = new Float32Array(block.outputs[i]); + block.lights[i] = new Float32Array(block.lights[i]); + block.switchLights[i] = new Float32Array(block.switchLights[i]); + } + block.knobs = new Float32Array(block.knobs); + block.switches = new Uint8Array(block.switches); + )"; JSValue hack = JS_Eval(ctx, updateTypes.c_str(), updateTypes.size(), "QuickJS Hack", 0); if (JS_IsException(hack)) {