xref: /sqlite-3.40.0/Makefile.msc (revision 119fc11e)
1#
2# nmake Makefile for SQLite
3#
4###############################################################################
5############################## START OF OPTIONS ###############################
6###############################################################################
7
8# The toplevel directory of the source tree.  This is the directory
9# that contains this "Makefile.msc".
10#
11TOP = .
12
13# <<mark>>
14# Set this non-0 to create and use the SQLite amalgamation file.
15#
16!IFNDEF USE_AMALGAMATION
17USE_AMALGAMATION = 1
18!ENDIF
19# <</mark>>
20
21# Set this non-0 to enable full warnings (-W4, etc) when compiling.
22#
23!IFNDEF USE_FULLWARN
24USE_FULLWARN = 0
25!ENDIF
26
27# Set this non-0 to enable treating warnings as errors (-WX, etc) when
28# compiling.
29#
30!IFNDEF USE_FATAL_WARN
31USE_FATAL_WARN = 0
32!ENDIF
33
34# Set this non-0 to enable full runtime error checks (-RTC1, etc).  This
35# has no effect if (any) optimizations are enabled.
36#
37!IFNDEF USE_RUNTIME_CHECKS
38USE_RUNTIME_CHECKS = 0
39!ENDIF
40
41# Set this non-0 to create a SQLite amalgamation file that excludes the
42# various built-in extensions.
43#
44!IFNDEF MINIMAL_AMALGAMATION
45MINIMAL_AMALGAMATION = 0
46!ENDIF
47
48# Set this non-0 to use "stdcall" calling convention for the core library
49# and shell executable.
50#
51!IFNDEF USE_STDCALL
52USE_STDCALL = 0
53!ENDIF
54
55# Set this non-0 to have the shell executable link against the core dynamic
56# link library.
57#
58!IFNDEF DYNAMIC_SHELL
59DYNAMIC_SHELL = 0
60!ENDIF
61
62# Set this non-0 to enable extra code that attempts to detect misuse of the
63# SQLite API.
64#
65!IFNDEF API_ARMOR
66API_ARMOR = 0
67!ENDIF
68
69# If necessary, create a list of harmless compiler warnings to disable when
70# compiling the various tools.  For the SQLite source code itself, warnings,
71# if any, will be disabled from within it.
72#
73!IFNDEF NO_WARN
74!IF $(USE_FULLWARN)!=0
75NO_WARN = -wd4054 -wd4055 -wd4100 -wd4127 -wd4130 -wd4152 -wd4189 -wd4206
76NO_WARN = $(NO_WARN) -wd4210 -wd4232 -wd4305 -wd4306 -wd4702 -wd4706
77!ENDIF
78!ENDIF
79
80# Set this non-0 to use the library paths and other options necessary for
81# Windows Phone 8.1.
82#
83!IFNDEF USE_WP81_OPTS
84USE_WP81_OPTS = 0
85!ENDIF
86
87# Set this non-0 to split the SQLite amalgamation file into chunks to
88# be used for debugging with Visual Studio.
89#
90!IFNDEF SPLIT_AMALGAMATION
91SPLIT_AMALGAMATION = 0
92!ENDIF
93
94# <<mark>>
95# Set this non-0 to use the International Components for Unicode (ICU).
96#
97!IFNDEF USE_ICU
98USE_ICU = 0
99!ENDIF
100# <</mark>>
101
102# Set this non-0 to dynamically link to the MSVC runtime library.
103#
104!IFNDEF USE_CRT_DLL
105USE_CRT_DLL = 0
106!ENDIF
107
108# Set this non-0 to link to the RPCRT4 library.
109#
110!IFNDEF USE_RPCRT4_LIB
111USE_RPCRT4_LIB = 0
112!ENDIF
113
114# Set this non-0 to generate assembly code listings for the source code
115# files.
116#
117!IFNDEF USE_LISTINGS
118USE_LISTINGS = 0
119!ENDIF
120
121# Set this non-0 to attempt setting the native compiler automatically
122# for cross-compiling the command line tools needed during the compilation
123# process.
124#
125!IFNDEF XCOMPILE
126XCOMPILE = 0
127!ENDIF
128
129# Set this non-0 to use the native libraries paths for cross-compiling
130# the command line tools needed during the compilation process.
131#
132!IFNDEF USE_NATIVE_LIBPATHS
133USE_NATIVE_LIBPATHS = 0
134!ENDIF
135
136# Set this 0 to skip the compiling and embedding of version resources.
137#
138!IFNDEF USE_RC
139USE_RC = 1
140!ENDIF
141
142# Set this non-0 to compile binaries suitable for the WinRT environment.
143# This setting does not apply to any binaries that require Tcl to operate
144# properly (i.e. the text fixture, etc).
145#
146!IFNDEF FOR_WINRT
147FOR_WINRT = 0
148!ENDIF
149
150# Set this non-0 to compile binaries suitable for the UWP environment.
151# This setting does not apply to any binaries that require Tcl to operate
152# properly (i.e. the text fixture, etc).
153#
154!IFNDEF FOR_UWP
155FOR_UWP = 0
156!ENDIF
157
158# Set this non-0 to compile binaries suitable for the Windows 10 platform.
159#
160!IFNDEF FOR_WIN10
161FOR_WIN10 = 0
162!ENDIF
163
164# <<mark>>
165# Set this non-0 to skip attempting to look for and/or link with the Tcl
166# runtime library.
167#
168!IFNDEF NO_TCL
169NO_TCL = 0
170!ENDIF
171# <</mark>>
172
173# Set this to non-0 to create and use PDBs.
174#
175!IFNDEF SYMBOLS
176SYMBOLS = 1
177!ENDIF
178
179# Set this to non-0 to use the SQLite debugging heap subsystem.
180#
181!IFNDEF MEMDEBUG
182MEMDEBUG = 0
183!ENDIF
184
185# Set this to non-0 to use the Win32 native heap subsystem.
186#
187!IFNDEF WIN32HEAP
188WIN32HEAP = 0
189!ENDIF
190
191# Set this to non-0 to enable OSTRACE() macros, which can be useful when
192# debugging.
193#
194!IFNDEF OSTRACE
195OSTRACE = 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
211DEBUG = 0
212!ENDIF
213
214# Enable use of available compiler optimizations?  Normally, this should be
215# non-zero.  Setting this to zero, thus disabling all compiler optimizations,
216# can be useful for testing.
217#
218!IFNDEF OPTIMIZATIONS
219OPTIMIZATIONS = 2
220!ENDIF
221
222# Set this to non-0 to enable support for the session extension.
223#
224!IFNDEF SESSION
225SESSION = 0
226!ENDIF
227
228# Set the source code file to be used by executables and libraries when
229# they need the amalgamation.
230#
231!IFNDEF SQLITE3C
232!IF $(SPLIT_AMALGAMATION)!=0
233SQLITE3C = sqlite3-all.c
234!ELSE
235SQLITE3C = sqlite3.c
236!ENDIF
237!ENDIF
238
239# Set the include code file to be used by executables and libraries when
240# they need SQLite.
241#
242!IFNDEF SQLITE3H
243SQLITE3H = sqlite3.h
244!ENDIF
245
246# This is the name to use for the SQLite dynamic link library (DLL).
247#
248!IFNDEF SQLITE3DLL
249!IF $(FOR_WIN10)!=0
250SQLITE3DLL = winsqlite3.dll
251!ELSE
252SQLITE3DLL = sqlite3.dll
253!ENDIF
254!ENDIF
255
256# This is the name to use for the SQLite import library (LIB).
257#
258!IFNDEF SQLITE3LIB
259!IF $(FOR_WIN10)!=0
260SQLITE3LIB = winsqlite3.lib
261!ELSE
262SQLITE3LIB = sqlite3.lib
263!ENDIF
264!ENDIF
265
266# This is the name to use for the SQLite shell executable (EXE).
267#
268!IFNDEF SQLITE3EXE
269!IF $(FOR_WIN10)!=0
270SQLITE3EXE = winsqlite3shell.exe
271!ELSE
272SQLITE3EXE = sqlite3.exe
273!ENDIF
274!ENDIF
275
276# This is the argument used to set the program database (PDB) file for the
277# SQLite shell executable (EXE).
278#
279!IFNDEF SQLITE3EXEPDB
280!IF $(FOR_WIN10)!=0
281SQLITE3EXEPDB =
282!ELSE
283SQLITE3EXEPDB = /pdb:sqlite3sh.pdb
284!ENDIF
285!ENDIF
286
287# <<mark>>
288# These are the names of the customized Tcl header files used by various parts
289# of this makefile when the stdcall calling convention is in use.  It is not
290# used for any other purpose.
291#
292!IFNDEF SQLITETCLH
293SQLITETCLH = sqlite_tcl.h
294!ENDIF
295
296!IFNDEF SQLITETCLDECLSH
297SQLITETCLDECLSH = sqlite_tclDecls.h
298!ENDIF
299
300# These are the additional targets that the targets that integrate with the
301# Tcl library should depend on when compiling, etc.
302#
303!IFNDEF SQLITE_TCL_DEP
304!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
305SQLITE_TCL_DEP = $(SQLITETCLDECLSH) $(SQLITETCLH)
306!ELSE
307SQLITE_TCL_DEP =
308!ENDIF
309!ENDIF
310# <</mark>>
311
312# These are the "standard" SQLite compilation options used when compiling for
313# the Windows platform.
314#
315!IFNDEF OPT_FEATURE_FLAGS
316!IF $(MINIMAL_AMALGAMATION)==0
317OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1
318OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1
319!ENDIF
320OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1
321!ENDIF
322
323# Should the session extension be enabled?  If so, add compilation options
324# to enable it.
325#
326!IF $(SESSION)!=0
327OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_SESSION=1
328OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_PREUPDATE_HOOK=1
329!ENDIF
330
331# These are the "extended" SQLite compilation options used when compiling for
332# the Windows 10 platform.
333#
334!IFNDEF EXT_FEATURE_FLAGS
335!IF $(FOR_WIN10)!=0
336EXT_FEATURE_FLAGS = $(EXT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS4=1
337EXT_FEATURE_FLAGS = $(EXT_FEATURE_FLAGS) -DSQLITE_SYSTEM_MALLOC=1
338EXT_FEATURE_FLAGS = $(EXT_FEATURE_FLAGS) -DSQLITE_OMIT_LOCALTIME=1
339!ELSE
340EXT_FEATURE_FLAGS =
341!ENDIF
342!ENDIF
343
344###############################################################################
345############################### END OF OPTIONS ################################
346###############################################################################
347
348# When compiling for the Windows 10 platform, the PLATFORM macro must be set
349# to an appropriate value (e.g. x86, x64, arm, arm64, etc).
350#
351!IF $(FOR_WIN10)!=0
352!IFNDEF PLATFORM
353!ERROR Using the FOR_WIN10 option requires a value for PLATFORM.
354!ENDIF
355!ENDIF
356
357# This assumes that MSVC is always installed in 32-bit Program Files directory
358# and sets the variable for use in locating other 32-bit installs accordingly.
359#
360PROGRAMFILES_X86 = $(VCINSTALLDIR)\..\..
361PROGRAMFILES_X86 = $(PROGRAMFILES_X86:\\=\)
362
363# Check for the predefined command macro CC.  This should point to the compiler
364# binary for the target platform.  If it is not defined, simply define it to
365# the legacy default value 'cl.exe'.
366#
367!IFNDEF CC
368CC = cl.exe
369!ENDIF
370
371# Check for the predefined command macro CSC.  This should point to a working
372# C Sharp compiler binary.  If it is not defined, simply define it to the
373# legacy default value 'csc.exe'.
374#
375!IFNDEF CSC
376CSC = csc.exe
377!ENDIF
378
379# Check for the command macro LD.  This should point to the linker binary for
380# the target platform.  If it is not defined, simply define it to the legacy
381# default value 'link.exe'.
382#
383!IFNDEF LD
384LD = link.exe
385!ENDIF
386
387# Check for the predefined command macro RC.  This should point to the resource
388# compiler binary for the target platform.  If it is not defined, simply define
389# it to the legacy default value 'rc.exe'.
390#
391!IFNDEF RC
392RC = rc.exe
393!ENDIF
394
395# Check for the MSVC runtime library path macro.  Otherwise, this value will
396# default to the 'lib' directory underneath the MSVC installation directory.
397#
398!IFNDEF CRTLIBPATH
399CRTLIBPATH = $(VCINSTALLDIR)\lib
400!ENDIF
401
402CRTLIBPATH = $(CRTLIBPATH:\\=\)
403
404# Check for the command macro NCC.  This should point to the compiler binary
405# for the platform the compilation process is taking place on.  If it is not
406# defined, simply define it to have the same value as the CC macro.  When
407# cross-compiling, it is suggested that this macro be modified via the command
408# line (since nmake itself does not provide a built-in method to guess it).
409# For example, to use the x86 compiler when cross-compiling for x64, a command
410# line similar to the following could be used (all on one line):
411#
412#     nmake /f Makefile.msc sqlite3.dll
413#           XCOMPILE=1 USE_NATIVE_LIBPATHS=1
414#
415# Alternatively, the full path and file name to the compiler binary for the
416# platform the compilation process is taking place may be specified (all on
417# one line):
418#
419#     nmake /f Makefile.msc sqlite3.dll
420#           "NCC=""%VCINSTALLDIR%\bin\cl.exe"""
421#           USE_NATIVE_LIBPATHS=1
422#
423!IFDEF NCC
424NCC = $(NCC:\\=\)
425!ELSEIF $(XCOMPILE)!=0
426NCC = "$(VCINSTALLDIR)\bin\$(CC)"
427NCC = $(NCC:\\=\)
428!ELSE
429NCC = $(CC)
430!ENDIF
431
432# Check for the MSVC native runtime library path macro.  Otherwise,
433# this value will default to the 'lib' directory underneath the MSVC
434# installation directory.
435#
436!IFNDEF NCRTLIBPATH
437NCRTLIBPATH = $(VCINSTALLDIR)\lib
438!ENDIF
439
440NCRTLIBPATH = $(NCRTLIBPATH:\\=\)
441
442# Check for the Platform SDK library path macro.  Otherwise, this
443# value will default to the 'lib' directory underneath the Windows
444# SDK installation directory (the environment variable used appears
445# to be available when using Visual C++ 2008 or later via the
446# command line).
447#
448!IFNDEF NSDKLIBPATH
449NSDKLIBPATH = $(WINDOWSSDKDIR)\lib
450!ENDIF
451
452NSDKLIBPATH = $(NSDKLIBPATH:\\=\)
453
454# Check for the UCRT library path macro.  Otherwise, this value will
455# default to the version-specific, platform-specific 'lib' directory
456# underneath the Windows SDK installation directory.
457#
458!IFNDEF UCRTLIBPATH
459UCRTLIBPATH = $(WINDOWSSDKDIR)\lib\$(WINDOWSSDKLIBVERSION)\ucrt\$(PLATFORM)
460!ENDIF
461
462UCRTLIBPATH = $(UCRTLIBPATH:\\=\)
463
464# C compiler and options for use in building executables that
465# will run on the platform that is doing the build.
466#
467!IF $(USE_FULLWARN)!=0
468BCC = $(NCC) -nologo -W4 $(CCOPTS) $(BCCOPTS)
469!ELSE
470BCC = $(NCC) -nologo -W3 $(CCOPTS) $(BCCOPTS)
471!ENDIF
472
473# Check if assembly code listings should be generated for the source
474# code files to be compiled.
475#
476!IF $(USE_LISTINGS)!=0
477BCC = $(BCC) -FAcs
478!ENDIF
479
480# Check if the native library paths should be used when compiling
481# the command line tools used during the compilation process.  If
482# so, set the necessary macro now.
483#
484!IF $(USE_NATIVE_LIBPATHS)!=0
485NLTLIBPATHS = "/LIBPATH:$(NCRTLIBPATH)" "/LIBPATH:$(NSDKLIBPATH)"
486
487!IFDEF NUCRTLIBPATH
488NUCRTLIBPATH = $(NUCRTLIBPATH:\\=\)
489NLTLIBPATHS = $(NLTLIBPATHS) "/LIBPATH:$(NUCRTLIBPATH)"
490!ENDIF
491!ENDIF
492
493# C compiler and options for use in building executables that
494# will run on the target platform.  (BCC and TCC are usually the
495# same unless your are cross-compiling.)
496#
497!IF $(USE_FULLWARN)!=0
498TCC = $(CC) -nologo -W4 -DINCLUDE_MSVC_H=1 $(CCOPTS) $(TCCOPTS)
499!ELSE
500TCC = $(CC) -nologo -W3 $(CCOPTS) $(TCCOPTS)
501!ENDIF
502
503# Check if warnings should be treated as errors when compiling.
504#
505!IF $(USE_FATAL_WARN)!=0
506TCC = $(TCC) -WX
507!ENDIF
508
509TCC = $(TCC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -I$(TOP)\src -fp:precise
510RCC = $(RC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -I$(TOP)\src $(RCOPTS) $(RCCOPTS)
511
512# Check if we want to use the "stdcall" calling convention when compiling.
513# This is not supported by the compilers for non-x86 platforms.  It should
514# also be noted here that building any target with these "stdcall" options
515# will most likely fail if the Tcl library is also required.  This is due
516# to how the Tcl library functions are declared and exported (i.e. without
517# an explicit calling convention, which results in "cdecl").
518#
519!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
520!IF "$(PLATFORM)"=="x86"
521CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
522SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
523# <<mark>>
524TEST_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall -DINCLUDE_SQLITE_TCL_H=1 -DSQLITE_TCLAPI=__cdecl
525# <</mark>>
526!ELSE
527!IFNDEF PLATFORM
528CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
529SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
530# <<mark>>
531TEST_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall -DINCLUDE_SQLITE_TCL_H=1 -DSQLITE_TCLAPI=__cdecl
532# <</mark>>
533!ELSE
534CORE_CCONV_OPTS =
535SHELL_CCONV_OPTS =
536# <<mark>>
537TEST_CCONV_OPTS =
538# <</mark>>
539!ENDIF
540!ENDIF
541!ELSE
542CORE_CCONV_OPTS =
543SHELL_CCONV_OPTS =
544# <<mark>>
545TEST_CCONV_OPTS =
546# <</mark>>
547!ENDIF
548
549# These are additional compiler options used for the core library.
550#
551!IFNDEF CORE_COMPILE_OPTS
552!IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0
553CORE_COMPILE_OPTS = $(CORE_CCONV_OPTS) -DSQLITE_API=__declspec(dllexport)
554!ELSE
555CORE_COMPILE_OPTS = $(CORE_CCONV_OPTS)
556!ENDIF
557!ENDIF
558
559# These are the additional targets that the core library should depend on
560# when linking.
561#
562!IFNDEF CORE_LINK_DEP
563!IF $(DYNAMIC_SHELL)!=0
564CORE_LINK_DEP =
565!ELSEIF $(FOR_WIN10)==0 || "$(PLATFORM)"=="x86"
566CORE_LINK_DEP = sqlite3.def
567!ELSE
568CORE_LINK_DEP =
569!ENDIF
570!ENDIF
571
572# These are additional linker options used for the core library.
573#
574!IFNDEF CORE_LINK_OPTS
575!IF $(DYNAMIC_SHELL)!=0
576CORE_LINK_OPTS =
577!ELSEIF $(FOR_WIN10)==0 || "$(PLATFORM)"=="x86"
578CORE_LINK_OPTS = /DEF:sqlite3.def
579!ELSE
580CORE_LINK_OPTS =
581!ENDIF
582!ENDIF
583
584# These are additional compiler options used for the shell executable.
585#
586!IFNDEF SHELL_COMPILE_OPTS
587!IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0
588SHELL_COMPILE_OPTS = $(SHELL_CCONV_OPTS) -DSQLITE_API=__declspec(dllimport)
589!ELSE
590SHELL_COMPILE_OPTS = $(SHELL_CCONV_OPTS)
591!ENDIF
592!ENDIF
593
594# This is the source code that the shell executable should be compiled
595# with.
596#
597!IFNDEF SHELL_CORE_SRC
598!IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0
599SHELL_CORE_SRC =
600!ELSE
601SHELL_CORE_SRC = $(SQLITE3C)
602!ENDIF
603!ENDIF
604
605# This is the core library that the shell executable should depend on.
606#
607!IFNDEF SHELL_CORE_DEP
608!IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0
609SHELL_CORE_DEP = $(SQLITE3DLL)
610!ELSE
611SHELL_CORE_DEP =
612!ENDIF
613!ENDIF
614
615# This is the core library that the shell executable should link with.
616#
617!IFNDEF SHELL_CORE_LIB
618!IF $(DYNAMIC_SHELL)!=0 || $(FOR_WIN10)!=0
619SHELL_CORE_LIB = $(SQLITE3LIB)
620!ELSE
621SHELL_CORE_LIB =
622!ENDIF
623!ENDIF
624
625# These are additional linker options used for the shell executable.
626#
627!IFNDEF SHELL_LINK_OPTS
628SHELL_LINK_OPTS = $(SHELL_CORE_LIB)
629!ENDIF
630
631# Check if assembly code listings should be generated for the source
632# code files to be compiled.
633#
634!IF $(USE_LISTINGS)!=0
635TCC = $(TCC) -FAcs
636!ENDIF
637
638# When compiling the library for use in the WinRT environment,
639# the following compile-time options must be used as well to
640# disable use of Win32 APIs that are not available and to enable
641# use of Win32 APIs that are specific to Windows 8 and/or WinRT.
642#
643!IF $(FOR_WINRT)!=0
644TCC = $(TCC) -DSQLITE_OS_WINRT=1
645RCC = $(RCC) -DSQLITE_OS_WINRT=1
646TCC = $(TCC) -DWINAPI_FAMILY=WINAPI_FAMILY_APP
647RCC = $(RCC) -DWINAPI_FAMILY=WINAPI_FAMILY_APP
648!ENDIF
649
650# C compiler options for the Windows 10 platform (needs MSVC 2015).
651#
652!IF $(FOR_WIN10)!=0
653TCC = $(TCC) /d2guard4 -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
654BCC = $(BCC) /d2guard4 -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
655!ENDIF
656
657# Also, we need to dynamically link to the correct MSVC runtime
658# when compiling for WinRT (e.g. debug or release) OR if the
659# USE_CRT_DLL option is set to force dynamically linking to the
660# MSVC runtime library.
661#
662!IF $(FOR_WINRT)!=0 || $(USE_CRT_DLL)!=0
663!IF $(DEBUG)>1
664TCC = $(TCC) -MDd
665BCC = $(BCC) -MDd
666!ELSE
667TCC = $(TCC) -MD
668BCC = $(BCC) -MD
669!ENDIF
670!ELSE
671!IF $(DEBUG)>1
672TCC = $(TCC) -MTd
673BCC = $(BCC) -MTd
674!ELSE
675TCC = $(TCC) -MT
676BCC = $(BCC) -MT
677!ENDIF
678!ENDIF
679
680# <<mark>>
681# The mksqlite3c.tcl and mksqlite3h.tcl scripts will pull in
682# any extension header files by default.  For non-amalgamation
683# builds, we need to make sure the compiler can find these.
684#
685!IF $(USE_AMALGAMATION)==0
686TCC = $(TCC) -I$(TOP)\ext\fts3
687RCC = $(RCC) -I$(TOP)\ext\fts3
688TCC = $(TCC) -I$(TOP)\ext\rtree
689RCC = $(RCC) -I$(TOP)\ext\rtree
690TCC = $(TCC) -I$(TOP)\ext\session
691RCC = $(RCC) -I$(TOP)\ext\session
692!ENDIF
693
694# The mksqlite3c.tcl script accepts some options on the command
695# line.  When compiling with debugging enabled, some of these
696# options are necessary in order to allow debugging symbols to
697# work correctly with Visual Studio when using the amalgamation.
698#
699!IFNDEF MKSQLITE3C_TOOL
700!IF $(MINIMAL_AMALGAMATION)!=0
701MKSQLITE3C_TOOL = $(TOP)\tool\mksqlite3c-noext.tcl
702!ELSE
703MKSQLITE3C_TOOL = $(TOP)\tool\mksqlite3c.tcl
704!ENDIF
705!ENDIF
706
707!IFNDEF MKSQLITE3C_ARGS
708!IF $(DEBUG)>1
709MKSQLITE3C_ARGS = --linemacros
710!ELSE
711MKSQLITE3C_ARGS =
712!ENDIF
713!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
714MKSQLITE3C_ARGS = $(MKSQLITE3C_ARGS) --useapicall
715!ENDIF
716!ENDIF
717
718# The mksqlite3h.tcl script accepts some options on the command line.
719# When compiling with stdcall support, some of these options are
720# necessary.
721#
722!IFNDEF MKSQLITE3H_ARGS
723!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
724MKSQLITE3H_ARGS = --useapicall
725!ELSE
726MKSQLITE3H_ARGS =
727!ENDIF
728!ENDIF
729# <</mark>>
730
731# Define -DNDEBUG to compile without debugging (i.e., for production usage)
732# Omitting the define will cause extra debugging code to be inserted and
733# includes extra comments when "EXPLAIN stmt" is used.
734#
735!IF $(DEBUG)==0
736TCC = $(TCC) -DNDEBUG
737BCC = $(BCC) -DNDEBUG
738RCC = $(RCC) -DNDEBUG
739!ENDIF
740
741!IF $(DEBUG)>0 || $(API_ARMOR)!=0 || $(FOR_WIN10)!=0
742TCC = $(TCC) -DSQLITE_ENABLE_API_ARMOR=1
743RCC = $(RCC) -DSQLITE_ENABLE_API_ARMOR=1
744!ENDIF
745
746!IF $(DEBUG)>2
747TCC = $(TCC) -DSQLITE_DEBUG=1
748TCC = $(TCC) -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_SELECTTRACE
749RCC = $(RCC) -DSQLITE_DEBUG=1
750!ENDIF
751
752!IF $(DEBUG)>4 || $(OSTRACE)!=0
753TCC = $(TCC) -DSQLITE_FORCE_OS_TRACE=1 -DSQLITE_DEBUG_OS_TRACE=1
754RCC = $(RCC) -DSQLITE_FORCE_OS_TRACE=1 -DSQLITE_DEBUG_OS_TRACE=1
755!ENDIF
756
757!IF $(DEBUG)>5
758TCC = $(TCC) -DSQLITE_ENABLE_IOTRACE=1
759RCC = $(RCC) -DSQLITE_ENABLE_IOTRACE=1
760!ENDIF
761
762# Prevent warnings about "insecure" MSVC runtime library functions
763# being used.
764#
765TCC = $(TCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
766BCC = $(BCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
767RCC = $(RCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
768
769# Prevent warnings about "deprecated" POSIX functions being used.
770#
771TCC = $(TCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
772BCC = $(BCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
773RCC = $(RCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
774
775# Use the SQLite debugging heap subsystem?
776#
777!IF $(MEMDEBUG)!=0
778TCC = $(TCC) -DSQLITE_MEMDEBUG=1
779RCC = $(RCC) -DSQLITE_MEMDEBUG=1
780
781# Use native Win32 heap subsystem instead of malloc/free?
782#
783!ELSEIF $(WIN32HEAP)!=0
784TCC = $(TCC) -DSQLITE_WIN32_MALLOC=1
785RCC = $(RCC) -DSQLITE_WIN32_MALLOC=1
786
787# Validate the heap on every call into the native Win32 heap subsystem?
788#
789!IF $(DEBUG)>3
790TCC = $(TCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1
791RCC = $(RCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1
792!ENDIF
793!ENDIF
794
795# <<mark>>
796# The locations of the Tcl header and library files.  Also, the library that
797# non-stubs enabled programs using Tcl must link against.  These variables
798# (TCLINCDIR, TCLLIBDIR, and LIBTCL) may be overridden via the environment
799# prior to running nmake in order to match the actual installed location and
800# version on this machine.
801#
802!IFNDEF TCLINCDIR
803TCLINCDIR = c:\tcl\include
804!ENDIF
805
806!IFNDEF TCLLIBDIR
807TCLLIBDIR = c:\tcl\lib
808!ENDIF
809
810!IFNDEF LIBTCL
811LIBTCL = tcl86.lib
812!ENDIF
813
814!IFNDEF LIBTCLSTUB
815LIBTCLSTUB = tclstub86.lib
816!ENDIF
817
818!IFNDEF LIBTCLPATH
819LIBTCLPATH = c:\tcl\bin
820!ENDIF
821
822# The locations of the ICU header and library files.  These variables
823# (ICUINCDIR, ICULIBDIR, and LIBICU) may be overridden via the environment
824# prior to running nmake in order to match the actual installed location on
825# this machine.
826#
827!IFNDEF ICUINCDIR
828ICUINCDIR = c:\icu\include
829!ENDIF
830
831!IFNDEF ICULIBDIR
832ICULIBDIR = c:\icu\lib
833!ENDIF
834
835!IFNDEF LIBICU
836LIBICU = icuuc.lib icuin.lib
837!ENDIF
838
839# This is the command to use for tclsh - normally just "tclsh", but we may
840# know the specific version we want to use.  This variable (TCLSH_CMD) may be
841# overridden via the environment prior to running nmake in order to select a
842# specific Tcl shell to use.
843#
844!IFNDEF TCLSH_CMD
845TCLSH_CMD = tclsh
846!ENDIF
847# <</mark>>
848
849# Compiler options needed for programs that use the readline() library.
850#
851!IFNDEF READLINE_FLAGS
852READLINE_FLAGS = -DHAVE_READLINE=0
853!ENDIF
854
855# The library that programs using readline() must link against.
856#
857!IFNDEF LIBREADLINE
858LIBREADLINE =
859!ENDIF
860
861# Should the database engine be compiled threadsafe
862#
863TCC = $(TCC) -DSQLITE_THREADSAFE=1
864RCC = $(RCC) -DSQLITE_THREADSAFE=1
865
866# Do threads override each others locks by default (1), or do we test (-1)
867#
868TCC = $(TCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1
869RCC = $(RCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1
870
871# Any target libraries which libsqlite must be linked against
872#
873!IFNDEF TLIBS
874TLIBS =
875!ENDIF
876
877# Flags controlling use of the in memory btree implementation
878#
879# SQLITE_TEMP_STORE is 0 to force temporary tables to be in a file, 1 to
880# default to file, 2 to default to memory, and 3 to force temporary
881# tables to always be in memory.
882#
883TCC = $(TCC) -DSQLITE_TEMP_STORE=1
884RCC = $(RCC) -DSQLITE_TEMP_STORE=1
885
886# Enable/disable loadable extensions, and other optional features
887# based on configuration. (-DSQLITE_OMIT*, -DSQLITE_ENABLE*).
888# The same set of OMIT and ENABLE flags should be passed to the
889# LEMON parser generator and the mkkeywordhash tool as well.
890
891# These are the required SQLite compilation options used when compiling for
892# the Windows platform.
893#
894REQ_FEATURE_FLAGS = $(REQ_FEATURE_FLAGS) -DSQLITE_MAX_TRIGGER_DEPTH=100
895
896# If we are linking to the RPCRT4 library, enable features that need it.
897#
898!IF $(USE_RPCRT4_LIB)!=0
899REQ_FEATURE_FLAGS = $(REQ_FEATURE_FLAGS) -DSQLITE_WIN32_USE_UUID=1
900!ENDIF
901
902# Add the required and optional SQLite compilation options into the command
903# lines used to invoke the MSVC code and resource compilers.
904#
905TCC = $(TCC) $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS)
906RCC = $(RCC) $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS)
907
908# Add in any optional parameters specified on the commane line, e.g.
909# nmake /f Makefile.msc all "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1"
910#
911TCC = $(TCC) $(OPTS)
912RCC = $(RCC) $(OPTS)
913
914# If compiling for debugging, add some defines.
915#
916!IF $(DEBUG)>1
917TCC = $(TCC) -D_DEBUG
918BCC = $(BCC) -D_DEBUG
919RCC = $(RCC) -D_DEBUG
920!ENDIF
921
922# If optimizations are enabled or disabled (either implicitly or
923# explicitly), add the necessary flags.
924#
925!IF $(DEBUG)>1 || $(OPTIMIZATIONS)==0
926TCC = $(TCC) -Od
927BCC = $(BCC) -Od
928!IF $(USE_RUNTIME_CHECKS)!=0
929TCC = $(TCC) -RTC1
930BCC = $(BCC) -RTC1
931!ENDIF
932!ELSEIF $(OPTIMIZATIONS)>=3
933TCC = $(TCC) -Ox
934BCC = $(BCC) -Ox
935!ELSEIF $(OPTIMIZATIONS)==2
936TCC = $(TCC) -O2
937BCC = $(BCC) -O2
938!ELSEIF $(OPTIMIZATIONS)==1
939TCC = $(TCC) -O1
940BCC = $(BCC) -O1
941!ENDIF
942
943# If symbols are enabled (or compiling for debugging), enable PDBs.
944#
945!IF $(DEBUG)>1 || $(SYMBOLS)!=0
946TCC = $(TCC) -Zi
947BCC = $(BCC) -Zi
948!ENDIF
949
950# <<mark>>
951# If ICU support is enabled, add the compiler options for it.
952#
953!IF $(USE_ICU)!=0
954TCC = $(TCC) -DSQLITE_ENABLE_ICU=1
955RCC = $(RCC) -DSQLITE_ENABLE_ICU=1
956TCC = $(TCC) -I$(TOP)\ext\icu
957RCC = $(RCC) -I$(TOP)\ext\icu
958TCC = $(TCC) -I$(ICUINCDIR)
959RCC = $(RCC) -I$(ICUINCDIR)
960!ENDIF
961# <</mark>>
962
963# Command line prefixes for compiling code, compiling resources,
964# linking, etc.
965#
966LTCOMPILE = $(TCC) -Fo$@
967LTRCOMPILE = $(RCC) -r
968LTLIB = lib.exe
969LTLINK = $(TCC) -Fe$@
970
971# If requested, link to the RPCRT4 library.
972#
973!IF $(USE_RPCRT4_LIB)!=0
974LTLINK = $(LTLINK) rpcrt4.lib
975!ENDIF
976
977# If a platform was set, force the linker to target that.
978# Note that the vcvars*.bat family of batch files typically
979# set this for you.  Otherwise, the linker will attempt
980# to deduce the binary type based on the object files.
981!IFDEF PLATFORM
982LTLINKOPTS = /NOLOGO /MACHINE:$(PLATFORM)
983LTLIBOPTS = /NOLOGO /MACHINE:$(PLATFORM)
984!ELSE
985LTLINKOPTS = /NOLOGO
986LTLIBOPTS = /NOLOGO
987!ENDIF
988
989# When compiling for use in the WinRT environment, the following
990# linker option must be used to mark the executable as runnable
991# only in the context of an application container.
992#
993!IF $(FOR_WINRT)!=0
994LTLINKOPTS = $(LTLINKOPTS) /APPCONTAINER
995!IF "$(VISUALSTUDIOVERSION)"=="12.0" || "$(VISUALSTUDIOVERSION)"=="14.0"
996!IFNDEF STORELIBPATH
997!IF "$(PLATFORM)"=="x86"
998STORELIBPATH = $(CRTLIBPATH)\store
999!ELSEIF "$(PLATFORM)"=="x64"
1000STORELIBPATH = $(CRTLIBPATH)\store\amd64
1001!ELSEIF "$(PLATFORM)"=="ARM"
1002STORELIBPATH = $(CRTLIBPATH)\store\arm
1003!ELSE
1004STORELIBPATH = $(CRTLIBPATH)\store
1005!ENDIF
1006!ENDIF
1007STORELIBPATH = $(STORELIBPATH:\\=\)
1008LTLINKOPTS = $(LTLINKOPTS) "/LIBPATH:$(STORELIBPATH)"
1009!ENDIF
1010!ENDIF
1011
1012# When compiling for Windows Phone 8.1, an extra library path is
1013# required.
1014#
1015!IF $(USE_WP81_OPTS)!=0
1016!IFNDEF WP81LIBPATH
1017!IF "$(PLATFORM)"=="x86"
1018WP81LIBPATH = $(PROGRAMFILES_X86)\Windows Phone Kits\8.1\lib\x86
1019!ELSEIF "$(PLATFORM)"=="ARM"
1020WP81LIBPATH = $(PROGRAMFILES_X86)\Windows Phone Kits\8.1\lib\ARM
1021!ELSE
1022WP81LIBPATH = $(PROGRAMFILES_X86)\Windows Phone Kits\8.1\lib\x86
1023!ENDIF
1024!ENDIF
1025!ENDIF
1026
1027# When compiling for Windows Phone 8.1, some extra linker options
1028# are also required.
1029#
1030!IF $(USE_WP81_OPTS)!=0
1031!IFDEF WP81LIBPATH
1032LTLINKOPTS = $(LTLINKOPTS) "/LIBPATH:$(WP81LIBPATH)"
1033!ENDIF
1034LTLINKOPTS = $(LTLINKOPTS) /DYNAMICBASE
1035LTLINKOPTS = $(LTLINKOPTS) WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib
1036LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:ole32.lib
1037!ENDIF
1038
1039# When compiling for UWP or the Windows 10 platform, some extra linker
1040# options are also required.
1041#
1042!IF $(FOR_UWP)!=0 || $(FOR_WIN10)!=0
1043LTLINKOPTS = $(LTLINKOPTS) /DYNAMICBASE /NODEFAULTLIB:kernel32.lib
1044LTLINKOPTS = $(LTLINKOPTS) mincore.lib
1045!IFDEF PSDKLIBPATH
1046LTLINKOPTS = $(LTLINKOPTS) "/LIBPATH:$(PSDKLIBPATH)"
1047!ENDIF
1048!ENDIF
1049
1050!IF $(FOR_WIN10)!=0
1051LTLINKOPTS = $(LTLINKOPTS) /guard:cf "/LIBPATH:$(UCRTLIBPATH)"
1052!IF $(DEBUG)>1
1053LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:libucrtd.lib /DEFAULTLIB:ucrtd.lib
1054!ELSE
1055LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib
1056!ENDIF
1057!ENDIF
1058
1059# If either debugging or symbols are enabled, enable PDBs.
1060#
1061!IF $(DEBUG)>1 || $(SYMBOLS)!=0
1062LDFLAGS = /DEBUG $(LDOPTS)
1063!ELSE
1064LDFLAGS = $(LDOPTS)
1065!ENDIF
1066
1067# <<mark>>
1068# Start with the Tcl related linker options.
1069#
1070!IF $(NO_TCL)==0
1071LTLIBPATHS = /LIBPATH:$(TCLLIBDIR)
1072LTLIBS = $(LIBTCL)
1073!ENDIF
1074
1075# If ICU support is enabled, add the linker options for it.
1076#
1077!IF $(USE_ICU)!=0
1078LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
1079LTLIBS = $(LTLIBS) $(LIBICU)
1080!ENDIF
1081# <</mark>>
1082
1083# You should not have to change anything below this line
1084###############################################################################
1085
1086# <<mark>>
1087# Object files for the SQLite library (non-amalgamation).
1088#
1089LIBOBJS0 = vdbe.lo parse.lo alter.lo analyze.lo attach.lo auth.lo \
1090         backup.lo bitvec.lo btmutex.lo btree.lo build.lo \
1091         callback.lo complete.lo ctime.lo date.lo dbstat.lo delete.lo \
1092         expr.lo fault.lo fkey.lo \
1093         fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo \
1094         fts3_porter.lo fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo \
1095         fts3_tokenize_vtab.lo fts3_unicode.lo fts3_unicode2.lo fts3_write.lo \
1096         fts5.lo \
1097         func.lo global.lo hash.lo \
1098         icu.lo insert.lo legacy.lo loadext.lo \
1099         main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \
1100         memjournal.lo \
1101         mutex.lo mutex_noop.lo mutex_unix.lo mutex_w32.lo \
1102         notify.lo opcodes.lo os.lo os_unix.lo os_win.lo \
1103         pager.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo \
1104         random.lo resolve.lo rowset.lo rtree.lo \
1105         sqlite3session.lo select.lo sqlite3rbu.lo status.lo \
1106         table.lo threads.lo tokenize.lo treeview.lo trigger.lo \
1107         update.lo util.lo vacuum.lo \
1108         vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \
1109         vdbetrace.lo wal.lo walker.lo where.lo wherecode.lo whereexpr.lo \
1110         utf.lo vtab.lo
1111# <</mark>>
1112
1113# Object files for the amalgamation.
1114#
1115LIBOBJS1 = sqlite3.lo
1116
1117# Determine the real value of LIBOBJ based on the 'configure' script
1118#
1119# <<mark>>
1120!IF $(USE_AMALGAMATION)==0
1121LIBOBJ = $(LIBOBJS0)
1122!ELSE
1123# <</mark>>
1124LIBOBJ = $(LIBOBJS1)
1125# <<mark>>
1126!ENDIF
1127# <</mark>>
1128
1129# Determine if embedded resource compilation and usage are enabled.
1130#
1131!IF $(USE_RC)!=0
1132LIBRESOBJS = sqlite3res.lo
1133!ELSE
1134LIBRESOBJS =
1135!ENDIF
1136
1137# <<mark>>
1138# Core source code files, part 1.
1139#
1140SRC00 = \
1141  $(TOP)\src\alter.c \
1142  $(TOP)\src\analyze.c \
1143  $(TOP)\src\attach.c \
1144  $(TOP)\src\auth.c \
1145  $(TOP)\src\backup.c \
1146  $(TOP)\src\bitvec.c \
1147  $(TOP)\src\btmutex.c \
1148  $(TOP)\src\btree.c \
1149  $(TOP)\src\build.c \
1150  $(TOP)\src\callback.c \
1151  $(TOP)\src\complete.c \
1152  $(TOP)\src\ctime.c \
1153  $(TOP)\src\date.c \
1154  $(TOP)\src\dbstat.c \
1155  $(TOP)\src\delete.c \
1156  $(TOP)\src\expr.c \
1157  $(TOP)\src\fault.c \
1158  $(TOP)\src\fkey.c \
1159  $(TOP)\src\func.c \
1160  $(TOP)\src\global.c \
1161  $(TOP)\src\hash.c \
1162  $(TOP)\src\insert.c \
1163  $(TOP)\src\legacy.c \
1164  $(TOP)\src\loadext.c \
1165  $(TOP)\src\main.c \
1166  $(TOP)\src\malloc.c \
1167  $(TOP)\src\mem0.c \
1168  $(TOP)\src\mem1.c \
1169  $(TOP)\src\mem2.c \
1170  $(TOP)\src\mem3.c \
1171  $(TOP)\src\mem5.c \
1172  $(TOP)\src\memjournal.c \
1173  $(TOP)\src\mutex.c \
1174  $(TOP)\src\mutex_noop.c \
1175  $(TOP)\src\mutex_unix.c \
1176  $(TOP)\src\mutex_w32.c \
1177  $(TOP)\src\notify.c \
1178  $(TOP)\src\os.c \
1179  $(TOP)\src\os_unix.c \
1180  $(TOP)\src\os_win.c
1181
1182# Core source code files, part 2.
1183#
1184SRC01 = \
1185  $(TOP)\src\pager.c \
1186  $(TOP)\src\pcache.c \
1187  $(TOP)\src\pcache1.c \
1188  $(TOP)\src\pragma.c \
1189  $(TOP)\src\prepare.c \
1190  $(TOP)\src\printf.c \
1191  $(TOP)\src\random.c \
1192  $(TOP)\src\resolve.c \
1193  $(TOP)\src\rowset.c \
1194  $(TOP)\src\select.c \
1195  $(TOP)\src\status.c \
1196  $(TOP)\src\table.c \
1197  $(TOP)\src\threads.c \
1198  $(TOP)\src\tclsqlite.c \
1199  $(TOP)\src\tokenize.c \
1200  $(TOP)\src\treeview.c \
1201  $(TOP)\src\trigger.c \
1202  $(TOP)\src\utf.c \
1203  $(TOP)\src\update.c \
1204  $(TOP)\src\util.c \
1205  $(TOP)\src\vacuum.c \
1206  $(TOP)\src\vdbe.c \
1207  $(TOP)\src\vdbeapi.c \
1208  $(TOP)\src\vdbeaux.c \
1209  $(TOP)\src\vdbeblob.c \
1210  $(TOP)\src\vdbemem.c \
1211  $(TOP)\src\vdbesort.c \
1212  $(TOP)\src\vdbetrace.c \
1213  $(TOP)\src\vtab.c \
1214  $(TOP)\src\wal.c \
1215  $(TOP)\src\walker.c \
1216  $(TOP)\src\where.c \
1217  $(TOP)\src\wherecode.c \
1218  $(TOP)\src\whereexpr.c
1219
1220# Shell source code files.
1221#
1222SRC02 = \
1223  $(TOP)\src\shell.c
1224
1225# Core miscellaneous files.
1226#
1227SRC03 = \
1228  $(TOP)\src\parse.y
1229
1230# Core header files, part 1.
1231#
1232SRC04 = \
1233  $(TOP)\src\btree.h \
1234  $(TOP)\src\btreeInt.h \
1235  $(TOP)\src\hash.h \
1236  $(TOP)\src\hwtime.h \
1237  $(TOP)\src\msvc.h \
1238  $(TOP)\src\mutex.h \
1239  $(TOP)\src\os.h \
1240  $(TOP)\src\os_common.h \
1241  $(TOP)\src\os_setup.h \
1242  $(TOP)\src\os_win.h
1243
1244# Core header files, part 2.
1245#
1246SRC05 = \
1247  $(TOP)\src\pager.h \
1248  $(TOP)\src\pcache.h \
1249  $(TOP)\src\pragma.h \
1250  $(TOP)\src\sqlite.h.in \
1251  $(TOP)\src\sqlite3ext.h \
1252  $(TOP)\src\sqliteInt.h \
1253  $(TOP)\src\sqliteLimit.h \
1254  $(TOP)\src\vdbe.h \
1255  $(TOP)\src\vdbeInt.h \
1256  $(TOP)\src\vxworks.h \
1257  $(TOP)\src\wal.h \
1258  $(TOP)\src\whereInt.h
1259
1260# Extension source code files, part 1.
1261#
1262SRC06 = \
1263  $(TOP)\ext\fts1\fts1.c \
1264  $(TOP)\ext\fts1\fts1_hash.c \
1265  $(TOP)\ext\fts1\fts1_porter.c \
1266  $(TOP)\ext\fts1\fts1_tokenizer1.c \
1267  $(TOP)\ext\fts2\fts2.c \
1268  $(TOP)\ext\fts2\fts2_hash.c \
1269  $(TOP)\ext\fts2\fts2_icu.c \
1270  $(TOP)\ext\fts2\fts2_porter.c \
1271  $(TOP)\ext\fts2\fts2_tokenizer.c \
1272  $(TOP)\ext\fts2\fts2_tokenizer1.c
1273
1274# Extension source code files, part 2.
1275#
1276SRC07 = \
1277  $(TOP)\ext\fts3\fts3.c \
1278  $(TOP)\ext\fts3\fts3_aux.c \
1279  $(TOP)\ext\fts3\fts3_expr.c \
1280  $(TOP)\ext\fts3\fts3_hash.c \
1281  $(TOP)\ext\fts3\fts3_icu.c \
1282  $(TOP)\ext\fts3\fts3_porter.c \
1283  $(TOP)\ext\fts3\fts3_snippet.c \
1284  $(TOP)\ext\fts3\fts3_tokenizer.c \
1285  $(TOP)\ext\fts3\fts3_tokenizer1.c \
1286  $(TOP)\ext\fts3\fts3_tokenize_vtab.c \
1287  $(TOP)\ext\fts3\fts3_unicode.c \
1288  $(TOP)\ext\fts3\fts3_unicode2.c \
1289  $(TOP)\ext\fts3\fts3_write.c \
1290  $(TOP)\ext\icu\icu.c \
1291  $(TOP)\ext\rtree\rtree.c \
1292  $(TOP)\ext\session\sqlite3session.c \
1293  $(TOP)\ext\rbu\sqlite3rbu.c \
1294  $(TOP)\ext\misc\json1.c
1295
1296# Extension header files, part 1.
1297#
1298SRC08 = \
1299  $(TOP)\ext\fts1\fts1.h \
1300  $(TOP)\ext\fts1\fts1_hash.h \
1301  $(TOP)\ext\fts1\fts1_tokenizer.h \
1302  $(TOP)\ext\fts2\fts2.h \
1303  $(TOP)\ext\fts2\fts2_hash.h \
1304  $(TOP)\ext\fts2\fts2_tokenizer.h
1305
1306# Extension header files, part 2.
1307#
1308SRC09 = \
1309  $(TOP)\ext\fts3\fts3.h \
1310  $(TOP)\ext\fts3\fts3Int.h \
1311  $(TOP)\ext\fts3\fts3_hash.h \
1312  $(TOP)\ext\fts3\fts3_tokenizer.h \
1313  $(TOP)\ext\icu\sqliteicu.h \
1314  $(TOP)\ext\rtree\rtree.h \
1315  $(TOP)\ext\rbu\sqlite3rbu.h \
1316  $(TOP)\ext\session\sqlite3session.h
1317
1318# Generated source code files
1319#
1320SRC10 = \
1321  opcodes.c \
1322  parse.c
1323
1324# Generated header files
1325#
1326SRC11 = \
1327  keywordhash.h \
1328  opcodes.h \
1329  parse.h \
1330  $(SQLITE3H)
1331
1332# Generated Tcl header files
1333#
1334!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1335SRC12 = \
1336  $(SQLITETCLH) \
1337  $(SQLITETCLDECLSH)
1338!ELSE
1339SRC12 =
1340!ENDIF
1341
1342# All source code files.
1343#
1344SRC = $(SRC00) $(SRC01) $(SRC02) $(SRC03) $(SRC04) $(SRC05) $(SRC06) $(SRC07) $(SRC08) $(SRC09) $(SRC10) $(SRC11)
1345
1346# Source code to the test files.
1347#
1348TESTSRC = \
1349  $(TOP)\src\test1.c \
1350  $(TOP)\src\test2.c \
1351  $(TOP)\src\test3.c \
1352  $(TOP)\src\test4.c \
1353  $(TOP)\src\test5.c \
1354  $(TOP)\src\test6.c \
1355  $(TOP)\src\test7.c \
1356  $(TOP)\src\test8.c \
1357  $(TOP)\src\test9.c \
1358  $(TOP)\src\test_autoext.c \
1359  $(TOP)\src\test_async.c \
1360  $(TOP)\src\test_backup.c \
1361  $(TOP)\src\test_bestindex.c \
1362  $(TOP)\src\test_blob.c \
1363  $(TOP)\src\test_btree.c \
1364  $(TOP)\src\test_config.c \
1365  $(TOP)\src\test_delete.c \
1366  $(TOP)\src\test_demovfs.c \
1367  $(TOP)\src\test_devsym.c \
1368  $(TOP)\src\test_fs.c \
1369  $(TOP)\src\test_func.c \
1370  $(TOP)\src\test_hexio.c \
1371  $(TOP)\src\test_init.c \
1372  $(TOP)\src\test_intarray.c \
1373  $(TOP)\src\test_journal.c \
1374  $(TOP)\src\test_malloc.c \
1375  $(TOP)\src\test_multiplex.c \
1376  $(TOP)\src\test_mutex.c \
1377  $(TOP)\src\test_onefile.c \
1378  $(TOP)\src\test_osinst.c \
1379  $(TOP)\src\test_pcache.c \
1380  $(TOP)\src\test_quota.c \
1381  $(TOP)\src\test_rtree.c \
1382  $(TOP)\src\test_schema.c \
1383  $(TOP)\src\test_server.c \
1384  $(TOP)\src\test_superlock.c \
1385  $(TOP)\src\test_syscall.c \
1386  $(TOP)\src\test_tclvar.c \
1387  $(TOP)\src\test_thread.c \
1388  $(TOP)\src\test_vfs.c \
1389  $(TOP)\src\test_windirent.c \
1390  $(TOP)\src\test_wsd.c \
1391  $(TOP)\ext\fts3\fts3_term.c \
1392  $(TOP)\ext\fts3\fts3_test.c \
1393  $(TOP)\ext\rbu\test_rbu.c \
1394  $(TOP)\ext\session\test_session.c
1395
1396# Statically linked extensions.
1397#
1398TESTEXT = \
1399  $(TOP)\ext\misc\amatch.c \
1400  $(TOP)\ext\misc\carray.c \
1401  $(TOP)\ext\misc\closure.c \
1402  $(TOP)\ext\misc\csv.c \
1403  $(TOP)\ext\misc\eval.c \
1404  $(TOP)\ext\misc\fileio.c \
1405  $(TOP)\ext\misc\fuzzer.c \
1406  $(TOP)\ext\fts5\fts5_tcl.c \
1407  $(TOP)\ext\fts5\fts5_test_mi.c \
1408  $(TOP)\ext\fts5\fts5_test_tok.c \
1409  $(TOP)\ext\misc\ieee754.c \
1410  $(TOP)\ext\misc\nextchar.c \
1411  $(TOP)\ext\misc\percentile.c \
1412  $(TOP)\ext\misc\regexp.c \
1413  $(TOP)\ext\misc\remember.c \
1414  $(TOP)\ext\misc\series.c \
1415  $(TOP)\ext\misc\spellfix.c \
1416  $(TOP)\ext\misc\totype.c \
1417  $(TOP)\ext\misc\wholenumber.c
1418
1419# Source code to the library files needed by the test fixture
1420# (non-amalgamation)
1421#
1422TESTSRC2 = \
1423  $(SRC00) \
1424  $(SRC01) \
1425  $(SRC06) \
1426  $(SRC07) \
1427  $(SRC10) \
1428  $(TOP)\ext\async\sqlite3async.c
1429
1430# Header files used by all library source files.
1431#
1432HDR = \
1433   $(TOP)\src\btree.h \
1434   $(TOP)\src\btreeInt.h \
1435   $(TOP)\src\hash.h \
1436   $(TOP)\src\hwtime.h \
1437   keywordhash.h \
1438   $(TOP)\src\msvc.h \
1439   $(TOP)\src\mutex.h \
1440   opcodes.h \
1441   $(TOP)\src\os.h \
1442   $(TOP)\src\os_common.h \
1443   $(TOP)\src\os_setup.h \
1444   $(TOP)\src\os_win.h \
1445   $(TOP)\src\pager.h \
1446   $(TOP)\src\pcache.h \
1447   parse.h \
1448   $(TOP)\src\pragma.h \
1449   $(SQLITE3H) \
1450   sqlite3ext.h \
1451   $(TOP)\src\sqliteInt.h \
1452   $(TOP)\src\sqliteLimit.h \
1453   $(TOP)\src\vdbe.h \
1454   $(TOP)\src\vdbeInt.h \
1455   $(TOP)\src\vxworks.h \
1456   $(TOP)\src\whereInt.h
1457
1458# Header files used by extensions
1459#
1460EXTHDR = $(EXTHDR) \
1461  $(TOP)\ext\fts1\fts1.h \
1462  $(TOP)\ext\fts1\fts1_hash.h \
1463  $(TOP)\ext\fts1\fts1_tokenizer.h
1464EXTHDR = $(EXTHDR) \
1465  $(TOP)\ext\fts2\fts2.h \
1466  $(TOP)\ext\fts2\fts2_hash.h \
1467  $(TOP)\ext\fts2\fts2_tokenizer.h
1468EXTHDR = $(EXTHDR) \
1469  $(TOP)\ext\fts3\fts3.h \
1470  $(TOP)\ext\fts3\fts3Int.h \
1471  $(TOP)\ext\fts3\fts3_hash.h \
1472  $(TOP)\ext\fts3\fts3_tokenizer.h
1473EXTHDR = $(EXTHDR) \
1474  $(TOP)\ext\rtree\rtree.h
1475EXTHDR = $(EXTHDR) \
1476  $(TOP)\ext\icu\sqliteicu.h
1477EXTHDR = $(EXTHDR) \
1478  $(TOP)\ext\rtree\sqlite3rtree.h
1479EXTHDR = $(EXTHDR) \
1480  $(TOP)\ext\session\sqlite3session.h
1481
1482# executables needed for testing
1483#
1484TESTPROGS = \
1485  testfixture.exe \
1486  $(SQLITE3EXE) \
1487  sqlite3_analyzer.exe \
1488  sqldiff.exe \
1489  dbhash.exe
1490
1491# Databases containing fuzzer test cases
1492#
1493FUZZDATA = \
1494  $(TOP)\test\fuzzdata1.db \
1495  $(TOP)\test\fuzzdata2.db \
1496  $(TOP)\test\fuzzdata3.db \
1497  $(TOP)\test\fuzzdata4.db \
1498  $(TOP)\test\fuzzdata5.db
1499# <</mark>>
1500
1501# Additional compiler options for the shell.  These are only effective
1502# when the shell is not being dynamically linked.
1503#
1504!IF $(DYNAMIC_SHELL)==0 && $(FOR_WIN10)==0
1505SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_SHELL_JSON1 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS
1506!ENDIF
1507
1508# <<mark>>
1509# Extra compiler options for various test tools.
1510#
1511MPTESTER_COMPILE_OPTS = -DSQLITE_SHELL_JSON1 -DSQLITE_ENABLE_FTS5
1512FUZZERSHELL_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1
1513FUZZCHECK_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 -DSQLITE_OSS_FUZZ -DSQLITE_MAX_MEMORY=50000000
1514FUZZCHECK_SRC = $(TOP)\test\fuzzcheck.c $(TOP)\test\ossfuzz.c
1515OSSSHELL_SRC = $(TOP)\test\ossshell.c $(TOP)\test\ossfuzz.c
1516DBFUZZ_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION
1517KV_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_DIRECT_OVERFLOW_READ
1518DBSELFTEST_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5
1519ST_COMPILE_OPTS = -DSQLITE_THREADSAFE=0
1520
1521# Standard options to testfixture.
1522#
1523TESTOPTS = --verbose=file --output=test-out.txt
1524
1525# Extra targets for the "all" target that require Tcl.
1526#
1527!IF $(NO_TCL)==0
1528ALL_TCL_TARGETS = libtclsqlite3.lib
1529!ELSE
1530ALL_TCL_TARGETS =
1531!ENDIF
1532# <</mark>>
1533
1534# This is the default Makefile target.  The objects listed here
1535# are what get build when you type just "make" with no arguments.
1536#
1537all:	dll libsqlite3.lib shell $(ALL_TCL_TARGETS)
1538
1539# Dynamic link library section.
1540#
1541dll:	$(SQLITE3DLL)
1542
1543# Shell executable.
1544#
1545shell:	$(SQLITE3EXE)
1546
1547# <<mark>>
1548libsqlite3.lib:	$(LIBOBJ)
1549	$(LTLIB) $(LTLIBOPTS) /OUT:$@ $(LIBOBJ) $(TLIBS)
1550
1551libtclsqlite3.lib:	tclsqlite.lo libsqlite3.lib
1552	$(LTLIB) $(LTLIBOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite.lo libsqlite3.lib $(LIBTCLSTUB) $(TLIBS)
1553# <</mark>>
1554
1555$(SQLITE3DLL):	$(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP)
1556	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL $(CORE_LINK_OPTS) /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1557
1558# <<block2>>
1559sqlite3.def:	libsqlite3.lib
1560	echo EXPORTS > sqlite3.def
1561	dumpbin /all libsqlite3.lib \
1562		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl include "^\s+1 _?(sqlite3(?:session|changeset)?_[^@]*)(?:@\d+)?$$" \1 \
1563		| sort >> sqlite3.def
1564# <</block2>>
1565
1566$(SQLITE3EXE):	$(TOP)\src\shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H)
1567	$(LTLINK) $(SHELL_COMPILE_OPTS) $(READLINE_FLAGS) $(TOP)\src\shell.c $(SHELL_CORE_SRC) \
1568		/link $(SQLITE3EXEPDB) $(LDFLAGS) $(LTLINKOPTS) $(SHELL_LINK_OPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
1569
1570# <<mark>>
1571sqldiff.exe:	$(TOP)\tool\sqldiff.c $(SQLITE3C) $(SQLITE3H)
1572	$(LTLINK) $(NO_WARN) $(TOP)\tool\sqldiff.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1573
1574dbhash.exe:	$(TOP)\tool\dbhash.c $(SQLITE3C) $(SQLITE3H)
1575	$(LTLINK) $(NO_WARN) $(TOP)\tool\dbhash.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1576
1577scrub.exe:	$(TOP)\ext\misc\scrub.c $(SQLITE3C) $(SQLITE3H)
1578	$(LTLINK) $(NO_WARN) $(TOP)\ext\misc\scrub.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1579
1580srcck1.exe:	$(TOP)\tool\srcck1.c
1581	$(BCC) $(NO_WARN) -Fe$@ $(TOP)\tool\srcck1.c
1582
1583sourcetest:	srcck1.exe sqlite3.c
1584	srcck1.exe sqlite3.c
1585
1586fuzzershell.exe:	$(TOP)\tool\fuzzershell.c $(SQLITE3C) $(SQLITE3H)
1587	$(LTLINK) $(NO_WARN) $(FUZZERSHELL_COMPILE_OPTS) $(TOP)\tool\fuzzershell.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1588
1589dbfuzz.exe:	$(TOP)\test\dbfuzz.c $(SQLITE3C) $(SQLITE3H)
1590	$(LTLINK) $(NO_WARN) $(DBFUZZ_COMPILE_OPTS) $(TOP)\test\dbfuzz.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1591
1592fuzzcheck.exe:	$(FUZZCHECK_SRC) $(SQLITE3C) $(SQLITE3H)
1593	$(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(FUZZCHECK_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1594
1595ossshell.exe:	$(OSSSHELL_SRC) $(SQLITE3C) $(SQLITE3H)
1596	$(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(OSSSHELL_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1597
1598mptester.exe:	$(TOP)\mptest\mptest.c $(SQLITE3C) $(SQLITE3H)
1599	$(LTLINK) $(NO_WARN) $(MPTESTER_COMPILE_OPTS) $(TOP)\mptest\mptest.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1600
1601MPTEST1 = mptester mptest.db $(TOP)\mptest\crash01.test --repeat 20
1602MPTEST2 = mptester mptest.db $(TOP)\mptest\multiwrite01.test --repeat 20
1603
1604mptest:	mptester.exe
1605	del /Q mptest.db 2>NUL
1606	$(MPTEST1) --journalmode DELETE
1607	$(MPTEST2) --journalmode WAL
1608	$(MPTEST1) --journalmode WAL
1609	$(MPTEST2) --journalmode PERSIST
1610	$(MPTEST1) --journalmode PERSIST
1611	$(MPTEST2) --journalmode TRUNCATE
1612	$(MPTEST1) --journalmode TRUNCATE
1613	$(MPTEST2) --journalmode DELETE
1614
1615# This target creates a directory named "tsrc" and fills it with
1616# copies of all of the C source code and header files needed to
1617# build on the target system.  Some of the C source code and header
1618# files are automatically generated.  This target takes care of
1619# all that automatic generation.
1620#
1621.target_source:	$(SRC) $(TOP)\tool\vdbe-compress.tcl fts5.c $(SQLITE_TCL_DEP)
1622	-rmdir /Q/S tsrc 2>NUL
1623	-mkdir tsrc
1624	for %i in ($(SRC00)) do copy /Y %i tsrc
1625	for %i in ($(SRC01)) do copy /Y %i tsrc
1626	for %i in ($(SRC02)) do copy /Y %i tsrc
1627	for %i in ($(SRC03)) do copy /Y %i tsrc
1628	for %i in ($(SRC04)) do copy /Y %i tsrc
1629	for %i in ($(SRC05)) do copy /Y %i tsrc
1630	for %i in ($(SRC06)) do copy /Y %i tsrc
1631	for %i in ($(SRC07)) do copy /Y %i tsrc
1632	for %i in ($(SRC08)) do copy /Y %i tsrc
1633	for %i in ($(SRC09)) do copy /Y %i tsrc
1634	for %i in ($(SRC10)) do copy /Y %i tsrc
1635	for %i in ($(SRC11)) do copy /Y %i tsrc
1636	for %i in ($(SRC12)) do copy /Y %i tsrc
1637	copy /Y fts5.c tsrc
1638	copy /Y fts5.h tsrc
1639	del /Q tsrc\sqlite.h.in tsrc\parse.y 2>NUL
1640	$(TCLSH_CMD) $(TOP)\tool\vdbe-compress.tcl $(OPTS) < tsrc\vdbe.c > vdbe.new
1641	move vdbe.new tsrc\vdbe.c
1642	echo > .target_source
1643
1644sqlite3.c:	.target_source sqlite3ext.h $(MKSQLITE3C_TOOL)
1645	$(TCLSH_CMD) $(MKSQLITE3C_TOOL) $(MKSQLITE3C_ARGS)
1646	copy tsrc\shell.c .
1647	copy $(TOP)\ext\session\sqlite3session.h .
1648
1649sqlite3-all.c:	sqlite3.c $(TOP)\tool\split-sqlite3c.tcl
1650	$(TCLSH_CMD) $(TOP)\tool\split-sqlite3c.tcl
1651# <</mark>>
1652
1653# Rule to build the amalgamation
1654#
1655sqlite3.lo:	$(SQLITE3C)
1656	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(SQLITE3C)
1657
1658# <<mark>>
1659# Rules to build the LEMON compiler generator
1660#
1661lempar.c:	$(TOP)\tool\lempar.c
1662	copy $(TOP)\tool\lempar.c .
1663
1664lemon.exe:	$(TOP)\tool\lemon.c lempar.c
1665	$(BCC) $(NO_WARN) -Daccess=_access \
1666		-Fe$@ $(TOP)\tool\lemon.c /link $(LDFLAGS) $(NLTLINKOPTS) $(NLTLIBPATHS)
1667
1668# Rules to build individual *.lo files from generated *.c files. This
1669# applies to:
1670#
1671#     parse.lo
1672#     opcodes.lo
1673#
1674parse.lo:	parse.c $(HDR)
1675	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c parse.c
1676
1677opcodes.lo:	opcodes.c
1678	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c opcodes.c
1679# <</mark>>
1680
1681# Rule to build the Win32 resources object file.
1682#
1683!IF $(USE_RC)!=0
1684# <<block1>>
1685$(LIBRESOBJS):	$(TOP)\src\sqlite3.rc $(SQLITE3H)
1686	echo #ifndef SQLITE_RESOURCE_VERSION > sqlite3rc.h
1687	for /F %%V in ('type "$(TOP)\VERSION"') do ( \
1688		echo #define SQLITE_RESOURCE_VERSION %%V \
1689			| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact . ^, >> sqlite3rc.h \
1690	)
1691	echo #endif >> sqlite3rc.h
1692	$(LTRCOMPILE) -fo $(LIBRESOBJS) $(TOP)\src\sqlite3.rc
1693# <</block1>>
1694!ENDIF
1695
1696# <<mark>>
1697# Rules to build individual *.lo files from files in the src directory.
1698#
1699alter.lo:	$(TOP)\src\alter.c $(HDR)
1700	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\alter.c
1701
1702analyze.lo:	$(TOP)\src\analyze.c $(HDR)
1703	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\analyze.c
1704
1705attach.lo:	$(TOP)\src\attach.c $(HDR)
1706	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\attach.c
1707
1708auth.lo:	$(TOP)\src\auth.c $(HDR)
1709	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\auth.c
1710
1711backup.lo:	$(TOP)\src\backup.c $(HDR)
1712	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\backup.c
1713
1714bitvec.lo:	$(TOP)\src\bitvec.c $(HDR)
1715	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\bitvec.c
1716
1717btmutex.lo:	$(TOP)\src\btmutex.c $(HDR)
1718	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\btmutex.c
1719
1720btree.lo:	$(TOP)\src\btree.c $(HDR) $(TOP)\src\pager.h
1721	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\btree.c
1722
1723build.lo:	$(TOP)\src\build.c $(HDR)
1724	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\build.c
1725
1726callback.lo:	$(TOP)\src\callback.c $(HDR)
1727	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\callback.c
1728
1729complete.lo:	$(TOP)\src\complete.c $(HDR)
1730	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\complete.c
1731
1732ctime.lo:	$(TOP)\src\ctime.c $(HDR)
1733	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\ctime.c
1734
1735date.lo:	$(TOP)\src\date.c $(HDR)
1736	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\date.c
1737
1738dbstat.lo:	$(TOP)\src\date.c $(HDR)
1739	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\dbstat.c
1740
1741delete.lo:	$(TOP)\src\delete.c $(HDR)
1742	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\delete.c
1743
1744expr.lo:	$(TOP)\src\expr.c $(HDR)
1745	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\expr.c
1746
1747fault.lo:	$(TOP)\src\fault.c $(HDR)
1748	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fault.c
1749
1750fkey.lo:	$(TOP)\src\fkey.c $(HDR)
1751	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fkey.c
1752
1753func.lo:	$(TOP)\src\func.c $(HDR)
1754	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\func.c
1755
1756global.lo:	$(TOP)\src\global.c $(HDR)
1757	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\global.c
1758
1759hash.lo:	$(TOP)\src\hash.c $(HDR)
1760	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\hash.c
1761
1762insert.lo:	$(TOP)\src\insert.c $(HDR)
1763	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\insert.c
1764
1765legacy.lo:	$(TOP)\src\legacy.c $(HDR)
1766	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\legacy.c
1767
1768loadext.lo:	$(TOP)\src\loadext.c $(HDR)
1769	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\loadext.c
1770
1771main.lo:	$(TOP)\src\main.c $(HDR)
1772	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\main.c
1773
1774malloc.lo:	$(TOP)\src\malloc.c $(HDR)
1775	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\malloc.c
1776
1777mem0.lo:	$(TOP)\src\mem0.c $(HDR)
1778	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem0.c
1779
1780mem1.lo:	$(TOP)\src\mem1.c $(HDR)
1781	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem1.c
1782
1783mem2.lo:	$(TOP)\src\mem2.c $(HDR)
1784	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem2.c
1785
1786mem3.lo:	$(TOP)\src\mem3.c $(HDR)
1787	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem3.c
1788
1789mem5.lo:	$(TOP)\src\mem5.c $(HDR)
1790	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem5.c
1791
1792memjournal.lo:	$(TOP)\src\memjournal.c $(HDR)
1793	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\memjournal.c
1794
1795mutex.lo:	$(TOP)\src\mutex.c $(HDR)
1796	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex.c
1797
1798mutex_noop.lo:	$(TOP)\src\mutex_noop.c $(HDR)
1799	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_noop.c
1800
1801mutex_unix.lo:	$(TOP)\src\mutex_unix.c $(HDR)
1802	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_unix.c
1803
1804mutex_w32.lo:	$(TOP)\src\mutex_w32.c $(HDR)
1805	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_w32.c
1806
1807notify.lo:	$(TOP)\src\notify.c $(HDR)
1808	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\notify.c
1809
1810pager.lo:	$(TOP)\src\pager.c $(HDR) $(TOP)\src\pager.h
1811	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pager.c
1812
1813pcache.lo:	$(TOP)\src\pcache.c $(HDR) $(TOP)\src\pcache.h
1814	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache.c
1815
1816pcache1.lo:	$(TOP)\src\pcache1.c $(HDR) $(TOP)\src\pcache.h
1817	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache1.c
1818
1819os.lo:	$(TOP)\src\os.c $(HDR)
1820	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os.c
1821
1822os_unix.lo:	$(TOP)\src\os_unix.c $(HDR)
1823	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_unix.c
1824
1825os_win.lo:	$(TOP)\src\os_win.c $(HDR)
1826	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_win.c
1827
1828pragma.lo:	$(TOP)\src\pragma.c $(HDR)
1829	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pragma.c
1830
1831prepare.lo:	$(TOP)\src\prepare.c $(HDR)
1832	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\prepare.c
1833
1834printf.lo:	$(TOP)\src\printf.c $(HDR)
1835	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\printf.c
1836
1837random.lo:	$(TOP)\src\random.c $(HDR)
1838	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\random.c
1839
1840resolve.lo:	$(TOP)\src\resolve.c $(HDR)
1841	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\resolve.c
1842
1843rowset.lo:	$(TOP)\src\rowset.c $(HDR)
1844	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\rowset.c
1845
1846select.lo:	$(TOP)\src\select.c $(HDR)
1847	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\select.c
1848
1849status.lo:	$(TOP)\src\status.c $(HDR)
1850	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\status.c
1851
1852table.lo:	$(TOP)\src\table.c $(HDR)
1853	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\table.c
1854
1855threads.lo:	$(TOP)\src\threads.c $(HDR)
1856	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\threads.c
1857
1858tokenize.lo:	$(TOP)\src\tokenize.c keywordhash.h $(HDR)
1859	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\tokenize.c
1860
1861treeview.lo:	$(TOP)\src\treeview.c $(HDR)
1862	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\treeview.c
1863
1864trigger.lo:	$(TOP)\src\trigger.c $(HDR)
1865	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\trigger.c
1866
1867update.lo:	$(TOP)\src\update.c $(HDR)
1868	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\update.c
1869
1870utf.lo:	$(TOP)\src\utf.c $(HDR)
1871	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\utf.c
1872
1873util.lo:	$(TOP)\src\util.c $(HDR)
1874	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\util.c
1875
1876vacuum.lo:	$(TOP)\src\vacuum.c $(HDR)
1877	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vacuum.c
1878
1879vdbe.lo:	$(TOP)\src\vdbe.c $(HDR)
1880	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbe.c
1881
1882vdbeapi.lo:	$(TOP)\src\vdbeapi.c $(HDR)
1883	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeapi.c
1884
1885vdbeaux.lo:	$(TOP)\src\vdbeaux.c $(HDR)
1886	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeaux.c
1887
1888vdbeblob.lo:	$(TOP)\src\vdbeblob.c $(HDR)
1889	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeblob.c
1890
1891vdbemem.lo:	$(TOP)\src\vdbemem.c $(HDR)
1892	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbemem.c
1893
1894vdbesort.lo:	$(TOP)\src\vdbesort.c $(HDR)
1895	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbesort.c
1896
1897vdbetrace.lo:	$(TOP)\src\vdbetrace.c $(HDR)
1898	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbetrace.c
1899
1900vtab.lo:	$(TOP)\src\vtab.c $(HDR)
1901	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vtab.c
1902
1903wal.lo:	$(TOP)\src\wal.c $(HDR)
1904	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\wal.c
1905
1906walker.lo:	$(TOP)\src\walker.c $(HDR)
1907	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\walker.c
1908
1909where.lo:	$(TOP)\src\where.c $(HDR)
1910	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\where.c
1911
1912wherecode.lo:	$(TOP)\src\wherecode.c $(HDR)
1913	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\wherecode.c
1914
1915whereexpr.lo:	$(TOP)\src\whereexpr.c $(HDR)
1916	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\whereexpr.c
1917
1918tclsqlite.lo:	$(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1919	$(LTCOMPILE) $(NO_WARN) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1920
1921tclsqlite-shell.lo:	$(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1922	$(LTCOMPILE) $(NO_WARN) -DTCLSH=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1923
1924tclsqlite3.exe:	tclsqlite-shell.lo $(SQLITE3C) $(SQLITE3H) $(LIBRESOBJS)
1925	$(LTLINK) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite-shell.lo $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1926
1927# Rules to build opcodes.c and opcodes.h
1928#
1929opcodes.c:	opcodes.h $(TOP)\tool\mkopcodec.tcl
1930	$(TCLSH_CMD) $(TOP)\tool\mkopcodec.tcl opcodes.h > opcodes.c
1931
1932opcodes.h:	parse.h $(TOP)\src\vdbe.c $(TOP)\tool\mkopcodeh.tcl
1933	type parse.h $(TOP)\src\vdbe.c | $(TCLSH_CMD) $(TOP)\tool\mkopcodeh.tcl > opcodes.h
1934
1935# Rules to build parse.c and parse.h - the outputs of lemon.
1936#
1937parse.h:	parse.c
1938
1939parse.c:	$(TOP)\src\parse.y lemon.exe $(TOP)\tool\addopcodes.tcl
1940	del /Q parse.y parse.h parse.h.temp 2>NUL
1941	copy $(TOP)\src\parse.y .
1942	.\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) parse.y
1943	move parse.h parse.h.temp
1944	$(TCLSH_CMD) $(TOP)\tool\addopcodes.tcl parse.h.temp > parse.h
1945
1946$(SQLITE3H):	$(TOP)\src\sqlite.h.in $(TOP)\manifest.uuid $(TOP)\VERSION
1947	$(TCLSH_CMD) $(TOP)\tool\mksqlite3h.tcl $(TOP:\=/) > $(SQLITE3H) $(MKSQLITE3H_ARGS)
1948
1949sqlite3ext.h:	.target_source
1950!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1951	type tsrc\sqlite3ext.h | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*\)" "(SQLITE_CALLBACK *)" \
1952		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_APICALL *" > sqlite3ext.h
1953	copy /Y sqlite3ext.h tsrc\sqlite3ext.h
1954!ELSE
1955	copy /Y tsrc\sqlite3ext.h sqlite3ext.h
1956!ENDIF
1957
1958mkkeywordhash.exe:	$(TOP)\tool\mkkeywordhash.c
1959	$(BCC) $(NO_WARN) -Fe$@ $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) \
1960		$(TOP)\tool\mkkeywordhash.c /link $(LDFLAGS) $(NLTLINKOPTS) $(NLTLIBPATHS)
1961
1962keywordhash.h:	$(TOP)\tool\mkkeywordhash.c mkkeywordhash.exe
1963	.\mkkeywordhash.exe > keywordhash.h
1964
1965
1966
1967# Rules to build the extension objects.
1968#
1969icu.lo:	$(TOP)\ext\icu\icu.c $(HDR) $(EXTHDR)
1970	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\icu\icu.c
1971
1972fts2.lo:	$(TOP)\ext\fts2\fts2.c $(HDR) $(EXTHDR)
1973	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2.c
1974
1975fts2_hash.lo:	$(TOP)\ext\fts2\fts2_hash.c $(HDR) $(EXTHDR)
1976	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_hash.c
1977
1978fts2_icu.lo:	$(TOP)\ext\fts2\fts2_icu.c $(HDR) $(EXTHDR)
1979	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_icu.c
1980
1981fts2_porter.lo:	$(TOP)\ext\fts2\fts2_porter.c $(HDR) $(EXTHDR)
1982	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_porter.c
1983
1984fts2_tokenizer.lo:	$(TOP)\ext\fts2\fts2_tokenizer.c $(HDR) $(EXTHDR)
1985	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer.c
1986
1987fts2_tokenizer1.lo:	$(TOP)\ext\fts2\fts2_tokenizer1.c $(HDR) $(EXTHDR)
1988	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer1.c
1989
1990fts3.lo:	$(TOP)\ext\fts3\fts3.c $(HDR) $(EXTHDR)
1991	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3.c
1992
1993fts3_aux.lo:	$(TOP)\ext\fts3\fts3_aux.c $(HDR) $(EXTHDR)
1994	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_aux.c
1995
1996fts3_expr.lo:	$(TOP)\ext\fts3\fts3_expr.c $(HDR) $(EXTHDR)
1997	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_expr.c
1998
1999fts3_hash.lo:	$(TOP)\ext\fts3\fts3_hash.c $(HDR) $(EXTHDR)
2000	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_hash.c
2001
2002fts3_icu.lo:	$(TOP)\ext\fts3\fts3_icu.c $(HDR) $(EXTHDR)
2003	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_icu.c
2004
2005fts3_snippet.lo:	$(TOP)\ext\fts3\fts3_snippet.c $(HDR) $(EXTHDR)
2006	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_snippet.c
2007
2008fts3_porter.lo:	$(TOP)\ext\fts3\fts3_porter.c $(HDR) $(EXTHDR)
2009	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_porter.c
2010
2011fts3_tokenizer.lo:	$(TOP)\ext\fts3\fts3_tokenizer.c $(HDR) $(EXTHDR)
2012	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer.c
2013
2014fts3_tokenizer1.lo:	$(TOP)\ext\fts3\fts3_tokenizer1.c $(HDR) $(EXTHDR)
2015	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer1.c
2016
2017fts3_tokenize_vtab.lo:	$(TOP)\ext\fts3\fts3_tokenize_vtab.c $(HDR) $(EXTHDR)
2018	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenize_vtab.c
2019
2020fts3_unicode.lo:	$(TOP)\ext\fts3\fts3_unicode.c $(HDR) $(EXTHDR)
2021	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode.c
2022
2023fts3_unicode2.lo:	$(TOP)\ext\fts3\fts3_unicode2.c $(HDR) $(EXTHDR)
2024	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode2.c
2025
2026fts3_write.lo:	$(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR)
2027	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c
2028
2029rtree.lo:	$(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR)
2030	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c
2031
2032sqlite3session.lo:	$(TOP)\ext\session\sqlite3session.c $(HDR) $(EXTHDR)
2033	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\session\sqlite3session.c
2034
2035# FTS5 things
2036#
2037FTS5_SRC = \
2038   $(TOP)\ext\fts5\fts5.h \
2039   $(TOP)\ext\fts5\fts5Int.h \
2040   $(TOP)\ext\fts5\fts5_aux.c \
2041   $(TOP)\ext\fts5\fts5_buffer.c \
2042   $(TOP)\ext\fts5\fts5_main.c \
2043   $(TOP)\ext\fts5\fts5_config.c \
2044   $(TOP)\ext\fts5\fts5_expr.c \
2045   $(TOP)\ext\fts5\fts5_hash.c \
2046   $(TOP)\ext\fts5\fts5_index.c \
2047   fts5parse.c fts5parse.h \
2048   $(TOP)\ext\fts5\fts5_storage.c \
2049   $(TOP)\ext\fts5\fts5_tokenize.c \
2050   $(TOP)\ext\fts5\fts5_unicode2.c \
2051   $(TOP)\ext\fts5\fts5_varint.c \
2052   $(TOP)\ext\fts5\fts5_vocab.c
2053
2054fts5parse.c:	$(TOP)\ext\fts5\fts5parse.y lemon.exe
2055	copy $(TOP)\ext\fts5\fts5parse.y .
2056	del /Q fts5parse.h 2>NUL
2057	.\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) fts5parse.y
2058
2059fts5parse.h:	fts5parse.c
2060
2061fts5.c:	$(FTS5_SRC)
2062	$(TCLSH_CMD) $(TOP)\ext\fts5\tool\mkfts5c.tcl
2063	copy $(TOP)\ext\fts5\fts5.h .
2064
2065fts5.lo:	fts5.c $(HDR) $(EXTHDR)
2066	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c fts5.c
2067
2068fts5_ext.lo:	fts5.c $(HDR) $(EXTHDR)
2069	$(LTCOMPILE) $(NO_WARN) -c fts5.c
2070
2071fts5.dll:	fts5_ext.lo
2072	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ fts5_ext.lo
2073
2074sqlite3rbu.lo:	$(TOP)\ext\rbu\sqlite3rbu.c $(HDR) $(EXTHDR)
2075	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\rbu\sqlite3rbu.c
2076
2077# Rules to build the 'testfixture' application.
2078#
2079# If using the amalgamation, use sqlite3.c directly to build the test
2080# fixture.  Otherwise link against libsqlite3.lib.  (This distinction is
2081# necessary because the test fixture requires non-API symbols which are
2082# hidden when the library is built via the amalgamation).
2083#
2084TESTFIXTURE_FLAGS = -DTCLSH=1 -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1
2085TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERVER=1 -DSQLITE_PRIVATE=""
2086TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_CORE $(NO_WARN)
2087TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERIES_CONSTRAINT_VERIFY=1
2088TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_DEFAULT_PAGE_SIZE=1024
2089TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) $(TEST_CCONV_OPTS)
2090
2091TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2)
2092TESTFIXTURE_SRC1 = $(TESTEXT) $(SQLITE3C)
2093!IF $(USE_AMALGAMATION)==0
2094TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC0)
2095!ELSE
2096TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC1)
2097!ENDIF
2098
2099!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
2100sqlite_tclDecls.h:
2101	echo #ifndef SQLITE_TCLAPI > $(SQLITETCLDECLSH)
2102	echo #  define SQLITE_TCLAPI >> $(SQLITETCLDECLSH)
2103	echo #endif >> $(SQLITETCLDECLSH)
2104	type "$(TCLINCDIR)\tclDecls.h" \
2105		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN(?: CONST\d+?)?\s+?[^\(]*?\s+?)Tcl_" "\1 SQLITE_TCLAPI Tcl_" \
2106		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN\s+?(?:void|VOID)\s+?)TclFreeObj" "\1 SQLITE_TCLAPI TclFreeObj" \
2107		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tcl_" "(SQLITE_TCLAPI *tcl_" \
2108		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tclFreeObj" "(SQLITE_TCLAPI *tclFreeObj" \
2109		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_TCLAPI *" >> $(SQLITETCLDECLSH)
2110
2111sqlite_tcl.h:
2112	type "$(TCLINCDIR)\tcl.h" | $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact tclDecls.h sqlite_tclDecls.h \
2113		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "typedef (.*?)\(Tcl_" "typedef \1 (SQLITE_TCLAPI Tcl_" \
2114		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "void (*freeProc)" "void (SQLITE_TCLAPI *freeProc)" \
2115		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*findProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *findProc)" \
2116		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*createProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *createProc)" >> $(SQLITETCLH)
2117!ENDIF
2118
2119testfixture.exe:	$(TESTFIXTURE_SRC) $(SQLITE3H) $(LIBRESOBJS) $(HDR) $(SQLITE_TCL_DEP)
2120	$(LTLINK) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
2121		-DBUILD_sqlite -I$(TCLINCDIR) \
2122		$(TESTFIXTURE_SRC) \
2123		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
2124
2125extensiontest:	testfixture.exe testloadext.dll
2126	@set PATH=$(LIBTCLPATH);$(PATH)
2127	.\testfixture.exe $(TOP)\test\loadext.test $(TESTOPTS)
2128
2129fulltest:	$(TESTPROGS) fuzztest
2130	@set PATH=$(LIBTCLPATH);$(PATH)
2131	.\testfixture.exe $(TOP)\test\all.test $(TESTOPTS)
2132
2133soaktest:	$(TESTPROGS)
2134	@set PATH=$(LIBTCLPATH);$(PATH)
2135	.\testfixture.exe $(TOP)\test\all.test -soak=1 $(TESTOPTS)
2136
2137fulltestonly:	$(TESTPROGS) fuzztest
2138	@set PATH=$(LIBTCLPATH);$(PATH)
2139	.\testfixture.exe $(TOP)\test\full.test
2140
2141queryplantest:	testfixture.exe shell
2142	@set PATH=$(LIBTCLPATH);$(PATH)
2143	.\testfixture.exe $(TOP)\test\permutations.test queryplanner $(TESTOPTS)
2144
2145fuzztest:	fuzzcheck.exe
2146	.\fuzzcheck.exe $(FUZZDATA)
2147
2148fastfuzztest:	fuzzcheck.exe
2149	.\fuzzcheck.exe --limit-mem 100M $(FUZZDATA)
2150
2151# Minimal testing that runs in less than 3 minutes (on a fast machine)
2152#
2153quicktest:	testfixture.exe sourcetest
2154	@set PATH=$(LIBTCLPATH);$(PATH)
2155	.\testfixture.exe $(TOP)\test\extraquick.test $(TESTOPTS)
2156
2157# This is the common case.  Run many tests that do not take too long,
2158# including fuzzcheck, sqlite3_analyzer, and sqldiff tests.
2159#
2160test:	$(TESTPROGS) sourcetest fastfuzztest
2161	@set PATH=$(LIBTCLPATH);$(PATH)
2162	.\testfixture.exe $(TOP)\test\veryquick.test $(TESTOPTS)
2163
2164smoketest:	$(TESTPROGS)
2165	@set PATH=$(LIBTCLPATH);$(PATH)
2166	.\testfixture.exe $(TOP)\test\main.test $(TESTOPTS)
2167
2168sqlite3_analyzer.c:	$(SQLITE3C) $(SQLITE3H) $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl $(SQLITE_TCL_DEP)
2169	echo #define TCLSH 2 > $@
2170	echo #define SQLITE_ENABLE_DBSTAT_VTAB 1 >> $@
2171	copy $@ + $(SQLITE3C) + $(TOP)\src\tclsqlite.c $@
2172	echo static const char *tclsh_main_loop(void){ >> $@
2173	echo static const char *zMainloop = >> $@
2174	$(TCLSH_CMD) $(TOP)\tool\tostr.tcl $(TOP)\tool\spaceanal.tcl >> $@
2175	echo ; return zMainloop; } >> $@
2176
2177sqlite3_analyzer.exe:	sqlite3_analyzer.c $(LIBRESOBJS)
2178	$(LTLINK) $(NO_WARN) -DBUILD_sqlite -I$(TCLINCDIR) sqlite3_analyzer.c \
2179		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
2180
2181dbdump.exe:	$(TOP)\ext\misc\dbdump.c $(SQLITE3C) $(SQLITE3H)
2182	$(LTLINK) $(NO_WARN) -DDBDUMP_STANDALONE $(TOP)\ext\misc\dbdump.c $(SQLITE3C) \
2183		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS)
2184
2185testloadext.lo:	$(TOP)\src\test_loadext.c
2186	$(LTCOMPILE) $(NO_WARN) -c $(TOP)\src\test_loadext.c
2187
2188testloadext.dll:	testloadext.lo
2189	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ testloadext.lo
2190
2191showdb.exe:	$(TOP)\tool\showdb.c $(SQLITE3C) $(SQLITE3H)
2192	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2193		$(TOP)\tool\showdb.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2194
2195showstat4.exe:	$(TOP)\tool\showstat4.c $(SQLITE3C) $(SQLITE3H)
2196	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2197		$(TOP)\tool\showstat4.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2198
2199showjournal.exe:	$(TOP)\tool\showjournal.c $(SQLITE3C) $(SQLITE3H)
2200	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2201		$(TOP)\tool\showjournal.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2202
2203showwal.exe:	$(TOP)\tool\showwal.c $(SQLITE3C) $(SQLITE3H)
2204	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2205		$(TOP)\tool\showwal.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2206
2207changeset.exe:	$(TOP)\ext\session\changeset.c $(SQLITE3C) $(SQLITE3H)
2208	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2209		-DSQLITE_ENABLE_SESSION=1 -DSQLITE_ENABLE_PREUPDATE_HOOK=1 \
2210		$(TOP)\ext\session\changeset.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2211
2212fts3view.exe:	$(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C) $(SQLITE3H)
2213	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2214		$(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2215
2216rollback-test.exe:	$(TOP)\tool\rollback-test.c $(SQLITE3C) $(SQLITE3H)
2217	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2218		$(TOP)\tool\rollback-test.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2219
2220LogEst.exe:	$(TOP)\tool\logest.c $(SQLITE3H)
2221	$(LTLINK) $(NO_WARN) $(TOP)\tool\LogEst.c /link $(LDFLAGS) $(LTLINKOPTS)
2222
2223wordcount.exe:	$(TOP)\test\wordcount.c $(SQLITE3C) $(SQLITE3H)
2224	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2225		$(TOP)\test\wordcount.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2226
2227speedtest1.exe:	$(TOP)\test\speedtest1.c $(SQLITE3C) $(SQLITE3H)
2228	$(LTLINK) $(NO_WARN) $(ST_COMPILE_OPTS) -DSQLITE_OMIT_LOAD_EXTENSION \
2229		$(TOP)\test\speedtest1.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2230
2231kvtest.exe:	$(TOP)\test\kvtest.c $(SQLITE3C) $(SQLITE3H)
2232	$(LTLINK) $(NO_WARN) $(KV_COMPILE_OPTS) \
2233		$(TOP)\test\kvtest.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2234
2235dbselftest.exe:	$(TOP)\test\dbselftest.c $(SQLITE3C) $(SQLITE3H)
2236	$(LTLINK) $(NO_WARN) $(DBSELFTEST_COMPILE_OPTS) $(TOP)\test\dbselftest.c $(SQLITE3C)
2237
2238rbu.exe:	$(TOP)\ext\rbu\rbu.c $(TOP)\ext\rbu\sqlite3rbu.c $(SQLITE3C) $(SQLITE3H)
2239	$(LTLINK) $(NO_WARN) -DSQLITE_ENABLE_RBU \
2240		$(TOP)\ext\rbu\rbu.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2241
2242moreclean:	clean
2243	del /Q $(SQLITE3C) $(SQLITE3H) 2>NUL
2244# <</mark>>
2245
2246clean:
2247	del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
2248	del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
2249	del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
2250# <<mark>>
2251	del /Q sqlite3.c sqlite3.h 2>NUL
2252	del /Q opcodes.c opcodes.h 2>NUL
2253	del /Q lemon.* lempar.c parse.* 2>NUL
2254	del /Q mkkeywordhash.* keywordhash.h 2>NUL
2255	del /Q notasharedlib.* 2>NUL
2256	-rmdir /Q/S .deps 2>NUL
2257	-rmdir /Q/S .libs 2>NUL
2258	-rmdir /Q/S tsrc 2>NUL
2259	del /Q .target_source 2>NUL
2260	del /Q tclsqlite3.exe $(SQLITETCLH) $(SQLITETCLDECLSH) 2>NUL
2261	del /Q testloadext.dll 2>NUL
2262	del /Q testfixture.exe test.db 2>NUL
2263	del /Q LogEst.exe fts3view.exe rollback-test.exe showdb.exe dbdump.exe 2>NUL
2264	del /Q changeset.exe 2>NUL
2265	del /Q showjournal.exe showstat4.exe showwal.exe speedtest1.exe 2>NUL
2266	del /Q mptester.exe wordcount.exe rbu.exe srcck1.exe 2>NUL
2267	del /Q sqlite3.c sqlite3-*.c 2>NUL
2268	del /Q sqlite3rc.h 2>NUL
2269	del /Q shell.c sqlite3ext.h sqlite3session.h 2>NUL
2270	del /Q sqlite3_analyzer.exe sqlite3_analyzer.c 2>NUL
2271	del /Q sqlite-*-output.vsix 2>NUL
2272	del /Q fuzzershell.exe fuzzcheck.exe sqldiff.exe dbhash.exe 2>NUL
2273	del /Q fts5.* fts5parse.* 2>NUL
2274# <</mark>>
2275