diff --git a/Makefile.base.mk b/Makefile.base.mk index 59433f83..740c24b2 100644 --- a/Makefile.base.mk +++ b/Makefile.base.mk @@ -63,6 +63,10 @@ ifneq (,$(filter arm%,$(TARGET_PROCESSOR))) CPU_ARM=true CPU_ARM_OR_AARCH64=true endif +ifneq (,$(filter arm64%,$(TARGET_PROCESSOR))) +CPU_ARM64=true +CPU_ARM_OR_AARCH64=true +endif ifneq (,$(filter aarch64%,$(TARGET_PROCESSOR))) CPU_AARCH64=true CPU_ARM_OR_AARCH64=true @@ -136,12 +140,17 @@ BASE_OPTS += -mtune=generic -msse -msse2 endif ifeq ($(CPU_ARM),true) +ifneq ($(CPU_ARM64),true) BASE_OPTS += -mfpu=neon-vfpv4 -mfloat-abi=hard endif +endif ifeq ($(MACOS),true) # MacOS linker flags LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs +ifneq ($(SKIP_STRIPPING),true) +LINK_OPTS += -Wl,-x +endif else # Common linker flags LINK_OPTS = -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed @@ -247,7 +256,7 @@ DGL_SYSTEM_LIBS += -lbe endif ifeq ($(MACOS),true) -DGL_SYSTEM_LIBS += -framework Cocoa +DGL_SYSTEM_LIBS += -framework Cocoa -framework CoreVideo endif ifeq ($(WINDOWS),true) diff --git a/Makefile.plugins.mk b/Makefile.plugins.mk index 8e4e9fa3..e7ff2dc9 100644 --- a/Makefile.plugins.mk +++ b/Makefile.plugins.mk @@ -55,6 +55,10 @@ endif OBJS_DSP = $(FILES_DSP:%=$(BUILD_DIR)/%.o) OBJS_UI = $(FILES_UI:%=$(BUILD_DIR)/%.o) +ifeq ($(MACOS),true) +OBJS_UI += $(BUILD_DIR)/DistrhoUI_macOS_$(NAME).mm.o +endif + # --------------------------------------------------------------------------------------------------------------------- # Set plugin binary file targets @@ -67,6 +71,17 @@ 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 plugin symbols to export + +ifeq ($(MACOS),true) +SYMBOLS_LADSPA = -Wl,-exported_symbol,_ladspa_descriptor +SYMBOLS_DSSI = -Wl,-exported_symbol,_ladspa_descriptor -Wl,-exported_symbol,_dssi_descriptor +SYMBOLS_LV2 = -Wl,-exported_symbol,_lv2_descriptor -Wl,-exported_symbol,_lv2_generate_ttl +SYMBOLS_LV2UI = -Wl,-exported_symbol,_lv2ui_descriptor +SYMBOLS_VST2 = -Wl,-exported_symbol,_VSTPluginMain +endif + # --------------------------------------------------------------------------------------------------------------------- # Handle UI stuff, disable UI support automatically @@ -189,6 +204,11 @@ $(BUILD_DIR)/DistrhoUIMain_%.cpp.o: $(DPF_PATH)/distrho/DistrhoUIMain.cpp @echo "Compiling DistrhoUIMain.cpp ($*)" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DDISTRHO_PLUGIN_TARGET_$* -c -o $@ +$(BUILD_DIR)/DistrhoUI_macOS_%.mm.o: $(DPF_PATH)/distrho/DistrhoUI_macOS.mm + -@mkdir -p $(BUILD_DIR) + @echo "Compiling DistrhoUI_macOS.mm ($*)" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DPUGL_NAMESPACE=$* -DGL_SILENCE_DEPRECATION -Wno-deprecated-declarations -I$(DPF_PATH)/dgl/src -I$(DPF_PATH)/dgl/src/pugl-upstream/include -ObjC++ -c -o $@ + $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o: $(DPF_PATH)/distrho/DistrhoPluginMain.cpp -@mkdir -p $(BUILD_DIR) @echo "Compiling DistrhoPluginMain.cpp (JACK)" @@ -221,7 +241,7 @@ ladspa: $(ladspa_dsp) $(ladspa_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_LADSPA.cpp.o -@mkdir -p $(shell dirname $@) @echo "Creating LADSPA plugin for $(NAME)" - $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@ + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) $(SYMBOLS_LADSPA) -o $@ # --------------------------------------------------------------------------------------------------------------------- # DSSI @@ -233,7 +253,7 @@ dssi_ui: $(dssi_ui) $(dssi_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_DSSI.cpp.o -@mkdir -p $(shell dirname $@) @echo "Creating DSSI plugin library for $(NAME)" - $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@ + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) $(SYMBOLS_DSSI) -o $@ $(dssi_ui): $(OBJS_UI) $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.o $(DGL_LIB) -@mkdir -p $(shell dirname $@) @@ -250,17 +270,17 @@ lv2_sep: $(lv2_dsp) $(lv2_ui) $(lv2): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.o $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.o $(DGL_LIB) -@mkdir -p $(shell dirname $@) @echo "Creating LV2 plugin for $(NAME)" - $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@ + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) $(SYMBOLS_LV2) $(SYMBOLS_LV2UI) -o $@ $(lv2_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.o -@mkdir -p $(shell dirname $@) @echo "Creating LV2 plugin library for $(NAME)" - $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@ + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) $(SYMBOLS_LV2) -o $@ $(lv2_ui): $(OBJS_UI) $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.o $(DGL_LIB) -@mkdir -p $(shell dirname $@) @echo "Creating LV2 plugin UI for $(NAME)" - $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@ + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) $(SYMBOLS_LV2UI) -o $@ # --------------------------------------------------------------------------------------------------------------------- # VST @@ -274,7 +294,7 @@ $(vst): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_VST.cpp.o endif -@mkdir -p $(shell dirname $@) @echo "Creating VST plugin for $(NAME)" - $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@ + $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) $(SYMBOLS_VST2) -o $@ # --------------------------------------------------------------------------------------------------------------------- diff --git a/dgl/Makefile b/dgl/Makefile index 041e1d03..170a694c 100644 --- a/dgl/Makefile +++ b/dgl/Makefile @@ -16,6 +16,10 @@ LINK_FLAGS += $(DGL_LIBS) # TODO fix these after pugl-upstream is done BUILD_CXX_FLAGS += -Wno-attributes -Wno-extra -Wno-missing-field-initializers -Wno-narrowing +ifeq ($(MACOS),true) +BUILD_CXX_FLAGS += -DGL_SILENCE_DEPRECATION -Wno-deprecated-declarations +endif + # ifneq ($(MACOS_OLD),true) # needed by sofd right now, fix later # BUILD_CXX_FLAGS += -Wno-type-limits -fpermissive diff --git a/dgl/src/pugl-upstream b/dgl/src/pugl-upstream index 13cd61b4..40915321 160000 --- a/dgl/src/pugl-upstream +++ b/dgl/src/pugl-upstream @@ -1 +1 @@ -Subproject commit 13cd61b4915d3314cc8e43e12a3baccef6650c94 +Subproject commit 4091532180ee74ebedbb7690c225a363c0ebe142 diff --git a/dgl/src/pugl.cpp b/dgl/src/pugl.cpp index 7372b830..ac2013d2 100644 --- a/dgl/src/pugl.cpp +++ b/dgl/src/pugl.cpp @@ -89,18 +89,21 @@ # endif #endif +#ifndef DISTRHO_OS_MAC START_NAMESPACE_DGL +#endif // -------------------------------------------------------------------------------------------------------------------- -#define PUGL_DISABLE_DEPRECATED - #if defined(DISTRHO_OS_HAIKU) #elif defined(DISTRHO_OS_MAC) -/* -# define PuglWindow DISTRHO_JOIN_MACRO(PuglWindow, DGL_NAMESPACE) -# define PuglOpenGLView DISTRHO_JOIN_MACRO(PuglOpenGLView, DGL_NAMESPACE) -*/ +# ifndef DISTRHO_MACOS_NAMESPACE_MACRO +# define DISTRHO_MACOS_NAMESPACE_MACRO_HELPER(NS, SEP, INTERFACE) NS ## SEP ## INTERFACE +# define DISTRHO_MACOS_NAMESPACE_MACRO(NS, INTERFACE) DISTRHO_MACOS_NAMESPACE_MACRO_HELPER(NS, _, INTERFACE) +# define PuglStubView DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PuglStubView) +# define PuglWrapperView DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PuglWrapperView) +# define PuglWindow DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PuglWindow) +# endif # import "pugl-upstream/src/mac.m" # import "pugl-upstream/src/mac_stub.m" # ifdef DGL_CAIRO @@ -207,6 +210,7 @@ PuglStatus puglSetGeometryConstraints(PuglView* const view, const uint width, co #if defined(DISTRHO_OS_HAIKU) // nothing? #elif defined(DISTRHO_OS_MAC) + /* if (view->impl->window) { [view->impl->window setContentMinSize:sizePoints(view, view->minWidth, view->minHeight)]; @@ -214,6 +218,9 @@ PuglStatus puglSetGeometryConstraints(PuglView* const view, const uint width, co if (aspect) [view->impl->window setContentAspectRatio:sizePoints(view, view->minAspectX, view->minAspectY)]; } + */ + puglSetMinSize(view, width, height); + puglSetAspectRatio(view, width, height, width, height); #elif defined(DISTRHO_OS_WINDOWS) // nothing #else @@ -352,4 +359,6 @@ void puglWin32SetWindowResizable(PuglView* const view, const bool resizable) // -------------------------------------------------------------------------------------------------------------------- +#ifndef DISTRHO_OS_MAC END_NAMESPACE_DGL +#endif diff --git a/dgl/src/pugl.hpp b/dgl/src/pugl.hpp index 7fdde137..6bee1687 100644 --- a/dgl/src/pugl.hpp +++ b/dgl/src/pugl.hpp @@ -24,15 +24,22 @@ #include #include -START_NAMESPACE_DGL - -// -------------------------------------------------------------------------------------------------------------------- - #define PUGL_API #define PUGL_DISABLE_DEPRECATED #define PUGL_NO_INCLUDE_GLU_H + +// -------------------------------------------------------------------------------------------------------------------- + +#ifndef DISTRHO_OS_MAC +START_NAMESPACE_DGL +#else +USE_NAMESPACE_DGL +#endif + #include "pugl-upstream/include/pugl/pugl.h" +// -------------------------------------------------------------------------------------------------------------------- + PUGL_BEGIN_DECLS // expose backend enter @@ -85,6 +92,8 @@ PUGL_END_DECLS // -------------------------------------------------------------------------------------------------------------------- +#ifndef DISTRHO_OS_MAC END_NAMESPACE_DGL +#endif #endif // DGL_PUGL_HPP_INCLUDED diff --git a/distrho/DistrhoUI_macOS.mm b/distrho/DistrhoUI_macOS.mm new file mode 100644 index 00000000..2cdbe151 --- /dev/null +++ b/distrho/DistrhoUI_macOS.mm @@ -0,0 +1,33 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2021 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef PUGL_NAMESPACE +# error PUGL_NAMESPACE must be set when compiling this file +#endif + +#include "src/DistrhoPluginChecks.h" +#include "../dgl/Base.hpp" + +#define DISTRHO_MACOS_NAMESPACE_MACRO_HELPER(DGL_NS, SEP, PUGL_NS, INTERFACE) DGL_NS ## SEP ## PUGL_NS ## SEP ## INTERFACE +#define DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NS, PUGL_NS, INTERFACE) DISTRHO_MACOS_NAMESPACE_MACRO_HELPER(DGL_NS, _, PUGL_NS, INTERFACE) + +#define PuglOpenGLView DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PUGL_NAMESPACE, OpenGLView) +#define PuglStubView DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PUGL_NAMESPACE, StubView) +#define PuglWindow DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PUGL_NAMESPACE, Window) +#define PuglWindowDelegate DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PUGL_NAMESPACE, WindowDelegate) +#define PuglWrapperView DISTRHO_MACOS_NAMESPACE_MACRO(DGL_NAMESPACE, PUGL_NAMESPACE, WrapperView) + +#import "src/pugl.mm" diff --git a/tests/Makefile b/tests/Makefile index 66d5f84e..1cf83350 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -15,6 +15,10 @@ LINK_FLAGS += -lpthread # TODO fix within pugl BUILD_CXX_FLAGS += -Wno-extra -Wno-missing-field-initializers +ifeq ($(MACOS),true) +BUILD_CXX_FLAGS += -ObjC++ -DGL_SILENCE_DEPRECATION -Wno-deprecated-declarations +endif + # --------------------------------------------------------------------------------------------------------------------- MANUAL_TESTS =