xref: /sqlite-3.40.0/Makefile.msc (revision 4e8ad3bc)
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 = 1
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
748RCC = $(RCC) -DSQLITE_DEBUG=1
749!IF $(DYNAMIC_SHELL)==0
750TCC = $(TCC) -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_SELECTTRACE
751RCC = $(RCC) -DSQLITE_ENABLE_WHERETRACE -DSQLITE_ENABLE_SELECTTRACE
752!ENDIF
753!ENDIF
754
755!IF $(DEBUG)>4 || $(OSTRACE)!=0
756TCC = $(TCC) -DSQLITE_FORCE_OS_TRACE=1 -DSQLITE_DEBUG_OS_TRACE=1
757RCC = $(RCC) -DSQLITE_FORCE_OS_TRACE=1 -DSQLITE_DEBUG_OS_TRACE=1
758!ENDIF
759
760!IF $(DEBUG)>5
761TCC = $(TCC) -DSQLITE_ENABLE_IOTRACE=1
762RCC = $(RCC) -DSQLITE_ENABLE_IOTRACE=1
763!ENDIF
764
765# Prevent warnings about "insecure" MSVC runtime library functions
766# being used.
767#
768TCC = $(TCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
769BCC = $(BCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
770RCC = $(RCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
771
772# Prevent warnings about "deprecated" POSIX functions being used.
773#
774TCC = $(TCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
775BCC = $(BCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
776RCC = $(RCC) -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
777
778# Use the SQLite debugging heap subsystem?
779#
780!IF $(MEMDEBUG)!=0
781TCC = $(TCC) -DSQLITE_MEMDEBUG=1
782RCC = $(RCC) -DSQLITE_MEMDEBUG=1
783
784# Use native Win32 heap subsystem instead of malloc/free?
785#
786!ELSEIF $(WIN32HEAP)!=0
787TCC = $(TCC) -DSQLITE_WIN32_MALLOC=1
788RCC = $(RCC) -DSQLITE_WIN32_MALLOC=1
789
790# Validate the heap on every call into the native Win32 heap subsystem?
791#
792!IF $(DEBUG)>3
793TCC = $(TCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1
794RCC = $(RCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1
795!ENDIF
796!ENDIF
797
798# <<mark>>
799# The locations of the Tcl header and library files.  Also, the library that
800# non-stubs enabled programs using Tcl must link against.  These variables
801# (TCLINCDIR, TCLLIBDIR, and LIBTCL) may be overridden via the environment
802# prior to running nmake in order to match the actual installed location and
803# version on this machine.
804#
805!IFNDEF TCLINCDIR
806TCLINCDIR = c:\tcl\include
807!ENDIF
808
809!IFNDEF TCLLIBDIR
810TCLLIBDIR = c:\tcl\lib
811!ENDIF
812
813!IFNDEF LIBTCL
814LIBTCL = tcl86.lib
815!ENDIF
816
817!IFNDEF LIBTCLSTUB
818LIBTCLSTUB = tclstub86.lib
819!ENDIF
820
821!IFNDEF LIBTCLPATH
822LIBTCLPATH = c:\tcl\bin
823!ENDIF
824
825# The locations of the ICU header and library files.  These variables
826# (ICUINCDIR, ICULIBDIR, and LIBICU) may be overridden via the environment
827# prior to running nmake in order to match the actual installed location on
828# this machine.
829#
830!IFNDEF ICUINCDIR
831ICUINCDIR = c:\icu\include
832!ENDIF
833
834!IFNDEF ICULIBDIR
835ICULIBDIR = c:\icu\lib
836!ENDIF
837
838!IFNDEF LIBICU
839LIBICU = icuuc.lib icuin.lib
840!ENDIF
841
842# This is the command to use for tclsh - normally just "tclsh", but we may
843# know the specific version we want to use.  This variable (TCLSH_CMD) may be
844# overridden via the environment prior to running nmake in order to select a
845# specific Tcl shell to use.
846#
847!IFNDEF TCLSH_CMD
848TCLSH_CMD = tclsh
849!ENDIF
850# <</mark>>
851
852# Compiler options needed for programs that use the readline() library.
853#
854!IFNDEF READLINE_FLAGS
855READLINE_FLAGS = -DHAVE_READLINE=0
856!ENDIF
857
858# The library that programs using readline() must link against.
859#
860!IFNDEF LIBREADLINE
861LIBREADLINE =
862!ENDIF
863
864# Should the database engine be compiled threadsafe
865#
866TCC = $(TCC) -DSQLITE_THREADSAFE=1
867RCC = $(RCC) -DSQLITE_THREADSAFE=1
868
869# Do threads override each others locks by default (1), or do we test (-1)
870#
871TCC = $(TCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1
872RCC = $(RCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1
873
874# Any target libraries which libsqlite must be linked against
875#
876!IFNDEF TLIBS
877TLIBS =
878!ENDIF
879
880# Flags controlling use of the in memory btree implementation
881#
882# SQLITE_TEMP_STORE is 0 to force temporary tables to be in a file, 1 to
883# default to file, 2 to default to memory, and 3 to force temporary
884# tables to always be in memory.
885#
886TCC = $(TCC) -DSQLITE_TEMP_STORE=1
887RCC = $(RCC) -DSQLITE_TEMP_STORE=1
888
889# Enable/disable loadable extensions, and other optional features
890# based on configuration. (-DSQLITE_OMIT*, -DSQLITE_ENABLE*).
891# The same set of OMIT and ENABLE flags should be passed to the
892# LEMON parser generator and the mkkeywordhash tool as well.
893
894# These are the required SQLite compilation options used when compiling for
895# the Windows platform.
896#
897REQ_FEATURE_FLAGS = $(REQ_FEATURE_FLAGS) -DSQLITE_MAX_TRIGGER_DEPTH=100
898
899# If we are linking to the RPCRT4 library, enable features that need it.
900#
901!IF $(USE_RPCRT4_LIB)!=0
902REQ_FEATURE_FLAGS = $(REQ_FEATURE_FLAGS) -DSQLITE_WIN32_USE_UUID=1
903!ENDIF
904
905# Add the required and optional SQLite compilation options into the command
906# lines used to invoke the MSVC code and resource compilers.
907#
908TCC = $(TCC) $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS)
909RCC = $(RCC) $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS)
910
911# Add in any optional parameters specified on the commane line, e.g.
912# nmake /f Makefile.msc all "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1"
913#
914TCC = $(TCC) $(OPTS)
915RCC = $(RCC) $(OPTS)
916
917# If compiling for debugging, add some defines.
918#
919!IF $(DEBUG)>1
920TCC = $(TCC) -D_DEBUG
921BCC = $(BCC) -D_DEBUG
922RCC = $(RCC) -D_DEBUG
923!ENDIF
924
925# If optimizations are enabled or disabled (either implicitly or
926# explicitly), add the necessary flags.
927#
928!IF $(DEBUG)>1 || $(OPTIMIZATIONS)==0
929TCC = $(TCC) -Od
930BCC = $(BCC) -Od
931!IF $(USE_RUNTIME_CHECKS)!=0
932TCC = $(TCC) -RTC1
933BCC = $(BCC) -RTC1
934!ENDIF
935!ELSEIF $(OPTIMIZATIONS)>=3
936TCC = $(TCC) -Ox
937BCC = $(BCC) -Ox
938!ELSEIF $(OPTIMIZATIONS)==2
939TCC = $(TCC) -O2
940BCC = $(BCC) -O2
941!ELSEIF $(OPTIMIZATIONS)==1
942TCC = $(TCC) -O1
943BCC = $(BCC) -O1
944!ENDIF
945
946# If symbols are enabled (or compiling for debugging), enable PDBs.
947#
948!IF $(DEBUG)>1 || $(SYMBOLS)!=0
949TCC = $(TCC) -Zi
950BCC = $(BCC) -Zi
951!ENDIF
952
953# <<mark>>
954# If ICU support is enabled, add the compiler options for it.
955#
956!IF $(USE_ICU)!=0
957TCC = $(TCC) -DSQLITE_ENABLE_ICU=1
958RCC = $(RCC) -DSQLITE_ENABLE_ICU=1
959TCC = $(TCC) -I$(TOP)\ext\icu
960RCC = $(RCC) -I$(TOP)\ext\icu
961TCC = $(TCC) -I$(ICUINCDIR)
962RCC = $(RCC) -I$(ICUINCDIR)
963!ENDIF
964# <</mark>>
965
966# Command line prefixes for compiling code, compiling resources,
967# linking, etc.
968#
969LTCOMPILE = $(TCC) -Fo$@
970LTRCOMPILE = $(RCC) -r
971LTLIB = lib.exe
972LTLINK = $(TCC) -Fe$@
973
974# If requested, link to the RPCRT4 library.
975#
976!IF $(USE_RPCRT4_LIB)!=0
977LTLINK = $(LTLINK) rpcrt4.lib
978!ENDIF
979
980# If a platform was set, force the linker to target that.
981# Note that the vcvars*.bat family of batch files typically
982# set this for you.  Otherwise, the linker will attempt
983# to deduce the binary type based on the object files.
984!IFDEF PLATFORM
985LTLINKOPTS = /NOLOGO /MACHINE:$(PLATFORM)
986LTLIBOPTS = /NOLOGO /MACHINE:$(PLATFORM)
987!ELSE
988LTLINKOPTS = /NOLOGO
989LTLIBOPTS = /NOLOGO
990!ENDIF
991
992# When compiling for use in the WinRT environment, the following
993# linker option must be used to mark the executable as runnable
994# only in the context of an application container.
995#
996!IF $(FOR_WINRT)!=0
997LTLINKOPTS = $(LTLINKOPTS) /APPCONTAINER
998!IF "$(VISUALSTUDIOVERSION)"=="12.0" || "$(VISUALSTUDIOVERSION)"=="14.0"
999!IFNDEF STORELIBPATH
1000!IF "$(PLATFORM)"=="x86"
1001STORELIBPATH = $(CRTLIBPATH)\store
1002!ELSEIF "$(PLATFORM)"=="x64"
1003STORELIBPATH = $(CRTLIBPATH)\store\amd64
1004!ELSEIF "$(PLATFORM)"=="ARM"
1005STORELIBPATH = $(CRTLIBPATH)\store\arm
1006!ELSE
1007STORELIBPATH = $(CRTLIBPATH)\store
1008!ENDIF
1009!ENDIF
1010STORELIBPATH = $(STORELIBPATH:\\=\)
1011LTLINKOPTS = $(LTLINKOPTS) "/LIBPATH:$(STORELIBPATH)"
1012!ENDIF
1013!ENDIF
1014
1015# When compiling for Windows Phone 8.1, an extra library path is
1016# required.
1017#
1018!IF $(USE_WP81_OPTS)!=0
1019!IFNDEF WP81LIBPATH
1020!IF "$(PLATFORM)"=="x86"
1021WP81LIBPATH = $(PROGRAMFILES_X86)\Windows Phone Kits\8.1\lib\x86
1022!ELSEIF "$(PLATFORM)"=="ARM"
1023WP81LIBPATH = $(PROGRAMFILES_X86)\Windows Phone Kits\8.1\lib\ARM
1024!ELSE
1025WP81LIBPATH = $(PROGRAMFILES_X86)\Windows Phone Kits\8.1\lib\x86
1026!ENDIF
1027!ENDIF
1028!ENDIF
1029
1030# When compiling for Windows Phone 8.1, some extra linker options
1031# are also required.
1032#
1033!IF $(USE_WP81_OPTS)!=0
1034!IFDEF WP81LIBPATH
1035LTLINKOPTS = $(LTLINKOPTS) "/LIBPATH:$(WP81LIBPATH)"
1036!ENDIF
1037LTLINKOPTS = $(LTLINKOPTS) /DYNAMICBASE
1038LTLINKOPTS = $(LTLINKOPTS) WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib
1039LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:ole32.lib
1040!ENDIF
1041
1042# When compiling for UWP or the Windows 10 platform, some extra linker
1043# options are also required.
1044#
1045!IF $(FOR_UWP)!=0 || $(FOR_WIN10)!=0
1046LTLINKOPTS = $(LTLINKOPTS) /DYNAMICBASE /NODEFAULTLIB:kernel32.lib
1047LTLINKOPTS = $(LTLINKOPTS) mincore.lib
1048!IFDEF PSDKLIBPATH
1049LTLINKOPTS = $(LTLINKOPTS) "/LIBPATH:$(PSDKLIBPATH)"
1050!ENDIF
1051!ENDIF
1052
1053!IF $(FOR_WIN10)!=0
1054LTLINKOPTS = $(LTLINKOPTS) /guard:cf "/LIBPATH:$(UCRTLIBPATH)"
1055!IF $(DEBUG)>1
1056LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:libucrtd.lib /DEFAULTLIB:ucrtd.lib
1057!ELSE
1058LTLINKOPTS = $(LTLINKOPTS) /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib
1059!ENDIF
1060!ENDIF
1061
1062# If either debugging or symbols are enabled, enable PDBs.
1063#
1064!IF $(DEBUG)>1 || $(SYMBOLS)!=0
1065LDFLAGS = /DEBUG $(LDOPTS)
1066!ELSE
1067LDFLAGS = $(LDOPTS)
1068!ENDIF
1069
1070# <<mark>>
1071# Start with the Tcl related linker options.
1072#
1073!IF $(NO_TCL)==0
1074LTLIBPATHS = /LIBPATH:$(TCLLIBDIR)
1075LTLIBS = $(LIBTCL)
1076!ENDIF
1077
1078# If ICU support is enabled, add the linker options for it.
1079#
1080!IF $(USE_ICU)!=0
1081LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
1082LTLIBS = $(LTLIBS) $(LIBICU)
1083!ENDIF
1084# <</mark>>
1085
1086# You should not have to change anything below this line
1087###############################################################################
1088
1089# <<mark>>
1090# Object files for the SQLite library (non-amalgamation).
1091#
1092LIBOBJS0 = vdbe.lo parse.lo alter.lo analyze.lo attach.lo auth.lo \
1093         backup.lo bitvec.lo btmutex.lo btree.lo build.lo \
1094         callback.lo complete.lo ctime.lo \
1095         date.lo dbpage.lo dbstat.lo delete.lo \
1096         expr.lo fault.lo fkey.lo \
1097         fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo \
1098         fts3_porter.lo fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo \
1099         fts3_tokenize_vtab.lo fts3_unicode.lo fts3_unicode2.lo fts3_write.lo \
1100         fts5.lo \
1101         func.lo global.lo hash.lo \
1102         icu.lo insert.lo legacy.lo loadext.lo \
1103         main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \
1104         memjournal.lo \
1105         mutex.lo mutex_noop.lo mutex_unix.lo mutex_w32.lo \
1106         notify.lo opcodes.lo os.lo os_unix.lo os_win.lo \
1107         pager.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo \
1108         random.lo resolve.lo rowset.lo rtree.lo \
1109         sqlite3session.lo select.lo sqlite3rbu.lo status.lo \
1110         table.lo threads.lo tokenize.lo treeview.lo trigger.lo \
1111         update.lo util.lo vacuum.lo \
1112         vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \
1113         vdbetrace.lo wal.lo walker.lo where.lo wherecode.lo whereexpr.lo \
1114         utf.lo vtab.lo
1115# <</mark>>
1116
1117# Object files for the amalgamation.
1118#
1119LIBOBJS1 = sqlite3.lo
1120
1121# Determine the real value of LIBOBJ based on the 'configure' script
1122#
1123# <<mark>>
1124!IF $(USE_AMALGAMATION)==0
1125LIBOBJ = $(LIBOBJS0)
1126!ELSE
1127# <</mark>>
1128LIBOBJ = $(LIBOBJS1)
1129# <<mark>>
1130!ENDIF
1131# <</mark>>
1132
1133# Determine if embedded resource compilation and usage are enabled.
1134#
1135!IF $(USE_RC)!=0
1136LIBRESOBJS = sqlite3res.lo
1137!ELSE
1138LIBRESOBJS =
1139!ENDIF
1140
1141# <<mark>>
1142# Core source code files, part 1.
1143#
1144SRC00 = \
1145  $(TOP)\src\alter.c \
1146  $(TOP)\src\analyze.c \
1147  $(TOP)\src\attach.c \
1148  $(TOP)\src\auth.c \
1149  $(TOP)\src\backup.c \
1150  $(TOP)\src\bitvec.c \
1151  $(TOP)\src\btmutex.c \
1152  $(TOP)\src\btree.c \
1153  $(TOP)\src\build.c \
1154  $(TOP)\src\callback.c \
1155  $(TOP)\src\complete.c \
1156  $(TOP)\src\ctime.c \
1157  $(TOP)\src\date.c \
1158  $(TOP)\src\dbpage.c \
1159  $(TOP)\src\dbstat.c \
1160  $(TOP)\src\delete.c \
1161  $(TOP)\src\expr.c \
1162  $(TOP)\src\fault.c \
1163  $(TOP)\src\fkey.c \
1164  $(TOP)\src\func.c \
1165  $(TOP)\src\global.c \
1166  $(TOP)\src\hash.c \
1167  $(TOP)\src\insert.c \
1168  $(TOP)\src\legacy.c \
1169  $(TOP)\src\loadext.c \
1170  $(TOP)\src\main.c \
1171  $(TOP)\src\malloc.c \
1172  $(TOP)\src\mem0.c \
1173  $(TOP)\src\mem1.c \
1174  $(TOP)\src\mem2.c \
1175  $(TOP)\src\mem3.c \
1176  $(TOP)\src\mem5.c \
1177  $(TOP)\src\memjournal.c \
1178  $(TOP)\src\mutex.c \
1179  $(TOP)\src\mutex_noop.c \
1180  $(TOP)\src\mutex_unix.c \
1181  $(TOP)\src\mutex_w32.c \
1182  $(TOP)\src\notify.c \
1183  $(TOP)\src\os.c \
1184  $(TOP)\src\os_unix.c \
1185  $(TOP)\src\os_win.c
1186
1187# Core source code files, part 2.
1188#
1189SRC01 = \
1190  $(TOP)\src\pager.c \
1191  $(TOP)\src\pcache.c \
1192  $(TOP)\src\pcache1.c \
1193  $(TOP)\src\pragma.c \
1194  $(TOP)\src\prepare.c \
1195  $(TOP)\src\printf.c \
1196  $(TOP)\src\random.c \
1197  $(TOP)\src\resolve.c \
1198  $(TOP)\src\rowset.c \
1199  $(TOP)\src\select.c \
1200  $(TOP)\src\status.c \
1201  $(TOP)\src\table.c \
1202  $(TOP)\src\threads.c \
1203  $(TOP)\src\tclsqlite.c \
1204  $(TOP)\src\tokenize.c \
1205  $(TOP)\src\treeview.c \
1206  $(TOP)\src\trigger.c \
1207  $(TOP)\src\utf.c \
1208  $(TOP)\src\update.c \
1209  $(TOP)\src\util.c \
1210  $(TOP)\src\vacuum.c \
1211  $(TOP)\src\vdbe.c \
1212  $(TOP)\src\vdbeapi.c \
1213  $(TOP)\src\vdbeaux.c \
1214  $(TOP)\src\vdbeblob.c \
1215  $(TOP)\src\vdbemem.c \
1216  $(TOP)\src\vdbesort.c \
1217  $(TOP)\src\vdbetrace.c \
1218  $(TOP)\src\vtab.c \
1219  $(TOP)\src\wal.c \
1220  $(TOP)\src\walker.c \
1221  $(TOP)\src\where.c \
1222  $(TOP)\src\wherecode.c \
1223  $(TOP)\src\whereexpr.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  $(TOP)\ext\misc\stmt.c
1296
1297# Extension header files, part 1.
1298#
1299SRC08 = \
1300  $(TOP)\ext\fts1\fts1.h \
1301  $(TOP)\ext\fts1\fts1_hash.h \
1302  $(TOP)\ext\fts1\fts1_tokenizer.h \
1303  $(TOP)\ext\fts2\fts2.h \
1304  $(TOP)\ext\fts2\fts2_hash.h \
1305  $(TOP)\ext\fts2\fts2_tokenizer.h
1306
1307# Extension header files, part 2.
1308#
1309SRC09 = \
1310  $(TOP)\ext\fts3\fts3.h \
1311  $(TOP)\ext\fts3\fts3Int.h \
1312  $(TOP)\ext\fts3\fts3_hash.h \
1313  $(TOP)\ext\fts3\fts3_tokenizer.h \
1314  $(TOP)\ext\icu\sqliteicu.h \
1315  $(TOP)\ext\rtree\rtree.h \
1316  $(TOP)\ext\rbu\sqlite3rbu.h \
1317  $(TOP)\ext\session\sqlite3session.h
1318
1319# Generated source code files
1320#
1321SRC10 = \
1322  opcodes.c \
1323  parse.c
1324
1325# Generated header files
1326#
1327SRC11 = \
1328  keywordhash.h \
1329  opcodes.h \
1330  parse.h \
1331  shell.c \
1332  $(SQLITE3H)
1333
1334# Generated Tcl header files
1335#
1336!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1337SRC12 = \
1338  $(SQLITETCLH) \
1339  $(SQLITETCLDECLSH)
1340!ELSE
1341SRC12 =
1342!ENDIF
1343
1344# All source code files.
1345#
1346SRC = $(SRC00) $(SRC01) $(SRC03) $(SRC04) $(SRC05) $(SRC06) $(SRC07) $(SRC08) $(SRC09) $(SRC10) $(SRC11)
1347
1348# Source code to the test files.
1349#
1350TESTSRC = \
1351  $(TOP)\src\test1.c \
1352  $(TOP)\src\test2.c \
1353  $(TOP)\src\test3.c \
1354  $(TOP)\src\test4.c \
1355  $(TOP)\src\test5.c \
1356  $(TOP)\src\test6.c \
1357  $(TOP)\src\test7.c \
1358  $(TOP)\src\test8.c \
1359  $(TOP)\src\test9.c \
1360  $(TOP)\src\test_autoext.c \
1361  $(TOP)\src\test_async.c \
1362  $(TOP)\src\test_backup.c \
1363  $(TOP)\src\test_bestindex.c \
1364  $(TOP)\src\test_blob.c \
1365  $(TOP)\src\test_btree.c \
1366  $(TOP)\src\test_config.c \
1367  $(TOP)\src\test_delete.c \
1368  $(TOP)\src\test_demovfs.c \
1369  $(TOP)\src\test_devsym.c \
1370  $(TOP)\src\test_fs.c \
1371  $(TOP)\src\test_func.c \
1372  $(TOP)\src\test_hexio.c \
1373  $(TOP)\src\test_init.c \
1374  $(TOP)\src\test_intarray.c \
1375  $(TOP)\src\test_journal.c \
1376  $(TOP)\src\test_malloc.c \
1377  $(TOP)\src\test_md5.c \
1378  $(TOP)\src\test_multiplex.c \
1379  $(TOP)\src\test_mutex.c \
1380  $(TOP)\src\test_onefile.c \
1381  $(TOP)\src\test_osinst.c \
1382  $(TOP)\src\test_pcache.c \
1383  $(TOP)\src\test_quota.c \
1384  $(TOP)\src\test_rtree.c \
1385  $(TOP)\src\test_schema.c \
1386  $(TOP)\src\test_server.c \
1387  $(TOP)\src\test_superlock.c \
1388  $(TOP)\src\test_syscall.c \
1389  $(TOP)\src\test_tclsh.c \
1390  $(TOP)\src\test_tclvar.c \
1391  $(TOP)\src\test_thread.c \
1392  $(TOP)\src\test_vfs.c \
1393  $(TOP)\src\test_windirent.c \
1394  $(TOP)\src\test_wsd.c \
1395  $(TOP)\ext\fts3\fts3_term.c \
1396  $(TOP)\ext\fts3\fts3_test.c \
1397  $(TOP)\ext\rbu\test_rbu.c \
1398  $(TOP)\ext\session\test_session.c
1399
1400# Statically linked extensions.
1401#
1402TESTEXT = \
1403  $(TOP)\ext\misc\amatch.c \
1404  $(TOP)\ext\misc\carray.c \
1405  $(TOP)\ext\misc\closure.c \
1406  $(TOP)\ext\misc\csv.c \
1407  $(TOP)\ext\misc\eval.c \
1408  $(TOP)\ext\misc\fileio.c \
1409  $(TOP)\ext\misc\fuzzer.c \
1410  $(TOP)\ext\fts5\fts5_tcl.c \
1411  $(TOP)\ext\fts5\fts5_test_mi.c \
1412  $(TOP)\ext\fts5\fts5_test_tok.c \
1413  $(TOP)\ext\misc\ieee754.c \
1414  $(TOP)\ext\misc\mmapwarm.c \
1415  $(TOP)\ext\misc\nextchar.c \
1416  $(TOP)\ext\misc\percentile.c \
1417  $(TOP)\ext\misc\regexp.c \
1418  $(TOP)\ext\misc\remember.c \
1419  $(TOP)\ext\misc\series.c \
1420  $(TOP)\ext\misc\spellfix.c \
1421  $(TOP)\ext\misc\totype.c \
1422  $(TOP)\ext\misc\unionvtab.c \
1423  $(TOP)\ext\misc\wholenumber.c
1424
1425# Source code to the library files needed by the test fixture
1426# (non-amalgamation)
1427#
1428TESTSRC2 = \
1429  $(SRC00) \
1430  $(SRC01) \
1431  $(SRC06) \
1432  $(SRC07) \
1433  $(SRC10) \
1434  $(TOP)\ext\async\sqlite3async.c
1435
1436# Header files used by all library source files.
1437#
1438HDR = \
1439   $(TOP)\src\btree.h \
1440   $(TOP)\src\btreeInt.h \
1441   $(TOP)\src\hash.h \
1442   $(TOP)\src\hwtime.h \
1443   keywordhash.h \
1444   $(TOP)\src\msvc.h \
1445   $(TOP)\src\mutex.h \
1446   opcodes.h \
1447   $(TOP)\src\os.h \
1448   $(TOP)\src\os_common.h \
1449   $(TOP)\src\os_setup.h \
1450   $(TOP)\src\os_win.h \
1451   $(TOP)\src\pager.h \
1452   $(TOP)\src\pcache.h \
1453   parse.h \
1454   $(TOP)\src\pragma.h \
1455   $(SQLITE3H) \
1456   sqlite3ext.h \
1457   $(TOP)\src\sqliteInt.h \
1458   $(TOP)\src\sqliteLimit.h \
1459   $(TOP)\src\vdbe.h \
1460   $(TOP)\src\vdbeInt.h \
1461   $(TOP)\src\vxworks.h \
1462   $(TOP)\src\whereInt.h
1463
1464# Header files used by extensions
1465#
1466EXTHDR = $(EXTHDR) \
1467  $(TOP)\ext\fts1\fts1.h \
1468  $(TOP)\ext\fts1\fts1_hash.h \
1469  $(TOP)\ext\fts1\fts1_tokenizer.h
1470EXTHDR = $(EXTHDR) \
1471  $(TOP)\ext\fts2\fts2.h \
1472  $(TOP)\ext\fts2\fts2_hash.h \
1473  $(TOP)\ext\fts2\fts2_tokenizer.h
1474EXTHDR = $(EXTHDR) \
1475  $(TOP)\ext\fts3\fts3.h \
1476  $(TOP)\ext\fts3\fts3Int.h \
1477  $(TOP)\ext\fts3\fts3_hash.h \
1478  $(TOP)\ext\fts3\fts3_tokenizer.h
1479EXTHDR = $(EXTHDR) \
1480  $(TOP)\ext\rtree\rtree.h
1481EXTHDR = $(EXTHDR) \
1482  $(TOP)\ext\icu\sqliteicu.h
1483EXTHDR = $(EXTHDR) \
1484  $(TOP)\ext\rtree\sqlite3rtree.h
1485EXTHDR = $(EXTHDR) \
1486  $(TOP)\ext\session\sqlite3session.h
1487
1488# executables needed for testing
1489#
1490TESTPROGS = \
1491  testfixture.exe \
1492  $(SQLITE3EXE) \
1493  sqlite3_analyzer.exe \
1494  sqlite3_checker.exe \
1495  sqldiff.exe \
1496  dbhash.exe
1497
1498# Databases containing fuzzer test cases
1499#
1500FUZZDATA = \
1501  $(TOP)\test\fuzzdata1.db \
1502  $(TOP)\test\fuzzdata2.db \
1503  $(TOP)\test\fuzzdata3.db \
1504  $(TOP)\test\fuzzdata4.db \
1505  $(TOP)\test\fuzzdata5.db
1506# <</mark>>
1507
1508# Additional compiler options for the shell.  These are only effective
1509# when the shell is not being dynamically linked.
1510#
1511!IF $(DYNAMIC_SHELL)==0 && $(FOR_WIN10)==0
1512SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_STMTVTAB
1513SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_DBSTAT_VTAB
1514!ENDIF
1515
1516# <<mark>>
1517# Extra compiler options for various test tools.
1518#
1519MPTESTER_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5
1520FUZZERSHELL_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1
1521FUZZCHECK_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 -DSQLITE_OSS_FUZZ -DSQLITE_MAX_MEMORY=50000000
1522FUZZCHECK_SRC = $(TOP)\test\fuzzcheck.c $(TOP)\test\ossfuzz.c
1523OSSSHELL_SRC = $(TOP)\test\ossshell.c $(TOP)\test\ossfuzz.c
1524DBFUZZ_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION
1525KV_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_DIRECT_OVERFLOW_READ
1526DBSELFTEST_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS5
1527ST_COMPILE_OPTS = -DSQLITE_THREADSAFE=0
1528
1529# Standard options to testfixture.
1530#
1531TESTOPTS = --verbose=file --output=test-out.txt
1532
1533# Extra targets for the "all" target that require Tcl.
1534#
1535!IF $(NO_TCL)==0
1536ALL_TCL_TARGETS = libtclsqlite3.lib
1537!ELSE
1538ALL_TCL_TARGETS =
1539!ENDIF
1540# <</mark>>
1541
1542# This is the default Makefile target.  The objects listed here
1543# are what get build when you type just "make" with no arguments.
1544#
1545all:	dll libsqlite3.lib shell $(ALL_TCL_TARGETS)
1546
1547# Dynamic link library section.
1548#
1549dll:	$(SQLITE3DLL)
1550
1551# Shell executable.
1552#
1553shell:	$(SQLITE3EXE)
1554
1555# <<mark>>
1556libsqlite3.lib:	$(LIBOBJ)
1557	$(LTLIB) $(LTLIBOPTS) /OUT:$@ $(LIBOBJ) $(TLIBS)
1558
1559libtclsqlite3.lib:	tclsqlite.lo libsqlite3.lib
1560	$(LTLIB) $(LTLIBOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite.lo libsqlite3.lib $(LIBTCLSTUB) $(TLIBS)
1561# <</mark>>
1562
1563$(SQLITE3DLL):	$(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP)
1564	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL $(CORE_LINK_OPTS) /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1565
1566# <<block2>>
1567sqlite3.def:	libsqlite3.lib
1568	echo EXPORTS > sqlite3.def
1569	dumpbin /all libsqlite3.lib \
1570		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl include "^\s+1 _?(sqlite3(?:session|changeset|changegroup)?_[^@]*)(?:@\d+)?$$" \1 \
1571		| sort >> sqlite3.def
1572# <</block2>>
1573
1574$(SQLITE3EXE):	shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H)
1575	$(LTLINK) $(SHELL_COMPILE_OPTS) $(READLINE_FLAGS) shell.c $(SHELL_CORE_SRC) \
1576		/link $(SQLITE3EXEPDB) $(LDFLAGS) $(LTLINKOPTS) $(SHELL_LINK_OPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
1577
1578# <<mark>>
1579sqldiff.exe:	$(TOP)\tool\sqldiff.c $(SQLITE3C) $(SQLITE3H)
1580	$(LTLINK) $(NO_WARN) $(TOP)\tool\sqldiff.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1581
1582dbhash.exe:	$(TOP)\tool\dbhash.c $(SQLITE3C) $(SQLITE3H)
1583	$(LTLINK) $(NO_WARN) $(TOP)\tool\dbhash.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1584
1585scrub.exe:	$(TOP)\ext\misc\scrub.c $(SQLITE3C) $(SQLITE3H)
1586	$(LTLINK) $(NO_WARN) $(TOP)\ext\misc\scrub.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1587
1588srcck1.exe:	$(TOP)\tool\srcck1.c
1589	$(BCC) $(NO_WARN) -Fe$@ $(TOP)\tool\srcck1.c
1590
1591sourcetest:	srcck1.exe sqlite3.c
1592	srcck1.exe sqlite3.c
1593
1594fuzzershell.exe:	$(TOP)\tool\fuzzershell.c $(SQLITE3C) $(SQLITE3H)
1595	$(LTLINK) $(NO_WARN) $(FUZZERSHELL_COMPILE_OPTS) $(TOP)\tool\fuzzershell.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1596
1597dbfuzz.exe:	$(TOP)\test\dbfuzz.c $(SQLITE3C) $(SQLITE3H)
1598	$(LTLINK) $(NO_WARN) $(DBFUZZ_COMPILE_OPTS) $(TOP)\test\dbfuzz.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1599
1600fuzzcheck.exe:	$(FUZZCHECK_SRC) $(SQLITE3C) $(SQLITE3H)
1601	$(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(FUZZCHECK_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1602
1603ossshell.exe:	$(OSSSHELL_SRC) $(SQLITE3C) $(SQLITE3H)
1604	$(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(OSSSHELL_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1605
1606mptester.exe:	$(TOP)\mptest\mptest.c $(SQLITE3C) $(SQLITE3H)
1607	$(LTLINK) $(NO_WARN) $(MPTESTER_COMPILE_OPTS) $(TOP)\mptest\mptest.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
1608
1609MPTEST1 = mptester mptest.db $(TOP)\mptest\crash01.test --repeat 20
1610MPTEST2 = mptester mptest.db $(TOP)\mptest\multiwrite01.test --repeat 20
1611
1612mptest:	mptester.exe
1613	del /Q mptest.db 2>NUL
1614	$(MPTEST1) --journalmode DELETE
1615	$(MPTEST2) --journalmode WAL
1616	$(MPTEST1) --journalmode WAL
1617	$(MPTEST2) --journalmode PERSIST
1618	$(MPTEST1) --journalmode PERSIST
1619	$(MPTEST2) --journalmode TRUNCATE
1620	$(MPTEST1) --journalmode TRUNCATE
1621	$(MPTEST2) --journalmode DELETE
1622
1623# This target creates a directory named "tsrc" and fills it with
1624# copies of all of the C source code and header files needed to
1625# build on the target system.  Some of the C source code and header
1626# files are automatically generated.  This target takes care of
1627# all that automatic generation.
1628#
1629.target_source:	$(SRC) $(TOP)\tool\vdbe-compress.tcl fts5.c $(SQLITE_TCL_DEP)
1630	-rmdir /Q/S tsrc 2>NUL
1631	-mkdir tsrc
1632	for %i in ($(SRC00)) do copy /Y %i tsrc
1633	for %i in ($(SRC01)) do copy /Y %i tsrc
1634	for %i in ($(SRC03)) do copy /Y %i tsrc
1635	for %i in ($(SRC04)) do copy /Y %i tsrc
1636	for %i in ($(SRC05)) do copy /Y %i tsrc
1637	for %i in ($(SRC06)) do copy /Y %i tsrc
1638	for %i in ($(SRC07)) do copy /Y %i tsrc
1639	for %i in ($(SRC08)) do copy /Y %i tsrc
1640	for %i in ($(SRC09)) do copy /Y %i tsrc
1641	for %i in ($(SRC10)) do copy /Y %i tsrc
1642	for %i in ($(SRC11)) do copy /Y %i tsrc
1643	for %i in ($(SRC12)) do copy /Y %i tsrc
1644	copy /Y fts5.c tsrc
1645	copy /Y fts5.h tsrc
1646	del /Q tsrc\sqlite.h.in tsrc\parse.y 2>NUL
1647	$(TCLSH_CMD) $(TOP)\tool\vdbe-compress.tcl $(OPTS) < tsrc\vdbe.c > vdbe.new
1648	move vdbe.new tsrc\vdbe.c
1649	echo > .target_source
1650
1651sqlite3.c:	.target_source sqlite3ext.h $(MKSQLITE3C_TOOL)
1652	$(TCLSH_CMD) $(MKSQLITE3C_TOOL) $(MKSQLITE3C_ARGS)
1653	copy $(TOP)\ext\session\sqlite3session.h .
1654
1655sqlite3-all.c:	sqlite3.c $(TOP)\tool\split-sqlite3c.tcl
1656	$(TCLSH_CMD) $(TOP)\tool\split-sqlite3c.tcl
1657# <</mark>>
1658
1659# Rule to build the amalgamation
1660#
1661sqlite3.lo:	$(SQLITE3C)
1662	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(SQLITE3C)
1663
1664# <<mark>>
1665# Rules to build the LEMON compiler generator
1666#
1667lempar.c:	$(TOP)\tool\lempar.c
1668	copy $(TOP)\tool\lempar.c .
1669
1670lemon.exe:	$(TOP)\tool\lemon.c lempar.c
1671	$(BCC) $(NO_WARN) -Daccess=_access \
1672		-Fe$@ $(TOP)\tool\lemon.c /link $(LDFLAGS) $(NLTLINKOPTS) $(NLTLIBPATHS)
1673
1674# <<mark>>
1675# Rules to build the source-id generator tool
1676#
1677mksourceid.exe:	$(TOP)\tool\mksourceid.c
1678	$(BCC) $(NO_WARN) -Fe$@ $(TOP)\tool\mksourceid.c /link $(LDFLAGS) $(NLTLINKOPTS) $(NLTLIBPATHS)
1679
1680# Rules to build individual *.lo files from generated *.c files. This
1681# applies to:
1682#
1683#     parse.lo
1684#     opcodes.lo
1685#
1686parse.lo:	parse.c $(HDR)
1687	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c parse.c
1688
1689opcodes.lo:	opcodes.c
1690	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c opcodes.c
1691# <</mark>>
1692
1693# Rule to build the Win32 resources object file.
1694#
1695!IF $(USE_RC)!=0
1696# <<block1>>
1697$(LIBRESOBJS):	$(TOP)\src\sqlite3.rc $(SQLITE3H)
1698	echo #ifndef SQLITE_RESOURCE_VERSION > sqlite3rc.h
1699	for /F %%V in ('type "$(TOP)\VERSION"') do ( \
1700		echo #define SQLITE_RESOURCE_VERSION %%V \
1701			| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact . ^, >> sqlite3rc.h \
1702	)
1703	echo #endif >> sqlite3rc.h
1704	$(LTRCOMPILE) -fo $(LIBRESOBJS) $(TOP)\src\sqlite3.rc
1705# <</block1>>
1706!ENDIF
1707
1708# <<mark>>
1709# Rules to build individual *.lo files from files in the src directory.
1710#
1711alter.lo:	$(TOP)\src\alter.c $(HDR)
1712	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\alter.c
1713
1714analyze.lo:	$(TOP)\src\analyze.c $(HDR)
1715	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\analyze.c
1716
1717attach.lo:	$(TOP)\src\attach.c $(HDR)
1718	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\attach.c
1719
1720auth.lo:	$(TOP)\src\auth.c $(HDR)
1721	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\auth.c
1722
1723backup.lo:	$(TOP)\src\backup.c $(HDR)
1724	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\backup.c
1725
1726bitvec.lo:	$(TOP)\src\bitvec.c $(HDR)
1727	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\bitvec.c
1728
1729btmutex.lo:	$(TOP)\src\btmutex.c $(HDR)
1730	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\btmutex.c
1731
1732btree.lo:	$(TOP)\src\btree.c $(HDR) $(TOP)\src\pager.h
1733	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\btree.c
1734
1735build.lo:	$(TOP)\src\build.c $(HDR)
1736	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\build.c
1737
1738callback.lo:	$(TOP)\src\callback.c $(HDR)
1739	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\callback.c
1740
1741complete.lo:	$(TOP)\src\complete.c $(HDR)
1742	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\complete.c
1743
1744ctime.lo:	$(TOP)\src\ctime.c $(HDR)
1745	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\ctime.c
1746
1747date.lo:	$(TOP)\src\date.c $(HDR)
1748	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\date.c
1749
1750dbpage.lo:	$(TOP)\src\dbpage.c $(HDR)
1751	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\dbpage.c
1752
1753dbstat.lo:	$(TOP)\src\dbstat.c $(HDR)
1754	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\dbstat.c
1755
1756delete.lo:	$(TOP)\src\delete.c $(HDR)
1757	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\delete.c
1758
1759expr.lo:	$(TOP)\src\expr.c $(HDR)
1760	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\expr.c
1761
1762fault.lo:	$(TOP)\src\fault.c $(HDR)
1763	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fault.c
1764
1765fkey.lo:	$(TOP)\src\fkey.c $(HDR)
1766	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fkey.c
1767
1768func.lo:	$(TOP)\src\func.c $(HDR)
1769	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\func.c
1770
1771global.lo:	$(TOP)\src\global.c $(HDR)
1772	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\global.c
1773
1774hash.lo:	$(TOP)\src\hash.c $(HDR)
1775	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\hash.c
1776
1777insert.lo:	$(TOP)\src\insert.c $(HDR)
1778	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\insert.c
1779
1780legacy.lo:	$(TOP)\src\legacy.c $(HDR)
1781	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\legacy.c
1782
1783loadext.lo:	$(TOP)\src\loadext.c $(HDR)
1784	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\loadext.c
1785
1786main.lo:	$(TOP)\src\main.c $(HDR)
1787	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\main.c
1788
1789malloc.lo:	$(TOP)\src\malloc.c $(HDR)
1790	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\malloc.c
1791
1792mem0.lo:	$(TOP)\src\mem0.c $(HDR)
1793	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem0.c
1794
1795mem1.lo:	$(TOP)\src\mem1.c $(HDR)
1796	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem1.c
1797
1798mem2.lo:	$(TOP)\src\mem2.c $(HDR)
1799	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem2.c
1800
1801mem3.lo:	$(TOP)\src\mem3.c $(HDR)
1802	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem3.c
1803
1804mem5.lo:	$(TOP)\src\mem5.c $(HDR)
1805	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem5.c
1806
1807memjournal.lo:	$(TOP)\src\memjournal.c $(HDR)
1808	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\memjournal.c
1809
1810mutex.lo:	$(TOP)\src\mutex.c $(HDR)
1811	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex.c
1812
1813mutex_noop.lo:	$(TOP)\src\mutex_noop.c $(HDR)
1814	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_noop.c
1815
1816mutex_unix.lo:	$(TOP)\src\mutex_unix.c $(HDR)
1817	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_unix.c
1818
1819mutex_w32.lo:	$(TOP)\src\mutex_w32.c $(HDR)
1820	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_w32.c
1821
1822notify.lo:	$(TOP)\src\notify.c $(HDR)
1823	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\notify.c
1824
1825pager.lo:	$(TOP)\src\pager.c $(HDR) $(TOP)\src\pager.h
1826	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pager.c
1827
1828pcache.lo:	$(TOP)\src\pcache.c $(HDR) $(TOP)\src\pcache.h
1829	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache.c
1830
1831pcache1.lo:	$(TOP)\src\pcache1.c $(HDR) $(TOP)\src\pcache.h
1832	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache1.c
1833
1834os.lo:	$(TOP)\src\os.c $(HDR)
1835	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os.c
1836
1837os_unix.lo:	$(TOP)\src\os_unix.c $(HDR)
1838	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_unix.c
1839
1840os_win.lo:	$(TOP)\src\os_win.c $(HDR)
1841	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_win.c
1842
1843pragma.lo:	$(TOP)\src\pragma.c $(HDR)
1844	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pragma.c
1845
1846prepare.lo:	$(TOP)\src\prepare.c $(HDR)
1847	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\prepare.c
1848
1849printf.lo:	$(TOP)\src\printf.c $(HDR)
1850	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\printf.c
1851
1852random.lo:	$(TOP)\src\random.c $(HDR)
1853	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\random.c
1854
1855resolve.lo:	$(TOP)\src\resolve.c $(HDR)
1856	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\resolve.c
1857
1858rowset.lo:	$(TOP)\src\rowset.c $(HDR)
1859	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\rowset.c
1860
1861select.lo:	$(TOP)\src\select.c $(HDR)
1862	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\select.c
1863
1864status.lo:	$(TOP)\src\status.c $(HDR)
1865	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\status.c
1866
1867table.lo:	$(TOP)\src\table.c $(HDR)
1868	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\table.c
1869
1870threads.lo:	$(TOP)\src\threads.c $(HDR)
1871	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\threads.c
1872
1873tokenize.lo:	$(TOP)\src\tokenize.c keywordhash.h $(HDR)
1874	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\tokenize.c
1875
1876treeview.lo:	$(TOP)\src\treeview.c $(HDR)
1877	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\treeview.c
1878
1879trigger.lo:	$(TOP)\src\trigger.c $(HDR)
1880	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\trigger.c
1881
1882update.lo:	$(TOP)\src\update.c $(HDR)
1883	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\update.c
1884
1885utf.lo:	$(TOP)\src\utf.c $(HDR)
1886	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\utf.c
1887
1888util.lo:	$(TOP)\src\util.c $(HDR)
1889	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\util.c
1890
1891vacuum.lo:	$(TOP)\src\vacuum.c $(HDR)
1892	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vacuum.c
1893
1894vdbe.lo:	$(TOP)\src\vdbe.c $(HDR)
1895	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbe.c
1896
1897vdbeapi.lo:	$(TOP)\src\vdbeapi.c $(HDR)
1898	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeapi.c
1899
1900vdbeaux.lo:	$(TOP)\src\vdbeaux.c $(HDR)
1901	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeaux.c
1902
1903vdbeblob.lo:	$(TOP)\src\vdbeblob.c $(HDR)
1904	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeblob.c
1905
1906vdbemem.lo:	$(TOP)\src\vdbemem.c $(HDR)
1907	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbemem.c
1908
1909vdbesort.lo:	$(TOP)\src\vdbesort.c $(HDR)
1910	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbesort.c
1911
1912vdbetrace.lo:	$(TOP)\src\vdbetrace.c $(HDR)
1913	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbetrace.c
1914
1915vtab.lo:	$(TOP)\src\vtab.c $(HDR)
1916	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vtab.c
1917
1918wal.lo:	$(TOP)\src\wal.c $(HDR)
1919	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\wal.c
1920
1921walker.lo:	$(TOP)\src\walker.c $(HDR)
1922	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\walker.c
1923
1924where.lo:	$(TOP)\src\where.c $(HDR)
1925	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\where.c
1926
1927wherecode.lo:	$(TOP)\src\wherecode.c $(HDR)
1928	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\wherecode.c
1929
1930whereexpr.lo:	$(TOP)\src\whereexpr.c $(HDR)
1931	$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\whereexpr.c
1932
1933tclsqlite.lo:	$(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1934	$(LTCOMPILE) $(NO_WARN) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1935
1936tclsqlite-shell.lo:	$(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1937	$(LTCOMPILE) $(NO_WARN) -DTCLSH -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1938
1939tclsqlite3.exe:	tclsqlite-shell.lo $(SQLITE3C) $(SQLITE3H) $(LIBRESOBJS)
1940	$(LTLINK) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite-shell.lo $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
1941
1942# Rules to build opcodes.c and opcodes.h
1943#
1944opcodes.c:	opcodes.h $(TOP)\tool\mkopcodec.tcl
1945	$(TCLSH_CMD) $(TOP)\tool\mkopcodec.tcl opcodes.h > opcodes.c
1946
1947opcodes.h:	parse.h $(TOP)\src\vdbe.c $(TOP)\tool\mkopcodeh.tcl
1948	type parse.h $(TOP)\src\vdbe.c | $(TCLSH_CMD) $(TOP)\tool\mkopcodeh.tcl > opcodes.h
1949
1950# Rules to build parse.c and parse.h - the outputs of lemon.
1951#
1952parse.h:	parse.c
1953
1954parse.c:	$(TOP)\src\parse.y lemon.exe $(TOP)\tool\addopcodes.tcl
1955	del /Q parse.y parse.h parse.h.temp 2>NUL
1956	copy $(TOP)\src\parse.y .
1957	.\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) parse.y
1958	move parse.h parse.h.temp
1959	$(TCLSH_CMD) $(TOP)\tool\addopcodes.tcl parse.h.temp > parse.h
1960
1961$(SQLITE3H):	$(TOP)\src\sqlite.h.in $(TOP)\manifest mksourceid.exe $(TOP)\VERSION
1962	$(TCLSH_CMD) $(TOP)\tool\mksqlite3h.tcl $(TOP:\=/) > $(SQLITE3H) $(MKSQLITE3H_ARGS)
1963
1964sqlite3ext.h:	.target_source
1965!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1966	type tsrc\sqlite3ext.h | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*\)" "(SQLITE_CALLBACK *)" \
1967		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_APICALL *" > sqlite3ext.h
1968	copy /Y sqlite3ext.h tsrc\sqlite3ext.h
1969!ELSE
1970	copy /Y tsrc\sqlite3ext.h sqlite3ext.h
1971!ENDIF
1972
1973mkkeywordhash.exe:	$(TOP)\tool\mkkeywordhash.c
1974	$(BCC) $(NO_WARN) -Fe$@ $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) \
1975		$(TOP)\tool\mkkeywordhash.c /link $(LDFLAGS) $(NLTLINKOPTS) $(NLTLIBPATHS)
1976
1977keywordhash.h:	$(TOP)\tool\mkkeywordhash.c mkkeywordhash.exe
1978	.\mkkeywordhash.exe > keywordhash.h
1979
1980# Source files that go into making shell.c
1981SHELL_SRC = \
1982	$(TOP)\src\shell.c.in \
1983	$(TOP)\ext\misc\shathree.c \
1984	$(TOP)\ext\misc\fileio.c \
1985	$(TOP)\ext\misc\completion.c
1986
1987shell.c:	$(SHELL_SRC) $(TOP)\tool\mkshellc.tcl
1988	$(TCLSH_CMD) $(TOP)\tool\mkshellc.tcl > shell.c
1989
1990
1991# Rules to build the extension objects.
1992#
1993icu.lo:	$(TOP)\ext\icu\icu.c $(HDR) $(EXTHDR)
1994	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\icu\icu.c
1995
1996fts2.lo:	$(TOP)\ext\fts2\fts2.c $(HDR) $(EXTHDR)
1997	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2.c
1998
1999fts2_hash.lo:	$(TOP)\ext\fts2\fts2_hash.c $(HDR) $(EXTHDR)
2000	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_hash.c
2001
2002fts2_icu.lo:	$(TOP)\ext\fts2\fts2_icu.c $(HDR) $(EXTHDR)
2003	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_icu.c
2004
2005fts2_porter.lo:	$(TOP)\ext\fts2\fts2_porter.c $(HDR) $(EXTHDR)
2006	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_porter.c
2007
2008fts2_tokenizer.lo:	$(TOP)\ext\fts2\fts2_tokenizer.c $(HDR) $(EXTHDR)
2009	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer.c
2010
2011fts2_tokenizer1.lo:	$(TOP)\ext\fts2\fts2_tokenizer1.c $(HDR) $(EXTHDR)
2012	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer1.c
2013
2014fts3.lo:	$(TOP)\ext\fts3\fts3.c $(HDR) $(EXTHDR)
2015	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3.c
2016
2017fts3_aux.lo:	$(TOP)\ext\fts3\fts3_aux.c $(HDR) $(EXTHDR)
2018	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_aux.c
2019
2020fts3_expr.lo:	$(TOP)\ext\fts3\fts3_expr.c $(HDR) $(EXTHDR)
2021	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_expr.c
2022
2023fts3_hash.lo:	$(TOP)\ext\fts3\fts3_hash.c $(HDR) $(EXTHDR)
2024	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_hash.c
2025
2026fts3_icu.lo:	$(TOP)\ext\fts3\fts3_icu.c $(HDR) $(EXTHDR)
2027	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_icu.c
2028
2029fts3_snippet.lo:	$(TOP)\ext\fts3\fts3_snippet.c $(HDR) $(EXTHDR)
2030	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_snippet.c
2031
2032fts3_porter.lo:	$(TOP)\ext\fts3\fts3_porter.c $(HDR) $(EXTHDR)
2033	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_porter.c
2034
2035fts3_tokenizer.lo:	$(TOP)\ext\fts3\fts3_tokenizer.c $(HDR) $(EXTHDR)
2036	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer.c
2037
2038fts3_tokenizer1.lo:	$(TOP)\ext\fts3\fts3_tokenizer1.c $(HDR) $(EXTHDR)
2039	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer1.c
2040
2041fts3_tokenize_vtab.lo:	$(TOP)\ext\fts3\fts3_tokenize_vtab.c $(HDR) $(EXTHDR)
2042	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenize_vtab.c
2043
2044fts3_unicode.lo:	$(TOP)\ext\fts3\fts3_unicode.c $(HDR) $(EXTHDR)
2045	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode.c
2046
2047fts3_unicode2.lo:	$(TOP)\ext\fts3\fts3_unicode2.c $(HDR) $(EXTHDR)
2048	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode2.c
2049
2050fts3_write.lo:	$(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR)
2051	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c
2052
2053rtree.lo:	$(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR)
2054	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c
2055
2056sqlite3session.lo:	$(TOP)\ext\session\sqlite3session.c $(HDR) $(EXTHDR)
2057	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\session\sqlite3session.c
2058
2059# FTS5 things
2060#
2061FTS5_SRC = \
2062   $(TOP)\ext\fts5\fts5.h \
2063   $(TOP)\ext\fts5\fts5Int.h \
2064   $(TOP)\ext\fts5\fts5_aux.c \
2065   $(TOP)\ext\fts5\fts5_buffer.c \
2066   $(TOP)\ext\fts5\fts5_main.c \
2067   $(TOP)\ext\fts5\fts5_config.c \
2068   $(TOP)\ext\fts5\fts5_expr.c \
2069   $(TOP)\ext\fts5\fts5_hash.c \
2070   $(TOP)\ext\fts5\fts5_index.c \
2071   fts5parse.c fts5parse.h \
2072   $(TOP)\ext\fts5\fts5_storage.c \
2073   $(TOP)\ext\fts5\fts5_tokenize.c \
2074   $(TOP)\ext\fts5\fts5_unicode2.c \
2075   $(TOP)\ext\fts5\fts5_varint.c \
2076   $(TOP)\ext\fts5\fts5_vocab.c
2077
2078fts5parse.c:	$(TOP)\ext\fts5\fts5parse.y lemon.exe
2079	copy $(TOP)\ext\fts5\fts5parse.y .
2080	del /Q fts5parse.h 2>NUL
2081	.\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) fts5parse.y
2082
2083fts5parse.h:	fts5parse.c
2084
2085fts5.c:	$(FTS5_SRC)
2086	$(TCLSH_CMD) $(TOP)\ext\fts5\tool\mkfts5c.tcl
2087	copy $(TOP)\ext\fts5\fts5.h .
2088
2089fts5.lo:	fts5.c $(HDR) $(EXTHDR)
2090	$(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c fts5.c
2091
2092fts5_ext.lo:	fts5.c $(HDR) $(EXTHDR)
2093	$(LTCOMPILE) $(NO_WARN) -c fts5.c
2094
2095fts5.dll:	fts5_ext.lo
2096	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ fts5_ext.lo
2097
2098sqlite3rbu.lo:	$(TOP)\ext\rbu\sqlite3rbu.c $(HDR) $(EXTHDR)
2099	$(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\rbu\sqlite3rbu.c
2100
2101# Rules to build the 'testfixture' application.
2102#
2103# If using the amalgamation, use sqlite3.c directly to build the test
2104# fixture.  Otherwise link against libsqlite3.lib.  (This distinction is
2105# necessary because the test fixture requires non-API symbols which are
2106# hidden when the library is built via the amalgamation).
2107#
2108TESTFIXTURE_FLAGS = -DTCLSH_INIT_PROC=sqlite3TestInit -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1
2109TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERVER=1 -DSQLITE_PRIVATE=""
2110TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_CORE $(NO_WARN)
2111TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERIES_CONSTRAINT_VERIFY=1
2112TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_DEFAULT_PAGE_SIZE=1024
2113TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB
2114TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB
2115TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) $(TEST_CCONV_OPTS)
2116
2117TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2)
2118TESTFIXTURE_SRC1 = $(TESTEXT) $(SQLITE3C)
2119!IF $(USE_AMALGAMATION)==0
2120TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC0)
2121!ELSE
2122TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC1)
2123!ENDIF
2124
2125!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
2126sqlite_tclDecls.h:
2127	echo #ifndef SQLITE_TCLAPI > $(SQLITETCLDECLSH)
2128	echo #  define SQLITE_TCLAPI >> $(SQLITETCLDECLSH)
2129	echo #endif >> $(SQLITETCLDECLSH)
2130	type "$(TCLINCDIR)\tclDecls.h" \
2131		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN(?: CONST\d+?)?\s+?[^\(]*?\s+?)Tcl_" "\1 SQLITE_TCLAPI Tcl_" \
2132		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN\s+?(?:void|VOID)\s+?)TclFreeObj" "\1 SQLITE_TCLAPI TclFreeObj" \
2133		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tcl_" "(SQLITE_TCLAPI *tcl_" \
2134		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tclFreeObj" "(SQLITE_TCLAPI *tclFreeObj" \
2135		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_TCLAPI *" >> $(SQLITETCLDECLSH)
2136
2137sqlite_tcl.h:
2138	type "$(TCLINCDIR)\tcl.h" | $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact tclDecls.h sqlite_tclDecls.h \
2139		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "typedef (.*?)\(Tcl_" "typedef \1 (SQLITE_TCLAPI Tcl_" \
2140		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "void (*freeProc)" "void (SQLITE_TCLAPI *freeProc)" \
2141		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*findProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *findProc)" \
2142		| $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*createProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *createProc)" >> $(SQLITETCLH)
2143!ENDIF
2144
2145testfixture.exe:	$(TESTFIXTURE_SRC) $(SQLITE3H) $(LIBRESOBJS) $(HDR) $(SQLITE_TCL_DEP)
2146	$(LTLINK) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
2147		-DBUILD_sqlite -I$(TCLINCDIR) \
2148		$(TESTFIXTURE_SRC) \
2149		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
2150
2151extensiontest:	testfixture.exe testloadext.dll
2152	@set PATH=$(LIBTCLPATH);$(PATH)
2153	.\testfixture.exe $(TOP)\test\loadext.test $(TESTOPTS)
2154
2155fulltest:	$(TESTPROGS) fuzztest
2156	@set PATH=$(LIBTCLPATH);$(PATH)
2157	.\testfixture.exe $(TOP)\test\all.test $(TESTOPTS)
2158
2159soaktest:	$(TESTPROGS)
2160	@set PATH=$(LIBTCLPATH);$(PATH)
2161	.\testfixture.exe $(TOP)\test\all.test -soak=1 $(TESTOPTS)
2162
2163fulltestonly:	$(TESTPROGS) fuzztest
2164	@set PATH=$(LIBTCLPATH);$(PATH)
2165	.\testfixture.exe $(TOP)\test\full.test
2166
2167queryplantest:	testfixture.exe shell
2168	@set PATH=$(LIBTCLPATH);$(PATH)
2169	.\testfixture.exe $(TOP)\test\permutations.test queryplanner $(TESTOPTS)
2170
2171fuzztest:	fuzzcheck.exe
2172	.\fuzzcheck.exe $(FUZZDATA)
2173
2174fastfuzztest:	fuzzcheck.exe
2175	.\fuzzcheck.exe --limit-mem 100M $(FUZZDATA)
2176
2177# Minimal testing that runs in less than 3 minutes (on a fast machine)
2178#
2179quicktest:	testfixture.exe sourcetest
2180	@set PATH=$(LIBTCLPATH);$(PATH)
2181	.\testfixture.exe $(TOP)\test\extraquick.test $(TESTOPTS)
2182
2183# This is the common case.  Run many tests that do not take too long,
2184# including fuzzcheck, sqlite3_analyzer, and sqldiff tests.
2185#
2186test:	$(TESTPROGS) sourcetest fastfuzztest
2187	@set PATH=$(LIBTCLPATH);$(PATH)
2188	.\testfixture.exe $(TOP)\test\veryquick.test $(TESTOPTS)
2189
2190smoketest:	$(TESTPROGS)
2191	@set PATH=$(LIBTCLPATH);$(PATH)
2192	.\testfixture.exe $(TOP)\test\main.test $(TESTOPTS)
2193
2194sqlite3_analyzer.c:	$(SQLITE3C) $(SQLITE3H) $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl $(TOP)\tool\mkccode.tcl $(TOP)\tool\sqlite3_analyzer.c.in $(SQLITE_TCL_DEP)
2195	$(TCLSH_CMD) $(TOP)\tool\mkccode.tcl $(TOP)\tool\sqlite3_analyzer.c.in > $@
2196
2197sqlite3_analyzer.exe:	sqlite3_analyzer.c $(LIBRESOBJS)
2198	$(LTLINK) $(NO_WARN) -DBUILD_sqlite -I$(TCLINCDIR) sqlite3_analyzer.c \
2199		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
2200
2201CHECKER_DEPS =\
2202  $(TOP)/tool/mkccode.tcl \
2203  sqlite3.c \
2204  $(TOP)/src/tclsqlite.c \
2205  $(TOP)/ext/repair/sqlite3_checker.tcl \
2206  $(TOP)/ext/repair/checkindex.c \
2207  $(TOP)/ext/repair/checkfreelist.c \
2208  $(TOP)/ext/misc/btreeinfo.c \
2209  $(TOP)/ext/repair/sqlite3_checker.c.in
2210
2211sqlite3_checker.c:	$(CHECKER_DEPS)
2212	$(TCLSH_CMD) $(TOP)\tool\mkccode.tcl $(TOP)\ext\repair\sqlite3_checker.c.in > $@
2213
2214sqlite3_checker.exe:	sqlite3_checker.c $(LIBRESOBJS)
2215	$(LTLINK) $(NO_WARN) -DBUILD_sqlite -I$(TCLINCDIR) sqlite3_checker.c \
2216		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
2217
2218dbdump.exe:	$(TOP)\ext\misc\dbdump.c $(SQLITE3C) $(SQLITE3H)
2219	$(LTLINK) $(NO_WARN) -DDBDUMP_STANDALONE $(TOP)\ext\misc\dbdump.c $(SQLITE3C) \
2220		/link $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS)
2221
2222testloadext.lo:	$(TOP)\src\test_loadext.c
2223	$(LTCOMPILE) $(NO_WARN) -c $(TOP)\src\test_loadext.c
2224
2225testloadext.dll:	testloadext.lo
2226	$(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ testloadext.lo
2227
2228showdb.exe:	$(TOP)\tool\showdb.c $(SQLITE3C) $(SQLITE3H)
2229	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2230		$(TOP)\tool\showdb.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2231
2232showstat4.exe:	$(TOP)\tool\showstat4.c $(SQLITE3C) $(SQLITE3H)
2233	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2234		$(TOP)\tool\showstat4.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2235
2236showjournal.exe:	$(TOP)\tool\showjournal.c $(SQLITE3C) $(SQLITE3H)
2237	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2238		$(TOP)\tool\showjournal.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2239
2240showwal.exe:	$(TOP)\tool\showwal.c $(SQLITE3C) $(SQLITE3H)
2241	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2242		$(TOP)\tool\showwal.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2243
2244showshm.exe:	$(TOP)\tool\showshm.c
2245	$(LTLINK) $(NO_WARN)	$(TOP)\tool\showshm.c /link $(LDFLAGS) $(LTLINKOPTS)
2246
2247changeset.exe:	$(TOP)\ext\session\changeset.c $(SQLITE3C) $(SQLITE3H)
2248	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2249		-DSQLITE_ENABLE_SESSION=1 -DSQLITE_ENABLE_PREUPDATE_HOOK=1 \
2250		$(TOP)\ext\session\changeset.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2251
2252fts3view.exe:	$(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C) $(SQLITE3H)
2253	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2254		$(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2255
2256rollback-test.exe:	$(TOP)\tool\rollback-test.c $(SQLITE3C) $(SQLITE3H)
2257	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2258		$(TOP)\tool\rollback-test.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2259
2260LogEst.exe:	$(TOP)\tool\logest.c $(SQLITE3H)
2261	$(LTLINK) $(NO_WARN) $(TOP)\tool\LogEst.c /link $(LDFLAGS) $(LTLINKOPTS)
2262
2263wordcount.exe:	$(TOP)\test\wordcount.c $(SQLITE3C) $(SQLITE3H)
2264	$(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
2265		$(TOP)\test\wordcount.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2266
2267speedtest1.exe:	$(TOP)\test\speedtest1.c $(SQLITE3C) $(SQLITE3H)
2268	$(LTLINK) $(NO_WARN) $(ST_COMPILE_OPTS) -DSQLITE_OMIT_LOAD_EXTENSION \
2269		$(TOP)\test\speedtest1.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2270
2271kvtest.exe:	$(TOP)\test\kvtest.c $(SQLITE3C) $(SQLITE3H)
2272	$(LTLINK) $(NO_WARN) $(KV_COMPILE_OPTS) \
2273		$(TOP)\test\kvtest.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2274
2275dbselftest.exe:	$(TOP)\test\dbselftest.c $(SQLITE3C) $(SQLITE3H)
2276	$(LTLINK) $(NO_WARN) $(DBSELFTEST_COMPILE_OPTS) $(TOP)\test\dbselftest.c $(SQLITE3C)
2277
2278rbu.exe:	$(TOP)\ext\rbu\rbu.c $(TOP)\ext\rbu\sqlite3rbu.c $(SQLITE3C) $(SQLITE3H)
2279	$(LTLINK) $(NO_WARN) -DSQLITE_ENABLE_RBU \
2280		$(TOP)\ext\rbu\rbu.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
2281
2282LSMDIR=$(TOP)\ext\lsm1
2283!INCLUDE $(LSMDIR)\Makefile.msc
2284
2285moreclean:	clean
2286	del /Q $(SQLITE3C) $(SQLITE3H) 2>NUL
2287# <</mark>>
2288
2289clean:
2290	del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
2291	del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
2292	del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
2293# <<mark>>
2294	del /Q sqlite3.c sqlite3.h 2>NUL
2295	del /Q opcodes.c opcodes.h 2>NUL
2296	del /Q lemon.* lempar.c parse.* 2>NUL
2297	del /Q mksourceid.* mkkeywordhash.* keywordhash.h 2>NUL
2298	del /Q notasharedlib.* 2>NUL
2299	-rmdir /Q/S .deps 2>NUL
2300	-rmdir /Q/S .libs 2>NUL
2301	-rmdir /Q/S tsrc 2>NUL
2302	del /Q .target_source 2>NUL
2303	del /Q tclsqlite3.exe $(SQLITETCLH) $(SQLITETCLDECLSH) 2>NUL
2304	del /Q lsm.dll lsmtest.exe 2>NUL
2305	del /Q testloadext.dll 2>NUL
2306	del /Q testfixture.exe test.db 2>NUL
2307	del /Q LogEst.exe fts3view.exe rollback-test.exe showdb.exe dbdump.exe 2>NUL
2308	del /Q changeset.exe 2>NUL
2309	del /Q showjournal.exe showstat4.exe showwal.exe speedtest1.exe 2>NUL
2310	del /Q mptester.exe wordcount.exe rbu.exe srcck1.exe 2>NUL
2311	del /Q sqlite3.c sqlite3-*.c 2>NUL
2312	del /Q sqlite3rc.h 2>NUL
2313	del /Q shell.c sqlite3ext.h sqlite3session.h 2>NUL
2314	del /Q sqlite3_analyzer.exe sqlite3_analyzer.c 2>NUL
2315	del /Q sqlite-*-output.vsix 2>NUL
2316	del /Q fuzzershell.exe fuzzcheck.exe sqldiff.exe dbhash.exe 2>NUL
2317	del /Q fts5.* fts5parse.* 2>NUL
2318# <</mark>>
2319