WEBRTC_BASE ?= . WEBRTC_DIR ?= $(WEBRTC_BASE) WEBRTC_VERSION ?= m79 WEBRTC_OUT ?= Release WEBRTC_GN_ARGS ?= \ is_debug=false \ use_sysroot=false \ rtc_include_tests=false \ rtc_use_h264=true \ rtc_use_x11=false \ treat_warnings_as_errors=false \ is_clang=false \ use_custom_libcxx=false \ use_rtti=true \ $(WEBRTC_GN_ARGS_EXTRA) WEBRTC_TARGETS ?= default $(WEBRTC_TARGETS_EXTRA) WEBRTC_INCLUDES = \ api audio base call common_audio common_video logging media modules p2p pc \ system_wrappers rtc_base rtc_tools video third_party common_types.h \ $(WEBRTC_INCLUDES_EXTRA) WEBRTC_PLATFORM ?= POSIX WEBRTC_FLAGS ?= \ -I$(WEBRTC_BASE)/include \ -I$(WEBRTC_DIR)/include -I$(WEBRTC_DIR)/include/webrtc \ -I$(WEBRTC_DIR)/include/webrtc/third_party/abseil-cpp \ -DWEBRTC_$(WEBRTC_PLATFORM) WEBRTC_SETPATH = PATH=$(WEBRTC_DIR)/depot_tools:"$$PATH" RTC_STAMP_DEPOT = $(WEBRTC_DIR)/depot_tools/.stamp RTC_STAMP_REPO = $(WEBRTC_DIR)/webrtc-checkout/.stamp RTC_STAMP_VERSION = $(WEBRTC_DIR)/webrtc-checkout/.stamps/stamp-$(WEBRTC_VERSION) RTC_STAMP_COMPILE = $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/.stamp RTC_STAMP_INCLUDES = $(WEBRTC_DIR)/include/webrtc/.stamp RTC_STAMP_ALL = \ $(RTC_STAMP_DEPOT) $(RTC_STAMP_REPO) $(RTC_STAMP_VERSION) \ $(RTC_STAMP_COMPILE) $(RTC_STAMP_INCLUDES) .PHONY: rtcall rtc-all: \ $(WEBRTC_DIR)/include/webrtc/.stamp \ $(WEBRTC_DIR)/lib/libwebrtc.a # Get depot_tools, which contains all the tools required to work with Google software $(RTC_STAMP_DEPOT): rm -rf $(WEBRTC_DIR)/depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $(WEBRTC_DIR)/depot_tools touch $@ # Fetch the WebRTC project itself $(RTC_STAMP_REPO): $(RTC_STAMP_DEPOT) rm -rf $(WEBRTC_DIR)/webrtc-checkout && mkdir $(WEBRTC_DIR)/webrtc-checkout # # Fetch webrtc, thit will take time... cd $(WEBRTC_DIR)/webrtc-checkout && $(WEBRTC_SETPATH) fetch --nohooks --no-history webrtc touch $@ # Check out the correct WebRTC branch/commit $(RTC_STAMP_VERSION): $(RTC_STAMP_REPO) rm -rf $(WEBRTC_DIR)/webrtc-checkout/.stamps && mkdir $(WEBRTC_DIR)/webrtc-checkout/.stamps cd $(WEBRTC_DIR)/webrtc-checkout/src && git checkout branch-heads/$(WEBRTC_VERSION) # # Sync webrtc, this will take time... cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gclient sync -D --nohooks touch $@ # Compile $(RTC_STAMP_COMPILE): cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gn gen out/$(WEBRTC_OUT) --args='$(WEBRTC_GN_ARGS)' cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) ninja -C out/$(WEBRTC_OUT) $(WEBRTC_TARGETS) touch $@ # Includes $(RTC_STAMP_INCLUDES): $(RTC_STAMP_VERSION) rm -rf $(WEBRTC_DIR)/include/webrtc && mkdir -p $(WEBRTC_DIR)/include/webrtc rsync -m --recursive --include='*/' --include='*.h' --exclude='*' \ $(patsubst %,$(WEBRTC_DIR)/webrtc-checkout/src/%,$(WEBRTC_INCLUDES)) \ $(WEBRTC_DIR)/include/webrtc touch $@ # Libraries .PRECIOUS: $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/obj/%.a $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/obj/%.a: $(RTC_STAMP_COMPILE) touch $@ $(WEBRTC_DIR)/lib/%.a: $(WEBRTC_DIR)/webrtc-checkout/src/out/$(WEBRTC_OUT)/obj/%.a @mkdir -p $(@D) cp $< $@ # Create distribution WEBRTC_DIST_LIBS ?= libwebrtc.a $(WEBRTC_DIST_LIBS_EXTRA) $(WEBRTC_DIR)/dist.tar.gz: $(patsubst %,$(WEBRTC_DIR)/lib/%,$(WEBRTC_DIST_LIBS)) $(RTC_STAMP_ALL) rm -f $@ cd $(WEBRTC_DIR) && tar czf $(notdir $@) \ include $(patsubst %,lib/%,$(WEBRTC_DIST_LIBS)) \ $(patsubst $(WEBRTC_DIR)/%,%,$(RTC_STAMP_ALL)) .PHONY: rtc-dist rtc-dist: $(WEBRTC_DIR)/dist.tar.gz .PHONY: rtc-clean rtc-clean: rm -rf $(WEBRTC_DIR)/include/webrtc $(WEBRTC_DIR)/lib .PHONY: rtc-gn-clean rtc-gn-clean: rtc-clean cd $(WEBRTC_DIR)/webrtc-checkout/src && $(WEBRTC_SETPATH) gn clean out/$(WEBRTC_OUT) rm -f $(RTC_STAMP_COMPILE) .PHONY: rtc-clean-all rtc-clean-all: rtc-clean rm -rf $(WEBRTC_DIR)/depot_tools $(WEBRTC_DIR)/webrtc-checkout .PHONY: rtc-redo rtc-redo: rm -f $(RTC_STAMP_COMPILE) .PHONY: rtc-mock-stamps rtc-mock-stamps: mkdir -p $(dir $(RTC_STAMP_DEPOT)) && touch $(RTC_STAMP_DEPOT) mkdir -p $(dir $(RTC_STAMP_REPO)) && touch $(RTC_STAMP_REPO) mkdir -p $(dir $(RTC_STAMP_VERSION)) && touch $(RTC_STAMP_VERSION) mkdir -p $(dir $(RTC_STAMP_COMPILE)) && touch $(RTC_STAMP_COMPILE) mkdir -p $(dir $(RTC_STAMP_INCLUDES)) && touch $(RTC_STAMP_INCLUDES)