Browse Source

Working wine-native bridge, needs testing

Signed-off-by: falkTX <falktx@gmail.com>
tags/v2.1-alpha1-winvst
falkTX 6 years ago
parent
commit
bbb82b8530
Signed by: falkTX <falktx@gmail.com> GPG Key ID: 2D3445A829213837
3 changed files with 146 additions and 38 deletions
  1. +5
    -0
      source/backend/engine/CarlaEngine.cpp
  2. +65
    -38
      source/plugin/Makefile
  3. +76
    -0
      source/plugin/carla-vst-export-bridged.cpp

+ 5
- 0
source/backend/engine/CarlaEngine.cpp View File

@@ -2075,6 +2075,11 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc)
// check old stuff, unhandled now
if (tag == "AU_PATH" || tag == "VST3_PATH" || tag == "GIG_PATH")
continue;
// ignored tags
if (tag == "LADSPA_PATH" || tag == "DSSI_PATH" || tag == "LV2_PATH" || tag == "VST2_PATH")
continue;
if (tag == "SF2_PATH" || tag == "SFZ_PATH")
continue;

// hmm something is wrong..
carla_stderr2("CarlaEngine::loadProjectInternal() - Unhandled option '%s'", tag.toRawUTF8());


+ 65
- 38
source/plugin/Makefile View File

@@ -62,16 +62,17 @@ endif
# ---------------------------------------------------------------------------------------------------------------------
# Link flags

LINK_FLAGS += $(JACKBRIDGE_LIBS)
LINK_FLAGS += $(LILV_LIBS)
LINK_FLAGS += $(RTMEMPOOL_LIBS)
LINK_FLAGS += $(WATER_LIBS)
LINK_FLAGS += $(NATIVE_PLUGINS_LIBS)

LINK_FLAGS += $(FLUIDSYNTH_LIBS)
LINK_FLAGS += $(LIBLO_LIBS)
LINK_FLAGS += $(MAGIC_LIBS)
LINK_FLAGS += $(X11_LIBS)
NATIVE_LINK_FLAGS = $(LINK_FLAGS)
NATIVE_LINK_FLAGS += $(JACKBRIDGE_LIBS)
NATIVE_LINK_FLAGS += $(LILV_LIBS)
NATIVE_LINK_FLAGS += $(RTMEMPOOL_LIBS)
NATIVE_LINK_FLAGS += $(WATER_LIBS)
NATIVE_LINK_FLAGS += $(NATIVE_PLUGINS_LIBS)

NATIVE_LINK_FLAGS += $(FLUIDSYNTH_LIBS)
NATIVE_LINK_FLAGS += $(LIBLO_LIBS)
NATIVE_LINK_FLAGS += $(MAGIC_LIBS)
NATIVE_LINK_FLAGS += $(X11_LIBS)

ifeq ($(MACOS),true)
SYMBOLS_NATIVE = -Wl,-exported_symbol,_carla_get_native_rack_plugin
@@ -96,7 +97,7 @@ LIBS_wine += $(MODULEDIR)/water.files.a

WINE_LINK_FLAGS = $(LINK_FLAGS)
WINE_LINK_FLAGS += -L$(BINDIR) -lcarla_native-plugin
WINE_LINK_FLAGS += -lstdc++ -lopengl32 -lgdi32
WINE_LINK_FLAGS += -lstdc++ -lopengl32 -lgdi32 -ldl
WINE_LINK_FLAGS += -Wl,-rpath,/usr/local/lib/carla
WINE_LINK_FLAGS += -Wl,-rpath,/usr/lib/carla

@@ -137,8 +138,10 @@ endif

all: $(TARGETS)

ifneq ($(WIN32),true)
wine: $(BINDIR)/CarlaVstShell.dll $(BINDIR)/CarlaVstFXShell.dll
ifeq ($(WIN32),true)
wine: $(BINDIR)/CarlaVstShellBridged.dll $(BINDIR)/CarlaVstFxShellBridged.dll
else
wine: $(BINDIR)/CarlaVstShellBridged.dll.so $(BINDIR)/CarlaVstFxShellBridged.dll.so
endif

# ---------------------------------------------------------------------------------------------------------------------
@@ -156,78 +159,90 @@ debug:
$(BINDIR)/carla-native-plugin$(APP_EXT): $(OBJDIR)/carla-native-plugin.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking carla-native-plugin$(APP_EXT)"
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(LINK_FLAGS) -o $@
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/libcarla_native-plugin$(LIB_EXT): $(OBJDIR)/carla-native-plugin.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking libcarla-native-plugin$(LIB_EXT)"
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(SYMBOLS_NATIVE) $(LINK_FLAGS) -o $@
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(SYMBOLS_NATIVE) $(NATIVE_LINK_FLAGS) -o $@

# ---------------------------------------------------------------------------------------------------------------------

$(BINDIR)/carla.lv2/carla$(LIB_EXT): $(OBJDIR)/carla-lv2.cpp.o
-@mkdir -p $(BINDIR)/carla.lv2
@echo "Linking carla.lv2/carla$(LIB_EXT)"
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(SYMBOLS_LV2) $(LINK_FLAGS) -o $@
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(SYMBOLS_LV2) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/carla.lv2/carla-ui$(LIB_EXT): $(OBJDIR)/carla-lv2-ui.cpp.o $(LIBS_ui)
-@mkdir -p $(BINDIR)/carla.lv2
@echo "Linking carla.lv2/carla-ui$(LIB_EXT)"
@$(CXX) $< $(LIBS_START) $(LIBS_ui) $(LIBS_END) $(SHARED) $(SYMBOLS_LV2_UI) $(LINK_FLAGS) -o $@
@$(CXX) $< $(LIBS_START) $(LIBS_ui) $(LIBS_END) $(SHARED) $(SYMBOLS_LV2_UI) $(NATIVE_LINK_FLAGS) -o $@

# ---------------------------------------------------------------------------------------------------------------------

$(BINDIR)/CarlaRack$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.rack-syn.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaRack$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaRackFX$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.rack-fx.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaRackFX$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaPatchbay$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.patchbay-syn.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaPatchbay$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaPatchbay16$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.patchbay-syn16.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaPatchbay16$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaPatchbay32$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.patchbay-syn32.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaPatchbay32$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaPatchbayFX$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.patchbay-fx.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaPatchbayFX$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

ifneq ($(WIN32),true)
$(BINDIR)/CarlaVstShell.dll: $(OBJDIR)/carla-vst.cpp.shell.o $(OBJDIR)/carla-vst-export.cpp.dll.o carla-vst-export.def
-@mkdir -p $(BINDIR)
@echo "Linking CarlaRackVstShell.dll"
@$(WINECC) $^ $(LIBS_START) $(LIBS_wine) $(LIBS_END) $(SHARED) $(WINE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaVstFXShell.dll: $(OBJDIR)/carla-vst.cpp.shellfx.o $(OBJDIR)/carla-vst-export.cpp.dll.o carla-vst-export.def
-@mkdir -p $(BINDIR)
@echo "Linking CarlaVstFXShell.dll"
@$(WINECC) $^ $(LIBS_START) $(LIBS_wine) $(LIBS_END) $(SHARED) $(WINE_LINK_FLAGS) -o $@
endif
# ---------------------------------------------------------------------------------------------------------------------

$(BINDIR)/CarlaVstShell$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.shell.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaVstShell$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaVstFxShell$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.shellfx.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaVstFxShell$(LIB_EXT)"
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(LINK_FLAGS) -o $@
@$(CXX) $^ $(LIBS_START) $(LIBS) $(LIBS_END) $(SHARED) $(NATIVE_LINK_FLAGS) -o $@

ifeq ($(WIN32),true)
$(BINDIR)/CarlaVstShellBridged.dll: $(OBJDIR)/carla-vst-export-bridged.cpp.synth.o carla-vst-export.def
-@mkdir -p $(BINDIR)
@echo "Linking CarlaVstShellBridged.dll"
@$(CXX) $^ $(SHARED) $(LINK_FLAGS) -o $@

$(BINDIR)/CarlaVstFxShellBridged.dll: $(OBJDIR)/carla-vst-export-bridged.cpp.fx.o carla-vst-export.def
-@mkdir -p $(BINDIR)
@echo "Linking CarlaVstFxShellBridged.dll"
@$(CXX) $^ $(SHARED) $(LINK_FLAGS) -o $@
else
$(BINDIR)/CarlaVstShellBridged.dll.so: $(OBJDIR)/carla-vst.cpp.shell.o $(OBJDIR)/carla-vst-export.cpp.dll.o carla-vst-export.def
-@mkdir -p $(BINDIR)
@echo "Linking CarlaVstShellBridged.dll.so"
@$(WINECC) $^ $(LIBS_START) $(LIBS_wine) $(LIBS_END) $(SHARED) $(WINE_LINK_FLAGS) -o $@

$(BINDIR)/CarlaVstFxShellBridged.dll.so: $(OBJDIR)/carla-vst.cpp.shellfx.o $(OBJDIR)/carla-vst-export.cpp.dll.o carla-vst-export.def
-@mkdir -p $(BINDIR)
@echo "Linking CarlaVstFxShellBridged.dll.so"
@$(WINECC) $^ $(LIBS_START) $(LIBS_wine) $(LIBS_END) $(SHARED) $(WINE_LINK_FLAGS) -o $@
endif

# ---------------------------------------------------------------------------------------------------------------------

@@ -290,6 +305,16 @@ $(OBJDIR)/carla-vst.cpp.shellfx.o: carla-vst.cpp
@echo "Compiling $< (VstShell)"
@$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_VST_SHELL=1 -DCARLA_PLUGIN_SYNTH=0 -c -o $@

$(OBJDIR)/carla-vst-export-bridged.cpp.fx.o: carla-vst-export-bridged.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $<"
@$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_PLUGIN_SYNTH=0 -c -o $@

$(OBJDIR)/carla-vst-export-bridged.cpp.synth.o: carla-vst-export-bridged.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $<"
@$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_PLUGIN_SYNTH=1 -c -o $@

$(OBJDIR)/carla-vst-export.cpp.o: carla-vst-export.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $<"
@@ -305,7 +330,7 @@ $(OBJDIR)/carla-vst-export.cpp.dll.o: carla-vst-export.cpp
$(BINDIR)/carla.lv2/manifest.ttl: $(OBJDIR)/carla-lv2-export.cpp.o
-@mkdir -p $(BINDIR)/carla.lv2
@echo "Linking carla-lv2-export$(APP_EXT)"
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(LINK_FLAGS) -o $(BINDIR)/carla-lv2-export$(APP_EXT)
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(NATIVE_LINK_FLAGS) -o $(BINDIR)/carla-lv2-export$(APP_EXT)

@echo "Generating LV2 ttl data"
ifeq ($(BUILDING_FOR_WINDOWS),true)
@@ -318,7 +343,7 @@ endif
$(BINDIR)/carla-lv2-export$(APP_EXT): $(OBJDIR)/carla-lv2-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking carla-lv2-export$(APP_EXT)"
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(LINK_FLAGS) -o $@
@$(CXX) $< $(LIBS_START) $(LIBS) $(LIBS_END) $(NATIVE_LINK_FLAGS) -o $@

$(OBJDIR)/carla-lv2-export.cpp.o: carla-lv2-export.cpp
-@mkdir -p $(OBJDIR)
@@ -338,5 +363,7 @@ $(OBJDIR)/carla-lv2-export.cpp.o: carla-lv2-export.cpp
-include $(OBJDIR)/carla-vst.cpp.shell.d
-include $(OBJDIR)/carla-vst-export.cpp.d
-include $(OBJDIR)/carla-vst-export.cpp.dll.d
-include $(OBJDIR)/carla-vst-export-bridged.cpp.fx.d
-include $(OBJDIR)/carla-vst-export-bridged.cpp.synth.d

# ---------------------------------------------------------------------------------------------------------------------

+ 76
- 0
source/plugin/carla-vst-export-bridged.cpp View File

@@ -0,0 +1,76 @@
/*
* Carla Native Plugins
* Copyright (C) 2013-2018 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#include "CarlaLibUtils.hpp"
#include "vestige/vestige.h"

#ifdef __WINE__
#error This file is not meant to be used by wine!
#endif
#ifndef CARLA_OS_WIN
#error This file is only meant to be used by mingw compilers!
#endif
#ifndef CARLA_PLUGIN_SYNTH
#error CARLA_PLUGIN_SYNTH undefined
#endif

typedef const AEffect* (__cdecl *MainCallback)(audioMasterCallback);

static HINSTANCE currentModuleHandle = nullptr;

HINSTANCE getCurrentModuleInstanceHandle() noexcept
{
if (currentModuleHandle == nullptr)
currentModuleHandle = GetModuleHandleA(nullptr);

return currentModuleHandle;
}

CARLA_EXPORT
BOOL WINAPI DllMain(HINSTANCE hInst, DWORD, LPVOID)
{
currentModuleHandle = hInst;
return 1;
}

CARLA_EXPORT __cdecl
const AEffect* VSTPluginMain(audioMasterCallback audioMaster)
{
static MainCallback sCallback = nullptr;

if (sCallback == nullptr)
{
CHAR filename[MAX_PATH + 256];
filename[0] = 0;
GetModuleFileName(getCurrentModuleInstanceHandle(), filename, MAX_PATH + 256);
strcat(filename, ".so");


carla_stdout("FILENAME: '%s'", filename);
static const lib_t lib = lib_open(filename);
if (lib == nullptr)
{
carla_stderr2("lib_open failed: %s", lib_error(filename));
return nullptr;
}

sCallback = lib_symbol<MainCallback>(lib, "VSTPluginMain");
}

CARLA_SAFE_ASSERT_RETURN(sCallback != nullptr, nullptr);
return sCallback(audioMaster);
}

Loading…
Cancel
Save