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