1 #
   2 # Mac OS X jfxmedia makefile
   3 #
   4 
   5 # OUTPUT_DIR, BUILD_TYPE and BASE_NAME are passed on the command line or from the 
   6 # parent make process
   7 BUILD_DIR = $(OUTPUT_DIR)/$(BUILD_TYPE)
   8 SRCBASE_DIR = ../..
   9 OBJBASE_DIR = $(BUILD_DIR)/obj/jfxmedia
  10 
  11 BASE_DIR = ../../..
  12 GSTREAMER_LITE_DIR = $(BASE_DIR)/gstreamer/gstreamer-lite
  13 GLIB_LITE_DIR = $(BASE_DIR)/gstreamer/3rd_party/glib/glib-2.28.8
  14 
  15 TARGET_NAME = lib$(BASE_NAME).dylib
  16 TARGET = $(BUILD_DIR)/$(TARGET_NAME)
  17 
  18 # separate library for QTKit based platform
  19 QTK_NAME = lib$(BASE_NAME)_qtkit.dylib
  20 QTK_LIB = $(BUILD_DIR)/$(QTK_NAME)
  21 
  22 # Set up base search path for source and headers
  23 VPATH = $(SRCBASE_DIR):$(GENERATED_HEADERS_DIR):$(JAVA_HOME)/include:$(JAVA_HOME)/include/darwin
  24 
  25 # ------------------------------------------------------------------
  26 # Base compile/link flags
  27 
  28 CFLAGS = -arch x86_64 \
  29          -pipe \
  30          -fPIC                     \
  31          -Werror=implicit-function-declaration \
  32          -DTARGET_OS_MAC=1         \
  33          -D_GNU_SOURCE             \
  34          -msse2                    \
  35          -mmacosx-version-min=10.7
  36 
  37 ifeq ($(BUILD_TYPE), release)
  38     CFLAGS += -Os
  39 else
  40     CFLAGS += -O0 -g -Wall
  41 endif
  42 
  43 
  44 INCLUDES = -I$(JAVA_HOME)/include \
  45            -I$(JAVA_HOME)/include/darwin \
  46            -I$(SRCBASE_DIR) \
  47            -I$(SRCBASE_DIR)/jni \
  48            -I$(GENERATED_HEADERS_DIR)
  49 
  50 
  51 LDFLAGS = -mmacosx-version-min=10.7 \
  52           -arch x86_64 \
  53           -L$(BUILD_DIR) \
  54           -lobjc \
  55           -framework Cocoa \
  56           -framework CoreVideo
  57 
  58 # ------------------------------------------------------------------
  59 # jfxmedia compile/link flags
  60 
  61 JFXMEDIA_CFLAGS = $(CFLAGS) \
  62          -DGST_REMOVE_DEPRECATED   \
  63          -DGST_DISABLE_GST_DEBUG   \
  64          -DGST_DISABLE_LOADSAVE    \
  65          -DGST_DISABLE_XML         \
  66          -DGSTREAMER_LITE          \
  67          -DJFXMEDIA_JNI_EXPORTS    \
  68          -DHAVE_CONFIG_H           \
  69 
  70 JFXMEDIA_INCLUDES = $(INCLUDES) \
  71            -I$(GLIB_LITE_DIR)/ \
  72            -I$(GLIB_LITE_DIR)/glib \
  73            -I$(GLIB_LITE_DIR)/gmodule \
  74            -I$(GLIB_LITE_DIR)/build/osx \
  75            -I$(GSTREAMER_LITE_DIR)/gstreamer \
  76            -I$(GSTREAMER_LITE_DIR)/gst-plugins-base/gst-libs \
  77            -I$(GSTREAMER_LITE_DIR)/gstreamer/libs
  78 
  79 JFXMEDIA_LDFLAGS = $(LDFLAGS) \
  80           -Wl,-install_name,@rpath/$(TARGET_NAME) \
  81           -lgstreamer-lite \
  82           -lglib-lite
  83 
  84 # ------------------------------------------------------------------
  85 # jfxmedia sources/objects
  86 
  87 JFXMEDIA_SOURCES =                                             \
  88               MediaManagement/Media.cpp                        \
  89               MediaManagement/MediaManager.cpp                 \
  90               Locator/Locator.cpp                              \
  91               Locator/LocatorStream.cpp                        \
  92               PipelineManagement/Pipeline.cpp                  \
  93               PipelineManagement/PipelineFactory.cpp           \
  94               PipelineManagement/VideoFrame.cpp                \
  95               PipelineManagement/Track.cpp                     \
  96               PipelineManagement/AudioTrack.cpp                \
  97               PipelineManagement/VideoTrack.cpp                \
  98               PipelineManagement/SubtitleTrack.cpp             \
  99               jni/JavaPlayerEventDispatcher.cpp                \
 100               jni/JniUtils.cpp                                 \
 101               jni/com_sun_media_jfxmedia_logging_Logger.cpp    \
 102               jni/Logger.cpp                                   \
 103               jni/JavaMediaWarningListener.cpp                 \
 104               jni/JavaInputStreamCallbacks.cpp                 \
 105               jni/JavaBandsHolder.cpp                          \
 106               jni/NativeVideoBuffer.cpp                        \
 107               Utils/MediaWarningDispatcher.cpp                 \
 108               Utils/LowLevelPerf.cpp                           \
 109               Utils/posix/posix_critical_section.cpp           \
 110               platform/gstreamer/GstAudioEqualizer.cpp         \
 111               platform/gstreamer/GstAudioPlaybackPipeline.cpp  \
 112               platform/gstreamer/GstAudioSpectrum.cpp          \
 113               platform/gstreamer/GstAVPlaybackPipeline.cpp     \
 114               platform/gstreamer/GstElementContainer.cpp       \
 115               platform/gstreamer/GstJniUtils.cpp               \
 116               platform/gstreamer/GstMediaManager.cpp           \
 117               platform/gstreamer/GstPipelineFactory.cpp        \
 118               platform/gstreamer/GstVideoFrame.cpp             \
 119               platform/gstreamer/GstPlatform.cpp               \
 120               platform/gstreamer/GstEqualizerBand.cpp          \
 121               platform/gstreamer/GstMedia.cpp                  \
 122               platform/gstreamer/GstMediaPlayer.cpp            \
 123               Utils/ColorConverter.c                           \
 124               Utils/JObjectPeers.m                             \
 125               Utils/JavaUtils.m                                \
 126               Utils/MTObjectProxy.m                            \
 127               platform/osx/OSXPlatform.mm                      \
 128               platform/osx/OSXMediaPlayer.mm                   \
 129               platform/osx/CVVideoFrame.mm
 130 
 131 JFXMEDIA_OBJECTS = \
 132     $(patsubst %.c, $(OBJBASE_DIR)/%.o, $(filter %.c, $(JFXMEDIA_SOURCES))) \
 133     $(patsubst %.m, $(OBJBASE_DIR)/%.o, $(filter %.m, $(JFXMEDIA_SOURCES))) \
 134     $(patsubst %.cpp, $(OBJBASE_DIR)/%.o, $(filter %.cpp, $(JFXMEDIA_SOURCES))) \
 135     $(patsubst %.mm, $(OBJBASE_DIR)/%.o, $(filter %.mm, $(JFXMEDIA_SOURCES)))
 136 
 137 # ------------------------------------------------------------------
 138 # Rules
 139 
 140 .PHONY: default
 141 default: $(TARGET) $(QTK_LIB)
 142 
 143 
 144 # ------------------------------------------------------------------
 145 # jfxmedia rules
 146 
 147 # auto-dependencies
 148 -include $(JFXMEDIA_OBJECTS:.o=.d)
 149 
 150 $(OBJBASE_DIR)/%.o: %.cpp
 151         @mkdir -p $(dir $@)
 152         $(CC) $(JFXMEDIA_CFLAGS) $(JFXMEDIA_INCLUDES) -MD -MF $(OBJBASE_DIR)/$*.d -x c++ -c $< -o $@
 153 
 154 $(OBJBASE_DIR)/%.o: %.c
 155         @mkdir -p $(dir $@)
 156         $(CC) $(JFXMEDIA_CFLAGS) $(JFXMEDIA_INCLUDES) -MD -MF $(OBJBASE_DIR)/$*.d -x c -c $< -o $@
 157 
 158 $(OBJBASE_DIR)/%.o: %.mm
 159         @mkdir -p $(dir $@)
 160         $(CC) $(JFXMEDIA_CFLAGS) $(JFXMEDIA_INCLUDES) -MD -MF $(OBJBASE_DIR)/$*.d -x objective-c++ -c $< -o $@
 161 
 162 $(OBJBASE_DIR)/%.o: %.m
 163         @mkdir -p $(dir $@)
 164         $(CC) $(JFXMEDIA_CFLAGS) $(JFXMEDIA_INCLUDES) -MD -MF $(OBJBASE_DIR)/$*.d -x objective-c -c $< -o $@
 165 
 166 $(TARGET): $(JFXMEDIA_OBJECTS)
 167         @mkdir -p $(dir $@)
 168         $(LINK) -dynamiclib $(JFXMEDIA_LDFLAGS) $(JFXMEDIA_OBJECTS) -o $@
 169 
 170 
 171 # ------------------------------------------------------------------
 172 # QTKit platform lib rules
 173 
 174 QTK_OBJBASE = $(OBJBASE_DIR)/qtk
 175 QTK_LDFLAGS = $(LDFLAGS) \
 176           -Wl,-install_name,@rpath/$(QTK_NAME) \
 177           -framework QTKit
 178 
 179 QTK_SOURCES = platform/osx/QTKMediaPlayer.mm
 180 QTK_OBJECTS = $(patsubst %.mm,$(QTK_OBJBASE)/%.o,$(QTK_SOURCES))
 181 
 182 -include $(QTK_OBJECTS:.o=.d)
 183 
 184 $(QTK_OBJBASE)/%.o: %.mm
 185         @mkdir -p $(dir $@)
 186         $(CC) $(CFLAGS) $(INCLUDES) -MD -MF $(QTK_OBJBASE)/$*.d -x objective-c++ -c $< -o $@
 187 
 188 $(QTK_LIB): $(TARGET) $(QTK_OBJECTS)
 189         @mkdir -p $(dir $@)
 190         $(LINK)  $(QTK_LDFLAGS) -dynamiclib $(QTK_OBJECTS) -l$(BASE_NAME) -o $@