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.
13 # ------------------------------------------------------------------------------
15 # Makefile for building c-ares test suite with MSVC.
17 # Usage: nmake /f makefile.msvc CFG=<config> <target>
19 # <config> can be one of: [ lib-release | lib-debug | dll-release | dll-debug }
20 # <target> can be one of: [ all | arestest | clean }
22 # If <target> is not specified then all targets are built.
23 # If <config> is not specified then lib-debug will be assumed.
25 # This makefile must be processed from the subdir where it is located.
27 # All results are generated below a subdirectory named msvcXXX.
29 # ------------------------------------------------------------------------------
32 # ------------------------------------------------
33 # c-ares static and dynamic libraries common base
34 # file names for release and debug configurations
35 # ------------------------------------------------
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
43 # -------------------------------------------
44 # Base names for c-ares DLL import libraries
45 # -------------------------------------------
47 IMP_LIB_REL = $(DYN_LIB_REL)
48 IMP_LIB_DBG = $(DYN_LIB_DBG)
50 # --------------------------
51 # Runtime library selection
52 # --------------------------
57 !IF "$(RTLIBCFG)" == "static"
62 # --------------------------------------------------------
63 # Detect compiler version.
64 # --------------------------------------------------------
65 !INCLUDE ..\msvc_ver.inc
67 # ---------------------------------------------------------
68 # Verify that current subdir is below the c-ares source one
69 # ---------------------------------------------------------
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.
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 # ------------------------------------------------------------------
83 # Look for a built library of the same configuration in the directory above.
84 LIB_BASE_DIR = ..\msvc
86 # ----------------------------------------
87 # Subdir holding sources for all projects
88 # ----------------------------------------
92 # -------------------------
93 # Configuration validation
94 # -------------------------
101 !IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \
102 "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug"
106 !IF "$(VALID_CFGSET)" == "FALSE"
107 ! MESSAGE MSVC c-ares makefile
109 ! MESSAGE Usage: nmake /f makefile.msvc CFG=<config> <target>
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 }
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.
117 ! ERROR Choose a valid configuration.
120 # --------------------------------------------------------
121 # Project subdirs independent of configuration being used
122 # --------------------------------------------------------
124 PROG_DIR = $(BASE_DIR)\arestest
125 LIB_DIR = $(LIB_BASE_DIR)\cares
127 GMOCK_DIR = gmock-1.11.0
129 # ---------------------------------------------------
130 # Subdirs which are configuration dependent are only
131 # defined when a valid configuration has been given.
132 # ---------------------------------------------------
134 PROG_OUTDIR = $(PROG_DIR)\$(CFG)
135 PROG_OBJDIR = $(PROG_OUTDIR)\obj
136 LIB_OUTDIR = $(LIB_DIR)\$(CFG)
139 # -------------------------------------
140 # TCP/IP stack settings
141 # -------------------------------------
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
146 # -------------------------------------------------
147 # Switches that depend on ancient compiler versions
148 # -------------------------------------------------
150 !IF $(CC_VERS_NUM) == 60
152 PDBTYPE_CONSOLIDATE = /pdbtype:consolidate
155 !UNDEF PDBTYPE_CONSOLIDATE
158 !IF $(CC_VERS_NUM) <= 70
159 RT_ERROR_CHECKING = /GZ
161 RT_ERROR_CHECKING = /RTCsu
164 # ----------------------------
165 # Assorted commands and flags
166 # ----------------------------
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
172 RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG"
173 RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG"
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
179 LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE)
180 LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE)
182 # ---------------------------------
183 # Configuration dependent settings
184 # ---------------------------------
186 !IF "$(CFG)" == "lib-release"
187 CARES_TARGET = $(STA_LIB_REL).lib
188 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB
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)
197 !IF "$(CFG)" == "lib-debug"
198 CARES_TARGET = $(STA_LIB_DBG).lib
199 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD
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)
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)
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)
218 RC_CMD = $(RC_CMD_REL)
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)
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)
231 RC_CMD = $(RC_CMD_DBG)
234 # --------------------------------------------
235 # Makefile.inc provides lists of source files
236 # --------------------------------------------
238 !INCLUDE .\Makefile.inc
240 # ----------------------------
241 # Build lists of object files
242 # ----------------------------
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]
249 !ERROR Problem generating PROG_OBJS list.
251 PROG_OBJS = $(PROG_OBJS:.cc=.obj)
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]
258 !ERROR Problem generating FUZZ_OBJS list.
260 FUZZ_OBJS = $(FUZZ_OBJS:.c=.obj)
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]
267 !ERROR Problem generating FUZZNAME_OBJS list.
269 FUZZNAME_OBJS = $(FUZZNAME_OBJS:.c=.obj)
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]
276 !ERROR Problem generating DNSDUMP_OBJS list.
278 DNSDUMP_OBJS = $(DNSDUMP_OBJS:.cc=.obj)
280 GMOCK_GTEST_OBJ = $(PROG_OBJDIR)\gmock-gtest-all.obj
282 # --------------------------------
283 # Only our custom inference rules
284 # --------------------------------
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 $<
297 # ---------------------------------------------------------------------
299 # ---------------------------------------------------------------------
301 ALL: arestest aresfuzz aresfuzzname dnsdump
305 $(PROG_OUTDIR)\arestest
307 $(PROG_OUTDIR)\arestest -v
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
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
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
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
325 $(PROG_OUTDIR): $(PROG_DIR)
326 @if not exist $(PROG_OUTDIR) mkdir $(PROG_OUTDIR)
328 $(PROG_OBJDIR): $(PROG_OUTDIR)
329 @if not exist $(PROG_OBJDIR) mkdir $(PROG_OBJDIR)
332 @-RMDIR /S /Q $(PROG_OUTDIR) >NUL 2>&1
335 @if not exist $(BASE_DIR) mkdir $(BASE_DIR)
337 $(PROG_DIR): $(BASE_DIR)
338 @if not exist $(PROG_DIR) mkdir $(PROG_DIR)
340 # End of Makefile.msvc