1# $Id: Makefile.mingw,v 1.21 2015/09/18 12:45:16 nanard Exp $ 2# Miniupnp project. 3# http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/ 4# (c) 2005-2020 Thomas Bernard 5# This Makefile is made for MinGW 6# 7# To cross compile on a *nix machine : 8# make -f Makefile.mingw DLLWRAP=mingw32-dllwrap CC=mingw32-gcc AR=mingw32-ar 9# 10CC ?= gcc 11SETUP_COMPILER_FLAG?= 12DLLWRAP = dllwrap 13WINDRES = windres 14SH = /bin/sh 15ZIP = zip 16ifeq ($(OS),Windows_NT) 17RM = del 18else 19RM = rm -f 20endif 21#CFLAGS = -Wall -g -DDEBUG -D_WIN32_WINNT=0X501 22CFLAGS = -Wall -W -Wstrict-prototypes -Os -DNDEBUG -D_WIN32_WINNT=0X501 23LDLIBS = -lws2_32 -liphlpapi 24# -lwsock32 25# -liphlpapi is needed for GetBestRoute() and GetIpAddrTable() 26PYTHON=\utils\python25\python 27OBJS=miniwget.o minixml.o igd_desc_parse.o minisoap.o \ 28 minissdpc.o \ 29 miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \ 30 connecthostport.o portlistingparse.o receivedata.o \ 31 upnpdev.o addr_is_reserved.o 32OBJSDLL=$(addprefix dll-, $(OBJS)) winres.o 33BINARIES=upnpc-static.exe upnpc-shared.exe \ 34 listdevices-static.exe listdevices-shared.exe \ 35 miniupnpc.dll libminiupnpc.a \ 36 testminixml.exe 37ifneq ($(GITHUB_SHA),) 38COMMITREF=$(GITHUB_SHA) 39else 40COMMITREF=$(shell git rev-parse --short HEAD) 41endif 42DISTFILE:=$(shell echo "miniupnpc-bin-win32-`cat VERSION`-$(COMMITREF).zip") 43 44.PHONY: all dist clean 45 46all: $(BINARIES) 47 48dist: $(DISTFILE) 49 50clean: 51 $(RM) miniupnpcstrings.h 52 $(RM) *.o 53 $(RM) *.exe 54 $(RM) miniupnpc.dll miniupnpc.lib miniupnpc.dll.def 55 $(RM) libminiupnpc.a 56 57$(DISTFILE): $(BINARIES) 58 $(ZIP) $@ *.exe *.dll *.lib *.def *.a LICENSE README Changelog.txt 59 60libminiupnpc.a: $(OBJS) 61 $(AR) cr $@ $? 62 63pythonmodule: libminiupnpc.a 64 $(PYTHON) setupmingw32.py build $(SETUP_COMPILER_FLAG) 65 $(PYTHON) setupmingw32.py install --skip-build 66 $(PYTHON) setupmingw32.py bdist_wheel --skip-build 67 68miniupnpc.dll: miniupnpc.def $(OBJSDLL) 69 $(DLLWRAP) -k --driver-name $(CC) \ 70 --def miniupnpc.def \ 71 --output-def miniupnpc.dll.def \ 72 --implib miniupnpc.lib -o $@ \ 73 $(OBJSDLL) $(LDLIBS) 74 75miniupnpc.lib: miniupnpc.dll 76 77%.o: %.c 78 $(CC) $(CFLAGS) -DMINIUPNP_STATICLIB -c -o $@ $< 79 80dll-%.o: %.c 81 $(CC) $(CFLAGS) -DMINIUPNP_EXPORTS -c -o $@ $< 82 83%-shared.o: %.c 84 $(CC) $(CFLAGS) -c -o $@ $< 85 86# --enable-stdcall-fixup 87%-static.exe: %.o libminiupnpc.a 88 $(CC) -static -o $@ $^ $(LDLIBS) 89 90%-shared.exe: %-shared.o miniupnpc.lib 91 $(CC) -o $@ $^ $(LDLIBS) 92 93# To make miniupnpcstrings.h from miniupnpcstrings.h.in we either 94# use a custom executable (if running make under windows) or use 95# sed (if cross compiling from another platform). 96ifeq ($(OS),Windows_NT) 97wingenminiupnpcstrings.exe: wingenminiupnpcstrings.c 98 $(CC) $(CFLAGS) -o $@ $^ 99 100miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings.exe VERSION 101 wingenminiupnpcstrings.exe $< $@ rc_version.h 102 103rc_version.h: miniupnpcstrings.h 104else 105miniupnpcstrings.h: miniupnpcstrings.h.in VERSION 106 sed 's|OS_STRING ".*"|OS_STRING "Windows/Mingw32"|' $< | \ 107 sed 's|MINIUPNPC_VERSION_STRING ".*"|MINIUPNPC_VERSION_STRING "$(shell cat VERSION)"|' > $@ 108 109rc_version.h: VERSION 110 echo "#define LIBMINIUPNPC_DOTTED_VERSION \"$(shell cat VERSION)\"" > $@.tmp 111 echo "#define LIBMINIUPNPC_MAJOR_VERSION $(shell cat VERSION|cut -d. -f1)" >> $@.tmp 112 echo "#define LIBMINIUPNPC_MINOR_VERSION $(shell cat VERSION|cut -d. -f2)" >> $@.tmp 113 echo "#define LIBMINIUPNPC_MICRO_VERSION $(shell cat VERSION|cut -d. -f3)" >> $@.tmp 114 mv $@.tmp $@ 115endif 116 117winres.o: miniupnpc.rc rc_version.h 118 $(WINDRES) -D INTERNAL_NAME=\\\"miniupnpc.dll\\0\\\" -i $< -o $@ 119 120testminixml.exe: testminixml.o minixml.o igd_desc_parse.o 121 $(CC) -static -o $@ $^ 122 123minixml.o: minixml.c minixml.h 124 125upnpc.o: miniwget.h minisoap.h miniupnpc.h igd_desc_parse.h 126upnpc.o: upnpreplyparse.h upnpcommands.h upnperrors.h miniupnpcstrings.h 127 128miniwget.o: miniwget.c miniwget.h miniupnpcstrings.h connecthostport.h 129 130minisoap.o: minisoap.c minisoap.h miniupnpcstrings.h 131 132miniupnpc.o: miniupnpc.c miniupnpc.h minisoap.h miniwget.h minixml.h \ 133 addr_is_reserved.h 134 135igd_desc_parse.o: igd_desc_parse.c igd_desc_parse.h 136 137upnpreplyparse.o: upnpreplyparse.c upnpreplyparse.h minixml.h 138 139upnpcommands.o: upnpcommands.c upnpcommands.h upnpreplyparse.h miniupnpc.h portlistingparse.h 140 141minissdpc.o: minissdpc.c minissdpc.h receivedata.h 142 143upnpdev.o: upnpdev.c upnpdev.h 144 145