updated cross compilation Makefile.
[gnutls:gnutls.git] / cross.mk
1 SMP=-j4
2
3 GNUTLS_VERSION:=3.2.14
4 GNUTLS_FILE:=gnutls-$(GNUTLS_VERSION).tar.xz
5 GNUTLS_DIR:=gnutls-$(GNUTLS_VERSION)
6
7 GMP_VERSION=6.0.0
8 GMP_VERSIONA=6.0.0a
9 GMP_FILE:=gmp-$(GMP_VERSIONA).tar.bz2
10 GMP_SERV_DIR:=gmp-$(GMP_VERSIONA)
11 GMP_DIR:=gmp-$(GMP_VERSION)
12
13 P11_KIT_VERSION=0.20.2
14 P11_KIT_FILE:=p11-kit-$(P11_KIT_VERSION).tar.gz
15 P11_KIT_DIR:=p11-kit-$(P11_KIT_VERSION)
16
17 NETTLE_VERSION=2.7.1
18 NETTLE_FILE:=nettle-$(NETTLE_VERSION).tar.gz
19 NETTLE_DIR:=nettle-$(NETTLE_VERSION)
20
21 PKG_CONFIG_DIR:=$(PWD)/win32/lib/pkgconfig/
22 CROSS_DIR:=$(PWD)/win32
23 BIN_DIR:=$(CROSS_DIR)/bin
24 LIB_DIR:=$(CROSS_DIR)/lib
25 HEADERS_DIR:=$(CROSS_DIR)/include
26 DEVCPP_DIR:=$(PWD)/devcpp
27 LDFLAGS=
28 #doesn't seem to work
29 #LDFLAGS=-static-libgcc
30
31 all: update-gpg-keys gnutls-w32
32
33 upload: gnutls-w32 devpak
34         ../build-aux/gnupload --to ftp.gnu.org:gnutls/w32 $(GNUTLS_DIR)-w32.zip
35         ../build-aux/gnupload --to ftp.gnu.org:gnutls/w32 gnutls-$(GNUTLS_VERSION)-1gn.DevPak
36
37 update-gpg-keys:
38         gpg --recv-keys 96865171 B565716F D92765AF A8F4C2FD DB899F46
39
40 $(GNUTLS_DIR)-w32.zip: $(LIB_DIR) $(BIN_DIR) $(GNUTLS_DIR)/.installed
41         rm -rf $(CROSS_DIR)/etc $(CROSS_DIR)/share $(CROSS_DIR)/lib/include $(CROSS_DIR)/lib/pkgconfig
42         cd $(CROSS_DIR) && zip -r $(PWD)/$@ *
43         gpg --sign --detach $(GNUTLS_DIR)-w32.zip
44
45 gnutls-$(GNUTLS_VERSION)-1gn.DevPak: $(GNUTLS_DIR)-w32.zip devcpp.tar
46         rm -rf $(DEVCPP_DIR)
47         mkdir -p $(DEVCPP_DIR)
48         cd $(DEVCPP_DIR) && unzip ../$(GNUTLS_DIR)-w32.zip 
49         cd $(DEVCPP_DIR) && tar xf ../devcpp.tar && sed -i 's/@VERSION@/$(GNUTLS_VERSION)/g' gnutls.DevPackage
50         cd $(DEVCPP_DIR) && tar -cjf ../$@ .
51
52 devpak: gnutls-$(GNUTLS_VERSION)-1gn.DevPak
53
54 gnutls-w32: $(GNUTLS_DIR)-w32.zip
55
56 nettle: $(NETTLE_DIR)/.installed
57
58 gmp: $(GMP_DIR)/.installed
59
60 $(BIN_DIR):
61         mkdir -p $(BIN_DIR)
62
63 $(LIB_DIR):
64         mkdir -p $(LIB_DIR)
65
66 CONFIG_ENV := PKG_CONFIG_PATH="$(PKG_CONFIG_DIR)"
67 CONFIG_ENV += PKG_CONFIG_LIBDIR="$(PKG_CONFIG_DIR)"
68 CONFIG_FLAGS := --prefix=$(CROSS_DIR) --host=i686-w64-mingw32 --enable-shared --disable-static \
69         --bindir=$(BIN_DIR) --libdir=$(LIB_DIR) --includedir=$(HEADERS_DIR) --enable-threads=win32 
70
71 $(P11_KIT_DIR)/.configured:
72         test -f $(P11_KIT_FILE) || wget http://p11-glue.freedesktop.org/releases/$(P11_KIT_FILE)
73         test -f $(P11_KIT_FILE).sig || wget http://p11-glue.freedesktop.org/releases/$(P11_KIT_FILE).sig
74         gpg --verify $(P11_KIT_FILE).sig
75         test -d $(P11_KIT_DIR) || tar -xf $(P11_KIT_FILE)
76         cd $(P11_KIT_DIR) && LDFLAGS="$(LDFLAGS)" $(CONFIG_ENV) ./configure $(CONFIG_FLAGS) --without-libffi --without-libtasn1 && cd ..
77         touch $@
78
79 $(P11_KIT_DIR)/.installed: $(P11_KIT_DIR)/.configured
80         make -C $(P11_KIT_DIR) $(SMP)
81         make -C $(P11_KIT_DIR) install -i
82         -rm -rf $(HEADERS_DIR)/p11-kit
83         -mv $(HEADERS_DIR)/p11-kit-1/p11-kit $(HEADERS_DIR)
84         -rm -rf $(HEADERS_DIR)/p11-kit-1
85         rm -f $(BIN_DIR)/p11-kit.exe
86         touch $@
87
88 $(GMP_DIR)/.configured: 
89         test -f $(GMP_FILE) || wget ftp://ftp.gmplib.org/pub/$(GMP_DIR)/$(GMP_FILE)
90         test -f $(GMP_FILE).sig || wget ftp://ftp.gmplib.org/pub/$(GMP_DIR)/$(GMP_FILE).sig
91         gpg --verify $(GMP_FILE).sig
92         test -d $(GMP_DIR) || tar -xf $(GMP_FILE)
93         cd $(GMP_DIR) && LDFLAGS="$(LDFLAGS)" $(CONFIG_ENV) ./configure $(CONFIG_FLAGS) --enable-fat --exec-prefix=$(LIB_DIR)  --oldincludedir=$(HEADERS_DIR) && cd ..
94         cp $(GMP_DIR)/COPYING.LESSERv3 $(CROSS_DIR)/COPYING.GMP
95         touch $@
96
97 $(GMP_DIR)/.installed: $(GMP_DIR)/.configured
98         make -C $(GMP_DIR) $(SMP)
99         make -C $(GMP_DIR) install -i
100         -mkdir -p $(HEADERS_DIR)
101         mv $(LIB_DIR)/include/* $(HEADERS_DIR)/
102         rmdir $(LIB_DIR)/include/
103         touch $@
104
105 $(NETTLE_DIR)/.configured: $(GMP_DIR)/.installed
106         test -f $(NETTLE_FILE) || wget http://www.lysator.liu.se/~nisse/archive/$(NETTLE_FILE)
107         test -f $(NETTLE_FILE).sig || wget http://www.lysator.liu.se/~nisse/archive/$(NETTLE_FILE).sig
108         gpg --verify $(NETTLE_FILE).sig
109         test -d $(NETTLE_DIR) || tar -xf $(NETTLE_FILE)
110         cd $(NETTLE_DIR) && CFLAGS="-I$(HEADERS_DIR)" CXXFLAGS="-I$(HEADERS_DIR)" LDFLAGS="$(LDFLAGS)" $(CONFIG_ENV) ./configure $(CONFIG_FLAGS) --with-lib-path=$(LIB_DIR) && cd ..
111         touch $@
112
113 #nettle messes up installation
114 $(NETTLE_DIR)/.installed: $(NETTLE_DIR)/.configured
115         make -C $(NETTLE_DIR) $(SMP) -i
116         make -C $(NETTLE_DIR) install -i
117         rm -f $(LIB_DIR)/libnettle.a $(LIB_DIR)/libhogweed.a $(BIN_DIR)/nettle-hash.exe $(BIN_DIR)/nettle-lfib-stream.exe $(BIN_DIR)/pkcs1-conv.exe $(BIN_DIR)/sexp-conv.exe
118         cp $(NETTLE_DIR)/libnettle.dll.a $(NETTLE_DIR)/libhogweed.dll.a $(LIB_DIR)/
119         cp $(NETTLE_DIR)/libnettle*.dll $(NETTLE_DIR)/libhogweed*.dll $(BIN_DIR)/
120         touch $@
121
122 $(GNUTLS_DIR)/.installed: $(GNUTLS_DIR)/.configured
123         make -C $(GNUTLS_DIR) $(SMP)
124         sed -i 's/^"$$@" >$$log_file/echo $$@|grep exe >\/dev\/null; if [ $$? == 0 ];then wine "$$@" >$$log_file;else \/bin\/true >$$log_file;fi/g' $(GNUTLS_DIR)/build-aux/test-driver
125         make -C $(GNUTLS_DIR)/tests check $(SMP)
126         make -C $(GNUTLS_DIR) install -i
127         cp $(GNUTLS_DIR)/COPYING $(GNUTLS_DIR)/COPYING.LESSER $(CROSS_DIR)
128         -cp /usr/lib/gcc/i686-w64-mingw32/4.8/libgcc_s_sjlj-1.dll/libgcc_s_sjlj-1.dll $(BIN_DIR)/
129         -cp /usr/i686-w64-mingw32/lib/libwinpthread-1.dll $(BIN_DIR)/
130         touch $@
131
132 $(GNUTLS_DIR)/.configured: $(NETTLE_DIR)/.installed $(P11_KIT_DIR)/.installed
133         test -f $(GNUTLS_FILE) || wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2/$(GNUTLS_FILE)
134         test -f $(GNUTLS_FILE).sig || wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2/$(GNUTLS_FILE).sig
135         gpg --verify $(GNUTLS_FILE).sig
136         test -d $(GNUTLS_DIR) || tar -xf $(GNUTLS_FILE)
137         cd $(GNUTLS_DIR) && \
138                 $(CONFIG_ENV) LDFLAGS="$(LDFLAGS) -L$(LIB_DIR)" CFLAGS="-I$(HEADERS_DIR)" CXXFLAGS="-I$(HEADERS_DIR)" \
139                 ./configure $(CONFIG_FLAGS) --enable-local-libopts --disable-cxx \
140                 --enable-gcc-warnings --disable-libdane --disable-openssl-compatibility --with-included-libtasn1 && cd ..
141         touch $@
142
143
144 clean:
145         rm -rf $(CROSS_DIR) $(GNUTLS_DIR)/.installed $(NETTLE_DIR)/.installed $(GMP_DIR)/.installed $(P11_KIT_DIR)/.installed
146
147 dirclean:
148         rm -rf $(CROSS_DIR) $(GNUTLS_DIR) $(NETTLE_DIR) $(GMP_DIR) $(P11_KIT_DIR)
149