@@ -29,14 +29,33 @@ endif | |||
# Entropia File System Watcher | |||
efsw := dep/lib/libefsw-static-release.a | |||
ifeq (, $(shell which premake4)) | |||
ifeq (, $(shell which premake5)) | |||
$(error premake is not installed. Please install either premake4 or premake5) | |||
else | |||
PREMAKE = premake5 | |||
endif | |||
else | |||
PREMAKE = premake4 | |||
endif | |||
ifdef ARCH_WIN | |||
efsw := dep/lib/efsw-static-release.lib | |||
else | |||
efsw := dep/lib/libefsw-static-release.a | |||
endif | |||
DEPS += $(efsw) | |||
OBJECTS += $(efsw) | |||
$(efsw): | |||
cd efsw && premake4 gmake | |||
cd efsw && $(PREMAKE) gmake | |||
ifdef ARCH_WIN | |||
cd efsw && $(MAKE) -C make/* config=release_x86_64 efsw-static-lib | |||
mkdir -p dep/lib dep/include | |||
cd efsw && cp lib/efsw-static-release.lib $(DEP_PATH)/lib/ | |||
else | |||
cd efsw && $(MAKE) -C make/* config=release efsw-static-lib | |||
mkdir -p dep/lib dep/include | |||
cd efsw && cp lib/libefsw-static-release.a $(DEP_PATH)/lib/ | |||
endif | |||
cd efsw && cp -R include/efsw $(DEP_PATH)/include/ | |||
@@ -74,45 +93,60 @@ endif | |||
# LuaJIT | |||
ifeq ($(LUAJIT), 1) | |||
SOURCES += src/LuaJITEngine.cpp | |||
luajit := dep/lib/libluajit-5.1.a | |||
luajit := dep/LuaJIT/src/libluajit.a | |||
OBJECTS += $(luajit) | |||
DEPS += $(luajit) | |||
$(luajit): | |||
$(WGET) "http://luajit.org/download/LuaJIT-2.0.5.tar.gz" | |||
$(SHA256) LuaJIT-2.0.5.tar.gz 874b1f8297c697821f561f9b73b57ffd419ed8f4278c82e05b48806d30c1e979 | |||
cd dep && $(UNTAR) ../LuaJIT-2.0.5.tar.gz | |||
cd dep/LuaJIT-2.0.5 && $(MAKE) BUILDMODE=static PREFIX="$(DEP_PATH)" install | |||
cd dep && git clone "https://github.com/LuaJIT/LuaJIT.git" | |||
cd dep/LuaJIT && git checkout v2.1 | |||
cd dep/LuaJIT && MACOSX_DEPLOYMENT_TARGET=10.9 $(MAKE) BUILDMODE=static PREFIX="$(DEP_PATH)" install | |||
endif | |||
# SuperCollider | |||
ifeq ($(SUPERCOLLIDER), 1) | |||
SOURCES += src/SuperColliderEngine.cpp | |||
FLAGS += -Idep/supercollider/include -Idep/supercollider/include/common -Idep/supercollider/lang -Idep/supercollider/common -Idep/supercollider/include/plugin_interface | |||
FLAGS += -Idep/supercollider/include -Idep/supercollider/include/common -Idep/supercollider/lang -Idep/supercollider/common -Idep/supercollider/include/plugin_interface -Idep/supercollider/external_libraries/boost | |||
# FLAGS += -DSC_VCV_ENGINE_TIMING # uncomment to turn on timing printing while running | |||
supercollider := dep/supercollider/build/lang/libsclang.a | |||
ifdef ARCH_WIN | |||
supercollider := dep/supercollider/build/lang/liblibsclang.a | |||
else | |||
supercollider := dep/supercollider/build/lang/libsclang.a | |||
endif | |||
OBJECTS += $(supercollider) | |||
DEPS += $(supercollider) | |||
DISTRIBUTABLES += dep/supercollider/SCClassLibrary | |||
DISTRIBUTABLES += support/supercollider_extensions | |||
SUPERCOLLIDER_CMAKE_FLAGS += -DSUPERNOVA=0 -DSC_EL=0 -DSC_VIM=0 -DSC_ED=0 -DSC_IDE=0 -DSC_ABLETON_LINK=0 -DSC_QT=0 -DCMAKE_BUILD_TYPE=Release -DSCLANG_SERVER=0 -DBUILD_TESTING=0 -DNO_LIBSNDFILE=1 | |||
SUPERCOLLIDER_SUBMODULES += external_libraries/hidapi external_libraries/nova-simd external_libraries/nova-tt external_libraries/portaudio_sc_org external_libraries/yaml-cpp | |||
SUPERCOLLIDER_BRANCH := topic/vcv-prototype-support | |||
SUPERCOLLIDER_SUBMODULES += external_libraries/hidapi external_libraries/nova-simd external_libraries/nova-tt external_libraries/portaudio/portaudio_submodule external_libraries/yaml-cpp | |||
SUPERCOLLIDER_BRANCH := 3.13 | |||
OBJECTS += dep/supercollider/build/external_libraries/libtlsf.a | |||
OBJECTS += dep/supercollider/build/external_libraries/hidapi/linux/libhidapi.a | |||
ifdef ARCH_WIN | |||
OBJECTS += dep/supercollider/build/external_libraries/hidapi/windows/libhidapi.a | |||
endif | |||
ifdef ARCH_LIN | |||
OBJECTS += dep/supercollider/build/external_libraries/hidapi/linux/libhidapi.a | |||
endif | |||
ifdef ARCH_MAC | |||
OBJECTS += dep/supercollider/build/external_libraries/hidapi/mac/libhidapi.a | |||
endif | |||
OBJECTS += dep/supercollider/build/external_libraries/hidapi/hidapi_parser/libhidapi_parser.a | |||
OBJECTS += dep/supercollider/build/external_libraries/libboost_thread_lib.a | |||
OBJECTS += dep/supercollider/build/external_libraries/libboost_system_lib.a | |||
OBJECTS += dep/supercollider/build/external_libraries/libboost_regex_lib.a | |||
OBJECTS += dep/supercollider/build/external_libraries/libboost_filesystem_lib.a | |||
OBJECTS += dep/supercollider/build/external_libraries/libtlsf.a | |||
OBJECTS += dep/supercollider/build/external_libraries/libyaml.a | |||
LDFLAGS += -lpthread -lasound -ludev | |||
ifdef ARCH_LIN | |||
LDFLAGS += -lpthread -lasound -ludev | |||
else | |||
LDFLAGS += -lpthread | |||
endif | |||
$(supercollider): | |||
cd dep && git clone "https://github.com/supercollider/supercollider" --branch $(SUPERCOLLIDER_BRANCH) --depth 1 | |||
cd dep/supercollider && git checkout 84b14d10d49edce6dd8303045a884fb7f2bc92e8 | |||
cd dep/supercollider && git checkout c64c5244c5e7bbcb26a829e9cf72d249a529c213 | |||
cd dep/supercollider && git submodule update --depth 1 --init -- $(SUPERCOLLIDER_SUBMODULES) | |||
cd dep/supercollider && mkdir build | |||
cd dep/supercollider/build && $(CMAKE) .. $(SUPERCOLLIDER_CMAKE_FLAGS) | |||
@@ -195,8 +229,8 @@ SOURCES += src/VultEngine.cpp | |||
vult := dep/vult/vultc.h | |||
$(vult): | |||
cd dep && mkdir -p vult | |||
cd dep/vult && $(WGET) "https://github.com/modlfo/vult/releases/download/v0.4.12/vultc.h" | |||
$(SHA256) $(vult) 3e80f6d30defe7df2804568f0314dbb33e6bf69d53d18a804c8b8132cf5ad146 | |||
cd dep/vult && $(WGET) "https://github.com/vult-dsp/vult/releases/download/v0.4.15/vultc.h" | |||
$(SHA256) $(vult) 5c5e6c7c92caacc10dacd8e4dd5e8134b520e630562e1f928ab1332218266638 | |||
FLAGS += -Idep/vult | |||
DEPS += $(vult) | |||
endif | |||
@@ -208,7 +242,7 @@ libpd := dep/lib/libpd.a | |||
SOURCES += src/LibPDEngine.cpp | |||
OBJECTS += $(libpd) | |||
DEPS += $(libpd) | |||
FLAGS += -Idep/include/libpd -DHAVE_LIBDL | |||
FLAGS += -Idep/include/libpd -DHAVE_LIBDL -DPDINSTANCE -DPDTHREADS | |||
ifdef ARCH_WIN | |||
# PD_INTERNAL leaves the function declarations for libpd unchanged | |||
@@ -223,8 +257,8 @@ endif | |||
$(libpd): | |||
cd dep && git clone "https://github.com/libpd/libpd.git" --recursive | |||
cd dep/libpd && git checkout 5772a612527f06597d44d195843307ad0e3578fe | |||
cd dep/libpd && git checkout e3980d2fe45ef9eaaec1d45e4d68637eaf76a8b1 | |||
ifdef ARCH_MAC | |||
# libpd's Makefile is handmade, and it doesn't honor CFLAGS and LDFLAGS environments. | |||
# So in order for Mac 10.15 (for example) to make a build that works on Mac 10.7+, we have to manually add DEP_MAC_SDK_FLAGS to CFLAGS and LDFLAGS. | |||
@@ -219,5 +219,5 @@ struct DuktapeEngine : ScriptEngine { | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<DuktapeEngine>("js"); | |||
addScriptEngine<DuktapeEngine>(".js"); | |||
} |
@@ -29,6 +29,10 @@ | |||
#include <vector> | |||
#include <algorithm> | |||
#include <functional> | |||
#if defined ARCH_WIN | |||
#include <fileapi.h> | |||
#include <windef.h> | |||
#endif | |||
#pragma GCC diagnostic push | |||
#ifndef __clang__ | |||
@@ -250,7 +254,7 @@ public: | |||
std::string temp_cache = "/tmp/VCVPrototype_" + generateSHA1(script); | |||
#elif defined ARCH_WIN | |||
char buf[MAX_PATH + 1] = {0}; | |||
GetTempPath(sizeof(buf), buf); | |||
GetTempPathA(sizeof(buf), buf); | |||
std::string temp_cache = std::string(buf) + "/VCVPrototype_" + generateSHA1(script); | |||
#endif | |||
std::string error_msg; | |||
@@ -369,5 +373,5 @@ private: | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<FaustEngine>("dsp"); | |||
addScriptEngine<FaustEngine>(".dsp"); | |||
} |
@@ -331,5 +331,5 @@ void LibPDEngine::sendInitialStates(const ProcessBlock* block) { | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<LibPDEngine>("pd"); | |||
addScriptEngine<LibPDEngine>(".pd"); | |||
} |
@@ -1,5 +1,5 @@ | |||
#include "ScriptEngine.hpp" | |||
#include <luajit-2.0/lua.hpp> | |||
#include <luajit-2.1/lua.hpp> | |||
struct LuaJITEngine : ScriptEngine { | |||
@@ -246,5 +246,5 @@ struct LuaJITEngine : ScriptEngine { | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<LuaJITEngine>("lua"); | |||
addScriptEngine<LuaJITEngine>(".lua"); | |||
} |
@@ -334,7 +334,7 @@ struct Prototype : Module { | |||
std::string extension = system::getExtension(path); | |||
scriptEngine = createScriptEngine(extension); | |||
if (!scriptEngine) { | |||
message = string::f("No engine for .%s extension", extension.c_str()); | |||
message = string::f("No engine for %s extension", extension.c_str()); | |||
return; | |||
} | |||
scriptEngine->module = this; | |||
@@ -406,13 +406,13 @@ struct Prototype : Module { | |||
} | |||
void newScriptDialog() { | |||
std::string ext = "js"; | |||
std::string ext = ".js"; | |||
// Get current extension if a script is currently loaded | |||
if (!path.empty()) { | |||
ext = system::getExtension(path); | |||
} | |||
std::string dir = asset::plugin(pluginInstance, "examples"); | |||
std::string filename = "Untitled." + ext; | |||
std::string filename = "Untitled" + ext; | |||
char* newPathC = osdialog_file(OSDIALOG_SAVE, dir.c_str(), filename.c_str(), NULL); | |||
if (!newPathC) { | |||
return; | |||
@@ -436,7 +436,7 @@ struct Prototype : Module { | |||
} | |||
// Copy template to new script | |||
std::string templatePath = asset::plugin(pluginInstance, "examples/template." + ext); | |||
std::string templatePath = asset::plugin(pluginInstance, "examples/template" + ext); | |||
{ | |||
std::ifstream templateFile(templatePath, std::ios::binary); | |||
std::ofstream newFile(newPath, std::ios::binary); | |||
@@ -468,7 +468,7 @@ struct Prototype : Module { | |||
std::string ext = system::getExtension(path); | |||
std::string dir = asset::plugin(pluginInstance, "examples"); | |||
std::string filename = "Untitled." + ext; | |||
std::string filename = "Untitled" + ext; | |||
char* newPathC = osdialog_file(OSDIALOG_SAVE, dir.c_str(), filename.c_str(), NULL); | |||
if (!newPathC) { | |||
return; | |||
@@ -478,7 +478,7 @@ struct Prototype : Module { | |||
// Add extension if user didn't specify one | |||
std::string newExt = system::getExtension(newPath); | |||
if (newExt == "") | |||
newPath += "." + ext; | |||
newPath += ext; | |||
// Write and close file | |||
{ | |||
@@ -504,7 +504,7 @@ struct Prototype : Module { | |||
(void) std::system(command.c_str()); | |||
#elif defined ARCH_WIN | |||
std::string command = editorPath + " \"" + path + "\""; | |||
std::wstring commandW = string::toWstring(command); | |||
std::wstring commandW = string::UTF8toUTF16(command); | |||
STARTUPINFOW startupInfo; | |||
std::memset(&startupInfo, 0, sizeof(startupInfo)); | |||
startupInfo.cb = sizeof(startupInfo); | |||
@@ -594,7 +594,7 @@ struct Prototype : Module { | |||
if (path == "") | |||
return ""; | |||
// HACK check if extension is .pd | |||
if (system::getExtension(path) == "pd") | |||
if (system::getExtension(path) == ".pd") | |||
return settingsPdEditorPath; | |||
return settingsEditorPath; | |||
} | |||
@@ -252,5 +252,5 @@ struct PythonEngine : ScriptEngine { | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<PythonEngine>("py"); | |||
addScriptEngine<PythonEngine>(".py"); | |||
} |
@@ -329,5 +329,5 @@ struct QuickJSEngine : ScriptEngine { | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<QuickJSEngine>("js"); | |||
addScriptEngine<QuickJSEngine>(".js"); | |||
} |
@@ -405,6 +405,6 @@ bool SC_VcvPrototypeClient::copyArrayOfFloatArrays(const PyrSlot& inSlot, const | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<SuperColliderEngine>("sc"); | |||
addScriptEngine<SuperColliderEngine>("scd"); | |||
addScriptEngine<SuperColliderEngine>(".sc"); | |||
addScriptEngine<SuperColliderEngine>(".scd"); | |||
} |
@@ -11,7 +11,7 @@ | |||
// Special version of createScriptEngine that only creates Lua engines | |||
ScriptEngine* createLuaEngine() { | |||
auto it = scriptEngineFactories.find("lua"); | |||
auto it = scriptEngineFactories.find(".lua"); | |||
if (it == scriptEngineFactories.end()) | |||
return NULL; | |||
return it->second->createScriptEngine(); | |||
@@ -26,7 +26,10 @@ struct VultEngine : ScriptEngine { | |||
JSRuntime* rt = NULL; | |||
JSContext* ctx = NULL; | |||
bool js_failure; | |||
VultEngine() { | |||
js_failure = false; | |||
rt = JS_NewRuntime(); | |||
// Create QuickJS context | |||
ctx = JS_NewContext(rt); | |||
@@ -41,9 +44,11 @@ struct VultEngine : ScriptEngine { | |||
JSValue val = | |||
JS_Eval(ctx, (const char*)vultc_h, vultc_h_size, "vultc.js", 0); | |||
if (JS_IsException(val)) { | |||
display("Error loading the Vult compiler"); | |||
WARN("Error loading the Vult compiler"); | |||
WARN("%s", JS_ToCString(ctx, JS_ToString(ctx,val))); | |||
JS_FreeValue(ctx, val); | |||
JS_FreeValue(ctx, global_obj); | |||
js_failure = true; | |||
return; | |||
} | |||
} | |||
@@ -62,6 +67,11 @@ struct VultEngine : ScriptEngine { | |||
} | |||
int run(const std::string& path, const std::string& script) override { | |||
if (js_failure) { | |||
display("Error loading the Vult compiler"); | |||
return -1; | |||
} | |||
display("Loading..."); | |||
JSValue global_obj = JS_GetGlobalObject(ctx); | |||
@@ -119,7 +129,7 @@ struct VultEngine : ScriptEngine { | |||
JSValue luacode = JS_GetPropertyStr(ctx, first, "code"); | |||
std::string luacode_str(JS_ToCString(ctx, luacode)); | |||
//WARN("Generated Code: %s", luacode_str.c_str()); | |||
WARN("Generated Code: %s", luacode_str.c_str()); | |||
luaEngine = createLuaEngine(); | |||
@@ -142,13 +152,13 @@ struct VultEngine : ScriptEngine { | |||
} | |||
int process() override { | |||
if (!luaEngine) | |||
return -1; | |||
if (!luaEngine || js_failure) | |||
return -1; | |||
return luaEngine->process(); | |||
} | |||
}; | |||
__attribute__((constructor(1000))) | |||
static void constructor() { | |||
addScriptEngine<VultEngine>("vult"); | |||
addScriptEngine<VultEngine>(".vult"); | |||
} |