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 $@