#!/usr/bin/make -f
# Makefile for carla plugin exports #
# --------------------------------- #
# Created by falkTX
#

include ../Makefile.mk

BUILD_CXX_FLAGS += -I../backend -I../includes -I../utils -isystem ../modules

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

ifeq ($(HAVE_AF_DEPS),true)
BUILD_CXX_FLAGS += -DWANT_AUDIOFILE
endif

ifeq ($(HAVE_MF_DEPS),true)
BUILD_CXX_FLAGS += -DWANT_MIDIFILE
endif

ifeq ($(HAVE_ZYN_DEPS),true)
BUILD_CXX_FLAGS += -DWANT_ZYNADDSUBFX
endif

# --------------------------------------------------------------
# Common

LINK_FLAGS += $(LIBLO_LIBS)
LINK_FLAGS += $(QTCORE_LIBS)
LINK_FLAGS += $(QTXML_LIBS)
LINK_FLAGS += $(RTMEMPOOL_LIBS)

# --------------------------------------------------------------
# Engine

LINK_FLAGS += $(JACKBRIDGE_LIBS)

# --------------------------------------------------------------
# Plugin

ifeq ($(CARLA_PLUGIN_SUPPORT),true)
LINK_FLAGS += $(LILV_LIBS)
endif

ifeq ($(HAVE_FLUIDSYNTH),true)
LINK_FLAGS += $(FLUIDSYNTH_LIBS)
endif

ifeq ($(HAVE_LINUXSAMPLER),true)
LINK_FLAGS += $(LINUXSAMPLER_LIBS)
endif

# --------------------------------------------------------------
# Coomon

ifeq ($(HAVE_DGL),true)
LINK_FLAGS += $(DGL_LIBS)
endif

ifeq ($(HAVE_JUCE),true)
LINK_FLAGS += $(JUCE_AUDIO_BASICS_LIBS)
LINK_FLAGS += $(JUCE_CORE_LIBS)
LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS)
LINK_FLAGS += $(JUCE_EVENTS_LIBS)
LINK_FLAGS += $(JUCE_GRAPHICS_LIBS)
LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS)
LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS)
endif

# --------------------------------------------------------------
# Native

LINK_FLAGS += $(NATIVE_PLUGINS_LIBS)

# --------------------------------------------------------------
# Libs

LIBS += ../backend/carla_engine_plugin.a
LIBS += ../backend/carla_plugin.a

LIBS += ../modules/native-plugins.a
LIBS += ../modules/jackbridge.a
LIBS += ../modules/rtmempool.a

ifeq ($(HAVE_AF_DEPS),true)
LIBS += ../modules/audio_decoder.a
endif

ifeq ($(HAVE_DGL),true)
LIBS += ../modules/dgl.a
endif

ifeq ($(HAVE_JUCE),true)
LIBS += ../modules/juce_audio_basics.a
LIBS += ../modules/juce_audio_processors.a
LIBS += ../modules/juce_core.a
LIBS += ../modules/juce_data_structures.a
LIBS += ../modules/juce_events.a
LIBS += ../modules/juce_graphics.a
LIBS += ../modules/juce_gui_basics.a
LIBS += ../modules/juce_gui_extra.a
endif

ifeq ($(CARLA_PLUGIN_SUPPORT),true)
LIBS += ../modules/lilv.a
endif

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

ifeq ($(WIN32),true)
TARGETS = carla-native-lv2-export.exe carla-native.lv2/carla-native.dll
else
ifeq ($(MACOS),true)
TARGETS = carla-native-lv2-export carla-native.lv2/carla-native.dylib
else
TARGETS = carla-native-lv2-export carla-native.lv2/carla-native.so
endif
endif

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

all: $(TARGETS)

clean:
	$(RM) $(TARGETS) *.o
	$(RM) carla-native.lv2/*.*

debug:
	$(MAKE) DEBUG=true

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

carla-native-base.cpp.o: carla-native-base.cpp ../modules/CarlaNative.h
	$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

carla-native-lv2.cpp.o: carla-native-lv2.cpp carla-native-base.cpp ../modules/CarlaNative.h
	$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

carla-native-lv2-export.cpp.o: carla-native-lv2-export.cpp carla-native-base.cpp ../modules/CarlaNative.h
	$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

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

carla-native-lv2-export: carla-native-lv2-export.cpp.o $(LIBS)
ifneq ($(MACOS),true)
	$(CXX) $< -Wl,--start-group $(LIBS) -Wl,--end-group $(LINK_FLAGS) -o $@
else
	$(CXX) $< $(LIBS) $(LINK_FLAGS) -o $@
endif
	./carla-native-lv2-export

carla-native-lv2-export.exe: carla-native-lv2-export.cpp.o $(LIBS)
	$(CXX) $< -Wl,--start-group $(LIBS) -Wl,--end-group $(LINK_FLAGS) -o $@
	./carla-native-lv2-export.exe

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

carla-native.lv2/carla-native.dll: carla-native-lv2.cpp.o $(LIBS)
	$(CXX) $< -Wl,--start-group $(LIBS) -Wl,--end-group -shared $(LINK_FLAGS) -o $@

carla-native.lv2/carla-native.dylib: carla-native-lv2.cpp.o $(LIBS)
	$(CXX) $< $(LIBS) -dynamiclib $(LINK_FLAGS) -o $@

carla-native.lv2/carla-native.so: carla-native-lv2.cpp.o $(LIBS)
	$(CXX) $< -Wl,--start-group $(LIBS) -Wl,--end-group -shared $(LINK_FLAGS) -o $@

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

.FORCE:
.PHONY: .FORCE

../backend/carla_engine_plugin.a: .FORCE
	$(MAKE) -C ../backend/engine ../carla_engine_plugin.a

../backend/carla_plugin.a: .FORCE
	$(MAKE) -C ../backend/plugin ../carla_plugin.a

../modules/%.a: .FORCE
	$(MAKE) -C ../modules $*

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