OLD | NEW |
(Empty) | |
| 1 # makefile.vc -- -*- Makefile -*- |
| 2 # |
| 3 # Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+) |
| 4 # |
| 5 # This makefile is based upon the Tcl 8.4 Makefile.vc and modified to |
| 6 # make it suitable as a general package makefile. Look for the word EDIT |
| 7 # which marks sections that may need modification. As a minumum you will |
| 8 # need to change the PROJECT, DOTVERSION and DLLOBJS variables to values |
| 9 # relevant to your package. |
| 10 # |
| 11 # See the file "license.terms" for information on usage and redistribution |
| 12 # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
| 13 # |
| 14 # Copyright (c) 1995-1996 Sun Microsystems, Inc. |
| 15 # Copyright (c) 1998-2000 Ajuba Solutions. |
| 16 # Copyright (c) 2001 ActiveState Corporation. |
| 17 # Copyright (c) 2001-2002 David Gravereaux. |
| 18 # Copyright (c) 2003 Pat Thoyts |
| 19 # |
| 20 #------------------------------------------------------------------------- |
| 21 # RCS: @(#)$Id: makefile.vc,v 1.4 2004/07/26 08:22:05 patthoyts Exp $ |
| 22 #------------------------------------------------------------------------- |
| 23 |
| 24 !if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCINSTALLDIR) && !define
d(MSSDK) && !defined(WINDOWSSDKDIR) |
| 25 MSG = ^ |
| 26 You will need to run vcvars32.bat from Developer Studio, first, to setup^ |
| 27 the environment. Jump to this line to read the new instructions. |
| 28 !error $(MSG) |
| 29 !endif |
| 30 |
| 31 #------------------------------------------------------------------------------ |
| 32 # HOW TO USE this makefile: |
| 33 # |
| 34 # 1) It is now necessary to have %MSVCDir% set in the environment. This is |
| 35 # used as a check to see if vcvars32.bat had been run prior to running |
| 36 # nmake or during the installation of Microsoft Visual C++, MSVCDir had |
| 37 # been set globally and the PATH adjusted. Either way is valid. |
| 38 # |
| 39 # You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin |
| 40 # directory to setup the proper environment, if needed, for your current |
| 41 # setup. This is a needed bootstrap requirement and allows the swapping of |
| 42 # different environments to be easier. |
| 43 # |
| 44 # 2) To use the Platform SDK (not expressly needed), run setenv.bat after |
| 45 # vcvars32.bat according to the instructions for it. This can also turn on |
| 46 # the 64-bit compiler, if your SDK has it. |
| 47 # |
| 48 # 3) Targets are: |
| 49 # all -- Builds everything. |
| 50 # <project> -- Builds the project (eg: nmake sample) |
| 51 # test -- Builds and runs the test suite. |
| 52 # install -- Installs the built binaries and libraries to $(INSTALLDIR) |
| 53 # in an appropriate subdirectory. |
| 54 # clean/realclean/distclean -- varying levels of cleaning. |
| 55 # |
| 56 # 4) Macros usable on the commandline: |
| 57 # INSTALLDIR=<path> |
| 58 # Sets where to install Tcl from the built binaries. |
| 59 # C:\Progra~1\Tcl is assumed when not specified. |
| 60 # |
| 61 # OPTS=static,msvcrt,staticpkg,threads,symbols,profile,loimpact,none |
| 62 # Sets special options for the core. The default is for none. |
| 63 # Any combination of the above may be used (comma separated). |
| 64 # 'none' will over-ride everything to nothing. |
| 65 # |
| 66 # static = Builds a static library of the core instead of a |
| 67 # dll. The shell will be static (and large), as well. |
| 68 # msvcrt = Effects the static option only to switch it from |
| 69 # using libcmt(d) as the C runtime [by default] to |
| 70 # msvcrt(d). This is useful for static embedding |
| 71 # support. |
| 72 # staticpkg = Effects the static option only to switch |
| 73 # tclshXX.exe to have the dde and reg extension linked |
| 74 # inside it. |
| 75 # threads = Turns on full multithreading support. |
| 76 # thrdalloc = Use the thread allocator (shared global free pool). |
| 77 # symbols = Adds symbols for step debugging. |
| 78 # profile = Adds profiling hooks. Map file is assumed. |
| 79 # loimpact = Adds a flag for how NT treats the heap to keep memor
y |
| 80 # in use, low. This is said to impact alloc performanc
e. |
| 81 # |
| 82 # STATS=memdbg,compdbg,none |
| 83 # Sets optional memory and bytecode compiler debugging code added |
| 84 # to the core. The default is for none. Any combination of the |
| 85 # above may be used (comma separated). 'none' will over-ride |
| 86 # everything to nothing. |
| 87 # |
| 88 # memdbg = Enables the debugging memory allocator. |
| 89 # compdbg = Enables byte compilation logging. |
| 90 # |
| 91 # MACHINE=(IX86|IA64|ALPHA) |
| 92 # Set the machine type used for the compiler, linker, and |
| 93 # resource compiler. This hook is needed to tell the tools |
| 94 # when alternate platforms are requested. IX86 is the default |
| 95 # when not specified. |
| 96 # |
| 97 # TMP_DIR=<path> |
| 98 # OUT_DIR=<path> |
| 99 # Hooks to allow the intermediate and output directories to be |
| 100 # changed. $(OUT_DIR) is assumed to be |
| 101 # $(BINROOT)\(Release|Debug) based on if symbols are requested. |
| 102 # $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default. |
| 103 # |
| 104 # TESTPAT=<file> |
| 105 # Reads the tests requested to be run from this file. |
| 106 # |
| 107 # CFG_ENCODING=encoding |
| 108 # name of encoding for configuration information. Defaults |
| 109 # to cp1252 |
| 110 # |
| 111 # 5) Examples: |
| 112 # |
| 113 # Basic syntax of calling nmake looks like this: |
| 114 # nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]] |
| 115 # |
| 116 # Standard (no frills) |
| 117 # c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat |
| 118 # Setting environment for using Microsoft Visual C++ tools. |
| 119 # c:\tcl_src\win\>nmake -f makefile.vc all |
| 120 # c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl |
| 121 # |
| 122 # Building for Win64 |
| 123 # c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat |
| 124 # Setting environment for using Microsoft Visual C++ tools. |
| 125 # c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL |
| 126 # Targeting Windows pre64 RETAIL |
| 127 # c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64 |
| 128 # |
| 129 #------------------------------------------------------------------------------ |
| 130 #============================================================================== |
| 131 ############################################################################### |
| 132 #------------------------------------------------------------------------------ |
| 133 |
| 134 !if !exist("makefile.vc") |
| 135 MSG = ^ |
| 136 You must run this makefile only from the directory it is in.^ |
| 137 Please `cd` to its location first. |
| 138 !error $(MSG) |
| 139 !endif |
| 140 |
| 141 #------------------------------------------------------------------------- |
| 142 # Project specific information (EDIT) |
| 143 # |
| 144 # You should edit this with the name and version of your project. This |
| 145 # information is used to generate the name of the package library and |
| 146 # it's install location. |
| 147 # |
| 148 # For example, the sample extension is going to build sample04.dll and |
| 149 # would install it into $(INSTALLDIR)\lib\sample04 |
| 150 # |
| 151 # You need to specify the object files that need to be linked into your |
| 152 # binary here. |
| 153 # |
| 154 #------------------------------------------------------------------------- |
| 155 |
| 156 PROJECT = sqlite3 |
| 157 !include "rules.vc" |
| 158 |
| 159 # nmakehelp -V <file> <tag> will search the file for tag, skips until a |
| 160 # number and returns all character until a character not in [0-9.ab] |
| 161 # is read. |
| 162 |
| 163 !if [echo REM = This file is generated from Makefile.vc > versions.vc] |
| 164 !endif |
| 165 # get project version from row "AC_INIT([sqlite], [3.7.14])" |
| 166 !if [echo DOTVERSION = \>> versions.vc] \ |
| 167 && [nmakehlp -V ..\configure.in AC_INIT >> versions.vc] |
| 168 !endif |
| 169 !include "versions.vc" |
| 170 |
| 171 VERSION = $(DOTVERSION:.=) |
| 172 STUBPREFIX = $(PROJECT)stub |
| 173 |
| 174 DLLOBJS = \ |
| 175 $(TMP_DIR)\tclsqlite3.obj |
| 176 |
| 177 #------------------------------------------------------------------------- |
| 178 # Target names and paths ( shouldn't need changing ) |
| 179 #------------------------------------------------------------------------- |
| 180 |
| 181 BINROOT = . |
| 182 ROOT = .. |
| 183 |
| 184 PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib |
| 185 PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) |
| 186 PRJLIB = $(OUT_DIR)\$(PRJLIBNAME) |
| 187 |
| 188 PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib |
| 189 PRJSTUBLIB = $(OUT_DIR)\$(PRJSTUBLIBNAME) |
| 190 |
| 191 ### Make sure we use backslash only. |
| 192 PRJ_INSTALL_DIR = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION) |
| 193 LIB_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
| 194 BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
| 195 DOC_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
| 196 SCRIPT_INSTALL_DIR = $(PRJ_INSTALL_DIR) |
| 197 INCLUDE_INSTALL_DIR = $(_TCLDIR)\include |
| 198 |
| 199 ### The following paths CANNOT have spaces in them. |
| 200 GENERICDIR = $(ROOT)\generic |
| 201 WINDIR = $(ROOT)\win |
| 202 LIBDIR = $(ROOT)\library |
| 203 DOCDIR = $(ROOT)\doc |
| 204 TOOLSDIR = $(ROOT)\tools |
| 205 COMPATDIR = $(ROOT)\compat |
| 206 |
| 207 #--------------------------------------------------------------------- |
| 208 # Compile flags |
| 209 #--------------------------------------------------------------------- |
| 210 |
| 211 !if !$(DEBUG) |
| 212 !if $(OPTIMIZING) |
| 213 ### This cranks the optimization level to maximize speed |
| 214 cdebug = -O2 -Op -Gs |
| 215 !else |
| 216 cdebug = |
| 217 !endif |
| 218 !else if "$(MACHINE)" == "IA64" |
| 219 ### Warnings are too many, can't support warnings into errors. |
| 220 cdebug = -Z7 -Od -GZ |
| 221 !else |
| 222 cdebug = -Z7 -WX -Od -GZ |
| 223 !endif |
| 224 |
| 225 ### Declarations common to all compiler options |
| 226 cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\ |
| 227 |
| 228 !if $(MSVCRT) |
| 229 !if $(DEBUG) |
| 230 crt = -MDd |
| 231 !else |
| 232 crt = -MD |
| 233 !endif |
| 234 !else |
| 235 !if $(DEBUG) |
| 236 crt = -MTd |
| 237 !else |
| 238 crt = -MT |
| 239 !endif |
| 240 !endif |
| 241 |
| 242 INCLUDES = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" \ |
| 243 -I"$(ROOT)\.." |
| 244 BASE_CLFAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES) \ |
| 245 -DSQLITE_3_SUFFIX_ONLY=1 -DSQLITE_ENABLE_RTREE=1 \ |
| 246 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_OMIT_DEPRECATED=1 |
| 247 CON_CFLAGS = $(cflags) $(cdebug) $(crt) -DCONSOLE -DSQLITE_ENABLE_FTS3=1 |
| 248 TCL_CFLAGS = -DBUILD_sqlite -DUSE_TCL_STUBS \ |
| 249 -DPACKAGE_VERSION="\"$(DOTVERSION)\"" $(BASE_CLFAGS) \ |
| 250 $(OPTDEFINES) |
| 251 |
| 252 #--------------------------------------------------------------------- |
| 253 # Link flags |
| 254 #--------------------------------------------------------------------- |
| 255 |
| 256 !if $(DEBUG) |
| 257 ldebug = -debug:full -debugtype:cv |
| 258 !else |
| 259 ldebug = -release -opt:ref -opt:icf,3 |
| 260 !endif |
| 261 |
| 262 ### Declarations common to all linker options |
| 263 lflags = -nologo -machine:$(MACHINE) $(ldebug) |
| 264 |
| 265 !if $(PROFILE) |
| 266 lflags = $(lflags) -profile |
| 267 !endif |
| 268 |
| 269 !if $(ALIGN98_HACK) && !$(STATIC_BUILD) |
| 270 ### Align sections for PE size savings. |
| 271 lflags = $(lflags) -opt:nowin98 |
| 272 !else if !$(ALIGN98_HACK) && $(STATIC_BUILD) |
| 273 ### Align sections for speed in loading by choosing the virtual page size. |
| 274 lflags = $(lflags) -align:4096 |
| 275 !endif |
| 276 |
| 277 !if $(LOIMPACT) |
| 278 lflags = $(lflags) -ws:aggressive |
| 279 !endif |
| 280 |
| 281 dlllflags = $(lflags) -dll |
| 282 conlflags = $(lflags) -subsystem:console |
| 283 guilflags = $(lflags) -subsystem:windows |
| 284 baselibs = $(TCLSTUBLIB) |
| 285 |
| 286 #--------------------------------------------------------------------- |
| 287 # TclTest flags |
| 288 #--------------------------------------------------------------------- |
| 289 |
| 290 !IF "$(TESTPAT)" != "" |
| 291 TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT) |
| 292 !ENDIF |
| 293 |
| 294 #--------------------------------------------------------------------- |
| 295 # Project specific targets (EDIT) |
| 296 #--------------------------------------------------------------------- |
| 297 |
| 298 all: setup $(PROJECT) |
| 299 $(PROJECT): setup $(PRJLIB) |
| 300 install: install-binaries install-libraries install-docs |
| 301 |
| 302 # Tests need to ensure we load the right dll file we |
| 303 # have to handle the output differently on Win9x. |
| 304 # |
| 305 !if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE" |
| 306 test: setup $(PROJECT) |
| 307 set TCL_LIBRARY=$(ROOT)/library |
| 308 $(TCLSH) << |
| 309 load $(PRJLIB:\=/) |
| 310 cd "$(ROOT)/tests" |
| 311 set argv "$(TESTFLAGS)" |
| 312 source all.tcl |
| 313 << |
| 314 !else |
| 315 test: setup $(PROJECT) |
| 316 echo Please wait while the test results are collected |
| 317 set TCL_LIBRARY=$(ROOT)/library |
| 318 $(TCLSH) << >tests.log |
| 319 load $(PRJLIB:\=/) |
| 320 cd "$(ROOT)/tests" |
| 321 set argv "$(TESTFLAGS)" |
| 322 source all.tcl |
| 323 << |
| 324 type tests.log | more |
| 325 !endif |
| 326 |
| 327 setup: |
| 328 @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR) |
| 329 @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR) |
| 330 |
| 331 $(PRJLIB): $(DLLOBJS) |
| 332 $(link32) $(dlllflags) -out:$@ $(baselibs) @<< |
| 333 $** |
| 334 << |
| 335 -@del $*.exp |
| 336 |
| 337 $(PRJSTUBLIB): $(PRJSTUBOBJS) |
| 338 $(lib32) -nologo -out:$@ $(PRJSTUBOBJS) |
| 339 |
| 340 #--------------------------------------------------------------------- |
| 341 # Implicit rules |
| 342 #--------------------------------------------------------------------- |
| 343 |
| 344 {$(WINDIR)}.c{$(TMP_DIR)}.obj:: |
| 345 $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< |
| 346 $< |
| 347 << |
| 348 |
| 349 {$(GENERICDIR)}.c{$(TMP_DIR)}.obj:: |
| 350 $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< |
| 351 $< |
| 352 << |
| 353 |
| 354 {$(COMPATDIR)}.c{$(TMP_DIR)}.obj:: |
| 355 $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< |
| 356 $< |
| 357 << |
| 358 |
| 359 {$(WINDIR)}.rc{$(TMP_DIR)}.res: |
| 360 $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \ |
| 361 !if $(DEBUG) |
| 362 -d DEBUG \ |
| 363 !endif |
| 364 !if $(TCL_THREADS) |
| 365 -d TCL_THREADS \ |
| 366 !endif |
| 367 !if $(STATIC_BUILD) |
| 368 -d STATIC_BUILD \ |
| 369 !endif |
| 370 $< |
| 371 |
| 372 .SUFFIXES: |
| 373 .SUFFIXES:.c .rc |
| 374 |
| 375 #--------------------------------------------------------------------- |
| 376 # Installation. (EDIT) |
| 377 # |
| 378 # You may need to modify this section to reflect the final distribution |
| 379 # of your files and possibly to generate documentation. |
| 380 # |
| 381 #--------------------------------------------------------------------- |
| 382 |
| 383 install-binaries: |
| 384 @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)' |
| 385 @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)" |
| 386 @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL |
| 387 |
| 388 install-libraries: |
| 389 @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)' |
| 390 @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)" |
| 391 @echo Installing package index in '$(SCRIPT_INSTALL_DIR)' |
| 392 @type << >"$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" |
| 393 package ifneeded $(PROJECT) $(DOTVERSION) \ |
| 394 [list load [file join $$dir $(PRJLIBNAME)] sqlite3] |
| 395 << |
| 396 |
| 397 install-docs: |
| 398 @echo Installing documentation files to '$(DOC_INSTALL_DIR)' |
| 399 @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)" |
| 400 |
| 401 #--------------------------------------------------------------------- |
| 402 # Clean up |
| 403 #--------------------------------------------------------------------- |
| 404 |
| 405 clean: |
| 406 @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR) |
| 407 @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc |
| 408 |
| 409 realclean: clean |
| 410 @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR) |
| 411 |
| 412 distclean: realclean |
| 413 @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe |
| 414 @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj |
OLD | NEW |