Makefile.msvc (11566B)
1 # Copyright (C) The c-ares project and its contributors 2 # SPDX-License-Identifier: MIT 3 # 4 # Permission is hereby granted, free of charge, to any person obtaining a copy 5 # of this software and associated documentation files (the "Software"), to deal 6 # in the Software without restriction, including without limitation the rights 7 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 # copies of the Software, and to permit persons to whom the Software is 9 # furnished to do so, subject to the following conditions: 10 # 11 # The above copyright notice and this permission notice (including the next 12 # paragraph) shall be included in all copies or substantial portions of the 13 # Software. 14 # 15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 # SOFTWARE. 22 23 24 # ------------------------------------------------------------------------------ 25 # 26 # Makefile for building c-ares test suite with MSVC. 27 # 28 # Usage: nmake /f makefile.msvc CFG=<config> <target> 29 # 30 # <config> can be one of: [ lib-release | lib-debug | dll-release | dll-debug } 31 # <target> can be one of: [ all | arestest | clean } 32 # 33 # If <target> is not specified then all targets are built. 34 # If <config> is not specified then lib-debug will be assumed. 35 # 36 # This makefile must be processed from the subdir where it is located. 37 # 38 # All results are generated below a subdirectory named msvcXXX. 39 # 40 # ------------------------------------------------------------------------------ 41 42 43 # ------------------------------------------------ 44 # c-ares static and dynamic libraries common base 45 # file names for release and debug configurations 46 # ------------------------------------------------ 47 48 LIBNAME = cares 49 STA_LIB_REL = lib$(LIBNAME) 50 DYN_LIB_REL = $(LIBNAME) 51 STA_LIB_DBG = $(STA_LIB_REL)d 52 DYN_LIB_DBG = $(DYN_LIB_REL)d 53 54 # ------------------------------------------- 55 # Base names for c-ares DLL import libraries 56 # ------------------------------------------- 57 58 IMP_LIB_REL = $(DYN_LIB_REL) 59 IMP_LIB_DBG = $(DYN_LIB_DBG) 60 61 # -------------------------- 62 # Runtime library selection 63 # -------------------------- 64 65 RTLIB = /MD 66 RTLIBD = /MDd 67 68 !IF "$(RTLIBCFG)" == "static" 69 RTLIB = /MT 70 RTLIBD = /MTd 71 !ENDIF 72 73 # --------------------------------------------------------- 74 # Verify that current subdir is below the c-ares source one 75 # --------------------------------------------------------- 76 77 !IF ! EXIST(..\src\lib\ares_init.c) 78 ! MESSAGE Can not process Makefile.msvc from outside of c-ares test subdirectory. 79 ! MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again. 80 ! ERROR See previous message. 81 !ENDIF 82 83 # ------------------------------------------------------------------ 84 # Base subdir is the common root from which other subdirs will hang, 85 # the name depends on MSVC version being used when building c-ares. 86 # ------------------------------------------------------------------ 87 88 BASE_DIR = .\msvc 89 # Look for a built library of the same configuration in the directory above. 90 LIB_BASE_DIR = ..\msvc 91 92 # ---------------------------------------- 93 # Subdir holding sources for all projects 94 # ---------------------------------------- 95 96 SRCDIR = . 97 98 # ------------------------- 99 # Configuration validation 100 # ------------------------- 101 102 !IF "$(CFG)" == "" 103 CFG = lib-debug 104 !ENDIF 105 106 VALID_CFGSET = FALSE 107 !IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \ 108 "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug" 109 VALID_CFGSET = TRUE 110 !ENDIF 111 112 !IF "$(VALID_CFGSET)" == "FALSE" 113 ! MESSAGE MSVC c-ares makefile 114 ! MESSAGE 115 ! MESSAGE Usage: nmake /f makefile.msvc CFG=<config> GTEST_ROOT=<google-test-install> <target> 116 ! MESSAGE 117 ! MESSAGE <config> can be one of: [ lib-release | lib-debug | dll-release | dll-debug } 118 ! MESSAGE <target> can be one of: [ all | arestest | aresfuzz | aresfuzzname | dnsdump | clean } 119 ! MESSAGE 120 ! MESSAGE If <target> is not specified then all targets are built. 121 ! MESSAGE If <config> is not specified then lib-debug will be assumed. 122 ! MESSAGE 123 ! ERROR Choose a valid configuration. 124 !ENDIF 125 126 !IF "$(GTEST_ROOT)" == "" 127 ! ERROR Missing GTEST_ROOT 128 !ENDIF 129 130 # -------------------------------------------------------- 131 # Project subdirs independent of configuration being used 132 # -------------------------------------------------------- 133 134 PROG_DIR = $(BASE_DIR)\arestest 135 LIB_DIR = $(LIB_BASE_DIR)\cares 136 137 # --------------------------------------------------- 138 # Subdirs which are configuration dependent are only 139 # defined when a valid configuration has been given. 140 # --------------------------------------------------- 141 142 PROG_OUTDIR = $(PROG_DIR)\$(CFG) 143 PROG_OBJDIR = $(PROG_OUTDIR)\obj 144 LIB_OUTDIR = $(LIB_DIR)\$(CFG) 145 146 147 # ------------------------------------- 148 # TCP/IP stack settings 149 # ------------------------------------- 150 CFLAGS = /DWIN32 151 EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib 152 EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib 153 154 155 # ---------------------------- 156 # Assorted commands and flags 157 # ---------------------------- 158 159 CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2 /D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS 160 CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi /D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /RTCsu 161 CC_CFLAGS = $(CFLAGS) /I. /I../src/lib /I../src/lib/include /I../include /I $(GTEST_ROOT)/include /W3 /EHsc /FD 162 163 RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG" 164 RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG" 165 166 LINK_CMD_LIB = link.exe /lib /nologo 167 LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no 168 LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console 169 170 LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release 171 LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug 172 173 # --------------------------------- 174 # Configuration dependent settings 175 # --------------------------------- 176 177 !IF "$(CFG)" == "lib-release" 178 CARES_TARGET = $(STA_LIB_REL).lib 179 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB 180 CARES_LFLAGS = 181 SPROG_CFLAGS = /DCARES_STATICLIB /DCARES_NO_DEPRECATED 182 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib 183 CARES_LINK = $(LINK_CMD_LIB) 184 SPROG_LINK = $(LINK_CMD_EXE_REL) 185 CC_CMD = $(CC_CMD_REL) 186 !ENDIF 187 188 !IF "$(CFG)" == "lib-debug" 189 CARES_TARGET = $(STA_LIB_DBG).lib 190 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD 191 CARES_LFLAGS = 192 SPROG_CFLAGS = /DCARES_STATICLIB /DCARES_NO_DEPRECATED 193 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib 194 CARES_LINK = $(LINK_CMD_LIB) 195 SPROG_LINK = $(LINK_CMD_EXE_DBG) 196 CC_CMD = $(CC_CMD_DBG) 197 !ENDIF 198 199 !IF "$(CFG)" == "dll-release" 200 CARES_TARGET = $(DYN_LIB_REL).dll 201 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY 202 CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(PROG_OUTDIR)\$(IMP_LIB_REL).lib 203 SPROG_CFLAGS = /DCARES_NO_DEPRECATED 204 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib 205 CARES_LINK = $(LINK_CMD_DLL) 206 SPROG_LINK = $(LINK_CMD_EXE_REL) 207 CC_CMD = $(CC_CMD_REL) 208 USE_RES_FILE = TRUE 209 RC_CMD = $(RC_CMD_REL) 210 !ENDIF 211 212 !IF "$(CFG)" == "dll-debug" 213 CARES_TARGET = $(DYN_LIB_DBG).dll 214 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD 215 CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(PROG_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(PROG_OUTDIR)\$(DYN_LIB_DBG).pdb 216 SPROG_CFLAGS = /DCARES_NO_DEPRECATED 217 SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib 218 CARES_LINK = $(LINK_CMD_DLL) 219 SPROG_LINK = $(LINK_CMD_EXE_DBG) 220 CC_CMD = $(CC_CMD_DBG) 221 USE_RES_FILE = TRUE 222 RC_CMD = $(RC_CMD_DBG) 223 !ENDIF 224 225 # -------------------------------------------- 226 # Makefile.inc provides lists of source files 227 # -------------------------------------------- 228 229 !INCLUDE .\Makefile.inc 230 231 # ---------------------------- 232 # Build lists of object files 233 # ---------------------------- 234 235 !IF [ECHO PROG_OBJS=^$(PROG_OBJDIR)\$(TESTSOURCES: = $(PROG_OBJDIR^)\) > .\prog_objs.inc] == 0 236 !INCLUDE .\prog_objs.inc 237 !IF [DEL .\prog_objs.inc] 238 !ENDIF 239 !ELSE 240 !ERROR Problem generating PROG_OBJS list. 241 !ENDIF 242 PROG_OBJS = $(PROG_OBJS:.cc=.obj) 243 244 !IF [ECHO FUZZ_OBJS=^$(PROG_OBJDIR)\$(FUZZSOURCES: = $(PROG_OBJDIR^)\) > .\fuzz_objs.inc] == 0 245 !INCLUDE .\fuzz_objs.inc 246 !IF [DEL .\fuzz_objs.inc] 247 !ENDIF 248 !ELSE 249 !ERROR Problem generating FUZZ_OBJS list. 250 !ENDIF 251 FUZZ_OBJS = $(FUZZ_OBJS:.c=.obj) 252 253 !IF [ECHO FUZZNAME_OBJS=^$(PROG_OBJDIR)\$(FUZZNAMESOURCES: = $(PROG_OBJDIR^)\) > .\fuzzname_objs.inc] == 0 254 !INCLUDE .\fuzzname_objs.inc 255 !IF [DEL .\fuzzname_objs.inc] 256 !ENDIF 257 !ELSE 258 !ERROR Problem generating FUZZNAME_OBJS list. 259 !ENDIF 260 FUZZNAME_OBJS = $(FUZZNAME_OBJS:.c=.obj) 261 262 !IF [ECHO DNSDUMP_OBJS=^$(PROG_OBJDIR)\$(DUMPSOURCES: = $(PROG_OBJDIR^)\) > .\dnsdump_objs.inc] == 0 263 !INCLUDE .\dnsdump_objs.inc 264 !IF [DEL .\dnsdump_objs.inc] 265 !ENDIF 266 !ELSE 267 !ERROR Problem generating DNSDUMP_OBJS list. 268 !ENDIF 269 DNSDUMP_OBJS = $(DNSDUMP_OBJS:.cc=.obj) 270 271 # -------------------------------- 272 # Only our custom inference rules 273 # -------------------------------- 274 275 .SUFFIXES: 276 .SUFFIXES: .cc .c 277 278 {$(SRCDIR)}.cc{$(PROG_OBJDIR)}.obj: 279 $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< 280 {$(SRCDIR)}.c{$(PROG_OBJDIR)}.obj: 281 $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< 282 283 284 # --------------------------------------------------------------------- 285 # Main targets 286 # --------------------------------------------------------------------- 287 288 ALL: arestest aresfuzz aresfuzzname dnsdump 289 @ 290 291 test: arestest 292 $(PROG_OUTDIR)\arestest -4 --gtest_filter=-*LiveSearchTXT*:*LiveSearchANY*:*LiveGetLocalhostByAddr* 293 vtest: arestest 294 $(PROG_OUTDIR)\arestest -4 -v --gtest_filter=-*LiveSearchTXT*:*LiveSearchANY*:*LiveGetLocalhostByAddr* 295 296 arestest: $(TESTSOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(PROG_OBJS) 297 $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\arestest.exe $(PROG_OBJS) $(GTEST_ROOT)/lib/gmock.lib 298 @if exist $(PROG_OUTDIR)\arestest.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\arestest.exe.manifest -outputresource:$(PROG_OUTDIR)\arestest.exe;1 299 300 aresfuzz: $(FUZZSOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(FUZZ_OBJS) 301 $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\aresfuzz.exe $(FUZZ_OBJS) 302 @if exist $(PROG_OUTDIR)\aresfuzz.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\aresfuzz.exe.manifest -outputresource:$(PROG_OUTDIR)\aresfuzz.exe;1 303 304 aresfuzzname: $(FUZZNAMESOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(FUZZNAME_OBJS) 305 $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\aresfuzzname.exe $(FUZZNAME_OBJS) 306 @if exist $(PROG_OUTDIR)\aresfuzzname.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\aresfuzzname.exe.manifest -outputresource:$(PROG_OUTDIR)\aresfuzzname.exe;1 307 308 dnsdump: $(DUMPSOURCES) $(PROG_OUTDIR) $(PROG_OBJDIR) $(DNSDUMP_OBJS) 309 $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\dnsdump.exe $(DNSDUMP_OBJS) 310 @if exist $(PROG_OUTDIR)\dnsdump.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\dnsdump.exe.manifest -outputresource:$(PROG_OUTDIR)\dnsdump.exe;1 311 312 $(PROG_OUTDIR): $(PROG_DIR) 313 @if not exist $(PROG_OUTDIR) mkdir $(PROG_OUTDIR) 314 315 $(PROG_OBJDIR): $(PROG_OUTDIR) 316 @if not exist $(PROG_OBJDIR) mkdir $(PROG_OBJDIR) 317 318 clean: 319 @-RMDIR /S /Q $(PROG_OUTDIR) >NUL 2>&1 320 321 $(BASE_DIR): 322 @if not exist $(BASE_DIR) mkdir $(BASE_DIR) 323 324 $(PROG_DIR): $(BASE_DIR) 325 @if not exist $(PROG_DIR) mkdir $(PROG_DIR) 326 327 # End of Makefile.msvc