Created
November 10, 2015 13:20
-
-
Save Jan-E/cb9ed221e83ac40c450f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# GNU Makefile for nghttp2 / MSVC. | |
# | |
# By G. Vanem <gvanem@yahoo.no> 2013 | |
# Updated 3/2015 by Remo Eichenberger @remoe | |
# The MIT License apply. | |
# | |
# | |
# Choose your weapons: | |
# Set 'USE_CYTHON=1' to build and install the 'nghttp2.pyd' Python extension. | |
# | |
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST)) | |
USE_CYTHON := 0 | |
#USE_CYTHON := 0 | |
_VERSION := $(shell grep AC_INIT ../configure.ac | cut -d'[' -f3 | sed -e 's/], //g') | |
_VERSION := 1.4.0 # temp for build from 'git chechout 559b0cf' | |
_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 := 0x$(shell if [ ${VER_MAJOR} -lt 10 ] ;then echo 0;fi)$(VER_MAJOR)$(shell if [ ${VER_MINOR} -lt 10 ] ;then echo 0;fi)$(VER_MINOR)$(shell if [ ${VER_MICRO} -lt 10 ] ; then echo 0;fi)$(VER_MICRO) | |
GENERATED := 'Generated by $(realpath Makefile.MSVC)' | |
OBJ_DIR := MSVC_obj | |
#SUFFIX :=-vc90-mt-x86 | |
# | |
# Where to copy nghttp2.dll + lib + headers to. | |
# Note: 'make install' is not in default targets. Do it explicitly. | |
# | |
TARGET_DIR ?= ../_VC_ROOT | |
VC_ROOT := $(abspath $(TARGET_DIR)) | |
INSTALL_BIN := $(VC_ROOT)/bin | |
INSTALL_LIB := $(VC_ROOT)/lib | |
INSTALL_HDR := $(VC_ROOT)/include | |
DLL_R := $(OBJ_DIR)/nghttp2$(SUFFIX).dll | |
DLL_D := $(OBJ_DIR)/nghttp2d$(SUFFIX).dll | |
LIB_R := $(OBJ_DIR)/nghttp2-static.lib | |
LIB_D := $(OBJ_DIR)/nghttp2d-static.lib | |
IMP_R := $(OBJ_DIR)/nghttp2.lib | |
IMP_D := $(OBJ_DIR)/nghttp2d.lib | |
# | |
# Build for DEBUG-model and RELEASE at the same time. | |
# | |
TARGETS := $(LIB_R) $(DLL_R) $(IMP_R) \ | |
$(LIB_D) $(DLL_D) $(IMP_D) | |
EXT_LIBS = | |
NGHTTP2_PDB_R := $(OBJ_DIR)/nghttp2.pdb | |
NGHTTP2_PDB_D := $(OBJ_DIR)/nghttp2d.pdb | |
CC = cl | |
LD := link | |
AR := lib | |
#CC := icl | |
#LD := xilink | |
#AR := xilib | |
RC := rc | |
CFLAGS := -I./includes -Dssize_t=long -D_U_="" | |
CFLAGS_R := -nologo -MD -W3 -Z7 -DBUILDING_NGHTTP2 | |
CFLAGS_D := -nologo -MDd -W3 -Z7 -DBUILDING_NGHTTP2 \ | |
-Ot -D_DEBUG -GF -RTCs -RTCu # -RTCc -GS | |
LDFLAGS := -nologo -MAP -debug -incremental:no -opt:ref,icf -MANIFEST # -verbose | |
NGHTTP2_SRC := nghttp2_pq.c \ | |
nghttp2_map.c \ | |
nghttp2_queue.c \ | |
nghttp2_frame.c \ | |
nghttp2_buf.c \ | |
nghttp2_stream.c \ | |
nghttp2_outbound_item.c \ | |
nghttp2_session.c \ | |
nghttp2_submit.c \ | |
nghttp2_helper.c \ | |
nghttp2_npn.c \ | |
nghttp2_hd.c \ | |
nghttp2_hd_huffman.c \ | |
nghttp2_hd_huffman_data.c \ | |
nghttp2_version.c \ | |
nghttp2_priority_spec.c \ | |
nghttp2_option.c \ | |
nghttp2_callbacks.c \ | |
nghttp2_mem.c \ | |
nghttp2_http.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))) | |
.PHONY: all intro test_ver install copy_headers_and_libs \ | |
install_nghttp2_pyd_0 install_nghttp2_pyd_1 \ | |
build_nghttp2_pyd_0 build_nghttp2_pyd_1 \ | |
clean_nghttp2_pyd_0 clean_nghttp2_pyd_1 | |
all: includes/nghttp2/nghttp2.h includes/nghttp2/nghttp2ver.h \ | |
intro $(OBJ_DIR) $(TARGETS) build_nghttp2_pyd_$(USE_CYTHON) | |
@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: $(TARGETS) \ | |
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 -p $(INSTALL_HDR)/nghttp2 $(INSTALL_BIN) $(INSTALL_LIB) | |
cp --update $(addprefix includes/nghttp2/, nghttp2.h nghttp2ver.h) $(INSTALL_HDR)/nghttp2 | |
cp --update $(DLL_R) $(DLL_D) $(NGHTTP2_PDB_R) $(NGHTTP2_PDB_D) $(INSTALL_BIN) | |
cp --update $(IMP_R) $(IMP_D) $(LIB_R) $(LIB_D) $(INSTALL_LIB) | |
@echo | |
$(LIB_R): $(NGHTTP2_OBJ_R) | |
$(AR) -nologo -out:$@ $^ | |
@echo | |
$(LIB_D): $(NGHTTP2_OBJ_D) | |
$(AR) -nologo -out:$@ $^ | |
@echo | |
$(IMP_R): $(DLL_R) | |
$(DLL_R): $(NGHTTP2_OBJ_R) $(OBJ_DIR)/r_nghttp2.res | |
$(LD) $(LDFLAGS) -dll -out:$@ -implib:$(IMP_R) $(NGHTTP2_OBJ_R) -PDB:$(NGHTTP2_PDB_R) $(OBJ_DIR)/r_nghttp2.res $(EXT_LIBS) | |
mt -nologo -manifest $@.manifest -outputresource:$@\;2 | |
@echo | |
$(IMP_D): $(DLL_D) | |
$(DLL_D): $(NGHTTP2_OBJ_D) $(OBJ_DIR)/d_nghttp2.res | |
$(LD) $(LDFLAGS) -dll -out:$@ -implib:$(IMP_D) $(NGHTTP2_OBJ_D) -PDB:$(NGHTTP2_PDB_D) $(OBJ_DIR)/d_nghttp2.res $(EXT_LIBS) | |
mt -nologo -manifest $@.manifest -outputresource:$@\;2 | |
@echo | |
WIN_OBJDIR:=$(shell cygpath -w $(abspath $(OBJ_DIR))) | |
WIN_OBJDIR:=$(subst \,/,$(WIN_OBJDIR)) | |
../python/setup.py: ../python/setup.py.in $(THIS_MAKEFILE) | |
cd ../python ; \ | |
echo '# $(GENERATED). DO NOT EDIT.' > setup.py ; \ | |
sed -e 's/@top_srcdir@/../' \ | |
-e 's%@top_builddir@%$(WIN_OBJDIR)%' \ | |
-e 's/@PACKAGE_VERSION@/$(VERSION)/' setup.py.in >> setup.py ; | |
build_nghttp2_pyd_0: ; | |
build_nghttp2_pyd_1: $(addprefix ../python/, setup.py nghttp2.pyx) | |
cd ../python ; \ | |
python setup.py build_ext -i -f bdist_wininst | |
install_nghttp2_pyd_0: ; | |
install_nghttp2_pyd_1: $(addprefix ../python/, setup.py nghttp2.pyx) | |
cd ../python ; \ | |
pip install . | |
clean_nghttp2_pyd_0: ; | |
clean_nghttp2_pyd_1: | |
cd ../python ; \ | |
rm -fR build dist | |
$(OBJ_DIR)/r_%.obj: %.c $(THIS_MAKEFILE) | |
$(CC) $(CFLAGS_R) $(CFLAGS) -Fo$@ -c $< | |
@echo | |
$(OBJ_DIR)/d_%.obj: %.c $(THIS_MAKEFILE) | |
$(CC) $(CFLAGS_D) $(CFLAGS) -Fo$@ -c $< | |
@echo | |
$(OBJ_DIR)/r_nghttp2.res: $(OBJ_DIR)/nghttp2.rc $(THIS_MAKEFILE) | |
$(RC) -D_RELEASE -Fo $@ $< | |
@echo | |
$(OBJ_DIR)/d_nghttp2.res: $(OBJ_DIR)/nghttp2.rc $(THIS_MAKEFILE) | |
$(RC) -D_DEBUG -Fo $@ $< | |
@echo | |
includes/nghttp2/nghttp2ver.h: includes/nghttp2/nghttp2ver.h.in $(THIS_MAKEFILE) | |
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> | |
#ifdef _WIN64 | |
#define ARCH "64" | |
#else | |
#define ARCH "32" | |
#endif | |
#define VER_MAJOR 1 | |
#define VER_MINOR 4 | |
#define VER_MICRO 0 | |
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 "1.4.0.0 (MSVC debug)" | |
#define DBG "d" | |
FILEFLAGS 0x1L | |
#else | |
#define VER_STR "1.4.0.0 (MSVC release)" | |
#define DBG "" | |
FILEFLAGS 0x0L | |
#endif | |
BEGIN | |
BLOCK "StringFileInfo" | |
BEGIN | |
BLOCK "040904b0" | |
BEGIN | |
VALUE "Comments", "Win" ARCH " binary by The Apache Haus" | |
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 | |
END | |
END | |
BLOCK "VarFileInfo" | |
BEGIN | |
VALUE "Translation", 0x409, 1200 | |
END | |
END | |
endef | |
export RES_FILE | |
$(OBJ_DIR)/nghttp2.rc: Makefile.MSVC | |
@echo 'Generating $@...' | |
@echo '' >$@ | |
# @echo ' /* $(GENERATED). DO NOT EDIT.' >$@ | |
# @echo ' */' >> $@ | |
@echo "$$RES_FILE" >> $@ | |
clean: | |
rm -f $(OBJ_DIR)/* includes/nghttp2/nghttp2ver.h | |
@echo | |
vclean realclean: clean clean_nghttp2_pyd_$(USE_CYTHON) | |
- rm -rf $(OBJ_DIR) | |
- rm -f .depend.MSVC | |
# | |
# 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment