1 #### DO NOT EDIT #### 2 # This makefile is automatically generated from the Makefile.msc at 3 # the root of the canonical SQLite source tree (not the 4 # amalgamation tarball) using the tool/mkmsvcmin.tcl 5 # script. 6 # 7 8 # 9 # nmake Makefile for SQLite 10 # 11 ############################################################################### 12 ############################## START OF OPTIONS ############################### 13 ############################################################################### 14 15 # The toplevel directory of the source tree. This is the directory 16 # that contains this "Makefile.msc". 17 # 18 TOP = . 19 20 21 # Optionally set EXTRA_SRC to a list of C files to append to 22 # the generated sqlite3.c. Any sqlite3 extensions added this 23 # way may require manual editing, as described in 24 # https://sqlite.org/forum/forumpost/903f721f3e7c0d25 25 # 26 !IFNDEF EXTRA_SRC 27 EXTRA_SRC = 28 !ENDIF 29 30 # Set this non-0 to enable full warnings (-W4, etc) when compiling. 31 # 32 !IFNDEF USE_FULLWARN 33 USE_FULLWARN = 1 34 !ENDIF 35 36 # Set this non-0 to enable treating warnings as errors (-WX, etc) when 37 # compiling. 38 # 39 !IFNDEF USE_FATAL_WARN 40 USE_FATAL_WARN = 0 41 !ENDIF 42 43 # Set this non-0 to enable full runtime error checks (-RTC1, etc). This 44 # has no effect if (any) optimizations are enabled. 45 # 46 !IFNDEF USE_RUNTIME_CHECKS 47 USE_RUNTIME_CHECKS = 0 48 !ENDIF 49 50 # Set this non-0 to create a SQLite amalgamation file that excludes the 51 # various built-in extensions. 52 # 53 !IFNDEF MINIMAL_AMALGAMATION 54 MINIMAL_AMALGAMATION = 0 55 !ENDIF 56 57 # Set this non-0 to use "stdcall" calling convention for the core library 58 # and shell executable. 59 # 60 !IFNDEF USE_STDCALL 61 USE_STDCALL = 0 62 !ENDIF 63 64 # Use the USE_SEH=0 option on the nmake command line to omit structured 65 # exception handling (SEH) support. SEH is on by default. 66 # 67 !IFNDEF USE_SEH 68 USE_SEH = 1 69 !ENDIF 70 71 # Use STATICALLY_LINK_TCL=1 to statically link against TCL 72 # 73 !IFNDEF STATICALLY_LINK_TCL 74 STATICALLY_LINK_TCL = 0 75 !ELSEIF $(STATICALLY_LINK_TCL)!=0 76 CCOPTS = $(CCOPTS) -DSTATIC_BUILD 77 !ENDIF 78 79 # Set this non-0 to have the shell executable link against the core dynamic 80 # link library. 81 # 82 !IFNDEF DYNAMIC_SHELL 83 DYNAMIC_SHELL = 0 84 !ENDIF 85 86 # Set this non-0 to enable extra code that attempts to detect misuse of the 87 # SQLite API. 88 # 89 !IFNDEF API_ARMOR 90 API_ARMOR = 0 91 !ENDIF 92 93 # If necessary, create a list of harmless compiler warnings to disable when 94 # compiling the various tools. For the SQLite source code itself, warnings, 95 # if any, will be disabled from within it. 96 # 97 !IFNDEF NO_WARN 98 !IF $(USE_FULLWARN)!=0 99 NO_WARN = -wd4054 -wd4055 -wd4100 -wd4127 -wd4130 -wd4152 -wd4189 -wd4206 100 NO_WARN = $(NO_WARN) -wd4210 -wd4232 -wd4244 -wd4305 -wd4306 -wd4702 -wd4706 101 !ENDIF 102 !ENDIF 103 104 # Set this non-0 to split the SQLite amalgamation file into chunks to 105 # be used for debugging with Visual Studio. 106 # 107 !IFNDEF SPLIT_AMALGAMATION 108 SPLIT_AMALGAMATION = 0 109 !ENDIF 110 111 112 # Set this non-0 to dynamically link to the MSVC runtime library. 113 # 114 !IFNDEF USE_CRT_DLL 115 USE_CRT_DLL = 0 116 !ENDIF 117 118 # Set this non-0 to link to the RPCRT4 library. 119 # 120 !IFNDEF USE_RPCRT4_LIB 121 USE_RPCRT4_LIB = 0 122 !ENDIF 123 124 # Set this non-0 to generate assembly code listings for the source code 125 # files. 126 # 127 !IFNDEF USE_LISTINGS 128 USE_LISTINGS = 0 129 !ENDIF 130 131 # Set this non-0 to attempt setting the native compiler automatically 132 # for cross-compiling the command line tools needed during the compilation 133 # process. 134 # 135 !IFNDEF XCOMPILE 136 XCOMPILE = 0 137 !ENDIF 138 139 # Set this non-0 to use the native libraries paths for cross-compiling 140 # the command line tools needed during the compilation process. 141 # 142 !IFNDEF USE_NATIVE_LIBPATHS 143 USE_NATIVE_LIBPATHS = 0 144 !ENDIF 145 146 # Set this 0 to skip the compiling and embedding of version resources. 147 # 148 !IFNDEF USE_RC 149 USE_RC = 1 150 !ENDIF 151 152 # Set this non-0 to compile binaries suitable for the UWP environment. 153 # This setting does not apply to any binaries that require Tcl to operate 154 # properly (i.e. the text fixture, etc). 155 # 156 !IFNDEF FOR_UWP 157 FOR_UWP = 0 158 !ENDIF 159 160 # Set this non-0 to compile binaries suitable for the Windows 10 platform. 161 # 162 !IFNDEF FOR_WIN10 163 FOR_WIN10 = 0 164 !ENDIF 165 166 167 # Set this to non-0 to create and use PDBs. 168 # 169 !IFNDEF SYMBOLS 170 SYMBOLS = 1 171 !ENDIF 172 173 # Set this to non-0 to use the SQLite debugging heap subsystem. 174 # 175 !IFNDEF MEMDEBUG 176 MEMDEBUG = 0 177 !ENDIF 178 179 # Set this to non-0 to use the Win32 native heap subsystem. 180 # 181 !IFNDEF WIN32HEAP 182 WIN32HEAP = 0 183 !ENDIF 184 185 # Set this to non-0 to enable OSTRACE() macros, which can be useful when 186 # debugging. 187 # 188 !IFNDEF OSTRACE 189 OSTRACE = 0 190 !ENDIF 191 192 # enable address sanitizer using ASAN=1 on the command-line. 193 # 194 !IFNDEF ASAN 195 ASAN = 0 196 !ENDIF 197 198 # Set this to one of the following values to enable various debugging 199 # features. Each level includes the debugging options from the previous 200 # levels. Currently, the recognized values for DEBUG are: 201 # 202 # 0 == NDEBUG: Disables assert() and other runtime diagnostics. 203 # 1 == SQLITE_ENABLE_API_ARMOR: extra attempts to detect misuse of the API. 204 # 2 == Disables NDEBUG and all optimizations and then enables PDBs. 205 # 3 == SQLITE_DEBUG: Enables various diagnostics messages and code. 206 # 4 == SQLITE_WIN32_MALLOC_VALIDATE: Validate the Win32 native heap per call. 207 # 5 == SQLITE_DEBUG_OS_TRACE: Enables output from the OSTRACE() macros. 208 # 6 == SQLITE_ENABLE_IOTRACE: Enables output from the IOTRACE() macros. 209 # 210 !IFNDEF DEBUG 211 DEBUG = 0 212 !ENDIF 213 214 215 # Enable use of available compiler optimizations? Normally, this should be 216 # non-zero. Setting this to zero, thus disabling all compiler optimizations, 217 # can be useful for testing. 218 # 219 !IFNDEF OPTIMIZATIONS 220 OPTIMIZATIONS = 2 221 !ENDIF 222 223 # Set this to non-0 to enable support for the session extension. 224 # 225 !IFNDEF SESSION 226 SESSION = 0 227 !ENDIF 228 229 # Set this to non-0 to enable support for the rbu extension. 230 # 231 !IFNDEF RBU 232 RBU = 0 233 !ENDIF 234 235 # Set this to non-0 to enable support for blocking locks. 236 # 237 !IFNDEF SETLK_TIMEOUT 238 SETLK_TIMEOUT = 0 239 !ENDIF 240 241 # Set the source code file to be used by executables and libraries when 242 # they need the amalgamation. 243 # 244 !IFNDEF SQLITE3C 245 !IF $(SPLIT_AMALGAMATION)!=0 246 SQLITE3C = sqlite3-all.c 247 !ELSE 248 SQLITE3C = sqlite3.c 249 !ENDIF 250 !ENDIF 251 252 # Set the include code file to be used by executables and libraries when 253 # they need SQLite. 254 # 255 !IFNDEF SQLITE3H 256 SQLITE3H = sqlite3.h 257 !ENDIF 258 259 # This is the name to use for the SQLite dynamic link library (DLL). 260 # 261 !IFNDEF SQLITE3DLL 262 !IF $(FOR_WIN10)!=0 263 SQLITE3DLL = winsqlite3.dll 264 !ELSE 265 SQLITE3DLL = sqlite3.dll 266 !ENDIF 267 !ENDIF 268 269 # This is the name to use for the SQLite import library (LIB). 270 # 271 !IFNDEF SQLITE3LIB 272 !IF $(FOR_WIN10)!=0 273 SQLITE3LIB = winsqlite3.lib 274 !ELSE 275 SQLITE3LIB = sqlite3.lib 276 !ENDIF 277 !ENDIF 278 279 # This is the name to use for the SQLite shell executable (EXE). 280 # 281 !IFNDEF SQLITE3EXE 282 !IF $(FOR_WIN10)!=0 283 SQLITE3EXE = winsqlite3shell.exe 284 !ELSE 285 SQLITE3EXE = sqlite3.exe 286 !ENDIF 287 !ENDIF 288 289 # This is the argument used to set the program database (PDB) file for the 290 # SQLite shell executable (EXE). 291 # 292 !IFNDEF SQLITE3EXEPDB 293 !IF $(FOR_WIN10)!=0 294 SQLITE3EXEPDB = 295 !ELSE 296 SQLITE3EXEPDB = /pdb:sqlite3sh.pdb 297 !ENDIF 298 !ENDIF 299 300 301 # These are the "standard" SQLite compilation options used when compiling for 302 # the Windows platform. 303 # 304 !IFNDEF OPT_FEATURE_FLAGS 305 OPT_FEATURE_FLAGS = $(OPT_XTRA) 306 !IF $(MINIMAL_AMALGAMATION)==0 307 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1 308 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS5=1 309 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1 310 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_GEOPOLY=1 311 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 312 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1 313 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBSTAT_VTAB=1 314 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_BYTECODE_VTAB=1 315 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_CARRAY=1 316 !ENDIF 317 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1 318 !ENDIF 319 320 # Additional feature-options above and beyond what are normally used can be 321 # be added using OPTIONS=.... on the command-line. These values are 322 # appended to the OPT_FEATURE_FLAGS variable. 323 # 324 !IFDEF OPTIONS 325 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) $(OPTIONS) 326 !ENDIF 327 328 # Should the session extension be enabled? If so, add compilation options 329 # to enable it. 330 # 331 !IF $(SESSION)!=0 332 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_SESSION=1 333 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_PREUPDATE_HOOK=1 334 !ENDIF 335 336 # Always enable math functions on Windows 337 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_MATH_FUNCTIONS 338 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_PERCENTILE 339 340 # Should the rbu extension be enabled? If so, add compilation options 341 # to enable it. 342 # 343 !IF $(RBU)!=0 344 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RBU=1 345 !ENDIF 346 347 # Should structured exception handling (SEH) be enabled for WAL mode in 348 # the core library? It is on by default. Only omit it if the 349 # USE_SEH=0 option is provided on the nmake command-line. 350 # 351 !IF $(USE_SEH)==0 352 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_OMIT_SEH=1 353 !ENDIF 354 355 # These are the "extended" SQLite compilation options used when compiling for 356 # the Windows 10 platform. 357 # 358 !IFNDEF EXT_FEATURE_FLAGS 359 !IF $(FOR_WIN10)!=0 360 EXT_FEATURE_FLAGS = $(EXT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS4=1 361 EXT_FEATURE_FLAGS = $(EXT_FEATURE_FLAGS) -DSQLITE_SYSTEM_MALLOC=1 362 EXT_FEATURE_FLAGS = $(EXT_FEATURE_FLAGS) -DSQLITE_OMIT_LOCALTIME=1 363 !ELSE 364 EXT_FEATURE_FLAGS = 365 !ENDIF 366 !ENDIF 367 368 !IF $(SETLK_TIMEOUT)!=0 369 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_SETLK_TIMEOUT 370 !ENDIF 371 372 ############################################################################### 373 ############################### END OF OPTIONS ################################ 374 ############################################################################### 375 376 # When compiling for the Windows 10 platform, the PLATFORM macro must be set 377 # to an appropriate value (e.g. x86, x64, arm, arm64, etc). 378 # 379 !IF $(FOR_WIN10)!=0 380 !IFNDEF PLATFORM 381 !ERROR Using the FOR_WIN10 option requires a value for PLATFORM. 382 !ENDIF 383 !ENDIF 384 385 # This assumes that MSVC is always installed in 32-bit Program Files directory 386 # and sets the variable for use in locating other 32-bit installs accordingly. 387 # 388 PROGRAMFILES_X86 = $(VCINSTALLDIR)\..\.. 389 PROGRAMFILES_X86 = $(PROGRAMFILES_X86:\\=\) 390 391 # Check for the predefined command macro CC. This should point to the compiler 392 # binary for the target platform. If it is not defined, simply define it to 393 # the legacy default value 'cl.exe'. 394 # 395 !IFNDEF CC 396 CC = cl.exe 397 !ENDIF 398 399 # Check for the predefined command macro CSC. This should point to a working 400 # C Sharp compiler binary. If it is not defined, simply define it to the 401 # legacy default value 'csc.exe'. 402 # 403 !IFNDEF CSC 404 CSC = csc.exe 405 !ENDIF 406 407 # Check for the command macro LD. This should point to the linker binary for 408 # the target platform. If it is not defined, simply define it to the legacy 409 # default value 'link.exe'. 410 # 411 !IFNDEF LD 412 LD = link.exe 413 !ENDIF 414 415 # Check for the predefined command macro RC. This should point to the resource 416 # compiler binary for the target platform. If it is not defined, simply define 417 # it to the legacy default value 'rc.exe'. 418 # 419 !IFNDEF RC 420 RC = rc.exe 421 !ENDIF 422 423 # Check for the MSVC runtime library path macro. Otherwise, this value will 424 # default to the 'lib' directory underneath the MSVC installation directory. 425 # 426 !IFNDEF CRTLIBPATH 427 CRTLIBPATH = $(VCINSTALLDIR)\lib 428 !ENDIF 429 430 CRTLIBPATH = $(CRTLIBPATH:\\=\) 431 432 # Check for the command macro NCC. This should point to the compiler binary 433 # for the platform the compilation process is taking place on. If it is not 434 # defined, simply define it to have the same value as the CC macro. When 435 # cross-compiling, it is suggested that this macro be modified via the command 436 # line (since nmake itself does not provide a built-in method to guess it). 437 # For example, to use the x86 compiler when cross-compiling for x64, a command 438 # line similar to the following could be used (all on one line): 439 # 440 # nmake /f Makefile.msc sqlite3.dll 441 # XCOMPILE=1 USE_NATIVE_LIBPATHS=1 442 # 443 # Alternatively, the full path and file name to the compiler binary for the 444 # platform the compilation process is taking place may be specified (all on 445 # one line): 446 # 447 # nmake /f Makefile.msc sqlite3.dll 448 # "NCC=""%VCINSTALLDIR%\bin\cl.exe""" 449 # USE_NATIVE_LIBPATHS=1 450 # 451 !IFDEF NCC 452 NCC = $(NCC:\\=\) 453 !ELSEIF $(XCOMPILE)!=0 454 NCC = "$(VCINSTALLDIR)\bin\$(CC)" 455 NCC = $(NCC:\\=\) 456 !ELSE 457 NCC = $(CC) 458 !ENDIF 459 460 # Check for the MSVC native runtime library path macro. Otherwise, 461 # this value will default to the 'lib' directory underneath the MSVC 462 # installation directory. 463 # 464 !IFNDEF NCRTLIBPATH 465 NCRTLIBPATH = $(VCINSTALLDIR)\lib 466 !ENDIF 467 468 NCRTLIBPATH = $(NCRTLIBPATH:\\=\) 469 470 # Check for the Platform SDK library path macro. Otherwise, this 471 # value will default to the 'lib' directory underneath the Windows 472 # SDK installation directory (the environment variable used appears 473 # to be available when using Visual C++ 2008 or later via the 474 # command line). 475 # 476 !IFNDEF NSDKLIBPATH 477 NSDKLIBPATH = $(WINDOWSSDKDIR)\lib 478 !ENDIF 479 480 NSDKLIBPATH = $(NSDKLIBPATH:\\=\) 481 482 # Check for the UCRT library path macro. Otherwise, this value will 483 # default to the version-specific, platform-specific 'lib' directory 484 # underneath the Windows SDK installation directory. 485 # 486 !IFNDEF UCRTLIBPATH 487 UCRTLIBPATH = $(WINDOWSSDKDIR)\lib\$(WINDOWSSDKLIBVERSION)\ucrt\$(PLATFORM) 488 !ENDIF 489 490 UCRTLIBPATH = $(UCRTLIBPATH:\\=\) 491 492 # C compiler and options for use in building executables that 493 # will run on the platform that is doing the build. 494 # 495 !IF $(USE_FULLWARN)!=0 496 BCC = $(NCC) -nologo -W4 -Fd$*.pdb $(CCOPTS) $(BCCOPTS) 497 !ELSE 498 BCC = $(NCC) -nologo -W3 -Fd$*.pdb $(CCOPTS) $(BCCOPTS) 499 !ENDIF 500 501 # Check if assembly code listings should be generated for the source 502 # code files to be compiled. 503 # 504 !IF $(USE_LISTINGS)!=0 505 BCC = $(BCC) -FAcs 506 !ENDIF 507 508 # Check if the native library paths should be used when compiling 509 # the command line tools used during the compilation process. If 510 # so, set the necessary macro now. 511 # 512 !IF $(USE_NATIVE_LIBPATHS)!=0 513 NLTLIBPATHS = "/LIBPATH:$(NCRTLIBPATH)" "/LIBPATH:$(NSDKLIBPATH)" 514 515 !IFDEF NUCRTLIBPATH 516 NUCRTLIBPATH = $(NUCRTLIBPATH:\\=\) 517 NLTLIBPATHS = $(NLTLIBPATHS) "/LIBPATH:$(NUCRTLIBPATH)" 518 !ENDIF 519 !ENDIF 520 521 # C compiler and options for use in building executables that 522 # will run on the target platform. (BCC and TCC are usually the 523 # same unless your are cross-compiling.) 524 # 525 !IF $(USE_FULLWARN)!=0 526 TCC = $(CC) -nologo -W4 -DINCLUDE_MSVC_H=1 $(CCOPTS) $(TCCOPTS) 527 !ELSE 528 TCC = $(CC) -nologo -W3 $(CCOPTS) $(TCCOPTS) 529 !ENDIF 530 531 # Check if warnings should be treated as errors when compiling. 532 # 533 !IF $(USE_FATAL_WARN)!=0 534 TCC = $(TCC) -WX 535 !ENDIF 536 537 TCC = $(TCC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -fp:precise 538 RCC = $(RC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) $(RCOPTS) $(RCCOPTS) 539 540 # Check if we want to use the "stdcall" calling convention when compiling. 541 # This is not supported by the compilers for non-x86 platforms. It should 542 # also be noted here that building any target with these "stdcall" options 543 # will most likely fail if the Tcl library is also required. This is due 544 # to how the Tcl library functions are declared and exported (i.e. without 545 # an explicit calling convention, which results in "cdecl"). 546 # 547 !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0 548 !IF "$(PLATFORM)"=="x86" 549 CORE_CCONV_OPTS = -Gz -guard:cf -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall 550 SHELL_CCONV_OPTS = -Gz -guard:cf -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall 551 552 553 !ELSE 554 !IFNDEF PLATFORM 555 CORE_CCONV_OPTS = -Gz -guard:cf -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall 556 SHELL_CCONV_OPTS = -Gz -guard:cf -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall 557 558 559 !ELSE 560 CORE_CCONV_OPTS = 561 SHELL_CCONV_OPTS = 562 !ENDIF 563 !ENDIF 564 !ELSE 565 CORE_CCONV_OPTS = 566 SHELL_CCONV_OPTS = 567 !ENDIF 568 569 # These are additional compiler options used for the core library. 570 # 571 !IFNDEF CORE_COMPILE_OPTS 572 !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 573 CORE_COMPILE_OPTS = $(CORE_CCONV_OPTS) -DSQLITE_API=__declspec(dllexport) 574 !ELSE 575 CORE_COMPILE_OPTS = $(CORE_CCONV_OPTS) 576 !ENDIF 577 !ENDIF 578 579 # These are the additional targets that the core library should depend on 580 # when linking. 581 # 582 !IFNDEF CORE_LINK_DEP 583 !IF $(DYNAMIC_SHELL)!=0 584 CORE_LINK_DEP = 585 !ELSEIF $(FOR_WIN10)==0 || "$(PLATFORM)"=="x86" 586 CORE_LINK_DEP = sqlite3.def 587 !ELSE 588 CORE_LINK_DEP = 589 !ENDIF 590 !ENDIF 591 592 # These are additional linker options used for the core library. 593 # 594 !IFNDEF CORE_LINK_OPTS 595 !IF $(DYNAMIC_SHELL)!=0 596 CORE_LINK_OPTS = 597 !ELSEIF $(FOR_WIN10)==0 || "$(PLATFORM)"=="x86" 598 CORE_LINK_OPTS = /DEF:sqlite3.def 599 !ELSE 600 CORE_LINK_OPTS = 601 !ENDIF 602 !ENDIF 603 604 # These are additional compiler options used for the shell executable. 605 # 606 !IFNDEF SHELL_COMPILE_OPTS 607 !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 608 SHELL_COMPILE_OPTS = $(SHELL_CCONV_OPTS) -DSQLITE_API=__declspec(dllimport) 609 !ELSE 610 SHELL_COMPILE_OPTS = $(SHELL_CCONV_OPTS) 611 !ENDIF 612 !ENDIF 613 614 # This is the source code that the shell executable should be compiled 615 # with. 616 # 617 !IFNDEF SHELL_CORE_SRC 618 !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 619 SHELL_CORE_SRC = 620 !ELSE 621 SHELL_CORE_SRC = $(SQLITE3C) 622 !ENDIF 623 !ENDIF 624 625 # This is the core library that the shell executable should depend on. 626 # 627 !IFNDEF SHELL_CORE_DEP 628 !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 629 SHELL_CORE_DEP = $(SQLITE3DLL) 630 !ELSE 631 SHELL_CORE_DEP = 632 !ENDIF 633 !ENDIF 634 635 636 # This is the core library that the shell executable should link with. 637 # 638 !IFNDEF SHELL_CORE_LIB 639 !IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0 640 SHELL_CORE_LIB = $(SQLITE3LIB) 641 !ELSE 642 SHELL_CORE_LIB = 643 !ENDIF 644 !ENDIF 645 646 # These are additional linker options used for the shell executable. 647 # 648 !IFNDEF SHELL_LINK_OPTS 649 SHELL_LINK_OPTS = $(SHELL_CORE_LIB) 650 !ENDIF 651 652 # Check if assembly code listings should be generated for the source 653 # code files to be compiled. 654 # 655 !IF $(USE_LISTINGS)!=0 656 TCC = $(TCC) -FAcs 657 !ENDIF 658 659 # C compiler options for the Windows 10 platform (needs MSVC 2015). 660 # 661 !IF $(FOR_WIN10)!=0 662 TCC = $(TCC) /d2guard4 -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 663 BCC = $(BCC) /d2guard4 -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 664 !ENDIF 665 666 # Also, we need to dynamically link to the correct MSVC runtime 667 # when compiling for WinRT (e.g. debug or release) OR if the 668 # USE_CRT_DLL option is set to force dynamically linking to the 669 # MSVC runtime library. 670 # 671 !IF $(USE_CRT_DLL)!=0 672 !IF $(DEBUG)>1 673 TCC = $(TCC) -MDd 674 BCC = $(BCC) -MDd 675 ZLIBCFLAGS = -nologo -MDd -W3 -O2 -Oy- -Zi 676 !ELSE 677 TCC = $(TCC) -MD 678 BCC = $(BCC) -MD 679 ZLIBCFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi 680 !ENDIF 681 !ELSE 682 !IF $(DEBUG)>1 683 TCC = $(TCC) -MTd 684 BCC = $(BCC) -MTd 685 ZLIBCFLAGS = -nologo -MTd -W3 -O2 -Oy- -Zi 686 !ELSE 687 TCC = $(TCC) -MT 688 BCC = $(BCC) -MT 689 ZLIBCFLAGS = -nologo -MT -W3 -O2 -Oy- -Zi 690 !ENDIF 691 !ENDIF 692 693 694 !IF $(DEBUG)>0 || $(API_ARMOR)!=0 || $(FOR_WIN10)!=0 695 TCC = $(TCC) -DSQLITE_ENABLE_API_ARMOR=1 696 RCC = $(RCC) -DSQLITE_ENABLE_API_ARMOR=1 697 !ENDIF 698 699 !IF $(DEBUG)>2 700 TCC = $(TCC) -DSQLITE_DEBUG=1 -DSQLITE_USE_W32_FOR_CONSOLE_IO 701 RCC = $(RCC) -DSQLITE_DEBUG=1 702 !IF $(DYNAMIC_SHELL)==0 703 TCC = $(TCC) -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_SELECTTRACE 704 RCC = $(RCC) -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_SELECTTRACE 705 !ENDIF 706 !ENDIF 707 708 !IF $(DEBUG)>4 || $(OSTRACE)!=0 709 TCC = $(TCC) -DSQLITE_FORCE_OS_TRACE=1 -DSQLITE_DEBUG_OS_TRACE=1 710 RCC = $(RCC) -DSQLITE_FORCE_OS_TRACE=1 -DSQLITE_DEBUG_OS_TRACE=1 711 !ENDIF 712 713 !IF $(DEBUG)>5 714 TCC = $(TCC) -DSQLITE_ENABLE_IOTRACE=1 715 RCC = $(RCC) -DSQLITE_ENABLE_IOTRACE=1 716 !ENDIF 717 718 # Prevent warnings about "insecure" MSVC runtime library functions 719 # being used. 720 # 721 TCC = $(TCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS 722 BCC = $(BCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS 723 RCC = $(RCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS 724 725 # Prevent warnings about "deprecated" POSIX functions being used. 726 # 727 TCC = $(TCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS 728 BCC = $(BCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS 729 RCC = $(RCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS 730 731 # Use the SQLite debugging heap subsystem? 732 # 733 !IF $(MEMDEBUG)!=0 734 TCC = $(TCC) -DSQLITE_MEMDEBUG=1 735 RCC = $(RCC) -DSQLITE_MEMDEBUG=1 736 737 # Use native Win32 heap subsystem instead of malloc/free? 738 # 739 !ELSEIF $(WIN32HEAP)!=0 740 TCC = $(TCC) -DSQLITE_WIN32_MALLOC=1 741 RCC = $(RCC) -DSQLITE_WIN32_MALLOC=1 742 743 # Validate the heap on every call into the native Win32 heap subsystem? 744 # 745 !IF $(DEBUG)>3 746 TCC = $(TCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1 747 RCC = $(RCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1 748 !ENDIF 749 !ENDIF 750 751 752 # Address sanitizer if ASAN=1 753 # 754 !IF $(ASAN)>0 755 TCC = $(TCC) /fsanitize=address 756 !ENDIF 757 758 759 # Compiler options needed for programs that use the readline() library. 760 # 761 !IFNDEF READLINE_FLAGS 762 READLINE_FLAGS = -DHAVE_READLINE=0 763 !ENDIF 764 765 # The library that programs using readline() must link against. 766 # 767 !IFNDEF LIBREADLINE 768 LIBREADLINE = 769 !ENDIF 770 771 # Should the database engine be compiled threadsafe 772 # 773 TCC = $(TCC) -DSQLITE_THREADSAFE=1 774 RCC = $(RCC) -DSQLITE_THREADSAFE=1 775 776 # Do threads override each others locks by default (1), or do we test (-1) 777 # 778 TCC = $(TCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1 779 RCC = $(RCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1 780 781 # Any target libraries which libsqlite must be linked against 782 # 783 !IFNDEF TLIBS 784 TLIBS = 785 !ENDIF 786 787 # Enable/disable loadable extensions, and other optional features 788 # based on configuration. (-DSQLITE_OMIT*, -DSQLITE_ENABLE*). 789 # The same set of OMIT and ENABLE flags should be passed to the 790 # LEMON parser generator and the mkkeywordhash tool as well. 791 792 # These are the required SQLite compilation options used when compiling for 793 # the Windows platform. 794 # 795 REQ_FEATURE_FLAGS = $(REQ_FEATURE_FLAGS) -DSQLITE_MAX_TRIGGER_DEPTH=100 796 797 # If we are linking to the RPCRT4 library, enable features that need it. 798 # 799 !IF $(USE_RPCRT4_LIB)!=0 800 REQ_FEATURE_FLAGS = $(REQ_FEATURE_FLAGS) -DSQLITE_WIN32_USE_UUID=1 801 !ENDIF 802 803 # Add the required and optional SQLite compilation options into the command 804 # lines used to invoke the MSVC code and resource compilers. 805 # 806 TCC = $(TCC) $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) 807 RCC = $(RCC) $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) 808 809 # Add in any optional parameters specified on the commane line, e.g. 810 # nmake /f Makefile.msc all "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1" 811 # 812 TCC = $(TCC) $(OPTS) 813 RCC = $(RCC) $(OPTS) 814 815 # If compiling for debugging, add some defines. 816 # 817 !IF $(DEBUG)>1 818 TCC = $(TCC) -D_DEBUG 819 BCC = $(BCC) -D_DEBUG 820 RCC = $(RCC) -D_DEBUG 821 !ENDIF 822 823 # If optimizations are enabled or disabled (either implicitly or 824 # explicitly), add the necessary flags. 825 # 826 !IF $(DEBUG)>1 || $(OPTIMIZATIONS)==0 827 TCC = $(TCC) -Od 828 BCC = $(BCC) -Od 829 !IF $(USE_RUNTIME_CHECKS)!=0 830 TCC = $(TCC) -RTC1 831 BCC = $(BCC) -RTC1 832 !ENDIF 833 !ELSEIF $(OPTIMIZATIONS)>=3 834 TCC = $(TCC) -Ox 835 BCC = $(BCC) -Ox 836 !ELSEIF $(OPTIMIZATIONS)==2 837 TCC = $(TCC) -O2 838 BCC = $(BCC) -O2 839 !ELSEIF $(OPTIMIZATIONS)==1 840 TCC = $(TCC) -O1 841 BCC = $(BCC) -O1 842 !ENDIF 843 844 # If symbols are enabled (or compiling for debugging), enable PDBs. 845 # 846 !IF $(DEBUG)>1 || $(SYMBOLS)!=0 847 TCC = $(TCC) -Zi 848 BCC = $(BCC) -Zi 849 !ENDIF 850 851 852 # Command line prefixes for compiling code, compiling resources, 853 # linking, etc. 854 # 855 LTCOMPILE = $(TCC) -Fo$@ -Fd$*.pdb 856 LTRCOMPILE = $(RCC) -r 857 LTLIB = lib.exe 858 LTLINK = $(TCC) -Fe$@ 859 860 # If requested, link to the RPCRT4 library. 861 # 862 !IF $(USE_RPCRT4_LIB)!=0 863 LTLIBS = $(LTLIBS) rpcrt4.lib 864 !ENDIF 865 866 # If a platform was set, force the linker to target that. 867 # Note that the vcvars*.bat family of batch files typically 868 # set this for you. Otherwise, the linker will attempt 869 # to deduce the binary type based on the object files. 870 !IFDEF PLATFORM 871 LTLINKOPTS = /NOLOGO /MACHINE:$(PLATFORM) 872 LTLIBOPTS = /NOLOGO /MACHINE:$(PLATFORM) 873 !ELSEIF "$(VISUALSTUDIOVERSION)"=="12.0" || \ 874 "$(VISUALSTUDIOVERSION)"=="14.0" || \ 875 "$(VISUALSTUDIOVERSION)"=="15.0" 876 LTLINKOPTS = /NOLOGO /MACHINE:x86 877 LTLIBOPTS = /NOLOGO /MACHINE:x86 878 !ELSE 879 LTLINKOPTS = /NOLOGO 880 LTLIBOPTS = /NOLOGO 881 !ENDIF 882 883 # When compiling for UWP or the Windows 10 platform, some extra linker 884 # options are also required. 885 # 886 !IF $(FOR_UWP)!=0 || $(FOR_WIN10)!=0 887 LTLINKOPTS = $(LTLINKOPTS) /DYNAMICBASE /NODEFAULTLIB:kernel32.lib 888 LTLINKOPTS = $(LTLINKOPTS) mincore.lib 889 !IFDEF PSDKLIBPATH 890 LTLINKOPTS = $(LTLINKOPTS) "/LIBPATH:$(PSDKLIBPATH)" 891 !ENDIF 892 !ENDIF 893 894 !IF $(FOR_WIN10)!=0 895 LTLINKOPTS = $(LTLINKOPTS) /guard:cf "/LIBPATH:$(UCRTLIBPATH)" 896 !IF $(DEBUG)>1 897 LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:libucrtd.lib /DEFAULTLIB:ucrtd.lib 898 !ELSE 899 LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib 900 !ENDIF 901 !ENDIF 902 903 # If either debugging or symbols are enabled, enable PDBs. 904 # 905 !IF $(DEBUG)>1 || $(SYMBOLS)!=0 906 LDFLAGS = /NODEFAULTLIB:msvcrt /DEBUG $(LDOPTS) 907 !ELSE 908 LDFLAGS = /NODEFAULTLIB:msvcrt $(LDOPTS) 909 !ENDIF 910 911 912 # You should not have to change anything below this line 913 ############################################################################### 914 915 916 # Object files for the amalgamation. 917 # 918 LIBOBJS1 = sqlite3.lo 919 920 # Determine the real value of LIBOBJ based on the 'configure' script 921 # 922 LIBOBJ = $(LIBOBJS1) 923 924 # Determine if embedded resource compilation and usage are enabled. 925 # 926 !IF $(USE_RC)!=0 927 LIBRESOBJS = sqlite3res.lo 928 !ELSE 929 LIBRESOBJS = 930 !ENDIF 931 932 933 # Additional compiler options for the shell. These are only effective 934 # when the shell is not being dynamically linked. 935 # 936 !IF $(DYNAMIC_SHELL)==0 && $(FOR_WIN10)==0 937 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_DQS=0 938 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_FTS4=1 939 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 940 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 941 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_PERCENTILE=1 942 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION=1 943 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_STMT_SCANSTATUS=1 944 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_BYTECODE_VTAB=1 945 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_STRICT_SUBTYPE=1 946 !ENDIF 947 948 949 # This is the default Makefile target. The objects listed here 950 # are what get build when you type just "make" with no arguments. 951 # 952 core: dll shell 953 954 # Targets that require the Tcl library. 955 # 956 tcl: $(ALL_TCL_TARGETS) 957 958 # This Makefile target builds all of the standard binaries. 959 # 960 all: core tcl 961 962 # Dynamic link library section. 963 # 964 dll: $(SQLITE3DLL) 965 966 # Shell executable. 967 # 968 shell: $(SQLITE3EXE) 969 970 # jimsh0 - replacement for tclsh 971 # 972 jimsh0.exe: $(TOP)\autosetup\jimsh0.c 973 cl -DHAVE__FULLPATH=1 $(TOP)\autosetup\jimsh0.c 974 975 976 $(SQLITE3DLL): $(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP) 977 $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL $(CORE_LINK_OPTS) /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS) 978 979 Replace.exe: 980 $(CSC) /target:exe $(TOP)\Replace.cs 981 982 sqlite3.def: Replace.exe $(LIBOBJ) 983 echo EXPORTS > sqlite3.def 984 dumpbin /all $(LIBOBJ) \ 985 | .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup|rebaser|rbu)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \ 986 | sort >> sqlite3.def 987 988 $(SQLITE3EXE): shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H) 989 $(LTLINK) $(SHELL_COMPILE_OPTS) $(READLINE_FLAGS) shell.c $(SHELL_CORE_SRC) \ 990 /link $(SQLITE3EXEPDB) $(LDFLAGS) $(LTLINKOPTS) $(SHELL_LINK_OPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS) 991 992 993 tclsqlite-ex.c: 994 995 # Rule to build the amalgamation 996 # 997 sqlite3.lo: $(SQLITE3C) 998 $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(SQLITE3C) 999 1000 1001 # Rule to build the Win32 resources object file. 1002 # 1003 !IF $(USE_RC)!=0 1004 _HASHCHAR=^# 1005 !IF ![echo !IFNDEF VERSION > rcver.vc] && \ 1006 ![for /F "delims=" %V in ('type "$(SQLITE3H)" ^| "%SystemRoot%\System32\find.exe" "$(_HASHCHAR)define SQLITE_VERSION "') do (echo VERSION = ^^%V >> rcver.vc)] && \ 1007 ![echo !ENDIF >> rcver.vc] 1008 !INCLUDE rcver.vc 1009 !ENDIF 1010 1011 RESOURCE_VERSION = $(VERSION:^#=) 1012 RESOURCE_VERSION = $(RESOURCE_VERSION:define=) 1013 RESOURCE_VERSION = $(RESOURCE_VERSION:SQLITE_VERSION=) 1014 RESOURCE_VERSION = $(RESOURCE_VERSION:"=) 1015 RESOURCE_VERSION = $(RESOURCE_VERSION:.=,) 1016 1017 $(LIBRESOBJS): $(TOP)\sqlite3.rc rcver.vc $(SQLITE3H) 1018 echo #ifndef SQLITE_RESOURCE_VERSION > sqlite3rc.h 1019 echo #define SQLITE_RESOURCE_VERSION $(RESOURCE_VERSION) >> sqlite3rc.h 1020 echo #endif >> sqlite3rc.h 1021 $(LTRCOMPILE) -fo $(LIBRESOBJS) -DRC_VERONLY $(TOP)\sqlite3.rc 1022 !ENDIF 1023 1024 1025 clean: 1026 del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL 1027 del /Q *.bsc *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL 1028 del /Q sqlite3.def tclsqlite3.def ctime.c pragma.h 2>NUL 1029 del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL 1030