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