From 9e5b6c43b13a561b09908d2a57edb6c96e4fedaf Mon Sep 17 00:00:00 2001 From: Jason Parker Date: Tue, 12 Feb 2013 14:00:13 -0600 Subject: Add support for building and using shared libraries. --- pjmedia/build/Makefile | 141 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 98 insertions(+), 43 deletions(-) (limited to 'pjmedia/build/Makefile') diff --git a/pjmedia/build/Makefile b/pjmedia/build/Makefile index 7c362c2..aeb7f0b 100644 --- a/pjmedia/build/Makefile +++ b/pjmedia/build/Makefile @@ -9,17 +9,48 @@ SRTP_INC=$(CC_INC)$(THIRD_PARTY)/build/srtp \ include $(PJDIR)/build/common.mak +export LIBDIR := ../lib +export BINDIR := ../bin + RULES_MAK := $(PJDIR)/build/rules.mak PJLIB_LIB:=$(PJDIR)/pjlib/lib/libpj-$(TARGET_NAME)$(LIBEXT) PJLIB_UTIL_LIB:=$(PJDIR)/pjlib-util/lib/libpjlib-util-$(TARGET_NAME)$(LIBEXT) PJNATH_LIB:=$(PJDIR)/pjnath/lib/libpjnath-$(TARGET_NAME)$(LIBEXT) -export PJMEDIA_LIB:=../lib/libpjmedia-$(TARGET_NAME)$(LIBEXT) -export PJMEDIA_CODEC_LIB:=../lib/libpjmedia-codec-$(TARGET_NAME)$(LIBEXT) -export PJSDP_LIB:=../lib/libpjsdp-$(TARGET_NAME)$(LIBEXT) -export PJMEDIA_AUDIODEV_LIB:=../lib/libpjmedia-audiodev-$(TARGET_NAME)$(LIBEXT) -export PJMEDIA_VIDEODEV_LIB:=../lib/libpjmedia-videodev-$(TARGET_NAME)$(LIBEXT) +export PJMEDIA_LIB:=libpjmedia-$(TARGET_NAME)$(LIBEXT) +export PJMEDIA_CODEC_LIB:=libpjmedia-codec-$(TARGET_NAME)$(LIBEXT) +export PJSDP_LIB:=libpjsdp-$(TARGET_NAME)$(LIBEXT) +export PJMEDIA_AUDIODEV_LIB:=libpjmedia-audiodev-$(TARGET_NAME)$(LIBEXT) +export PJMEDIA_VIDEODEV_LIB:=libpjmedia-videodev-$(TARGET_NAME)$(LIBEXT) + +ifeq ($(PJ_SHARED_LIBRARIES),) +PJMEDIA_LDLIB := -lpjmedia-$(TARGET_NAME) +PJMEDIA_CODEC_LDLIB := -lpjmedia-codec-$(TARGET_NAME) +PJMEDIA_AUDIODEV_LDLIB := -lpjmedia-audiodev-$(TARGET_NAME) +PJMEDIA_VIDEODEV_LDLIB := -lpjmedia-videodev-$(TARGET_NAME) +PJLIB_LDLIB := -lpj-$(TARGET_NAME) +PJLIB_UTIL_LDLIB := -lpjlib-util-$(TARGET_NAME) +PJNATH_LDLIB := -lpjnath-$(TARGET_NAME) +else +PJMEDIA_LDLIB := -lpjmedia +PJMEDIA_CODEC_LDLIB := -lpjmedia-codec +PJMEDIA_AUDIODEV_LDLIB := -lpjmedia-audiodev +PJMEDIA_VIDEODEV_LDLIB := -lpjmedia-videodev +PJLIB_LDLIB := -lpj +PJLIB_UTIL_LDLIB := -lpjlib-util +PJNATH_LDLIB := -lpjnath +export PJMEDIA_SONAME:=libpjmedia.$(SHLIB_SUFFIX) +export PJMEDIA_SHLIB:=$(PJMEDIA_SONAME).$(PJ_VERSION_MAJOR) +export PJMEDIA_CODEC_SONAME:=libpjmedia-codec.$(SHLIB_SUFFIX) +export PJMEDIA_CODEC_SHLIB:=$(PJMEDIA_CODEC_SONAME).$(PJ_VERSION_MAJOR) +export PJSDP_SONAME:=libpjsdp.$(SHLIB_SUFFIX) +export PJSDP_SHLIB:=$(PJSDP_SONAME).$(PJ_VERSION_MAJOR) +export PJMEDIA_AUDIODEV_SONAME:=libpjmedia-audiodev.$(SHLIB_SUFFIX) +export PJMEDIA_AUDIODEV_SHLIB:=$(PJMEDIA_AUDIODEV_SONAME).$(PJ_VERSION_MAJOR) +export PJMEDIA_VIDEODEV_SONAME:=libpjmedia-videodev.$(SHLIB_SUFFIX) +export PJMEDIA_VIDEODEV_SHLIB:=$(PJMEDIA_VIDEODEV_SONAME).$(PJ_VERSION_MAJOR) +endif ############################################################################### @@ -35,18 +66,11 @@ export _CFLAGS := $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \ $(SRTP_INC) export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \ $(HOST_CXXFLAGS) $(CXXFLAGS) -export _LDFLAGS := $(subst /,$(HOST_PSEP),$(PJMEDIA_VIDEODEV_LIB)) \ - $(subst /,$(HOST_PSEP),$(PJMEDIA_CODEC_LIB)) \ - $(subst /,$(HOST_PSEP),$(PJMEDIA_LIB)) \ - $(subst /,$(HOST_PSEP),$(PJMEDIA_AUDIODEV_LIB)) \ - $(subst /,$(HOST_PSEP),$(PJLIB_LIB)) \ - $(subst /,$(HOST_PSEP),$(PJLIB_UTIL_LIB)) \ - $(subst /,$(HOST_PSEP),$(PJNATH_LIB)) \ - -L$(PJDIR)/third_party/lib \ - $(APP_THIRD_PARTY_LIBS) \ + +export _LDFLAGS := $(APP_THIRD_PARTY_LIBS) \ $(APP_THIRD_PARTY_EXT) \ $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \ - $(LDFLAGS) + $(APP_LDFLAGS) $(LDFLAGS) ############################################################################### # Defines for building PJMEDIA library @@ -128,8 +152,15 @@ export PJMEDIA_TEST_OBJS += codec_vectors.o jbuf_test.o main.o mips_test.o \ rtp_test.o test.o export PJMEDIA_TEST_OBJS += sdp_neg_test.o export PJMEDIA_TEST_CFLAGS += $(_CFLAGS) -export PJMEDIA_TEST_LDFLAGS += $(_LDFLAGS) -export PJMEDIA_TEST_EXE:=../bin/pjmedia-test-$(TARGET_NAME)$(HOST_EXE) +export PJMEDIA_TEST_LDFLAGS += $(PJMEDIA_CODEC_LDLIB) \ + $(PJMEDIA_VIDEODEV_LDLIB) \ + $(PJMEDIA_LDLIB) \ + $(PJMEDIA_AUDIODEV_LDLIB) \ + $(PJLIB_LDLIB) \ + $(PJLIB_UTIL_LDLIB) \ + $(PJNATH_LDLIB) \ + $(_LDFLAGS) +export PJMEDIA_TEST_EXE:=pjmedia-test-$(TARGET_NAME)$(HOST_EXE) export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT @@ -138,7 +169,12 @@ export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT # # $(TARGET) is defined in os-$(OS_NAME).mak file in current directory. # -TARGETS := pjmedia pjmedia-videodev pjmedia-audiodev pjmedia-codec pjsdp pjmedia-test +TARGETS := $(PJMEDIA_LIB) $(PJMEDIA_SONAME) \ + $(PJMEDIA_CODEC_LIB) $(PJMEDIA_CODEC_SONAME)\ + $(PJMEDIA_VIDEODEV_LIB) $(PJMEDIA_VIDEODEV_SONAME) \ + $(PJMEDIA_AUDIODEV_LIB) $(PJMEDIA_AUDIODEV_SONAME) \ + $(PJSDP_LIB) $(PJSDP_SONAME) \ + $(PJMEDIA_TEST_EXE) all: $(TARGETS) @@ -156,47 +192,66 @@ doc: dep: depend distclean: realclean -.PHONY: dep depend clean realclean distclean +.PHONY: all dep depend clean realclean distclean .PHONY: $(TARGETS) -.PHONY: $(PJMEDIA_LIB) $(PJMEDIA_CODEC_LIB) $(PJMEDIA_VIDEODEV_LIB) $(PJMEDIA_AUDIODEV_LIB) $(PJSDP_LIB) $(PJMEDIA_TEST_EXE) +.PHONY: $(PJMEDIA_LIB) $(PJMEDIA_SHLIB) $(PJMEDIA_SONAME) +.PHONY: $(PJMEDIA_CODEC_LIB) $(PJMEDIA_CODEC_SHLIB) $(PJMEDIA_CODEC_SONAME) +.PHONY: $(PJMEDIA_VIDEODEV_LIB) $(PJMEDIA_VIDEODEV_SHLIB) $(PJMEDIA_VIDEODEV_SONAME) +.PHONY: $(PJMEDIA_AUDIODEV_LIB) $(PJMEDIA_AUDIODEV_SHLIB) $(PJMEDIA_AUDIODEV_SONAME) +.PHONY: $(PJSDP_LIB) $(PJSDP_SHLIB) $(PJSDP_SONAME) +.PHONY: $(PJMEDIA_TEST_EXE) pjmedia: $(PJMEDIA_LIB) -$(PJMEDIA_LIB): - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia $(PJMEDIA_LIB) +$(PJMEDIA_SHLIB): $(PJMEDIA_SONAME) +$(PJMEDIA_SONAME): $(PJMEDIA_LIB) +$(PJMEDIA_LIB) $(PJMEDIA_SHLIB) $(PJMEDIA_SONAME): + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia $(subst /,$(HOST_PSEP),$(LIBDIR)/$@) pjmedia-codec: $(PJMEDIA_CODEC_LIB) -$(PJMEDIA_CODEC_LIB): - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_CODEC app=pjmedia-codec $(PJMEDIA_CODEC_LIB) +$(PJMEDIA_CODEC_SHLIB): $(PJMEDIA_CODEC_SONAME) +$(PJMEDIA_CODEC_SONAME): $(PJMEDIA_CODEC_LIB) +$(PJMEDIA_CODEC_LIB) $(PJMEDIA_CODEC_SHLIB) $(PJMEDIA_CODEC_SONAME): + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_CODEC app=pjmedia-codec $(subst /,$(HOST_PSEP),$(LIBDIR)/$@) pjmedia-videodev: $(PJMEDIA_VIDEODEV_LIB) -$(PJMEDIA_VIDEODEV_LIB): - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_VIDEODEV app=pjmedia-videodev $(PJMEDIA_VIDEODEV_LIB) +$(PJMEDIA_VIDEODEV_SHLIB): $(PJMEDIA_VIDEODEV_SONAME) +$(PJMEDIA_VIDEODEV_SONAME): $(PJMEDIA_VIDEODEV_LIB) +$(PJMEDIA_VIDEODEV_LIB) $(PJMEDIA_VIDEODEV_SHLIB) $(PJMEDIA_VIDEODEV_SONAME): + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_VIDEODEV app=pjmedia-videodev $(subst /,$(HOST_PSEP),$(LIBDIR)/$@) pjmedia-audiodev: $(PJMEDIA_AUDIODEV_LIB) -$(PJMEDIA_AUDIODEV_LIB): - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_AUDIODEV app=pjmedia-audiodev $(PJMEDIA_AUDIODEV_LIB) +$(PJMEDIA_AUDIODEV_SHLIB): $(PJMEDIA_AUDIODEV_SONAME) +$(PJMEDIA_AUDIODEV_SONAME): $(PJMEDIA_AUDIODEV_LIB) +$(PJMEDIA_AUDIODEV_LIB) $(PJMEDIA_AUDIODEV_SHLIB) $(PJMEDIA_AUDIODEV_SONAME): + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_AUDIODEV app=pjmedia-audiodev $(subst /,$(HOST_PSEP),$(LIBDIR)/$@) pjsdp: $(PJSDP_LIB) -$(PJSDP_LIB): - $(MAKE) -f $(RULES_MAK) APP=PJSDP app=pjsdp $(PJSDP_LIB) +$(PJSDP_SHLIB): $(PJSDP_SONAME) +$(PJSDP_SONAME): $(PJSDP_LIB) +$(PJSDP_LIB) $(PJSDP_SHLIB) $(PJSDP_SONAME): + $(MAKE) -f $(RULES_MAK) APP=PJSDP app=pjsdp $(LIBDIR)/$@ pjmedia-test: $(PJMEDIA_TEST_EXE) -$(PJMEDIA_TEST_EXE): $(PJMEDIA_LIB) $(PJMEDIA_CODEC_LIB) - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_TEST app=pjmedia-test $(PJMEDIA_TEST_EXE) - -.PHONY: ../lib/pjmedia.ko -../lib/pjmedia.ko: +$(PJMEDIA_TEST_EXE): $(PJMEDIA_LIB) $(PJMEDIA_SONAME) +$(PJMEDIA_TEST_EXE): $(PJMEDIA_AUDIODEV_LIB) $(PJMEDIA_AUDIODEV_SONAME) +$(PJMEDIA_TEST_EXE): $(PJMEDIA_VIDEODEV_LIB) $(PJMEDIA_VIDEODEV_SONAME) +$(PJMEDIA_TEST_EXE): $(PJMEDIA_CODEC_LIB) $(PJMEDIA_CODEC_SONAME) +$(PJMEDIA_TEST_EXE): + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_TEST app=pjmedia-test $(BINDIR)/$@ + +.PHONY: pjmedia.ko +pjmedia.ko: echo Making $@ - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia $@ + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia $(LIBDIR)/$@ -.PHONY: ../lib/pjmedia-codec.ko -../lib/pjmedia-codec.ko: +.PHONY: pjmedia-codec.ko +pjmedia-codec.ko: echo Making $@ - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_CODEC app=pjmedia-codec $@ + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_CODEC app=pjmedia-codec $(LIBDIR)/$@ -.PHONY: ../lib/pjmedia-test.ko -../lib/pjmedia-test.ko: - $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_TEST app=pjmedia-test $@ +.PHONY: pjmedia-test.ko +pjmedia-test.ko: + $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_TEST app=pjmedia-test $(LIBDIR)/$@ clean: $(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia $@ @@ -228,6 +283,6 @@ depend: $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_CODEC app=pjmedia-codec $@ $(MAKE) -f $(RULES_MAK) APP=PJMEDIA_TEST app=pjmedia-test $@ $(MAKE) -f $(RULES_MAK) APP=PJSDP app=pjsdp $@ - echo '$(PJMEDIA_TEST_EXE): $(PJMEDIA_LIB) $(PJMEDIA_CODEC_LIB) $(PJNATH_LIB) $(PJLIB_UTIL_LIB) $(PJLIB_LIB)' >> .pjmedia-test-$(TARGET_NAME).depend + echo '$(BINDIR)/$(PJMEDIA_TEST_EXE): $(LIBDIR)/$(PJMEDIA_LIB) $(LIBDIR)/$(PJMEDIA_CODEC_LIB) $(PJNATH_LIB) $(PJLIB_UTIL_LIB) $(PJLIB_LIB)' >> .pjmedia-test-$(TARGET_NAME).depend -- cgit v1.2.3