266 lines
8.6 KiB
Makefile
266 lines
8.6 KiB
Makefile
|
#
|
||
|
# GNU Makefile for nghttp2 / MSVC.
|
||
|
#
|
||
|
# By G. Vanem <gvanem@yahoo.no> 2013
|
||
|
# The MIT License apply.
|
||
|
#
|
||
|
|
||
|
#
|
||
|
# Choose your weapons:
|
||
|
# Set 'ZLIB_ROOT' to the root of zlib.
|
||
|
# Set 'USE_CYTHON=1' to build and install the 'nghttp2.pyd' Python extension.
|
||
|
#
|
||
|
ZLIB_ROOT = g:/MingW32/src/Compression/zlib-1.2.8
|
||
|
USE_CYTHON = 1
|
||
|
|
||
|
_VERSION := $(shell grep AC_INIT ../configure.ac | cut -d'[' -f3 | sed -e 's/-DEV], //g')
|
||
|
_VERSION := $(subst ., ,$(_VERSION))
|
||
|
VER_MAJOR = $(word 1,$(_VERSION))
|
||
|
VER_MINOR = $(word 2,$(_VERSION))
|
||
|
VER_MICRO = $(word 3,$(_VERSION))
|
||
|
VERSION = $(VER_MAJOR).$(VER_MINOR).$(VER_MICRO)
|
||
|
VERSION_NUM = ($(VER_MAJOR) << 16) + ($(VER_MINOR) << 8) + $(VER_MICRO)
|
||
|
|
||
|
GENERATED = 'Generated by $(realpath Makefile.MSVC)'
|
||
|
|
||
|
#
|
||
|
# Where to copy nghttp2.dll + lib + headers to.
|
||
|
# Note: 'make install' is not in default targets. Do it explicitly.
|
||
|
#
|
||
|
VC_ROOT = $(realpath $(VCINSTALLDIR))
|
||
|
INSTALL_BIN = $(VC_ROOT)/bin
|
||
|
INSTALL_LIB = $(VC_ROOT)/lib
|
||
|
INSTALL_HDR = $(VC_ROOT)/include
|
||
|
|
||
|
#
|
||
|
# Build for DEBUG-model and RELEASE at the same time.
|
||
|
#
|
||
|
TARGETS = nghttp2.lib nghttp2.dll nghttp2_imp.lib \
|
||
|
nghttp2d.lib nghttp2d.dll nghttp2d_imp.lib
|
||
|
|
||
|
EXT_LIBS = $(ZLIB_ROOT)/zlib.lib ws2_32.lib
|
||
|
|
||
|
OBJ_DIR = MSVC_obj
|
||
|
|
||
|
NGHTTP2_PDB_R = $(OBJ_DIR)/nghttp2.pdb
|
||
|
NGHTTP2_PDB_D = $(OBJ_DIR)/nghttp2d.pdb
|
||
|
|
||
|
CC = cl
|
||
|
CFLAGS = -I./includes -I$(ZLIB_ROOT) -DHAVE_WINSOCK2_H -Dssize_t=long
|
||
|
|
||
|
CFLAGS_R = -nologo -MD -W3 -Zi -Fd./$(NGHTTP2_PDB_R)
|
||
|
CFLAGS_D = -nologo -MDd -W3 -Zi -Fd./$(NGHTTP2_PDB_D) \
|
||
|
-Ot -D_DEBUG -GF -RTCs -RTCu # -RTCc -GS
|
||
|
|
||
|
LDFLAGS = -nologo -machine:i386 -map -debug -incremental:no # -verbose
|
||
|
|
||
|
NGHTTP2_SRC = nghttp2_buf.c \
|
||
|
nghttp2_callbacks.c \
|
||
|
nghttp2_frame.c \
|
||
|
nghttp2_helper.c \
|
||
|
nghttp2_hd.c \
|
||
|
nghttp2_hd_huffman.c \
|
||
|
nghttp2_hd_huffman_data.c \
|
||
|
nghttp2_map.c \
|
||
|
nghttp2_npn.c \
|
||
|
nghttp2_option.c \
|
||
|
nghttp2_outbound_item.c \
|
||
|
nghttp2_priority_spec.c \
|
||
|
nghttp2_pq.c \
|
||
|
nghttp2_queue.c \
|
||
|
nghttp2_session.c \
|
||
|
nghttp2_stream.c \
|
||
|
nghttp2_submit.c \
|
||
|
nghttp2_version.c
|
||
|
|
||
|
NGHTTP2_OBJ_R = $(addprefix $(OBJ_DIR)/r_, $(notdir $(NGHTTP2_SRC:.c=.obj)))
|
||
|
NGHTTP2_OBJ_D = $(addprefix $(OBJ_DIR)/d_, $(notdir $(NGHTTP2_SRC:.c=.obj)))
|
||
|
|
||
|
all: intro $(OBJ_DIR) $(TARGETS)
|
||
|
@echo 'Welcome to NgHTTP2 (release + debug).'
|
||
|
@echo 'Do a "make -f Makefile.MSVC install" at own risk!'
|
||
|
|
||
|
intro:
|
||
|
@echo 'Building NgHTTP (MSVC) ver. "$(VERSION)".'
|
||
|
|
||
|
test_ver:
|
||
|
@echo '$$(VERSION): "$(VERSION)".'
|
||
|
@echo '$$(_VERSION): "$(_VERSION)".'
|
||
|
@echo '$$(VER_MAJOR): "$(VER_MAJOR)".'
|
||
|
@echo '$$(VER_MINOR): "$(VER_MINOR)".'
|
||
|
@echo '$$(VER_MICRO): "$(VER_MICRO)".'
|
||
|
|
||
|
$(OBJ_DIR):
|
||
|
- mkdir $(OBJ_DIR)
|
||
|
|
||
|
install: includes/nghttp2/nghttp2.h includes/nghttp2/nghttp2ver.h \
|
||
|
nghttp2.dll nghttp2.lib nghttp2_imp.lib \
|
||
|
nghttp2d.dll nghttp2d.lib nghttp2d_imp.lib \
|
||
|
copy_headers_and_libs install_nghttp2_pyd_$(USE_CYTHON)
|
||
|
|
||
|
#
|
||
|
# This MUST be done before using the 'install_nghttp2_pyd_1' rule.
|
||
|
#
|
||
|
copy_headers_and_libs:
|
||
|
- mkdir $(INSTALL_HDR)/nghttp2
|
||
|
cp --update $(addprefix includes/nghttp2/, nghttp2.h nghttp2ver.h) $(INSTALL_HDR)/nghttp2
|
||
|
cp --update nghttp2.dll nghttp2d.dll $(NGHTTP2_PDB_R) $(NGHTTP2_PDB_D) $(INSTALL_BIN)
|
||
|
cp --update nghttp2.lib nghttp2d.lib nghttp2_imp.lib nghttp2d_imp.lib $(INSTALL_LIB)
|
||
|
@echo
|
||
|
|
||
|
nghttp2.lib: $(NGHTTP2_OBJ_R)
|
||
|
lib -nologo -out:$@ $^
|
||
|
@echo
|
||
|
|
||
|
nghttp2d.lib: $(NGHTTP2_OBJ_D)
|
||
|
lib -nologo -out:$@ $^
|
||
|
@echo
|
||
|
|
||
|
nghttp2.dll nghttp2_imp.lib: $(NGHTTP2_OBJ_R) $(OBJ_DIR)/r_nghttp2.res $(OBJ_DIR)/r_nghttp2.def
|
||
|
link $(LDFLAGS) -dll -out:nghttp2.dll -implib:nghttp2_imp.lib -def:$(OBJ_DIR)/r_nghttp2.def \
|
||
|
$(NGHTTP2_OBJ_R) $(OBJ_DIR)/r_nghttp2.res $(EXT_LIBS)
|
||
|
@echo
|
||
|
|
||
|
nghttp2d.dll nghttp2d_imp.lib: $(NGHTTP2_OBJ_D) $(OBJ_DIR)/d_nghttp2.res $(OBJ_DIR)/d_nghttp2.def
|
||
|
link $(LDFLAGS) -dll -out:nghttp2d.dll -implib:nghttp2d_imp.lib -def:$(OBJ_DIR)/d_nghttp2.def \
|
||
|
$(NGHTTP2_OBJ_D) $(OBJ_DIR)/d_nghttp2.res $(EXT_LIBS)
|
||
|
@echo
|
||
|
|
||
|
install_nghttp2_pyd_0: ;
|
||
|
|
||
|
install_nghttp2_pyd_1: $(addprefix ../python/, setup.py.in nghttp2.pyx)
|
||
|
cd ../python ; \
|
||
|
echo '# $(GENERATED). DO NOT EDIT.' > setup.py ; \
|
||
|
sed -e 's/@top_srcdir@/../' \
|
||
|
-e 's/@top_builddir@/../' \
|
||
|
-e 's/@PACKAGE_VERSION@/$(VERSION)/' setup.py.in >> setup.py ; \
|
||
|
cython -v nghttp2.pyx ; \
|
||
|
python setup.py install
|
||
|
|
||
|
clean_nghttp2_pyd_0: ;
|
||
|
|
||
|
clean_nghttp2_pyd_1:
|
||
|
cd ../python ; \
|
||
|
rm -f setup.py nghttp2.c ; \
|
||
|
rm -fR build/*
|
||
|
|
||
|
$(OBJ_DIR)/r_%.obj: %.c
|
||
|
$(CC) $(CFLAGS_R) $(CFLAGS) -Fo$@ -c $<
|
||
|
@echo
|
||
|
|
||
|
$(OBJ_DIR)/d_%.obj: %.c
|
||
|
$(CC) $(CFLAGS_D) $(CFLAGS) -Fo$@ -c $<
|
||
|
@echo
|
||
|
|
||
|
$(OBJ_DIR)/r_nghttp2.res: nghttp2.rc
|
||
|
rc -nologo -D_RELEASE -Fo $@ $<
|
||
|
@echo
|
||
|
|
||
|
$(OBJ_DIR)/d_nghttp2.res: nghttp2.rc
|
||
|
rc -nologo -D_DEBUG -Fo $@ $<
|
||
|
@echo
|
||
|
|
||
|
includes/nghttp2/nghttp2ver.h: includes/nghttp2/nghttp2ver.h.in
|
||
|
sed < includes/nghttp2/nghttp2ver.h.in \
|
||
|
-e 's/@PACKAGE_VERSION@/$(VERSION)/g' \
|
||
|
-e 's/@PACKAGE_VERSION_NUM@/($(VERSION_NUM))/g' > $@
|
||
|
touch --reference=includes/nghttp2/nghttp2ver.h.in $@
|
||
|
|
||
|
|
||
|
define RES_FILE
|
||
|
#include <winver.h>
|
||
|
|
||
|
VS_VERSION_INFO VERSIONINFO
|
||
|
FILEVERSION $(VER_MAJOR), $(VER_MINOR), $(VER_MICRO), 0
|
||
|
PRODUCTVERSION $(VER_MAJOR), $(VER_MINOR), $(VER_MICRO), 0
|
||
|
FILEFLAGSMASK 0x3fL
|
||
|
FILEOS 0x40004L
|
||
|
FILETYPE 0x2L
|
||
|
FILESUBTYPE 0x0L
|
||
|
#ifdef _DEBUG
|
||
|
#define VER_STR "$(VERSION).0 (MSVC debug)"
|
||
|
#define DBG "d"
|
||
|
FILEFLAGS 0x1L
|
||
|
#else
|
||
|
#define VER_STR "$(VERSION).0 (MSVC release)"
|
||
|
#define DBG ""
|
||
|
FILEFLAGS 0x0L
|
||
|
#endif
|
||
|
BEGIN
|
||
|
BLOCK "StringFileInfo"
|
||
|
BEGIN
|
||
|
BLOCK "040904b0"
|
||
|
BEGIN
|
||
|
VALUE "CompanyName", "http://tatsuhiro-t.github.io/nghttp2/"
|
||
|
VALUE "FileDescription", "nghttp2; HTTP/2 C library"
|
||
|
VALUE "FileVersion", VER_STR
|
||
|
VALUE "InternalName", "nghttp2" DBG
|
||
|
VALUE "LegalCopyright", "The MIT License"
|
||
|
VALUE "LegalTrademarks", ""
|
||
|
VALUE "OriginalFilename", "nghttp2" DBG ".dll"
|
||
|
VALUE "ProductName", "NGHTTP2."
|
||
|
VALUE "ProductVersion", VER_STR
|
||
|
VALUE "PrivateBuild", "The privat build of <gvanem@yahoo.no>."
|
||
|
VALUE "SpecialBuild", ""
|
||
|
END
|
||
|
END
|
||
|
BLOCK "VarFileInfo"
|
||
|
BEGIN
|
||
|
VALUE "Translation", 0x409, 1200
|
||
|
END
|
||
|
END
|
||
|
endef
|
||
|
|
||
|
export RES_FILE
|
||
|
|
||
|
nghttp2.rc: Makefile.MSVC
|
||
|
@echo 'Generating $@...'
|
||
|
@echo ' /* $(GENERATED). DO NOT EDIT.' > $@
|
||
|
@echo ' */' >> $@
|
||
|
@echo "$$RES_FILE" >> $@
|
||
|
|
||
|
$(OBJ_DIR)/r_nghttp2.def: Makefile.MSVC
|
||
|
@echo 'Generating $@...'
|
||
|
@echo '; $(GENERATED). DO NOT EDIT.' > $@
|
||
|
@echo ';' >> $@
|
||
|
@echo 'LIBRARY nghttp2.dll' >> $@
|
||
|
@echo 'EXPORTS' >> $@
|
||
|
nm $(NGHTTP2_OBJ_R) | grep ' T .*_nghttp2' | sed 's/^.* _/ /' >> $@
|
||
|
@echo 'NGHTTP2_STATIC_TABLE_LENGTH DATA' >> $@
|
||
|
|
||
|
$(OBJ_DIR)/d_nghttp2.def: Makefile.MSVC
|
||
|
@echo 'Generating $@...'
|
||
|
@echo '; $(GENERATED). DO NOT EDIT.' > $@
|
||
|
@echo ';' >> $@
|
||
|
@echo 'LIBRARY nghttp2d.dll' >> $@
|
||
|
@echo 'EXPORTS' >> $@
|
||
|
nm $(NGHTTP2_OBJ_D) | grep ' T .*_nghttp2' | sed 's/^.* _/ /' >> $@
|
||
|
@echo 'NGHTTP2_STATIC_TABLE_LENGTH DATA' >> $@
|
||
|
|
||
|
clean:
|
||
|
rm -f $(OBJ_DIR)/* nghttp2_imp.exp nghttp2_imp.exp \
|
||
|
nghttp2.map nghttp2d.map nghttp2.rc includes/nghttp2/nghttp2ver.h
|
||
|
@echo
|
||
|
|
||
|
vclean realclean: clean clean_nghttp2_pyd_$(USE_CYTHON)
|
||
|
rm -f $(TARGETS) nghttp2.pdb nghttp2d.pdb nghttp2_imp.exp nghttp2d_imp.exp .depend.MSVC
|
||
|
- rmdir $(OBJ_DIR)
|
||
|
|
||
|
#
|
||
|
# Use gcc to generated the dependencies. No MSVC specific args please!
|
||
|
#
|
||
|
REPLACE_R = 's/\(.*\)\.o: /\n$$(OBJ_DIR)\/r_\1.obj: /'
|
||
|
REPLACE_D = 's/\(.*\)\.o: /\n$$(OBJ_DIR)\/d_\1.obj: /'
|
||
|
|
||
|
depend: includes/nghttp2/nghttp2ver.h
|
||
|
@echo '# $(GENERATED). DO NOT EDIT.' > .depend.MSVC
|
||
|
gcc -MM $(CFLAGS) $(NGHTTP2_SRC) >> .depend.tmp
|
||
|
@echo '#' >> .depend.MSVC
|
||
|
@echo '# Release lib objects:' >> .depend.MSVC
|
||
|
sed -e $(REPLACE_R) .depend.tmp >> .depend.MSVC
|
||
|
@echo '#' >> .depend.MSVC
|
||
|
@echo '# Debug lib objects:' >> .depend.MSVC
|
||
|
sed -e $(REPLACE_D) .depend.tmp >> .depend.MSVC
|
||
|
rm -f .depend.tmp
|
||
|
|
||
|
-include .depend.MSVC
|