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

TOOLSET := host
TARGET := protoc
DEFS_Debug := '-DNO_HEAPCHECKER' \
	'-DCHROMIUM_BUILD' \
	'-DUSE_NSS=1' \
	'-DTOOLKIT_USES_GTK=1' \
	'-DGTK_DISABLE_SINGLE_INCLUDES=1' \
	'-DWEBUI_TASK_MANAGER=1' \
	'-DENABLE_REMOTING=1' \
	'-DENABLE_P2P_APIS=1' \
	'-DENABLE_CONFIGURATION_POLICY' \
	'-DENABLE_INPUT_SPEECH' \
	'-DENABLE_NOTIFICATIONS' \
	'-DENABLE_GPU=1' \
	'-DENABLE_EGLIMAGE=1' \
	'-DUSE_SKIA=1' \
	'-DENABLE_REGISTER_PROTOCOL_HANDLER=1' \
	'-DGOOGLE_PROTOBUF_NO_RTTI' \
	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
	'-D_DEBUG'

# Flags passed to all source files.
CFLAGS_Debug := -pthread \
	-fno-exceptions \
	-Wno-unused-parameter \
	-Wno-missing-field-initializers \
	-D_FILE_OFFSET_BITS=64 \
	-fvisibility=hidden \
	-pipe \
	-fPIC \
	-fno-strict-aliasing \
	-Wno-format \
	-Wno-unused-result \
	-O0 \
	-g

# Flags passed to only C files.
CFLAGS_C_Debug := 

# Flags passed to only C++ files.
CFLAGS_CC_Debug := -fno-rtti \
	-fno-threadsafe-statics \
	-fvisibility-inlines-hidden \
	-Wno-deprecated

INCS_Debug := -Ithird_party/protobuf \
	-Ithird_party/protobuf/src/src \
	-Ithird_party/protobuf/src

DEFS_Release := '-DNO_HEAPCHECKER' \
	'-DCHROMIUM_BUILD' \
	'-DUSE_NSS=1' \
	'-DTOOLKIT_USES_GTK=1' \
	'-DGTK_DISABLE_SINGLE_INCLUDES=1' \
	'-DWEBUI_TASK_MANAGER=1' \
	'-DENABLE_REMOTING=1' \
	'-DENABLE_P2P_APIS=1' \
	'-DENABLE_CONFIGURATION_POLICY' \
	'-DENABLE_INPUT_SPEECH' \
	'-DENABLE_NOTIFICATIONS' \
	'-DENABLE_GPU=1' \
	'-DENABLE_EGLIMAGE=1' \
	'-DUSE_SKIA=1' \
	'-DENABLE_REGISTER_PROTOCOL_HANDLER=1' \
	'-DGOOGLE_PROTOBUF_NO_RTTI' \
	'-DNDEBUG' \
	'-DNVALGRIND' \
	'-DDYNAMIC_ANNOTATIONS_ENABLED=0'

# Flags passed to all source files.
CFLAGS_Release := -pthread \
	-fno-exceptions \
	-Wno-unused-parameter \
	-Wno-missing-field-initializers \
	-D_FILE_OFFSET_BITS=64 \
	-fvisibility=hidden \
	-pipe \
	-fPIC \
	-fno-strict-aliasing \
	-Wno-format \
	-Wno-unused-result \
	-O2 \
	-fno-ident \
	-fdata-sections \
	-ffunction-sections

# Flags passed to only C files.
CFLAGS_C_Release := 

# Flags passed to only C++ files.
CFLAGS_CC_Release := -fno-rtti \
	-fno-threadsafe-statics \
	-fvisibility-inlines-hidden \
	-Wno-deprecated

INCS_Release := -Ithird_party/protobuf \
	-Ithird_party/protobuf/src/src \
	-Ithird_party/protobuf/src

OBJS := $(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/code_generator.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/plugin.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/plugin.pb.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/subprocess.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/zip_writer.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_file.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_message.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_service.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_enum.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_enum_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_extension.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_file.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_generator.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_helpers.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_message.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_message_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_primitive_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_service.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/java/java_string_field.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/python/python_generator.o \
	$(obj).host/$(TARGET)/third_party/protobuf/src/google/protobuf/compiler/main.o

# Add to the list of files we specially track dependencies for.
all_deps += $(OBJS)

# Make sure our dependencies are built before any of us.
$(OBJS): | $(obj).host/third_party/protobuf/libprotobuf_full_do_not_use.a $(obj).host/third_party/protobuf/libprotobuf_lite.a

# CFLAGS et al overrides must be target-local.
# See "Target-specific Variable Values" in the GNU Make manual.
$(OBJS): TOOLSET := $(TOOLSET)
$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE))
$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE))

# Suffix rules, putting all outputs into $(obj).

$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD
	@$(call do_cmd,cxx,1)

# Try building from generated source, too.

$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD
	@$(call do_cmd,cxx,1)

$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD
	@$(call do_cmd,cxx,1)

# End of this set of suffix rules
### Rules for final target.
LDFLAGS_Debug := -pthread \
	-Wl,-z,noexecstack \
	-fPIC

LDFLAGS_Release := -pthread \
	-Wl,-z,noexecstack \
	-fPIC \
	-Wl,-O1 \
	-Wl,--as-needed \
	-Wl,--gc-sections

LIBS := 

$(builddir)/protoc: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE))
$(builddir)/protoc: LIBS := $(LIBS)
$(builddir)/protoc: LD_INPUTS := $(OBJS) $(obj).host/third_party/protobuf/libprotobuf_full_do_not_use.a $(obj).host/third_party/protobuf/libprotobuf_lite.a
$(builddir)/protoc: TOOLSET := $(TOOLSET)
$(builddir)/protoc: $(OBJS) $(obj).host/third_party/protobuf/libprotobuf_full_do_not_use.a $(obj).host/third_party/protobuf/libprotobuf_lite.a FORCE_DO_CMD
	$(call do_cmd,link)

all_deps += $(builddir)/protoc
# Add target alias
.PHONY: protoc
protoc: $(builddir)/protoc

# Add executable to "all" target.
.PHONY: all
all: $(builddir)/protoc

