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 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. rtc_use_h264=true \
  10. rtc_use_x11=false \
  11. treat_warnings_as_errors=false \
  12. is_clang=false \
  13. use_custom_libcxx=false \
  14. use_rtti=true \
  15. $(WEBRTC_GN_ARGS_EXTRA)
  16. WEBRTC_TARGETS ?= default $(WEBRTC_TARGETS_EXTRA)
  17. WEBRTC_INCLUDES = \
  18. api audio base call common_audio common_video logging media modules p2p pc \
  19. system_wrappers rtc_base rtc_tools video third_party common_types.h \
  20. $(WEBRTC_INCLUDES_EXTRA)
  21. WEBRTC_PLATFORM ?= POSIX
  22. WEBRTC_FLAGS ?= \
  23. -I$(WEBRTC_BASE)/include \
  24. -I$(WEBRTC_DIR)/include -I$(WEBRTC_DIR)/include/webrtc \
  25. -I$(WEBRTC_DIR)/include/webrtc/third_party/abseil-cpp \
  26. -DWEBRTC_$(WEBRTC_PLATFORM)
  27. WEBRTC_SETPATH = PATH=$(WEBRTC_DIR)/depot_tools:"$$PATH"
  28. RTC_STAMP_DEPOT = $(WEBRTC_DIR)/depot_tools/.stamp
  29. RTC_STAMP_REPO = $(WEBRTC_DIR)/webrtc-checkout/.stamp
  30. RTC_STAMP_VERSION = $(WEBRTC_DIR)/webrtc-checkout/.stamps/stamp-$(WEBRTC_VERSION)
  31. RTC_STAMP_COMPILE = $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/.stamp
  32. RTC_STAMP_INCLUDES = $(WEBRTC_DIR)/include/webrtc/.stamp
  33. RTC_STAMP_ALL = \
  34. $(RTC_STAMP_DEPOT) $(RTC_STAMP_REPO) $(RTC_STAMP_VERSION) \
  35. $(RTC_STAMP_COMPILE) $(RTC_STAMP_INCLUDES)
  36. .PHONY: rtcall
  37. rtc-all: \
  38. $(WEBRTC_DIR)/include/webrtc/.stamp \
  39. $(WEBRTC_DIR)/lib/libwebrtc.a
  40. # Get depot_tools, which contains all the tools required to work with Google software
  41. $(RTC_STAMP_DEPOT):
  42. rm -rf $(WEBRTC_DIR)/depot_tools
  43. git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $(WEBRTC_DIR)/depot_tools
  44. touch $@
  45. # Fetch the WebRTC project itself
  46. $(RTC_STAMP_REPO): $(RTC_STAMP_DEPOT)
  47. rm -rf $(WEBRTC_DIR)/webrtc-checkout && mkdir $(WEBRTC_DIR)/webrtc-checkout
  48. #
  49. # Fetch webrtc, thit will take time...
  50. cd $(WEBRTC_DIR)/webrtc-checkout && $(WEBRTC_SETPATH) fetch --nohooks --no-history webrtc
  51. touch $@
  52. # Check out the correct WebRTC branch/commit
  53. $(RTC_STAMP_VERSION): $(RTC_STAMP_REPO)
  54. rm -rf $(WEBRTC_DIR)/webrtc-checkout/.stamps && mkdir $(WEBRTC_DIR)/webrtc-checkout/.stamps
  55. cd $(WEBRTC_DIR)/webrtc-checkout/src && git checkout branch-heads/$(WEBRTC_VERSION)
  56. #
  57. # Sync webrtc, this will take time...
  58. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gclient sync -D --nohooks
  59. touch $@
  60. # Compile
  61. $(RTC_STAMP_COMPILE):
  62. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gn gen out/$(WEBRTC_OUT) --args='$(WEBRTC_GN_ARGS)'
  63. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) ninja -C out/$(WEBRTC_OUT) $(WEBRTC_TARGETS)
  64. touch $@
  65. # Includes
  66. $(RTC_STAMP_INCLUDES): $(RTC_STAMP_VERSION)
  67. rm -rf $(WEBRTC_DIR)/include/webrtc && mkdir -p $(WEBRTC_DIR)/include/webrtc
  68. rsync -m --recursive --include='*/' --include='*.h' --exclude='*' \
  69. $(patsubst %,$(WEBRTC_DIR)/webrtc-checkout/src/%,$(WEBRTC_INCLUDES)) \
  70. $(WEBRTC_DIR)/include/webrtc
  71. touch $@
  72. # Libraries
  73. .PRECIOUS: $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/obj/%.a
  74. $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/obj/%.a: $(RTC_STAMP_COMPILE)
  75. touch $@
  76. $(WEBRTC_DIR)/lib/%.a: $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/obj/%.a
  77. @mkdir -p $(@D)
  78. cp $< $@
  79. # Create distribution
  80. WEBRTC_DIST_LIBS ?= libwebrtc.a $(WEBRTC_DIST_LIBS_EXTRA)
  81. $(WEBRTC_DIR)/dist.tar.gz: $(patsubst %,$(WEBRTC_DIR)/lib/%,$(WEBRTC_DIST_LIBS)) $(RTC_STAMP_ALL)
  82. rm -f $@
  83. cd $(WEBRTC_DIR) && tar czf $(notdir $@) \
  84. include $(patsubst %,lib/%,$(WEBRTC_DIST_LIBS)) \
  85. $(patsubst $(WEBRTC_DIR)/%,%,$(RTC_STAMP_ALL))
  86. .PHONY: rtc-dist
  87. rtc-dist: $(WEBRTC_DIR)/dist.tar.gz
  88. .PHONY: rtc-clean
  89. rtc-clean:
  90. rm -rf $(WEBRTC_DIR)/include/webrtc $(WEBRTC_DIR)/lib
  91. .PHONY: rtc-gn-clean
  92. rtc-gn-clean: rtc-clean
  93. cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gn clean out/$(WEBRTC_OUT)
  94. rm -f $(RTC_STAMP_COMPILE)
  95. .PHONY: rtc-clean-all
  96. rtc-clean-all: rtc-clean
  97. rm -rf $(WEBRTC_DIR)/depot_tools $(WEBRTC_DIR)/webrtc-checkout
  98. .PHONY: rtc-redo
  99. rtc-redo:
  100. rm -f $(RTC_STAMP_COMPILE)
  101. .PHONY: rtc-mock-stamps
  102. rtc-mock-stamps:
  103. mkdir -p $(dir $(RTC_STAMP_DEPOT)) && touch $(RTC_STAMP_DEPOT)
  104. mkdir -p $(dir $(RTC_STAMP_REPO)) && touch $(RTC_STAMP_REPO)
  105. mkdir -p $(dir $(RTC_STAMP_VERSION)) && touch $(RTC_STAMP_VERSION)
  106. mkdir -p $(dir $(RTC_STAMP_COMPILE)) && touch $(RTC_STAMP_COMPILE)
  107. mkdir -p $(dir $(RTC_STAMP_INCLUDES)) && touch $(RTC_STAMP_INCLUDES)