diff --git a/Makefile.mk b/Makefile.mk new file mode 100644 index 0000000..6759e24 --- /dev/null +++ b/Makefile.mk @@ -0,0 +1,150 @@ +#!/usr/bin/make -f +# Makefile for DISTRHO Plugins # +# ---------------------------- # +# Created by falkTX +# + +AR ?= ar +CC ?= gcc +CXX ?= g++ + +# -------------------------------------------------------------- +# Fallback to Linux if no other OS defined + +ifneq ($(HAIKU),true) +ifneq ($(MACOS),true) +ifneq ($(WIN32),true) +LINUX=true +endif +endif +endif + +# -------------------------------------------------------------- +# Set build and link flags + +BASE_FLAGS = -Wall -Wextra -pipe +BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -msse2 -fdata-sections -ffunction-sections + +ifneq ($(MACOS),true) +# MacOS doesn't support this +BASE_OPTS += -mfpmath=sse +endif + +ifeq ($(MACOS),true) +# MacOS linker flags +LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs +else +# Common linker flags +LINK_OPTS = -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed +ifneq ($(SKIP_STRIPPING),true) +LINK_OPTS += -Wl,--strip-all +endif +endif + +ifeq ($(RASPPI),true) +# Raspberry-Pi optimization flags +BASE_OPTS = -O2 -ffast-math -march=armv6 -mfpu=vfp -mfloat-abi=hard +LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all +endif + +ifeq ($(PANDORA),true) +# OpenPandora optimization flags +BASE_OPTS = -O2 -ffast-math -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp +LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all +endif + +ifeq ($(NOOPT),true) +# No optimization flags +BASE_OPTS = -O2 -ffast-math -fdata-sections -ffunction-sections +endif + +ifneq ($(WIN32),true) +# not needed for Windows +BASE_FLAGS += -fPIC -DPIC +endif + +ifeq ($(DEBUG),true) +BASE_FLAGS += -DDEBUG -O0 -g +LINK_OPTS = +else +BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden +CXXFLAGS += -fvisibility-inlines-hidden +endif + +BUILD_C_FLAGS = $(BASE_FLAGS) -std=c99 -std=gnu99 $(CFLAGS) +BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x -std=gnu++0x $(CXXFLAGS) $(CPPFLAGS) +LINK_FLAGS = $(LINK_OPTS) -Wl,--no-undefined $(LDFLAGS) + +ifeq ($(MACOS),true) +# No C++11 support +BUILD_CXX_FLAGS = $(BASE_FLAGS) $(CXXFLAGS) $(CPPFLAGS) +LINK_FLAGS = $(LINK_OPTS) $(LDFLAGS) +endif + +# -------------------------------------------------------------- +# Check for optional libs + +ifeq ($(LINUX),true) +HAVE_DGL = $(shell pkg-config --exists gl x11 && echo true) +HAVE_JACK = $(shell pkg-config --exists jack && echo true) +HAVE_LIBLO = $(shell pkg-config --exists liblo && echo true) +endif + +ifeq ($(MACOS),true) +HAVE_DGL = true +endif + +ifeq ($(WIN32),true) +HAVE_DGL = true +endif + +# -------------------------------------------------------------- +# Set libs stuff + +ifeq ($(HAVE_DGL),true) + +ifeq ($(LINUX),true) +DGL_FLAGS = $(shell pkg-config --cflags gl x11) +DGL_LIBS = $(shell pkg-config --libs gl x11) +endif + +ifeq ($(MACOS),true) +DGL_LIBS = -framework OpenGL -framework Cocoa +endif + +ifeq ($(WIN32),true) +DGL_LIBS = -lopengl32 -lgdi32 +endif + +endif # HAVE_DGL + +# -------------------------------------------------------------- +# Set app extension + +ifeq ($(WIN32),true) +APP_EXT = .exe +endif + +# -------------------------------------------------------------- +# Set shared lib extension + +LIB_EXT = .so + +ifeq ($(MACOS),true) +LIB_EXT = .dylib +endif + +ifeq ($(WIN32),true) +LIB_EXT = .dll +endif + +# -------------------------------------------------------------- +# Set shared library CLI arg + +SHARED = -shared + +ifeq ($(MACOS),true) +SHARED = -dynamiclib +endif + +# -------------------------------------------------------------- diff --git a/README.md b/README.md index a93f66d..9a97744 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,5 @@ An experiment with Max generated code and DPF. Based on https://github.com/Cycling74/gen-plugin-export. + +If you want to build your own plugins use https://github.com/moddevices/max-gen-skeleton instead, which provides a base skeleton and scripts to facilitate the creating of such plugins. diff --git a/plugins/Makefile.mk b/plugins/Makefile.mk new file mode 100644 index 0000000..1ff40d5 --- /dev/null +++ b/plugins/Makefile.mk @@ -0,0 +1,164 @@ +#!/usr/bin/make -f +# Makefile for DISTRHO Plugins # +# ---------------------------- # +# Created by falkTX +# + +# NAME, OBJS_DSP and OBJS_UI have been defined before + +include ../../Makefile.mk + +ifeq ($(OBJS_UI),) +HAVE_DGL = false +endif + +# -------------------------------------------------------------- +# Set which plugin formats to build + +BUILD_JACK = true +ifeq ($(LINUX),true) +BUILD_LADSPA = true +BUILD_DSSI = true +endif +BUILD_LV2 = true +BUILD_VST2 = true + +# -------------------------------------------------------------- +# Basic setup + +TARGET_DIR = ../../bin + +BUILD_C_FLAGS += -I. +BUILD_CXX_FLAGS += -I. -I../common -I../common/gen_dsp -I../../dpf/distrho -I../../dpf/dgl -Wno-unused-parameter + +ifeq ($(HAVE_DGL),true) +BASE_FLAGS += -DHAVE_DGL +endif + +ifeq ($(HAVE_JACK),true) +BASE_FLAGS += -DHAVE_JACK +endif + +ifeq ($(HAVE_LIBLO),true) +BASE_FLAGS += -DHAVE_LIBLO +endif + +# -------------------------------------------------------------- +# Set plugin binary file targets + +jack = $(TARGET_DIR)/$(NAME)$(APP_EXT) +ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT) +dssi_dsp = $(TARGET_DIR)/$(NAME)-dssi$(LIB_EXT) +dssi_ui = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui$(APP_EXT) +lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME)$(LIB_EXT) +lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp$(LIB_EXT) +lv2_ui = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui$(LIB_EXT) +vst = $(TARGET_DIR)/$(NAME)-vst$(LIB_EXT) + +# -------------------------------------------------------------- +# Set distrho code files + +DISTRHO_PLUGIN_FILES = ../../dpf/distrho/DistrhoPluginMain.cpp + +ifeq ($(HAVE_DGL),true) +DISTRHO_UI_FILES = ../../dpf/distrho/DistrhoUIMain.cpp ../../dpf/libdgl.a +endif + +# -------------------------------------------------------------- +# Handle plugins without UI + +ifneq ($(HAVE_DGL),true) +dssi_ui = +lv2_ui = +DISTRHO_UI_FILES = +DGL_LIBS = +OBJS_UI = +endif + +# -------------------------------------------------------------- +# all needs to be first + +all: + +# -------------------------------------------------------------- +# Common + +%.c.o: %.c + $(CC) $< $(BUILD_C_FLAGS) -MD -MP -c -o $@ + +%.cpp.o: %.cpp + $(CXX) $< $(BUILD_CXX_FLAGS) -MD -MP -c -o $@ + +clean: + rm -f *.d *.o + rm -rf $(TARGET_DIR)/$(NAME) $(TARGET_DIR)/$(NAME)-* $(TARGET_DIR)/$(NAME).lv2/ + +# -------------------------------------------------------------- +# JACK + +jack: $(jack) + +$(jack): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell pkg-config --cflags --libs jack) -DDISTRHO_PLUGIN_TARGET_JACK -o $@ + +# -------------------------------------------------------------- +# LADSPA + +ladspa: $(ladspa_dsp) + +$(ladspa_dsp): $(OBJS_DSP) $(DISTRHO_PLUGIN_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_LADSPA -o $@ + +# -------------------------------------------------------------- +# DSSI + +dssi: $(dssi_dsp) $(dssi_ui) +dssi_dsp: $(dssi_dsp) +dssi_ui: $(dssi_ui) + +$(dssi_dsp): $(OBJS_DSP) $(DISTRHO_PLUGIN_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_DSSI -o $@ + +$(dssi_ui): $(OBJS_UI) $(DISTRHO_UI_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell pkg-config --cflags --libs liblo) -DDISTRHO_PLUGIN_TARGET_DSSI -o $@ + +# -------------------------------------------------------------- +# LV2 + +lv2_one: $(lv2) +lv2_dsp: $(lv2_dsp) +lv2_sep: $(lv2_dsp) $(lv2_ui) + +$(lv2): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ + +$(lv2_dsp): $(OBJS_DSP) $(DISTRHO_PLUGIN_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ + +$(lv2_ui): $(OBJS_UI) $(DISTRHO_UI_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ + +# -------------------------------------------------------------- +# VST + +vst: $(vst) + +$(vst): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) + mkdir -p $(shell dirname $@) + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_VST -o $@ + +# -------------------------------------------------------------- + +-include $(OBJS_DSP:%.o=%.d) +ifeq ($(HAVE_DGL),true) +-include $(OBJS_UI:%.o=%.d) +endif + +# -------------------------------------------------------------- diff --git a/plugins/bitcrush/Makefile b/plugins/bitcrush/Makefile index ffa5d81..731bb78 100644 --- a/plugins/bitcrush/Makefile +++ b/plugins/bitcrush/Makefile @@ -28,13 +28,27 @@ BUILD_CXX_FLAGS += -I../common -I../common/gen_dsp # -------------------------------------------------------------- # Enable all possible plugin types +ifeq ($(BUILD_JACK),true) ifeq ($(HAVE_JACK),true) TARGETS += jack endif +endif +<<<<<<< HEAD +TARGETS += ladspa +======= +ifeq ($(BUILD_LADSPA),true) TARGETS += ladspa +endif + +ifeq ($(BUILD_LV2),true) +>>>>>>> 32c2796b78396662fcc5bfce3bd6a02e8958a44a TARGETS += lv2_dsp +endif + +ifeq ($(BUILD_VST2),true) TARGETS += vst +endif all: $(TARGETS) diff --git a/plugins/freeverb/Makefile b/plugins/freeverb/Makefile index 4d3830d..b406bdb 100644 --- a/plugins/freeverb/Makefile +++ b/plugins/freeverb/Makefile @@ -28,13 +28,27 @@ BUILD_CXX_FLAGS += -I../common -I../common/gen_dsp # -------------------------------------------------------------- # Enable all possible plugin types +ifeq ($(BUILD_JACK),true) ifeq ($(HAVE_JACK),true) TARGETS += jack endif +endif +<<<<<<< HEAD +TARGETS += ladspa +======= +ifeq ($(BUILD_LADSPA),true) TARGETS += ladspa +endif + +ifeq ($(BUILD_LV2),true) +>>>>>>> 32c2796b78396662fcc5bfce3bd6a02e8958a44a TARGETS += lv2_dsp +endif + +ifeq ($(BUILD_VST2),true) TARGETS += vst +endif all: $(TARGETS) diff --git a/plugins/gigaverb/Makefile b/plugins/gigaverb/Makefile index 5cdf142..b32abc8 100644 --- a/plugins/gigaverb/Makefile +++ b/plugins/gigaverb/Makefile @@ -28,13 +28,27 @@ BUILD_CXX_FLAGS += -I../common -I../common/gen_dsp # -------------------------------------------------------------- # Enable all possible plugin types +ifeq ($(BUILD_JACK),true) ifeq ($(HAVE_JACK),true) TARGETS += jack endif +endif +<<<<<<< HEAD +TARGETS += ladspa +======= +ifeq ($(BUILD_LADSPA),true) TARGETS += ladspa +endif + +ifeq ($(BUILD_LV2),true) +>>>>>>> 32c2796b78396662fcc5bfce3bd6a02e8958a44a TARGETS += lv2_dsp +endif + +ifeq ($(BUILD_VST2),true) TARGETS += vst +endif all: $(TARGETS) diff --git a/plugins/pitchshift/Makefile b/plugins/pitchshift/Makefile index 65090c2..41d1537 100644 --- a/plugins/pitchshift/Makefile +++ b/plugins/pitchshift/Makefile @@ -28,13 +28,27 @@ BUILD_CXX_FLAGS += -I../common -I../common/gen_dsp # -------------------------------------------------------------- # Enable all possible plugin types +ifeq ($(BUILD_JACK),true) ifeq ($(HAVE_JACK),true) TARGETS += jack endif +endif +<<<<<<< HEAD +TARGETS += ladspa +======= +ifeq ($(BUILD_LADSPA),true) TARGETS += ladspa +endif + +ifeq ($(BUILD_LV2),true) +>>>>>>> 32c2796b78396662fcc5bfce3bd6a02e8958a44a TARGETS += lv2_dsp +endif + +ifeq ($(BUILD_VST2),true) TARGETS += vst +endif all: $(TARGETS)