Imported Upstream version 1.18.1
[platform/upstream/c-ares.git] / test / Makefile.msvc
1 # Permission to use, copy, modify, and distribute this
2 # software and its documentation for any purpose and without
3 # fee is hereby granted, provided that the above copyright
4 # notice appear in all copies and that both that copyright
5 # notice and this permission notice appear in supporting
6 # documentation, and that the name of M.I.T. not be used in
7 # advertising or publicity pertaining to distribution of the
8 # software without specific, written prior permission.
9 # M.I.T. makes no representations about the suitability of
10 # this software for any purpose.  It is provided "as is"
11 # without express or implied warranty.
12
13 # ------------------------------------------------------------------------------
14 #
15 # Makefile for building c-ares test suite with MSVC.
16 #
17 # Usage: nmake /f makefile.msvc CFG=<config> <target>
18 #
19 # <config> can be one of: [ lib-release | lib-debug | dll-release | dll-debug }
20 # <target> can be one of: [ all | arestest | clean }
21 #
22 # If <target> is not specified then all targets are built.
23 # If <config> is not specified then lib-debug will be assumed.
24 #
25 # This makefile must be processed from the subdir where it is located.
26 #
27 # All results are generated below a subdirectory named msvcXXX.
28 #
29 # ------------------------------------------------------------------------------
30
31
32 # ------------------------------------------------
33 # c-ares static and dynamic libraries common base
34 # file names for release and debug configurations
35 # ------------------------------------------------
36
37 LIBNAME = cares
38 STA_LIB_REL = lib$(LIBNAME)
39 DYN_LIB_REL = $(LIBNAME)
40 STA_LIB_DBG = $(STA_LIB_REL)d
41 DYN_LIB_DBG = $(DYN_LIB_REL)d
42
43 # -------------------------------------------
44 # Base names for c-ares DLL import libraries
45 # -------------------------------------------
46
47 IMP_LIB_REL = $(DYN_LIB_REL)
48 IMP_LIB_DBG = $(DYN_LIB_DBG)
49
50 # --------------------------
51 # Runtime library selection
52 # --------------------------
53
54 RTLIB  = /MD
55 RTLIBD = /MDd
56
57 !IF "$(RTLIBCFG)" == "static"
58 RTLIB  = /MT
59 RTLIBD = /MTd
60 !ENDIF
61
62 # --------------------------------------------------------
63 # Detect compiler version.
64 # --------------------------------------------------------
65 !INCLUDE ..\msvc_ver.inc
66
67 # ---------------------------------------------------------
68 # Verify that current subdir is below the c-ares source one
69 # ---------------------------------------------------------
70
71 !IF ! EXIST(..\src\lib\ares_init.c)
72 !  MESSAGE Can not process Makefile.msvc from outside of c-ares test subdirectory.
73 !  MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again.
74 !  ERROR   See previous message.
75 !ENDIF
76
77 # ------------------------------------------------------------------
78 # Base subdir is the common root from which other subdirs will hang,
79 # the name depends on MSVC version being used when building c-ares.
80 # ------------------------------------------------------------------
81
82 BASE_DIR = .\msvc
83 # Look for a built library of the same configuration in the directory above.
84 LIB_BASE_DIR = ..\msvc
85
86 # ----------------------------------------
87 # Subdir holding sources for all projects
88 # ----------------------------------------
89
90 SRCDIR = .
91
92 # -------------------------
93 # Configuration validation
94 # -------------------------
95
96 !IF "$(CFG)" == ""
97 CFG = lib-debug
98 !ENDIF
99
100 VALID_CFGSET = FALSE
101 !IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \
102     "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug"
103 VALID_CFGSET = TRUE
104 !ENDIF
105
106 !IF "$(VALID_CFGSET)" == "FALSE"
107 !  MESSAGE MSVC c-ares makefile
108 !  MESSAGE
109 !  MESSAGE Usage: nmake /f makefile.msvc CFG=<config> <target>
110 !  MESSAGE
111 !  MESSAGE <config> can be one of: [ lib-release | lib-debug | dll-release | dll-debug }
112 !  MESSAGE <target> can be one of: [ all | arestest | aresfuzz | aresfuzzname | dnsdump | clean }
113 !  MESSAGE
114 !  MESSAGE If <target> is not specified then all targets are built.
115 !  MESSAGE If <config> is not specified then lib-debug will be assumed.
116 !  MESSAGE
117 !  ERROR Choose a valid configuration.
118 !ENDIF
119
120 # --------------------------------------------------------
121 # Project subdirs independent of configuration being used
122 # --------------------------------------------------------
123
124 PROG_DIR = $(BASE_DIR)\arestest
125 LIB_DIR = $(LIB_BASE_DIR)\cares
126
127 GMOCK_DIR = gmock-1.11.0
128
129 # ---------------------------------------------------
130 # Subdirs which are configuration dependent are only
131 # defined when a valid configuration has been given.
132 # ---------------------------------------------------
133
134 PROG_OUTDIR = $(PROG_DIR)\$(CFG)
135 PROG_OBJDIR = $(PROG_OUTDIR)\obj
136 LIB_OUTDIR = $(LIB_DIR)\$(CFG)
137
138
139 # -------------------------------------
140 # TCP/IP stack settings
141 # -------------------------------------
142 CFLAGS  = /DWIN32
143 EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
144 EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
145
146 # -------------------------------------------------
147 # Switches that depend on ancient compiler versions
148 # -------------------------------------------------
149
150 !IF $(CC_VERS_NUM) == 60
151 PDB_NONE            = /pdb:none
152 PDBTYPE_CONSOLIDATE = /pdbtype:consolidate
153 !ELSE
154 !UNDEF PDB_NONE
155 !UNDEF PDBTYPE_CONSOLIDATE
156 !ENDIF
157
158 !IF $(CC_VERS_NUM) <= 70
159 RT_ERROR_CHECKING = /GZ
160 !ELSE
161 RT_ERROR_CHECKING = /RTCsu
162 !ENDIF
163
164 # ----------------------------
165 # Assorted commands and flags
166 # ----------------------------
167
168 CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2 /D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS
169 CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi /D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS $(RT_ERROR_CHECKING)
170 CC_CFLAGS  = $(CFLAGS) /I. /I../src/lib /I../include /I $(GMOCK_DIR) /W3 /EHsc /FD
171
172 RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG"
173 RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG"
174
175 LINK_CMD_LIB = link.exe /lib /nologo
176 LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no
177 LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console
178
179 LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE)
180 LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE)
181
182 # ---------------------------------
183 # Configuration dependent settings
184 # ---------------------------------
185
186 !IF "$(CFG)" == "lib-release"
187 CARES_TARGET = $(STA_LIB_REL).lib
188 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB
189 CARES_LFLAGS =
190 SPROG_CFLAGS = /DCARES_STATICLIB
191 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib
192 CARES_LINK   = $(LINK_CMD_LIB)
193 SPROG_LINK   = $(LINK_CMD_EXE_REL)
194 CC_CMD       = $(CC_CMD_REL)
195 !ENDIF
196
197 !IF "$(CFG)" == "lib-debug"
198 CARES_TARGET = $(STA_LIB_DBG).lib
199 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD
200 CARES_LFLAGS =
201 SPROG_CFLAGS = /DCARES_STATICLIB
202 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib
203 CARES_LINK   = $(LINK_CMD_LIB)
204 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
205 CC_CMD       = $(CC_CMD_DBG)
206 !ENDIF
207
208 !IF "$(CFG)" == "dll-release"
209 CARES_TARGET = $(DYN_LIB_REL).dll
210 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY
211 CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(PROG_OUTDIR)\$(IMP_LIB_REL).lib $(PDB_NONE)
212 SPROG_CFLAGS =
213 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib
214 CARES_LINK   = $(LINK_CMD_DLL)
215 SPROG_LINK   = $(LINK_CMD_EXE_REL)
216 CC_CMD       = $(CC_CMD_REL)
217 USE_RES_FILE = TRUE
218 RC_CMD       = $(RC_CMD_REL)
219 !ENDIF
220
221 !IF "$(CFG)" == "dll-debug"
222 CARES_TARGET = $(DYN_LIB_DBG).dll
223 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD
224 CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(PROG_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(PROG_OUTDIR)\$(DYN_LIB_DBG).pdb $(PDBTYPE_CONSOLIDATE)
225 SPROG_CFLAGS =
226 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib
227 CARES_LINK   = $(LINK_CMD_DLL)
228 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
229 CC_CMD       = $(CC_CMD_DBG)
230 USE_RES_FILE = TRUE
231 RC_CMD       = $(RC_CMD_DBG)
232 !ENDIF
233
234 # --------------------------------------------
235 # Makefile.inc provides lists of source files
236 # --------------------------------------------
237
238 !INCLUDE .\Makefile.inc
239
240 # ----------------------------
241 # Build lists of object files
242 # ----------------------------
243
244 !IF [ECHO PROG_OBJS=^$(PROG_OBJDIR)\$(TESTSOURCES: = $(PROG_OBJDIR^)\) > .\prog_objs.inc] == 0
245 !INCLUDE .\prog_objs.inc
246 !IF [DEL .\prog_objs.inc]
247 !ENDIF
248 !ELSE
249 !ERROR Problem generating PROG_OBJS list.
250 !ENDIF
251 PROG_OBJS = $(PROG_OBJS:.cc=.obj)
252
253 !IF [ECHO FUZZ_OBJS=^$(PROG_OBJDIR)\$(FUZZSOURCES: = $(PROG_OBJDIR^)\) > .\fuzz_objs.inc] == 0
254 !INCLUDE .\fuzz_objs.inc
255 !IF [DEL .\fuzz_objs.inc]
256 !ENDIF
257 !ELSE
258 !ERROR Problem generating FUZZ_OBJS list.
259 !ENDIF
260 FUZZ_OBJS = $(FUZZ_OBJS:.c=.obj)
261
262 !IF [ECHO FUZZNAME_OBJS=^$(PROG_OBJDIR)\$(FUZZNAMESOURCES: = $(PROG_OBJDIR^)\) > .\fuzzname_objs.inc] == 0
263 !INCLUDE .\fuzzname_objs.inc
264 !IF [DEL .\fuzzname_objs.inc]
265 !ENDIF
266 !ELSE
267 !ERROR Problem generating FUZZNAME_OBJS list.
268 !ENDIF
269 FUZZNAME_OBJS = $(FUZZNAME_OBJS:.c=.obj)
270
271 !IF [ECHO DNSDUMP_OBJS=^$(PROG_OBJDIR)\$(DUMPSOURCES: = $(PROG_OBJDIR^)\) > .\dnsdump_objs.inc] == 0
272 !INCLUDE .\dnsdump_objs.inc
273 !IF [DEL .\dnsdump_objs.inc]
274 !ENDIF
275 !ELSE
276 !ERROR Problem generating DNSDUMP_OBJS list.
277 !ENDIF
278 DNSDUMP_OBJS = $(DNSDUMP_OBJS:.cc=.obj)
279
280 GMOCK_GTEST_OBJ = $(PROG_OBJDIR)\gmock-gtest-all.obj
281
282 # --------------------------------
283 # Only our custom inference rules
284 # --------------------------------
285
286 .SUFFIXES:
287 .SUFFIXES: .cc .c
288
289 {$(SRCDIR)}.cc{$(PROG_OBJDIR)}.obj:
290     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
291 {$(SRCDIR)}.c{$(PROG_OBJDIR)}.obj:
292     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
293 {$(GMOCK_DIR)}.cc{$(PROG_OBJDIR)}.obj:
294     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /I $(GMOCK_DIR) /Fo$@ /Fd$(@D)\ /c $<
295
296
297 # ---------------------------------------------------------------------
298 # Main targets
299 # ---------------------------------------------------------------------
300
301 ALL: arestest aresfuzz aresfuzzname dnsdump
302     @
303
304 test: arestest
305     $(PROG_OUTDIR)\arestest
306 vtest: arestest
307     $(PROG_OUTDIR)\arestest -v
308
309 arestest: $(TESTSOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(PROG_OBJS) $(GMOCK_GTEST_OBJ)
310     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\arestest.exe $(PROG_OBJS) $(GMOCK_GTEST_OBJ)
311     @if exist $(PROG_OUTDIR)\arestest.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\arestest.exe.manifest -outputresource:$(PROG_OUTDIR)\arestest.exe;1
312
313 aresfuzz: $(FUZZSOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(FUZZ_OBJS)
314     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\aresfuzz.exe $(FUZZ_OBJS)
315     @if exist $(PROG_OUTDIR)\aresfuzz.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\aresfuzz.exe.manifest -outputresource:$(PROG_OUTDIR)\aresfuzz.exe;1
316
317 aresfuzzname: $(FUZZNAMESOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(FUZZNAME_OBJS)
318     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\aresfuzzname.exe $(FUZZNAME_OBJS)
319     @if exist $(PROG_OUTDIR)\aresfuzzname.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\aresfuzzname.exe.manifest -outputresource:$(PROG_OUTDIR)\aresfuzzname.exe;1
320
321 dnsdump: $(DUMPSOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(DNSDUMP_OBJS)
322     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\dnsdump.exe $(DNSDUMP_OBJS)
323     @if exist $(PROG_OUTDIR)\dnsdump.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\dnsdump.exe.manifest -outputresource:$(PROG_OUTDIR)\dnsdump.exe;1
324
325 $(PROG_OUTDIR): $(PROG_DIR)
326     @if not exist $(PROG_OUTDIR) mkdir $(PROG_OUTDIR)
327
328 $(PROG_OBJDIR): $(PROG_OUTDIR)
329     @if not exist $(PROG_OBJDIR) mkdir $(PROG_OBJDIR)
330
331 clean:
332     @-RMDIR /S /Q $(PROG_OUTDIR) >NUL 2>&1
333
334 $(BASE_DIR):
335     @if not exist $(BASE_DIR) mkdir $(BASE_DIR)
336
337 $(PROG_DIR): $(BASE_DIR)
338     @if not exist $(PROG_DIR) mkdir $(PROG_DIR)
339
340 # End of Makefile.msvc