SONAME=0.0.0
SHORTSONAME=0
-TARGET := libjuce.so
+
# (this disables dependency generation if multiple architectures are set)
JUCELIBS_CPPFLAGS := $(JUCELIBS_CPPFLAGS) -DJUCE_INCLUDE_PNGLIB_CODE=0 -DPNG_SKIP_SETJMP_CHECK
JUCELIBS := $(JUCELIBS) ogg vorbis vorbisfile vorbisenc
JUCELIBS_CPPFLAGS := $(JUCELIBS_CPPFLAGS) -DJUCE_INCLUDE_OGGVORBIS_CODE=0
+## Debian's libbox2d-dev is incompatible with JUCE's
+#JUCELIBS := $(JUCELIBS) box2d
+#JUCELIBS_CPPFLAGS := $(JUCELIBS_CPPFLAGS) -DJUCE_INCLUDE_BOX2D_CODE=0
JUCELIBS := $(JUCELIBS) zlib
JUCELIBS_CPPFLAGS := $(JUCELIBS_CPPFLAGS) -DJUCE_INCLUDE_ZLIB_CODE=0
JUCELIBS := $(JUCELIBS) freetype2
BINDIR := build
LIBDIR := build
-OBJDIR := build/intermediate/Release
OUTDIR := build
-JUCE_CPPFLAGS := $(DEPFLAGS) \
+OBJDIR_DEBUG := build/intermediate/Debug
+TARGET_DEBUG := libjuce_d.so
+JUCE_CFLAGS_DEBUG = -D "DEBUG=1" -D "_DEBUG=1" -g -ggdb -O0
+JUCE_LDLAGS_DEBUG =
+
+OBJDIR_RELEASE := build/intermediate/Release
+TARGET_RELEASE := libjuce.so
+JUCE_CFLAGS_RELEASE = -D "NDEBUG=1" -D "DEBUG=0" -O3
+JUCE_LDLAGS_RELEASE = -fvisibility=hidden
+
+ifeq ($(CONFIG),Debug)
+TARGET := $(OUTDIR)/$(TARGET_DEBUG)
+endif
+
+ifeq ($(CONFIG),Release)
+TARGET := $(OUTDIR)/$(TARGET_RELEASE)
+endif
+
+ifndef CONFIG
+ TARGET := $(OUTDIR)/$(TARGET_DEBUG) $(OUTDIR)/$(TARGET_RELEASE)
+endif
+
+JUCE_CPPFLAGS := $(DEPFLAGS) $(JUCE_CPPFLAGS) \
-D "LINUX=1" \
- -D "NDEBUG=1" \
- -D "DEBUG=0" \
-D "JUCE_DLL_BUILD=1" \
$(JUCELIBS_CPPFLAGS) \
-I. \
JUCE_CFLAGS += \
$(TARGET_ARCH) \
- -O3 \
-fPIC \
-fpermissive \
$(JUCELIBS_CFLAGS)
JUCE_CXXFLAGS += -std=c++11
JUCE_LDFLAGS += \
- -rdynamic -shared -Wl,-soname,$(TARGET).$(SHORTSONAME) \
+ -rdynamic -shared \
$(TARGET_ARCH) \
-fPIC \
$(JUCELIBS_LIBS) \
- -L$(BINDIR) \
- -L$(LIBDIR) \
-ldl \
-lpthread \
-lrt \
$(empty)
-OBJECTS=$(SOURCES:%.cpp=$(OBJDIR)/%.o)
+OBJECTS_RELEASE=$(SOURCES:%.cpp=$(OBJDIR_RELEASE)/%.o)
+OBJECTS_DEBUG=$(SOURCES:%.cpp=$(OBJDIR_DEBUG)/%.o)
.PHONY: all clean install install-lib install-headers install-pkgconfig test introjucer
-all: $(OUTDIR)/$(TARGET) introjucer
+all: $(TARGET) introjucer
-$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)
- @echo Linking juce_dll
+$(OUTDIR)/$(TARGET_RELEASE): $(OBJECTS) $(RESOURCES)
+ @echo Linking $(TARGET_RELEASE)
-@mkdir -p $(OUTDIR)
- $(CXX) -o $@ $^ $(JUCE_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH)
+ $(CXX) -o $@ $^ -Wl,-soname,$(TARGET_RELEASE).$(SHORTSONAME) $(JUCE_LDFLAGS) $(JUCE_LDFLAGS_RELEASE) $(LDFLAGS) $(TARGET_ARCH)
+$(OBJDIR_RELEASE)/%.o: %.cpp libjuce_builddate.h
+ mkdir -p "$(OBJDIR_RELEASE)"
+ $(CXX) $(JUCE_CPPFLAGS) $(JUCE_CFLAGS_RELEASE) $(JUCE_CFLAGS) $(JUCE_CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS) -o "$@" -c "$<"
-$(OBJDIR)/%.o: %.cpp libjuce_builddate.h
- mkdir -p "$(OBJDIR)"
- $(CXX) $(JUCE_CPPFLAGS) $(JUCE_CFLAGS) $(JUCE_CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS) -o "$@" -c "$<"
+$(OUTDIR)/$(TARGET_DEBUG): $(OBJECTS) $(RESOURCES)
+ @echo Linking $(TARGET_DEBUG)
+ -@mkdir -p $(OUTDIR)
+ $(CXX) -o $@ $^ -Wl,-soname,$(TARGET_DEBUG).$(SHORTSONAME) $(JUCE_LDFLAGS) $(JUCE_LDFLAGS_DEBUG) $(LDFLAGS) $(TARGET_ARCH)
+$(OBJDIR_DEBUG)/%.o: %.cpp libjuce_builddate.h
+ mkdir -p "$(OBJDIR_DEBUG)"
+ $(CXX) $(JUCE_CPPFLAGS) $(JUCE_CFLAGS_DEBUG) $(JUCE_CFLAGS) $(JUCE_CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS) -o "$@" -c "$<"
libjuce_builddate.h:
touch libjuce_builddate.h
test:
$(MAKE) -C $(DEMO_PATH)
-introjucer: $(OUTDIR)/$(TARGET)
+introjucer: $(OUTDIR)/$(TARGET_RELEASE)
$(MAKE) -C $(INTROJUCER_PATH) CONFIG=Release CPPFLAGS="$(CPPFLAGS) $(JUCELIBS_CPPFLAGS)" CFLAGS="$(CFLAGS) $(JUCELIBS_CFLAGS)" LDFLAGS="$(LDFLAGS) $(JUCELIBS_LIBS)"
juce.pc: juce.pc.in