You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. WEBRTC_BASE ?= .
  2. WEBRTC_DIR ?= $(WEBRTC_BASE)
  3. WEBRTC_VERSION ?= m79
  4. WEBRTC_OUT ?= Release
  5. WEBRTC_GN_ARGS ?= \
  6. is_debug=false \
  7. use_sysroot=false \
  8. rtc_include_tests=false \
  9. is_clang=false \
  10. treat_warnings_as_errors=false \
  11. $(WEBRTC_GN_ARGS_EXTRA)
  12. WEBRTC_TARGETS ?= default $(WEBRTC_TARGETS_EXTRA)
  13. WEBRTC_LIBS ?= libwebrtc.a $(WEBRTC_LIBS_EXTRA)
  14. WEBRTC_INCLUDES = \
  15. api audio base call common_audio common_video logging media modules p2p pc \
  16. system_wrappers rtc_base rtc_tools video third_party common_types.h \
  17. $(WEBRTC_INCLUDES_EXTRA)
  18. WEBRTC_PLATFORM ?= POSIX
  19. WEBRTC_FLAGS ?= \
  20. -I$(WEBRTC_BASE)/include -I$(WEBRTC_BASE)/include/webrtc \
  21. -I$(WEBRTC_BASE)/include/webrtc/third_party/abseil-cpp \
  22. -DWEBRTC_$(WEBRTC_PLATFORM)
  23. WEBRTC_SETPATH = PATH=$(WEBRTC_DIR)/depot_tools:"$$PATH"
  24. RTC_STAMP_DEPOT = $(WEBRTC_DIR)/depot_tools/.stamp
  25. RTC_STAMP_REPO = $(WEBRTC_DIR)/webrtc-checkout/.stamp
  26. RTC_STAMP_VERSION = $(WEBRTC_DIR)/webrtc-checkout/.stamps/stamp-$(WEBRTC_VERSION)
  27. RTC_STAMP_COMPILE = $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/.stamp
  28. RTC_STAMP_INCLUDES = $(WEBRTC_BASE)/include/webrtc/.stamp
  29. .PHONY: rtcall
  30. rtcall:
  31. $(WEBRTC_BASE)/include/webrtc/.stamp \
  32. $(patsubst %,$(WEBRTC_BASE)/libs/%,$(WEBRTC_LIBS)) \
  33. $(WEBRTC_BASE)/libs/libutil.a
  34. # Get depot_tools, which contains all the tools required to work with Google software
  35. $(RTC_STAMP_DEPOT):
  36. rm -rf $(WEBRTC_DIR)/depot_tools
  37. git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $(WEBRTC_DIR)/depot_tools
  38. touch $@
  39. # Fetch the WebRTC project itself
  40. $(RTC_STAMP_REPO): $(RTC_STAMP_DEPOT)
  41. rm -rf $(WEBRTC_DIR)/webrtc-checkout && mkdir $(WEBRTC_DIR)/webrtc-checkout
  42. #
  43. # Fetch webrtc, thit will take time...
  44. cd $(WEBRTC_DIR)/webrtc-checkout && $(WEBRTC_SETPATH) fetch --nohooks --no-history webrtc
  45. touch $@
  46. # Check out the correct WebRTC branch/commit
  47. $(RTC_STAMP_VERSION): $(RTC_STAMP_REPO)
  48. rm -rf $(WEBRTC_DIR)/webrtc-checkout/.stamps && mkdir $(WEBRTC_DIR)/webrtc-checkout/.stamps
  49. cd $(WEBRTC_DIR)/webrtc-checkout/src && git checkout branch-heads/$(WEBRTC_VERSION)
  50. #
  51. # Sync webrtc, this will take time...
  52. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gclient sync -D --nohooks
  53. touch $@
  54. # Compile
  55. $(RTC_STAMP_COMPILE):
  56. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gn gen out/$(WEBRTC_OUT) --args='$(WEBRTC_GN_ARGS)'
  57. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) ninja -C out/$(WEBRTC_OUT) $(WEBRTC_TARGETS)
  58. touch $@
  59. # Includes
  60. $(RTC_STAMP_INCLUDES): $(RTC_STAMP_VERSION)
  61. rm -rf include/webrtc && mkdir -p include/webrtc
  62. rsync -m --recursive --include='*/' --include='*.h' --exclude='*' \
  63. $(patsubst %,$(WEBRTC_DIR)/webrtc-checkout/src/%,$(WEBRTC_INCLUDES)) \
  64. include/webrtc
  65. touch $@
  66. # Libraries
  67. $(WEBRTC_BASE)/libs/%.a: $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/obj/%.a
  68. @mkdir -p $(@D)
  69. cp $< $@
  70. # Util
  71. $(WEBRTC_BASE)/libs/libutil.a: $(WEBRTC_BASE)/build/util/Conductor.cc.o
  72. @mkdir -p $(@D)
  73. ar cr $@ $^
  74. $(WEBRTC_BASE)/build/%.cc.o: $(WEBRTC_BASE)/%.cc $(RTC_STAMP_INCLUDES) $(wildcard $(WEBRTC_BASE)/util/*.h)
  75. @mkdir -p $(@D)
  76. $(CXX) $(CXXFLAGS) $(WEBRTC_FLAGS) -c $< -o $@
  77. .PHONY: rtcclean
  78. rtcclean:
  79. rm -rf include libs build
  80. .PHONY: rtccleanall
  81. rtccleanall: rtcclean
  82. rm -rf $(WEBRTC_DIR)/depot_tools $(WEBRTC_DIR)/webrtc-checkout
  83. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gn clean out/$(WEBRTC_OUT)
  84. .PHONY: mockstamps
  85. rtcmockstamps:
  86. mkdir -p $(dir $(RTC_STAMP_DEPOT)) && touch $(RTC_STAMP_DEPOT)
  87. mkdir -p $(dir $(RTC_STAMP_REPO)) && touch $(RTC_STAMP_REPO)
  88. mkdir -p $(dir $(RTC_STAMP_VERSION)) && touch $(RTC_STAMP_VERSION)
  89. mkdir -p $(dir $(RTC_STAMP_COMPILE)) && touch $(RTC_STAMP_COMPILE)
  90. mkdir -p $(dir $(RTC_STAMP_INCLUDES)) && touch $(RTC_STAMP_INCLUDES)