blob: 9ef7c14576511b36541d78e970faef89c81b931c [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001!IF "$(MODE)"=="static"
2TARGET = $(LIB_NAME_STATIC)
3AS_DLL = false
4CFGSET=true
5!ELSEIF "$(MODE)"=="dll"
6TARGET = $(LIB_NAME_DLL)
7AS_DLL = true
8CFGSET=true
9!ELSE
10!MESSAGE Invalid mode: $(MODE)
11
12#######################
13# Usage
14#
15
16!MESSAGE Usage: nmake /f Makefile.vc mode=<static or dll> <options>
17!MESSAGE where <options> is one or many of:
18!MESSAGE VC=<6,7,8,9,10,11,12,14> - VC versions
19!MESSAGE WITH_DEVEL=<path> - Paths for the development files (SSL, zlib, etc.)
20!MESSAGE Defaults to sibbling directory deps: ../deps
21!MESSAGE Libraries can be fetched at http://pecl2.php.net/downloads/php-windows-builds/
22!MESSAGE Uncompress them into the deps folder.
23!MESSAGE WITH_SSL=<dll or static> - Enable OpenSSL support, DLL or static
24!MESSAGE WITH_NGHTTP2=<dll or static> - Enable HTTP/2 support, DLL or static
25!MESSAGE WITH_CARES=<dll or static> - Enable c-ares support, DLL or static
26!MESSAGE WITH_ZLIB=<dll or static> - Enable zlib support, DLL or static
27!MESSAGE WITH_SSH2=<dll or static> - Enable libSSH2 support, DLL or static
28!MESSAGE WITH_MBEDTLS=<dll or static> - Enable mbedTLS support, DLL or static
29!MESSAGE ENABLE_IDN=<yes or no> - Enable use of Windows IDN APIs, defaults to yes
30!MESSAGE Requires Windows Vista or later, or installation from:
31!MESSAGE https://www.microsoft.com/en-us/download/details.aspx?id=734
32!MESSAGE ENABLE_IPV6=<yes or no> - Enable IPv6, defaults to yes
33!MESSAGE ENABLE_SSPI=<yes or no> - Enable SSPI support, defaults to yes
34!MESSAGE ENABLE_WINSSL=<yes or no> - Enable native Windows SSL support, defaults to yes
35!MESSAGE GEN_PDB=<yes or no> - Generate Program Database (debug symbols for release build)
36!MESSAGE DEBUG=<yes or no> - Debug builds
37!MESSAGE MACHINE=<x86 or x64> - Target architecture (default x64 on AMD64, x86 on others)
38!ERROR please choose a valid mode
39
40!ENDIF
41
42!INCLUDE "../lib/Makefile.inc"
43LIBCURL_OBJS=$(CSOURCES:.c=.obj)
44
45!INCLUDE "../src/Makefile.inc"
46
47# tool_hugehelp has a special rule
48CURL_OBJS=$(CURL_CFILES:tool_hugehelp.c=)
49
50CURL_OBJS=$(CURL_OBJS:.c=.obj)
51
52
53# backwards compatible check for USE_SSPI
54!IFDEF USE_SSPI
55ENABLE_SSPI = $(USE_SSPI)
56!ENDIF
57
58# default options
59
60!IFNDEF MACHINE
61# Note: nmake magically changes the value of PROCESSOR_ARCHITECTURE from "AMD64"
62# to "x86" when building in a 32 bit build environment on a 64 bit machine.
63!IF "$(PROCESSOR_ARCHITECTURE)"=="AMD64"
64MACHINE = x64
65!ELSE
66MACHINE = x86
67!ENDIF
68!ENDIF
69
70!IFNDEF ENABLE_IDN
71USE_IDN = true
72!ELSEIF "$(ENABLE_IDN)"=="yes"
73USE_IDN = true
74!ELSEIF "$(ENABLE_IDN)"=="no"
75USE_IDN = false
76!ENDIF
77
78!IFNDEF ENABLE_IPV6
79USE_IPV6 = true
80!ELSEIF "$(ENABLE_IPV6)"=="yes"
81USE_IPV6 = true
82!ELSEIF "$(ENABLE_IPV6)"=="no"
83USE_IPV6 = false
84!ENDIF
85
86!IFNDEF ENABLE_SSPI
87USE_SSPI = true
88!ELSEIF "$(ENABLE_SSPI)"=="yes"
89USE_SSPI = true
90!ELSEIF "$(ENABLE_SSPI)"=="no"
91USE_SSPI = false
92!ENDIF
93
94!IFNDEF ENABLE_WINSSL
95!IF DEFINED(WITH_SSL) || DEFINED(WITH_MBEDTLS)
96USE_WINSSL = false
97!ELSE
98USE_WINSSL = $(USE_SSPI)
99!ENDIF
100!ELSEIF "$(ENABLE_WINSSL)"=="yes"
101USE_WINSSL = true
102!ELSEIF "$(ENABLE_WINSSL)"=="no"
103USE_WINSSL = false
104!ENDIF
105
106CONFIG_NAME_LIB = libcurl
107
108!IF "$(WITH_SSL)"=="dll"
109USE_SSL = true
110SSL = dll
111!ELSEIF "$(WITH_SSL)"=="static"
112USE_SSL = true
113SSL = static
114!ENDIF
115
116!IF "$(ENABLE_NGHTTP2)"=="yes"
117# compatibility bit, WITH_NGHTTP2 is the correct flag
118WITH_NGHTTP2 = dll
119USE_NGHTTP2 = true
120NGHTTP2 = dll
121!ELSEIF "$(WITH_NGHTTP2)"=="dll"
122USE_NGHTTP2 = true
123NGHTTP2 = dll
124!ELSEIF "$(WITH_NGHTTP2)"=="static"
125USE_NGHTTP2 = true
126NGHTTP2 = static
127!ENDIF
128
129!IFNDEF USE_NGHTTP2
130USE_NGHTTP2 = false
131!ENDIF
132
133!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"
134USE_MBEDTLS = true
135MBEDTLS = $(WITH_MBEDTLS)
136!ENDIF
137
138!IF ( "$(USE_SSL)"=="true" && "$(USE_WINSSL)"=="true" ) \
139 || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \
140 || ( "$(USE_MBEDTLS)"=="true" && "$(USE_WINSSL)"=="true" )
141!ERROR SSL, MBEDTLS and WINSSL are mutual exclusive options.
142!ENDIF
143
144!IF "$(WITH_CARES)"=="dll"
145USE_CARES = true
146CARES = dll
147!ELSEIF "$(WITH_CARES)"=="static"
148USE_CARES = true
149CARES = static
150!ENDIF
151
152!IF "$(WITH_ZLIB)"=="dll"
153USE_ZLIB = true
154ZLIB = dll
155!ELSEIF "$(WITH_ZLIB)"=="static"
156USE_ZLIB = true
157ZLIB = static
158!ENDIF
159
160!IF "$(WITH_SSH2)"=="dll"
161USE_SSH2 = true
162SSH2 = dll
163!ELSEIF "$(WITH_SSH2)"=="static"
164USE_SSH2 = true
165SSH2 = static
166!ENDIF
167
168CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-vc$(VC)-$(MACHINE)
169
170!IF "$(DEBUG)"=="yes"
171CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-debug
172!ELSE
173CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-release
174!ENDIF
175
176!IF "$(AS_DLL)"=="true"
177CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-dll
178!ELSE
179CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static
180!ENDIF
181
182!IF "$(USE_SSL)"=="true"
183CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL)
184!ENDIF
185
186!IF "$(USE_MBEDTLS)"=="true"
187CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-mbedtls-$(MBEDTLS)
188!ENDIF
189
190!IF "$(USE_CARES)"=="true"
191CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-cares-$(CARES)
192!ENDIF
193
194!IF "$(USE_ZLIB)"=="true"
195CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB)
196!ENDIF
197
198!IF "$(USE_SSH2)"=="true"
199CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh2-$(SSH2)
200!ENDIF
201
202!IF "$(USE_IPV6)"=="true"
203CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ipv6
204!ENDIF
205
206!IF "$(USE_SSPI)"=="true"
207CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-sspi
208!ENDIF
209
210!IF "$(USE_WINSSL)"=="true"
211CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-winssl
212!ENDIF
213
214!IF "$(USE_NGHTTP2)"=="true"
215CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-nghttp2-$(NGHTTP2)
216!ENDIF
217
218!MESSAGE configuration name: $(CONFIG_NAME_LIB)
219
220BUILD_DIR=../builds/$(CONFIG_NAME_LIB)
221LIBCURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
222CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
223DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\
224
225$(MODE):
226 @IF NOT EXIST ..\include\curl\curlbuild.h ( \
227 CALL ..\buildconf.bat \
228 )
229 @SET DIROBJ=$(LIBCURL_DIROBJ)
230 @SET MACRO_NAME=LIBCURL_OBJS
231 @SET OUTFILE=LIBCURL_OBJS.inc
232 @gen_resp_file.bat $(LIBCURL_OBJS)
233
234 @SET DIROBJ=$(CURL_DIROBJ)
235 @SET MACRO_NAME=CURL_OBJS
236 @SET OUTFILE=CURL_OBJS.inc
237 @gen_resp_file.bat $(CURL_OBJS)
238
239 @SET CONFIG_NAME_LIB=$(CONFIG_NAME_LIB)
240 @SET MACHINE=$(MACHINE)
241 @SET USE_NGHTTP2=$(USE_NGHTTP2)
242 @SET USE_IDN=$(USE_IDN)
243 @SET USE_IPV6=$(USE_IPV6)
244 @SET USE_SSPI=$(USE_SSPI)
245 @SET USE_WINSSL=$(USE_WINSSL)
246# compatibility bit
247 @SET WITH_NGHTTP2=$(WITH_NGHTTP2)
248
249 @$(MAKE) /NOLOGO /F MakefileBuild.vc
250
251copy_from_lib:
252 echo copying .c...
253 FOR %%i IN ($(CURLX_CFILES:/=\)) DO copy %%i ..\src\