# This file is generated by gyp; do not edit.

TOOLSET := target
TARGET := All
### Rules for final target.
$(obj).target/All.stamp: TOOLSET := $(TOOLSET)
$(obj).target/All.stamp: $(builddir)/peerconnection_server $(builddir)/peerconnection_client $(obj).target/src/common_audio/libsignal_processing.a $(obj).target/src/common_audio/libresampler.a $(obj).target/src/common_audio/libvad.a $(builddir)/signal_processing_unittests $(builddir)/resampler_unittests $(builddir)/vad_unittests $(obj).target/src/common_video/libwebrtc_libyuv.a $(obj).target/src/common_video/libwebrtc_jpeg.a $(builddir)/libyuv_unittests $(builddir)/jpeg_test $(obj).target/src/modules/libCNG.a $(obj).target/src/modules/libG711.a $(obj).target/src/modules/libG722.a $(obj).target/src/modules/libiLBC.a $(obj).target/src/modules/libiSAC.a $(obj).target/src/modules/libiSACFix.a $(obj).target/src/modules/libPCM16B.a $(obj).target/src/modules/libaudio_coding_module.a $(obj).target/src/modules/libNetEq.a $(obj).target/src/modules/libaudio_conference_mixer.a $(obj).target/src/modules/libaudio_device.a $(obj).target/src/modules/libaudio_processing.a $(obj).target/src/modules/libaec.a $(obj).target/src/modules/libaec_sse2.a $(obj).target/src/modules/libaecm.a $(obj).target/src/modules/libagc.a $(obj).target/src/modules/libns.a $(obj).target/src/modules/libns_fix.a $(obj).target/src/modules/libapm_util.a $(obj).target/src/modules/libmedia_file.a $(obj).target/src/modules/libudp_transport.a $(obj).target/src/modules/libwebrtc_utility.a $(obj).target/src/modules/libwebrtc_i420.a $(obj).target/src/modules/libwebrtc_vp8.a $(obj).target/src/modules/libwebrtc_video_coding.a $(obj).target/src/modules/libvideo_capture_module.a $(obj).target/src/modules/libvideo_processing.a $(obj).target/src/modules/libvideo_processing_sse2.a $(obj).target/src/modules/libvideo_render_module.a $(obj).target/src/modules/librtp_rtcp.a $(builddir)/iSACtest $(builddir)/iSACAPITest $(builddir)/iSACSwitchSampRateTest $(builddir)/iSACFixtest $(builddir)/audioproc_unittest $(obj).target/src/modules/libaudioproc_unittest_proto.a $(builddir)/rtp_rtcp_unittests $(builddir)/test_bwe $(builddir)/test_fec $(builddir)/test_rtp_rtcp_api $(builddir)/video_coding_test $(builddir)/video_coding_unittests $(builddir)/video_processing_unittests $(builddir)/audioproc $(builddir)/unpack_aecdump $(obj).target/src/modules/libvideo_codecs_test_framework.a $(builddir)/video_codecs_test_framework_unittests $(builddir)/video_codecs_test_framework_integrationtests $(builddir)/video_quality_measurement $(builddir)/cng_unittests $(builddir)/g711_unittests $(builddir)/g711_test $(builddir)/g722_unittests $(builddir)/G722Test $(builddir)/iLBCtest $(builddir)/pcm16b_unittests $(builddir)/audio_coding_module_test $(builddir)/audio_coding_unittests $(builddir)/neteq_unittests $(builddir)/NetEqRTPplay $(builddir)/RTPencode $(builddir)/RTPjitter $(builddir)/RTPanalyze $(builddir)/RTPchange $(builddir)/RTPtimeshift $(builddir)/RTPcat $(obj).target/src/modules/libNetEqTestTools.a $(builddir)/audio_conference_mixer_unittests $(builddir)/audio_device_test_api $(builddir)/audio_device_test_func $(obj).target/src/modules/libaudioproc_debug_proto.a $(builddir)/media_file_unittests $(builddir)/udp_transport_unittests $(builddir)/webrtc_utility_unittests $(obj).target/src/modules/libtest_framework.a $(builddir)/vp8_test $(builddir)/vp8_unittests $(builddir)/video_capture_module_test $(builddir)/video_render_module_test $(obj).target/src/system_wrappers/source/libsystem_wrappers.a $(builddir)/system_wrappers_unittests $(obj).target/src/video_engine/libvideo_engine_core.a $(builddir)/vie_auto_test $(builddir)/video_engine_core_unittests $(obj).target/src/voice_engine/libvoice_engine_core.a $(builddir)/voe_auto_test $(builddir)/voe_cmd_test $(builddir)/voice_engine_unittests $(obj).target/test/libmetrics.a $(builddir)/metrics_unittests $(obj).target/test/libtest_support.a $(obj).target/test/libtest_support_main.a $(builddir)/test_support_unittests FORCE_DO_CMD
	$(call do_cmd,touch)

all_deps += $(obj).target/All.stamp
# Add target alias
.PHONY: All
All: $(obj).target/All.stamp

# Add target alias to "all" target.
.PHONY: all
all: All

