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

TOOLSET := target
TARGET := unix_dgram
DEFS_Debug := \
	'-DNODE_GYP_MODULE_NAME=unix_dgram' \
	'-DUSING_UV_SHARED=1' \
	'-DUSING_V8_SHARED=1' \
	'-DV8_DEPRECATION_WARNINGS=1' \
	'-D_GLIBCXX_USE_CXX11_ABI=1' \
	'-D_LARGEFILE_SOURCE' \
	'-D_FILE_OFFSET_BITS=64' \
	'-D__STDC_FORMAT_MACROS' \
	'-DOPENSSL_NO_PINSHARED' \
	'-DOPENSSL_THREADS' \
	'-DBUILDING_NODE_EXTENSION' \
	'-DDEBUG' \
	'-D_DEBUG'

# Flags passed to all source files.
CFLAGS_Debug := \
	-fPIC \
	-pthread \
	-Wall \
	-Wextra \
	-Wno-unused-parameter \
	-m64 \
	-g \
	-O0

# Flags passed to only C files.
CFLAGS_C_Debug :=

# Flags passed to only C++ files.
CFLAGS_CC_Debug := \
	-fno-rtti \
	-fno-exceptions \
	-std=gnu++17

INCS_Debug := \
	-I/root/.cache/node-gyp/20.11.1/include/node \
	-I/root/.cache/node-gyp/20.11.1/src \
	-I/root/.cache/node-gyp/20.11.1/deps/openssl/config \
	-I/root/.cache/node-gyp/20.11.1/deps/openssl/openssl/include \
	-I/root/.cache/node-gyp/20.11.1/deps/uv/include \
	-I/root/.cache/node-gyp/20.11.1/deps/zlib \
	-I/root/.cache/node-gyp/20.11.1/deps/v8/include \
	-I$(srcdir)/../../../nan-npm-2.18.0-a51ed5bed5/node_modules/nan

DEFS_Release := \
	'-DNODE_GYP_MODULE_NAME=unix_dgram' \
	'-DUSING_UV_SHARED=1' \
	'-DUSING_V8_SHARED=1' \
	'-DV8_DEPRECATION_WARNINGS=1' \
	'-D_GLIBCXX_USE_CXX11_ABI=1' \
	'-D_LARGEFILE_SOURCE' \
	'-D_FILE_OFFSET_BITS=64' \
	'-D__STDC_FORMAT_MACROS' \
	'-DOPENSSL_NO_PINSHARED' \
	'-DOPENSSL_THREADS' \
	'-DBUILDING_NODE_EXTENSION'

# Flags passed to all source files.
CFLAGS_Release := \
	-fPIC \
	-pthread \
	-Wall \
	-Wextra \
	-Wno-unused-parameter \
	-m64 \
	-O3 \
	-fno-omit-frame-pointer

# Flags passed to only C files.
CFLAGS_C_Release :=

# Flags passed to only C++ files.
CFLAGS_CC_Release := \
	-fno-rtti \
	-fno-exceptions \
	-std=gnu++17

INCS_Release := \
	-I/root/.cache/node-gyp/20.11.1/include/node \
	-I/root/.cache/node-gyp/20.11.1/src \
	-I/root/.cache/node-gyp/20.11.1/deps/openssl/config \
	-I/root/.cache/node-gyp/20.11.1/deps/openssl/openssl/include \
	-I/root/.cache/node-gyp/20.11.1/deps/uv/include \
	-I/root/.cache/node-gyp/20.11.1/deps/zlib \
	-I/root/.cache/node-gyp/20.11.1/deps/v8/include \
	-I$(srcdir)/../../../nan-npm-2.18.0-a51ed5bed5/node_modules/nan

OBJS := \
	$(obj).target/$(TARGET)/src/unix_dgram.o

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

# 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 \
	-rdynamic \
	-m64

LDFLAGS_Release := \
	-pthread \
	-rdynamic \
	-m64

LIBS :=

$(obj).target/unix_dgram.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE))
$(obj).target/unix_dgram.node: LIBS := $(LIBS)
$(obj).target/unix_dgram.node: TOOLSET := $(TOOLSET)
$(obj).target/unix_dgram.node: $(OBJS) FORCE_DO_CMD
	$(call do_cmd,solink_module)

all_deps += $(obj).target/unix_dgram.node
# Add target alias
.PHONY: unix_dgram
unix_dgram: $(builddir)/unix_dgram.node

# Copy this to the executable output path.
$(builddir)/unix_dgram.node: TOOLSET := $(TOOLSET)
$(builddir)/unix_dgram.node: $(obj).target/unix_dgram.node FORCE_DO_CMD
	$(call do_cmd,copy)

all_deps += $(builddir)/unix_dgram.node
# Short alias for building this executable.
.PHONY: unix_dgram.node
unix_dgram.node: $(obj).target/unix_dgram.node $(builddir)/unix_dgram.node

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

